1.文件本地预览问题

2.页面弹窗复选问题
This commit is contained in:
Ledo 2025-05-06 16:22:31 +08:00
parent 3b9d0130bf
commit a1dfeda855
29 changed files with 284 additions and 144 deletions

View File

@ -41,5 +41,4 @@ public class MaterialPlanSaveReqVO {
@Schema(description = "备注") @Schema(description = "备注")
private String description; private String description;
} }

View File

@ -38,7 +38,7 @@ public class ProjectOrderDO extends BaseDO {
* 项目编号唯一 * 项目编号唯一
*/ */
private String code; private String code;
/** /**bubu
* 单据状态 已保存/已送审/已审核/已启动/已打回/已终止 * 单据状态 已保存/已送审/已审核/已启动/已打回/已终止
* *
* 枚举 {@link TODO heli_project_order_status 对应的类} * 枚举 {@link TODO heli_project_order_status 对应的类}

View File

@ -370,21 +370,32 @@ public class ScreenServiceImpl implements ScreenService {
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
LocalDateTime firstDayInNewYearTime = LocalDateTime.of(calendar.get(Calendar.YEAR), 1, 1, 0, 0); LocalDateTime firstDayInNewYearTime = LocalDateTime.of(calendar.get(Calendar.YEAR), 1, 1, 0, 0);
MPJLambdaWrapper<ProjectOrderDO> query = new MPJLambdaWrapper<>(); // MPJLambdaWrapper<ProjectOrderDO> query = new MPJLambdaWrapper<>();
query.selectAll(ProjectOrderDO.class) // query.selectAll(ProjectOrderDO.class)
// .selectCount(ProjectOrderDO::getId, "projectCount") //// .selectCount(ProjectOrderDO::getId, "projectCount")
.select("DATE_FORMAT(create_time, '%m') as projectMonth") // .select("DATE_FORMAT(create_time, '%m') as projectMonth")
.ge(ProjectOrderDO::getCreateTime, firstDayInNewYearTime) // .ge(ProjectOrderDO::getCreateTime, firstDayInNewYearTime)
.eq(ProjectOrderDO::getProperty,1) // .eq(ProjectOrderDO::getProperty,1)
// .eq(ProjectOrderDO::getIsSnapshot,0)
// .eq(ProjectOrderDO::getOrderStatus, ProjectOrderStatusEnum.APPROVE.getCode())
//// .groupBy("t.business_line", "DATE_FORMAT(create_time, '%m')")
// ;
// List<ProjectOrderDO> projectOrderDOList = projectOrderMapper.selectList(query);
MPJLambdaWrapper<PlanSubDO> planQuery = new MPJLambdaWrapper<>();
planQuery.selectAll(PlanSubDO.class)
.select("DATE_FORMAT(t.create_time, '%m') as projectMonth")
.select("po.business_line as businessLine")
.leftJoin(ProjectOrderDO.class,"po",ProjectOrderDO::getId,PlanSubDO::getProjectId)
.ge(PlanSubDO::getCreateTime, firstDayInNewYearTime)
.eq(ProjectOrderDO::getIsSnapshot,0) .eq(ProjectOrderDO::getIsSnapshot,0)
.eq(ProjectOrderDO::getOrderStatus, ProjectOrderStatusEnum.APPROVE.getCode()) .innerJoin(PlanDO.class, "a", PlanDO::getId, PlanSubDO::getProjectPlanId)
// .groupBy("t.business_line", "DATE_FORMAT(create_time, '%m')") .notIn(PlanDO::getStatus, ProjectPlanStatusEnum.TERMINATE.getCode(), ProjectPlanStatusEnum.COMPLETE.getCode());
; List<PlanSubDO> planSubDOS = planSubMapper.selectList(planQuery);
List<ProjectOrderDO> projectOrderDOList = projectOrderMapper.selectList(query);
Map<Integer, List<ProjectOrderDO>> countWithByBusinessLineGroupMonth = projectOrderDOList.stream().collect(Collectors.groupingBy(ProjectOrderDO::getProjectMonth));
Map<Integer, List<PlanSubDO>> countWithByBusinessLineGroupMonth = planSubDOS.stream().collect(Collectors.groupingBy(PlanSubDO::getProjectMonth));
months.forEach(month -> { months.forEach(month -> {
List<ProjectOrderDO> monthProjectList = countWithByBusinessLineGroupMonth.get(Integer.valueOf(month.replace("",""))); List<PlanSubDO> monthProjectList = countWithByBusinessLineGroupMonth.get(Integer.valueOf(month.replace("","")));
if (CollUtil.isEmpty(monthProjectList)){ if (CollUtil.isEmpty(monthProjectList)){
total.add(0); total.add(0);
black.add(0); black.add(0);
@ -393,7 +404,7 @@ public class ScreenServiceImpl implements ScreenService {
} }
int coloredCount = 0; int coloredCount = 0;
int blackCount=0; int blackCount=0;
Map<String, List<ProjectOrderDO>> countWithByBusinessLine = monthProjectList.stream().collect(Collectors.groupingBy(ProjectOrderDO::getBusinessLine)); Map<String, List<PlanSubDO>> countWithByBusinessLine = monthProjectList.stream().collect(Collectors.groupingBy(PlanSubDO::getBusinessLine));
if(CollUtil.isNotEmpty(countWithByBusinessLine.get(BusinessLineEnum.BLACK.getCode()))){ if(CollUtil.isNotEmpty(countWithByBusinessLine.get(BusinessLineEnum.BLACK.getCode()))){
blackCount = countWithByBusinessLine.get(BusinessLineEnum.BLACK.getCode()).size() ; blackCount = countWithByBusinessLine.get(BusinessLineEnum.BLACK.getCode()).size() ;
} }
@ -646,10 +657,18 @@ public class ScreenServiceImpl implements ScreenService {
data[0][2] = processDesignMapper.selectList(designQuery).size(); data[0][2] = processDesignMapper.selectList(designQuery).size();
// 在制项目数量取系统中生产计划的状态不为已完成已终止的生产计划的子项目的个数和 // 在制项目数量取系统中生产计划的状态不为已完成已终止的生产计划的子项目的个数和
//2025 04 10 更改改为查询一年的数据
LocalDateTime now = LocalDateTime.now();
LocalDateTime currentYearStart = LocalDateTime.of(now.getYear(), 1, 1, 0, 0, 0);
MPJLambdaWrapper<PlanSubDO> planQuery = new MPJLambdaWrapper<>(); MPJLambdaWrapper<PlanSubDO> planQuery = new MPJLambdaWrapper<>();
planQuery.selectAll(PlanSubDO.class) planQuery.selectAll(PlanSubDO.class)
.ge(PlanSubDO::getCreateTime,currentYearStart)
.innerJoin(PlanDO.class, "a", PlanDO::getId, PlanSubDO::getProjectPlanId) .innerJoin(PlanDO.class, "a", PlanDO::getId, PlanSubDO::getProjectPlanId)
.notIn(PlanDO::getStatus, ProjectPlanStatusEnum.TERMINATE.getCode(), ProjectPlanStatusEnum.COMPLETE.getCode()); .notIn(PlanDO::getStatus, ProjectPlanStatusEnum.TERMINATE.getCode(), ProjectPlanStatusEnum.COMPLETE.getCode());
data[0][3] = planSubMapper.selectList(planQuery).size(); data[0][3] = planSubMapper.selectList(planQuery).size();
screenDO.setData(JSON.toJSONString(data)); screenDO.setData(JSON.toJSONString(data));

View File

@ -655,6 +655,7 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
if(!updateList.isEmpty()){ if(!updateList.isEmpty()){
for (TaskDispatchDetailDO taskDispatchDetailDO : updateList) { for (TaskDispatchDetailDO taskDispatchDetailDO : updateList) {
if (taskDispatchDetailDO.getDispatchType() == 2){ if (taskDispatchDetailDO.getDispatchType() == 2){
taskDispatchDetailMapper.updateOwnerAndPostIdById(taskDispatchDetailDO.getId(),1); taskDispatchDetailMapper.updateOwnerAndPostIdById(taskDispatchDetailDO.getId(),1);
}else { }else {

View File

@ -65,7 +65,8 @@ public class FileServiceImpl implements FileService {
file.setName(name); file.setName(name);
file.setPath(path); file.setPath(path);
file.setUrl(url); file.setUrl(url);
file.setPreviewUrl(url.replace("/admin-api/infra/file/5/get/","/fileview/")); String[] split = url.split("/");
file.setPreviewUrl(url.replace("/"+split[3]+"/"+split[4]+"/"+split[5]+"/"+split[6]+"/"+split[7]+"/","/fileview/"));
file.setType(type); file.setType(type);
file.setSize(content.length); file.setSize(content.length);
fileMapper.insert(file); fileMapper.insert(file);

View File

@ -645,7 +645,8 @@ const handleDeleteAttachment = async (index, type) => {
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
const data = await downloadFile(url) const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }

View File

@ -301,7 +301,7 @@ ref="contractUploadRef" :file-list="contractUploadFiles" multiple :action="uplo
<Icon icon="ep:upload-filled" />上传附件 <Icon icon="ep:upload-filled" />上传附件
</el-button> </el-button>
</el-upload> </el-upload>
</el-col> </el-col>
<el-table :data="formData.attachments" v-loading.fullscreen.lock="uploading" element-loading-text="附件上传中..." element-loading-background="rgba(122, 122, 122, 0.6)" class="hl-table"> <el-table :data="formData.attachments" v-loading.fullscreen.lock="uploading" element-loading-text="附件上传中..." element-loading-background="rgba(122, 122, 122, 0.6)" class="hl-table">
<el-table-column prop="name" label="文件名称" align="center" /> <el-table-column prop="name" label="文件名称" align="center" />
@ -475,7 +475,7 @@ const refreshAttachments = (files, type) => {
formData.value.attachments = formData.value.attachments.filter((value, index, array) => { formData.value.attachments = formData.value.attachments.filter((value, index, array) => {
return value.businessFileType != type || value.id return value.businessFileType != type || value.id
}) })
for (let i = 0; i < files.length; i++) { for (let i = 0; i < files.length; i++) {
let file = files[i] let file = files[i]
@ -534,7 +534,8 @@ const handleDeleteAttachment = async (index, type) => {
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
const data = await downloadFile(url) const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }
@ -552,7 +553,7 @@ const open = async (type: string, id?: number) => {
formType.value = type formType.value = type
resetForm() resetForm()
console.log("打印typ"); console.log("打印typ");
console.log(type); console.log(type);
// //
@ -586,7 +587,7 @@ const submitForm = async () => {
formLoading.value = true formLoading.value = true
try { try {
const data = formData.value as unknown as CustomerApi.CustomerVO const data = formData.value as unknown as CustomerApi.CustomerVO
let orderId =formData.value.id; let orderId =formData.value.id;
data.status = data.status == true ? 1 : 2 data.status = data.status == true ? 1 : 2
if (formType.value === 'create') { if (formType.value === 'create') {
@ -596,8 +597,8 @@ const submitForm = async () => {
await CustomerApi.updateCustomer(data) await CustomerApi.updateCustomer(data)
message.success(t('common.updateSuccess')) message.success(t('common.updateSuccess'))
} }
// //
if (contractUploadFiles.value.length > 0) { if (contractUploadFiles.value.length > 0) {
contractUploadData.value.businessId = orderId contractUploadData.value.businessId = orderId
@ -607,18 +608,18 @@ const submitForm = async () => {
protocolUploadData.value.businessId = orderId protocolUploadData.value.businessId = orderId
await protocolUploadRef.value!.submit() await protocolUploadRef.value!.submit()
} }
// //
if (active != 'SAVE') { if (active != 'SAVE') {
router.back() router.back()
} else { } else {
// //
query.active = 'update' query.active = 'update'
//if(query.active != 'update'){ //if(query.active != 'update'){
query.id = orderId query.id = orderId
//} //}
if (sumbefore.value == 0) { if (sumbefore.value == 0) {
reload() reload()
} }

View File

@ -646,9 +646,9 @@ const submitForm = async (operate) => {
var data = formData.value as unknown as DeliverOrderApi.DeliverOrderVO var data = formData.value as unknown as DeliverOrderApi.DeliverOrderVO
// if(data.deliverOrderSubs.length >1){ // if(data.deliverOrderSubs.length >1){
// data.deliverOrderSubs.forEach(element => { // data.deliverOrderSubs.forEach(element => {
// element.saleOrderSubId = element.projectOrderId; // element.saleOrderSubId = element.projectOrderId;
// }); // });
// } // }
const orderId = await DeliverOrderApi.operateDeliverOrder(data) const orderId = await DeliverOrderApi.operateDeliverOrder(data)
message.success(t('common.operationSuccess')) message.success(t('common.operationSuccess'))
@ -876,7 +876,8 @@ const handleDeleteAttachment = async (index, type) => {
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
const data = await downloadFile(url) const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }

View File

@ -49,7 +49,8 @@
<el-col> <el-col>
<el-card class="hl-incard"> <el-card class="hl-incard">
<el-col v-if="active != 'detail'"> <el-col v-if="active != 'detail'">
<el-upload ref="compositionUploadRef" :file-list="compositionUploadFiles" multiple :action="uploadUrl" :headers="{ <el-upload
ref="compositionUploadRef" :file-list="compositionUploadFiles" multiple :action="uploadUrl" :headers="{
Authorization: 'Bearer ' + getAccessToken(), Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId() 'tenant-id': getTenantId()
}" name="files" :show-file-list="false" :auto-upload="false" :data="compositionUploadData" :on-change="compositionUploadChange" :on-error="handleError" :on-success="handleSuccess" :before-upload="before" class="upload-file-uploader"> }" name="files" :show-file-list="false" :auto-upload="false" :data="compositionUploadData" :on-change="compositionUploadChange" :on-error="handleError" :on-success="handleSuccess" :before-upload="before" class="upload-file-uploader">
@ -57,7 +58,8 @@
<Icon icon="ep:upload-filled" />上传材质报告 <Icon icon="ep:upload-filled" />上传材质报告
</el-button> </el-button>
</el-upload> </el-upload>
<el-upload ref="heatUploadRef" :file-list="heatUploadFiles" multiple :action="uploadUrl" :headers="{ <el-upload
ref="heatUploadRef" :file-list="heatUploadFiles" multiple :action="uploadUrl" :headers="{
Authorization: 'Bearer ' + getAccessToken(), Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId() 'tenant-id': getTenantId()
}" name="files" :show-file-list="false" :auto-upload="false" :data="heatUploadData" :on-change="heatUploadChange" :on-error="handleError" :on-success="handleSuccess" :before-upload="before" class="upload-file-uploader"> }" name="files" :show-file-list="false" :auto-upload="false" :data="heatUploadData" :on-change="heatUploadChange" :on-error="handleError" :on-success="handleSuccess" :before-upload="before" class="upload-file-uploader">
@ -65,7 +67,8 @@
<Icon icon="ep:upload-filled" />上传热处理报告 <Icon icon="ep:upload-filled" />上传热处理报告
</el-button> </el-button>
</el-upload> </el-upload>
<el-upload ref="scanUploadRef" :file-list="scanUploadFiles" multiple :action="uploadUrl" :headers="{ <el-upload
ref="scanUploadRef" :file-list="scanUploadFiles" multiple :action="uploadUrl" :headers="{
Authorization: 'Bearer ' + getAccessToken(), Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId() 'tenant-id': getTenantId()
}" name="files" :show-file-list="false" :auto-upload="false" :data="scanUploadData" :on-change="scanUploadChange" :on-error="handleError" :on-success="handleSuccess" :before-upload="before" class="upload-file-uploader"> }" name="files" :show-file-list="false" :auto-upload="false" :data="scanUploadData" :on-change="scanUploadChange" :on-error="handleError" :on-success="handleSuccess" :before-upload="before" class="upload-file-uploader">
@ -73,7 +76,8 @@
<Icon icon="ep:upload-filled" />上传扫描报告 <Icon icon="ep:upload-filled" />上传扫描报告
</el-button> </el-button>
</el-upload> </el-upload>
<el-upload ref="triUploadRef" :file-list="triUploadFiles" multiple :action="uploadUrl" :headers="{ <el-upload
ref="triUploadRef" :file-list="triUploadFiles" multiple :action="uploadUrl" :headers="{
Authorization: 'Bearer ' + getAccessToken(), Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId() 'tenant-id': getTenantId()
}" name="files" :show-file-list="false" :auto-upload="false" :data="triUploadData" :on-change="triUploadChange" :on-error="handleError" :on-success="handleSuccess" :before-upload="before" class="upload-file-uploader"> }" name="files" :show-file-list="false" :auto-upload="false" :data="triUploadData" :on-change="triUploadChange" :on-error="handleError" :on-success="handleSuccess" :before-upload="before" class="upload-file-uploader">
@ -81,7 +85,8 @@
<Icon icon="ep:upload-filled" />上传三坐标检测报告 <Icon icon="ep:upload-filled" />上传三坐标检测报告
</el-button> </el-button>
</el-upload> </el-upload>
<el-upload ref="certificateUploadRef" :file-list="certificateUploadFiles" multiple :action="uploadUrl" :headers="{ <el-upload
ref="certificateUploadRef" :file-list="certificateUploadFiles" multiple :action="uploadUrl" :headers="{
Authorization: 'Bearer ' + getAccessToken(), Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId() 'tenant-id': getTenantId()
}" name="files" :show-file-list="false" :auto-upload="false" :data="certificateUploadData" :on-change="certificateUploadChange" :on-error="handleError" :on-success="handleSuccess" :before-upload="before" class="upload-file-uploader"> }" name="files" :show-file-list="false" :auto-upload="false" :data="certificateUploadData" :on-change="certificateUploadChange" :on-error="handleError" :on-success="handleSuccess" :before-upload="before" class="upload-file-uploader">
@ -118,7 +123,7 @@
</el-card> </el-card>
</el-form> </el-form>
<div class="text-center hl-footer"> <div class="hl-footer text-center">
<el-button @click="goback" size="large"> </el-button> <el-button @click="goback" size="large"> </el-button>
<el-button v-if="active != 'detail'" @click="submitForm('SAVE')" type="primary" :disabled="formLoading" size="large"> </el-button> <el-button v-if="active != 'detail'" @click="submitForm('SAVE')" type="primary" :disabled="formLoading" size="large"> </el-button>
</div> </div>
@ -421,7 +426,8 @@ const handleDeleteAttachment = async (index, type) => {
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
const data = await downloadFile(url) const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }

View File

@ -77,7 +77,8 @@
<el-col> <el-col>
<el-card class="hl-incard"> <el-card class="hl-incard">
<el-col v-if="active != 'detail'"> <el-col v-if="active != 'detail'">
<el-upload ref="uploadRef" :file-list="uploadFiles" multiple :action="uploadUrl" :headers="{ <el-upload
ref="uploadRef" :file-list="uploadFiles" multiple :action="uploadUrl" :headers="{
Authorization: 'Bearer ' + getAccessToken(), Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId() 'tenant-id': getTenantId()
}" name="files" :show-file-list="false" :auto-upload="false" :data="uploadData" :on-change="uploadChange" class="upload-file-uploader"> }" name="files" :show-file-list="false" :auto-upload="false" :data="uploadData" :on-change="uploadChange" class="upload-file-uploader">
@ -107,7 +108,7 @@
</el-card> </el-card>
</el-form> </el-form>
<div class="text-center hl-footer"> <div class="hl-footer text-center">
<el-button @click="goback" size="large"> </el-button> <el-button @click="goback" size="large"> </el-button>
<el-button v-if="active != 'detail' && formData.status == 1" @click="submitForm('SAVE')" type="primary" :disabled="formLoading" size="large"> </el-button> <el-button v-if="active != 'detail' && formData.status == 1" @click="submitForm('SAVE')" type="primary" :disabled="formLoading" size="large"> </el-button>
<el-button v-if="active != 'detail' && formData.status == 1" @click="submitForm('SUBMIT')" type="success" :disabled="formLoading" size="large"> </el-button> <el-button v-if="active != 'detail' && formData.status == 1" @click="submitForm('SUBMIT')" type="success" :disabled="formLoading" size="large"> </el-button>
@ -276,7 +277,8 @@ const uploadData = ref({
}) })
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
const data = await downloadFile(url) const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }

View File

@ -1,7 +1,7 @@
<template> <template>
<Dialog :title="dialogTitle" v-model="dialogVisible"> <Dialog :title="dialogTitle" v-model="dialogVisible">
<template #footer> <template #footer>
<el-card class="hl-incard" :class="{ 'alter-class': fieldHasAlter('attachments') }"> <el-card class="hl-incard" :class="{ 'alter-class': fieldHasAlter('attachments') }">
<el-upload <el-upload
ref="contractUploadRef" :file-list="contractUploadFiles" multiple :action="uploadUrl" :headers="{ ref="contractUploadRef" :file-list="contractUploadFiles" multiple :action="uploadUrl" :headers="{
@ -12,7 +12,7 @@ ref="contractUploadRef" :file-list="contractUploadFiles" multiple :action="uplo
<Icon icon="ep:upload-filled" />上传附件 <Icon icon="ep:upload-filled" />上传附件
</el-button> </el-button>
</el-upload> </el-upload>
<el-table :data="formData.attachments" v-loading.fullscreen.lock="uploading" element-loading-text="附件上传中..." element-loading-background="rgba(122, 122, 122, 0.6)" class="hl-table"> <el-table :data="formData.attachments" v-loading.fullscreen.lock="uploading" element-loading-text="附件上传中..." element-loading-background="rgba(122, 122, 122, 0.6)" class="hl-table">
<el-table-column prop="name" label="文件名称" align="center" /> <el-table-column prop="name" label="文件名称" align="center" />
<el-table-column prop="createTime" align="center" label="上传时间" :formatter="dateFormatter" /> <el-table-column prop="createTime" align="center" label="上传时间" :formatter="dateFormatter" />
@ -29,7 +29,7 @@ ref="contractUploadRef" :file-list="contractUploadFiles" multiple :action="uplo
</el-table> </el-table>
</el-card> </el-card>
<el-button type="success" @click="submitForm">确定</el-button> <el-button type="success" @click="submitForm">确定</el-button>
</template> </template>
</Dialog> </Dialog>
</template> </template>
@ -108,7 +108,8 @@ formData.value = await MaterialApi.getMaterial(id)
} }
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
const data = await downloadFile(url) const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }
@ -119,7 +120,7 @@ const contractUploadChange =async (file, files) => {
// contractUploadData.value.businessId = formData.value.id // contractUploadData.value.businessId = formData.value.id
// await contractUploadRef.value!.submit() // await contractUploadRef.value!.submit()
// } // }
} }
const refreshAttachments = (files, type) => { const refreshAttachments = (files, type) => {
// formData.value.attachments=[] // formData.value.attachments=[]
@ -170,7 +171,7 @@ const refreshAttachments = (files, type) => {
} }
reload() reload()
uploading.value = false uploading.value = false
} }
} }
@ -181,7 +182,7 @@ async function submitForm() {
}else{ }else{
dialogVisible.value=false dialogVisible.value=false
} }
} }
// //

View File

@ -457,7 +457,7 @@ const getBoomList = async (arrBoom) => {
formData.value.boomItemDOList.push(item) formData.value.boomItemDOList.push(item)
} }
}) })
} }
@ -568,7 +568,8 @@ const handleDeleteAttachment = async (index, type) => {
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
if (url) { if (url) {
const data = await downloadFile(url) const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }
} }

View File

@ -18,8 +18,8 @@
</el-form> </el-form>
</ContentWrap> </ContentWrap>
<el-card class="hl-table"> <el-card class="hl-table">
<el-table ref="multipleTable" :data="list" v-loading="formLoading" class="hl-table" @selection-change="handleSelectionChange" :row-key="getRowKeys" min-width="1800" @row-click="clickRow"> <el-table ref="multipleTable" :data="list" v-loading="formLoading" class="hl-table" :reserve-selection="true" @selection-change="handleSelectionChange" :row-key="getRowKeys" min-width="1800" @row-click="clickRow">
<el-table-column type="selection" width="55" :reserve-selection="true" :selectable="row=>chkboxEnable" /> <el-table-column type="selection" width="55" :selectable="row=>chkboxEnable" />
<!-- <el-table-column prop="no" label="序号" min-width="120" align="center" /> --> <!-- <el-table-column prop="no" label="序号" min-width="120" align="center" /> -->
<el-table-column label="序号" type="index" min-width="120" align="center" /> <el-table-column label="序号" type="index" min-width="120" align="center" />
<el-table-column prop="materialName" label="零件名称" min-width="120" align="center" /> <el-table-column prop="materialName" label="零件名称" min-width="120" align="center" />
@ -47,6 +47,7 @@ import { ref } from 'vue'
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict' import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import * as MaterialPlanBoomApi from '@/api/heli/materialplanboom' import * as MaterialPlanBoomApi from '@/api/heli/materialplanboom'
import { ElTable } from 'element-plus' import { ElTable } from 'element-plus'
import { cursorTo } from 'readline'
const chkboxEnable = ref(true) const chkboxEnable = ref(true)
@ -61,10 +62,64 @@ const planIdInit = ref()
const multipleTable = ref<InstanceType<typeof ElTable>>() const multipleTable = ref<InstanceType<typeof ElTable>>()
const multipleSelection = ref([]) const multipleSelection = ref([])
const nowPageIds = ref([])
const storage = ref(false)
const handleSelectionChange = (val: []) => { const handleSelectionChange = (val: []) => {
multipleSelection.value = val if(selectedRowBeforeKeys.value == null || selectedRowBeforeKeys.value.length == 0 ){
} selectedRowNowKeys.value = val;
selectedRowBeforeKeys.value = val;
multipleSelection.value = selectedRowBeforeKeys.value
}else{
if(val != null && val.length > 0){
//selectedRowBeforeKeys.valueselectedRowBeforeKeys.value selectedRowNowKeys.value = val;
// ID
const newIds = val.map(item => item.id);
// ID
const currentIds = selectedRowNowKeys.value.map(item => item.id);
// ID
const beforeIds = selectedRowBeforeKeys.value.map(item => item.id);
// ID
const idsToAdd = newIds.filter(id => !currentIds.includes(id));
// ID
const idsToRemove = currentIds.filter(id => !newIds.includes(id));
// ID
idsToAdd.forEach(id => {
val.forEach(item =>{
if(item.id == id){
selectedRowBeforeKeys.value.push(item);
}
})
});
// ID
idsToRemove.forEach(id => {
const index = beforeIds.indexOf(id);
if (index !== -1) {
selectedRowBeforeKeys.value.splice(index, 1);
}
});
multipleSelection.value = selectedRowBeforeKeys.value
selectedRowNowKeys.value = val;
}
}
// if(selectedRowBeforeKeys.value == null || selectedRowBeforeKeys.value.length == 0){
// selectedRowBeforeKeys.value = val
// }else{
// val.forEach(item => {
// const isIdExist = selectedRowKeys.value.some(it => it.id === item.id);
// if (!isIdExist) {
// selectedRowKeys.value.push(item);
// }
// });
// }
// multipleSelection.value = val
}
const selectedRowKeys = ref([]);
const selectedRowBeforeKeys = ref([]);
const selectedRowNowKeys = ref([]);
const clickRow = (row: any) => { const clickRow = (row: any) => {
if (chkboxEnable.value) { if (chkboxEnable.value) {
if (row) { if (row) {
@ -76,7 +131,7 @@ const clickRow = (row: any) => {
} }
//key, //key,
const getRowKeys = (row) => { const getRowKeys = (row) => {
return row.matId return row.id
} }
const queryReqVo: any = reactive({ const queryReqVo: any = reactive({
@ -88,9 +143,22 @@ const queryReqVo: any = reactive({
}) })
/** 搜索按钮操作 */ /** 搜索按钮操作 */
const handleQuery = async () => { const handleQuery = async () => {
selectedRowNowKeys.value = []
const data = await MaterialPlanBoomApi.getBoomDetailList(queryReqVo) const data = await MaterialPlanBoomApi.getBoomDetailList(queryReqVo)
nowPageIds.value = data.list.map(item => item.id);
storage.value = true;
list.value = data.list list.value = data.list
total.value = data.total total.value = data.total
nextTick(() => {
multipleSelection.value.forEach((key) => {
const row = list.value.find(item => item.id === key.id);
if (row) {
selectedRowNowKeys.value.push(key)
multipleTable.value!.toggleRowSelection(row, true);
}
});
});
} }
/** 重置按钮操作 */ /** 重置按钮操作 */
const resetQuery = () => { const resetQuery = () => {

View File

@ -522,6 +522,8 @@ const handleDeleteAttachment = async (index, type) => {
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
if (url) { if (url) {
const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1];
const data = await downloadFile(url) const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }

View File

@ -476,7 +476,7 @@ const getMatItemList = async (arrMaterial) => {
} }
} }
if(!insert){ if(!insert){
formData.value.matItemDOList.push(newData) formData.value.matItemDOList.push(newData)
}else{ }else{
ElMessageBox.alert( ElMessageBox.alert(
`物料:`+item.materialCode+' '+item.materialName, `物料:`+item.materialCode+' '+item.materialName,
@ -515,7 +515,7 @@ const getMatItemList = async (arrMaterial) => {
} }
} }
if(!insert){ if(!insert){
formData.value.matItemDOList.push(newData) formData.value.matItemDOList.push(newData)
}else{ }else{
ElMessageBox.alert( ElMessageBox.alert(
`物料:`+item.materialCode+' '+item.materialName, `物料:`+item.materialCode+' '+item.materialName,
@ -531,7 +531,7 @@ const getMatItemList = async (arrMaterial) => {
formData.value.matItemDOList.push(newData) formData.value.matItemDOList.push(newData)
} }
} }
// formData.value.matItemDOList.push(item) // formData.value.matItemDOList.push(item)
} }
}) })
@ -644,7 +644,8 @@ const handleDeleteAttachment = async (index, type) => {
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
if (url) { if (url) {
const data = await downloadFile(url) const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }
} }
@ -826,7 +827,7 @@ const saveForm = async () => {
const judgeSubmitMsg = () => { const judgeSubmitMsg = () => {
var isRepet = false; var isRepet = false;
if (formData.value.matItemDOList != null && formData.value.matItemDOList.length > 0) { if (formData.value.matItemDOList != null && formData.value.matItemDOList.length > 0) {
const matIdSet = new Set(); const matIdSet = new Set();
for (let i = 0; i < formData.value.matItemDOList.length; i++) { for (let i = 0; i < formData.value.matItemDOList.length; i++) {
const matId = formData.value.matItemDOList[i].matId; const matId = formData.value.matItemDOList[i].matId;
if (matIdSet.has(matId)) { if (matIdSet.has(matId)) {
@ -856,7 +857,7 @@ const judgeSubmitMsg = () => {
// center: true // center: true
// } // }
// ); // );
// } // }
return isRepet; return isRepet;
} }

View File

@ -460,12 +460,12 @@ link type="primary" size="small" :disabled="formData.status == 2"
</el-form> </el-form>
<!-- <div class="hl-footer text-center"> <!-- <div class="hl-footer text-center">
<el-button @click="saveForm" v-if="formData.status !== 2 && formData.status !== 3" type="primary" size="large"> <el-button @click="saveForm" v-if="formData.status !== 2 && formData.status !== 3" type="primary" size="large">
</el-button> </el-button>
<el-button @click="submitForm" type="success" size="large" v-if="formData.status !== 2 && formData.status !== 3">提交</el-button> <el-button @click="submitForm" type="success" size="large" v-if="formData.status !== 2 && formData.status !== 3">提交</el-button>
<el-button @click="closeForm" v-if="formData.status == 2" size="large">取消提交</el-button> <el-button @click="closeForm" v-if="formData.status == 2" size="large">取消提交</el-button>
</div> --> </div> -->
</el-card> </el-card>
<!-- 表单弹窗物料列表 --> <!-- 表单弹窗物料列表 -->
@ -589,7 +589,7 @@ const handleSelectedMaterialPlanMat = (arr) => {
}); });
}; };
const handleSelectedMaterialPlanBoom = async (arrBoom) => { const handleSelectedMaterialPlanBoom = async (arrBoom) => {
//debugger //debugger
const existingBoomDetailIds = new Set(formData.value.boomItemDOList.map(boom => boom.boomDetailId)); const existingBoomDetailIds = new Set(formData.value.boomItemDOList.map(boom => boom.boomDetailId));
arrBoom.forEach((item) => { arrBoom.forEach((item) => {
@ -738,7 +738,8 @@ const handleDeleteAttachment = async (index, type) => {
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
if (url) { if (url) {
const data = await downloadFile(url) const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }
} }
@ -928,8 +929,8 @@ const handleDeleteBoom = (index: number) => {
} }
const closeForm = async () => { const closeForm = async () => {
var userId = useUserStore().getUser.id var userId = useUserStore().getUser.id
var iftrue = await OutsourceStockApi.outCancelWeiWai(formData.value.id,userId) var iftrue = await OutsourceStockApi.outCancelWeiWai(formData.value.id,userId)
reload() reload()
@ -1017,7 +1018,7 @@ const submitForm = async () => {
var iftrue = await OutsourceStockApi.outYanCaiLiao(formData.value.id,userId) var iftrue = await OutsourceStockApi.outYanCaiLiao(formData.value.id,userId)
reload() reload()
} }
} }
const userList = ref<UserApi.UserVO[]>([]) // const userList = ref<UserApi.UserVO[]>([]) //
const supplierInit = ref() const supplierInit = ref()

View File

@ -306,7 +306,7 @@ ref="subBoomPlanFormRef" :model="formData.boomItemDOList" :rules="subBoomPlanFor
<template #header><span class="hl-table_header">*</span>本次到货数量</template> <template #header><span class="hl-table_header">*</span>本次到货数量</template>
<template #default="scope"> <template #default="scope">
<el-form-item :prop="`${scope.$index}.currentCount`" class="mb-0px!" :rules="subOutSourceMatFormRules.currentCount"> <el-form-item :prop="`${scope.$index}.currentCount`" class="mb-0px!" :rules="subOutSourceMatFormRules.currentCount">
<el-input-number <el-input-number
style="width: 100%" v-model="scope.row.currentCount" placeholder="本次到货数量" style="width: 100%" v-model="scope.row.currentCount" placeholder="本次到货数量"
@change="handleEstimatedPrice" :min="0" :precision="2" /> @change="handleEstimatedPrice" :min="0" :precision="2" />
</el-form-item> </el-form-item>
@ -622,7 +622,7 @@ const handleSelectedMaterialPlanMat = (arr) => {
}); });
}; };
const handleSelectedMaterialPlanBoom = async (arrBoom) => { const handleSelectedMaterialPlanBoom = async (arrBoom) => {
//debugger //debugger
const existingBoomDetailIds = new Set(formData.value.boomItemDOList.map(boom => boom.boomDetailId)); const existingBoomDetailIds = new Set(formData.value.boomItemDOList.map(boom => boom.boomDetailId));
arrBoom.forEach((item) => { arrBoom.forEach((item) => {
@ -771,7 +771,8 @@ const handleDeleteAttachment = async (index, type) => {
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
if (url) { if (url) {
const data = await downloadFile(url) const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }
} }
@ -1085,7 +1086,7 @@ const submitForm = async () => {
formLoading.value = false formLoading.value = false
} }
} }
// //
const inWarehouse = async () => { const inWarehouse = async () => {
// //
if (formData.value.goodsType === 2) { if (formData.value.goodsType === 2) {

View File

@ -307,8 +307,8 @@ ref="subBoomPlanFormRef" :model="formData.boomItemDOList111" :rules="subBoomPlan
<template #header><span class="hl-table_header">*</span>本次到货数量</template> <template #header><span class="hl-table_header">*</span>本次到货数量</template>
<template #default="scope"> <template #default="scope">
<el-form-item :prop="`${scope.$index}.currentCount`" class="mb-0px!"> <el-form-item :prop="`${scope.$index}.currentCount`" class="mb-0px!">
<el-input-number <el-input-number
style="width: 100%" v-model="scope.row.currentCount" placeholder="本次到货数量" :rules="subOutSourceMatFormRules.currentCount" style="width: 100%" v-model="scope.row.currentCount" placeholder="本次到货数量" :rules="subOutSourceMatFormRules.currentCount"
@change="handleEstimatedPrice" :min="0" :precision="2" /> @change="handleEstimatedPrice" :min="0" :precision="2" />
</el-form-item> </el-form-item>
</template> </template>
@ -489,7 +489,7 @@ link type="primary" size="small" :disabled="formData.status == 2 || formData.sta
</el-button> --> </el-button> -->
<el-button @click="saveForm" type="primary" size="large"> <el-button @click="saveForm" type="primary" size="large">
</el-button> </el-button>
<!-- <el-button @click="submitForm" type="success" size="large" v-if="formData.status !== 2 && formData.status !== 3">提交</el-button> <!-- <el-button @click="submitForm" type="success" size="large" v-if="formData.status !== 2 && formData.status !== 3">提交</el-button>
<el-button @click="closeForm" v-if="formData.status == 2" size="large">取消提交</el-button> --> <el-button @click="closeForm" v-if="formData.status == 2" size="large">取消提交</el-button> -->
</div> </div>
</el-card> </el-card>
@ -615,7 +615,7 @@ const handleSelectedMaterialPlanMat = (arr) => {
}); });
}; };
const handleSelectedMaterialPlanBoom = async (arrBoom) => { const handleSelectedMaterialPlanBoom = async (arrBoom) => {
//debugger //debugger
const existingBoomDetailIds = new Set(formData.value.boomItemDOList.map(boom => boom.boomDetailId)); const existingBoomDetailIds = new Set(formData.value.boomItemDOList.map(boom => boom.boomDetailId));
arrBoom.forEach((item) => { arrBoom.forEach((item) => {
@ -764,7 +764,8 @@ const handleDeleteAttachment = async (index, type) => {
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
if (url) { if (url) {
const data = await downloadFile(url) const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }
} }

View File

@ -561,7 +561,8 @@ const handleDeleteAttachment = async (index, type) => {
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
const data = await downloadFile(url) const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }

View File

@ -1830,7 +1830,8 @@ type="textarea" v-model="formData.activeOpinion" placeholder="请输入打回原
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
const data = await downloadFile(url) const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }

View File

@ -5,7 +5,8 @@
<el-col> <el-col>
<el-card class="hl-incard"> <el-card class="hl-incard">
<el-col> <el-col>
<el-upload ref="uploadRef" :file-list="uploadFiles" multiple :action="uploadUrl" :headers="{ <el-upload
ref="uploadRef" :file-list="uploadFiles" multiple :action="uploadUrl" :headers="{
Authorization: 'Bearer ' + getAccessToken(), Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId() 'tenant-id': getTenantId()
}" name="files" :show-file-list="false" :auto-upload="false" :data="uploadData" :on-change="uploadChange" class="upload-file-uploader"> }" name="files" :show-file-list="false" :auto-upload="false" :data="uploadData" :on-change="uploadChange" class="upload-file-uploader">
@ -108,7 +109,8 @@ const submitForm = async () => {
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
const data = await downloadFile(url) const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }

View File

@ -877,7 +877,8 @@ const handleDeleteAttachment = async (index, type) => {
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
if (url) { if (url) {
const data = await downloadFile(url) const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }
} }

View File

@ -920,7 +920,8 @@ const handleDeleteAttachment = async (index, type) => {
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
if (url) { if (url) {
const data = await downloadFile(url) const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }
} }

View File

@ -932,7 +932,8 @@ const handleDeleteAttachment = async (index, type) => {
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
if (url) { if (url) {
const data = await downloadFile(url) const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }
} }

View File

@ -17,11 +17,12 @@
class="!w-240px" class="!w-240px"
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-upload ref="contractUploadRef" :file-list="contractUploadFiles" multiple :action="uploadUrl" :headers="{ <el-upload
ref="contractUploadRef" :file-list="contractUploadFiles" multiple :action="uploadUrl" :headers="{
Authorization: 'Bearer ' + getAccessToken(), Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId() 'tenant-id': getTenantId()
}" name="files" :show-file-list="false" :auto-upload="false" :data="contractUploadData" :on-change="contractUploadChange" :on-error="handleError" :on-success="handleSuccess" :before-upload="before" class="upload-file-uploader"> }" name="files" :show-file-list="false" :auto-upload="false" :data="contractUploadData" :on-change="contractUploadChange" :on-error="handleError" :on-success="handleSuccess" :before-upload="before" class="upload-file-uploader">
@ -59,8 +60,8 @@
/> --> /> -->
</ContentWrap> </ContentWrap>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -99,7 +100,7 @@ const queryParams = reactive({
projectName: undefined, projectName: undefined,
pgUser: undefined, pgUser: undefined,
pgDatetime: [], pgDatetime: [],
}) })
const formData = ref({ const formData = ref({
@ -125,7 +126,7 @@ const submitForm = async () => {
await protocolUploadRef.value!.submit() await protocolUploadRef.value!.submit()
} }
reload() reload()
} }
@ -202,7 +203,7 @@ const refreshAttachments = (files, type) => {
formData.value.attachments = formData.value.attachments.filter((value, index, array) => { formData.value.attachments = formData.value.attachments.filter((value, index, array) => {
return value.businessFileType != type || value.id return value.businessFileType != type || value.id
}) })
for (let i = 0; i < files.length; i++) { for (let i = 0; i < files.length; i++) {
let file = files[i] let file = files[i]
@ -237,8 +238,8 @@ const refreshAttachments = (files, type) => {
reload() reload()
uploading.value = false uploading.value = false
} }
} }
// //
@ -263,7 +264,8 @@ const handleDeleteAttachment = async (index, type) => {
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
const data = await downloadFile(url) const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }
@ -334,4 +336,4 @@ onMounted(async () => {
await getList() await getList()
userList.value = await UserApi.getSimpleUserList() userList.value = await UserApi.getSimpleUserList()
}) })
</script> </script>

View File

@ -28,9 +28,11 @@
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item prop="stockInType" label="入库类型"> <el-form-item prop="stockInType" label="入库类型">
<el-select v-model="formData.stockInType" clearable style="width: 100%" @change="handleStockType" <el-select
v-bind:disabled="ctrView || ctrSave"> v-model="formData.stockInType" clearable style="width: 100%" @change="handleStockType"
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STORAGE_IN_TYPE)" :key="dict.value" :disabled="ctrView || ctrSave">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STORAGE_IN_TYPE)" :key="dict.value"
:label="dict.label" :value="dict.value" /> :label="dict.label" :value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -42,7 +44,8 @@
<el-col :span="24"> <el-col :span="24">
<el-form-item prop="industry" label="单据状态"> <el-form-item prop="industry" label="单据状态">
<el-select v-model="formData.status" placeholder="下拉选择" clearable class="!w-700px" disabled> <el-select v-model="formData.status" placeholder="下拉选择" clearable class="!w-700px" disabled>
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STORAGE_STATUS)" :key="dict.value" <el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STORAGE_STATUS)" :key="dict.value"
:label="dict.label" :value="dict.value" /> :label="dict.label" :value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -52,9 +55,9 @@
<el-col :span="24"> <el-col :span="24">
<el-form-item prop="headerNo" label="上游单号"> <el-form-item prop="headerNo" label="上游单号">
<div class="!w-700px"> <div class="!w-700px">
<el-input v-model="formData.headerNo" @click.prevent="handleClick" v-bind:disabled="ctrView || ctrSave || enableHeadNo"> <el-input v-model="formData.headerNo" @click.prevent="handleClick" :disabled="ctrView || ctrSave || enableHeadNo">
<template #append><el-button <template #append><el-button
:icon="Search" v-bind:disabled="ctrView || ctrSave || enableHeadNo" :icon="Search" :disabled="ctrView || ctrSave || enableHeadNo"
@click="openProjectPurchaseorderDialog" /></template> @click="openProjectPurchaseorderDialog" /></template>
</el-input> </el-input>
</div> </div>
@ -69,7 +72,8 @@
<el-col :span="24"> <el-col :span="24">
<el-form-item label="单据日期" prop="createTime"> <el-form-item label="单据日期" prop="createTime">
<!-- {{ formatDate(formData.createTime, 'YYYY-MM-DD HH:mm:ss') }} --> <!-- {{ formatDate(formData.createTime, 'YYYY-MM-DD HH:mm:ss') }} -->
<el-date-picker v-model="formData.createTime" value-format="x" placeholder="单据日期" disabled <el-date-picker
v-model="formData.createTime" value-format="x" placeholder="单据日期" disabled
class="!w-400px" /> class="!w-400px" />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -77,8 +81,9 @@
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item prop="whId" label="入库仓库"> <el-form-item prop="whId" label="入库仓库">
<el-select v-model="formData.whId" placeholder="下拉选择" clearable class="!w-400px" @change="handleWh" <el-select
v-bind:disabled="ctrView || ctrSave"> v-model="formData.whId" placeholder="下拉选择" clearable class="!w-400px" @change="handleWh"
:disabled="ctrView || ctrSave">
<el-option v-for="dict in whList" :key="dict.id" :label="dict.whName" :value="dict.id" /> <el-option v-for="dict in whList" :key="dict.id" :label="dict.whName" :value="dict.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -89,8 +94,9 @@
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="备注" prop="description"> <el-form-item label="备注" prop="description">
<el-input type="textarea" v-model="formData.description" show-word-limit maxlength="200" <el-input
v-bind:disabled="ctrView || ctrSave" /> type="textarea" v-model="formData.description" show-word-limit maxlength="200"
:disabled="ctrView || ctrSave" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -105,10 +111,12 @@
<el-col> <el-col>
<el-card class="hl-incard"> <el-card class="hl-incard">
<el-col> <el-col>
<el-button class="hl-addbutton" type="primary" size="large" @click="openMatForm" <el-button
v-bind:disabled="ctrView || ctrSave">新增</el-button> class="hl-addbutton" type="primary" size="large" @click="openMatForm"
:disabled="ctrView || ctrSave">新增</el-button>
</el-col> </el-col>
<el-form ref="matSubFormRef" :model="formData.matItemDOList" :rules="subFormRules" <el-form
ref="matSubFormRef" :model="formData.matItemDOList" :rules="subFormRules"
v-loading="subFormLoading" label-width="0"> v-loading="subFormLoading" label-width="0">
<el-table :data="formData.matItemDOList" class="hl-table"> <el-table :data="formData.matItemDOList" class="hl-table">
<el-table-column type="index" label="序号" min-width="80" align="center" fixed /> <el-table-column type="index" label="序号" min-width="80" align="center" fixed />
@ -116,7 +124,7 @@
<template #header> <span class="hl-table_header">*</span> 物料编码</template> <template #header> <span class="hl-table_header">*</span> 物料编码</template>
<template #default="scope"> <template #default="scope">
<el-form-item :prop="`${scope.$index}.matCode`" :rules="subFormRules.matCode" class="mb-0px!"> <el-form-item :prop="`${scope.$index}.matCode`" :rules="subFormRules.matCode" class="mb-0px!">
<el-input class="!w-265px" placeholder="物料编码" v-bind:disabled="true || ctrView || ctrSave" v-model="scope.row.matCode" readonly> <el-input class="!w-265px" placeholder="物料编码" :disabled="true || ctrView || ctrSave" v-model="scope.row.matCode" readonly>
<!-- <template #append ><el-button @click="openMatForm" > <Icon icon="ep:search" class="mr-5px" /> </el-button></template> --> <!-- <template #append ><el-button @click="openMatForm" > <Icon icon="ep:search" class="mr-5px" /> </el-button></template> -->
</el-input> </el-input>
</el-form-item> </el-form-item>
@ -145,8 +153,9 @@
<template #default="scope"> <template #default="scope">
<el-form-item :prop="`${scope.$index}.rgId`" :rules="subFormRules.rgId" class="mb-0px!"> <el-form-item :prop="`${scope.$index}.rgId`" :rules="subFormRules.rgId" class="mb-0px!">
<el-select v-model="scope.row.rgId" placeholder="" style="width: 100%" @change="handleRg(scope)" <el-select
v-bind:disabled="ctrView || ctrSave"> v-model="scope.row.rgId" placeholder="" style="width: 100%" @change="handleRg(scope)"
:disabled="ctrView || ctrSave">
<el-option v-for="dict in rgList" :key="dict.id" :label="dict.rg_name" :value="dict.id" /> <el-option v-for="dict in rgList" :key="dict.id" :label="dict.rg_name" :value="dict.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -158,9 +167,11 @@
<template #default="scope"> <template #default="scope">
<el-form-item :prop="`${scope.$index}.pnId`" :rules="subFormRules.pnId" class="mb-0px!"> <el-form-item :prop="`${scope.$index}.pnId`" :rules="subFormRules.pnId" class="mb-0px!">
<el-select v-model="scope.row.pnId" placeholder="" style="width: 100%" <el-select
v-bind:disabled="ctrView || ctrSave"> v-model="scope.row.pnId" placeholder="" style="width: 100%"
<el-option v-for="dict in scope.row.pnlist" :key="dict.id" :label="dict.pn_name" :disabled="ctrView || ctrSave">
<el-option
v-for="dict in scope.row.pnlist" :key="dict.id" :label="dict.pn_name"
:value="dict.id" /> :value="dict.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -171,9 +182,10 @@
<template #header> <span class="hl-table_header">*</span> 入库数量 </template> <template #header> <span class="hl-table_header">*</span> 入库数量 </template>
<template #default="scope"> <template #default="scope">
<el-form-item :prop="`${scope.$index}.storageOkQty`" :rules="subFormRules.storageOkQty" <el-form-item
:prop="`${scope.$index}.storageOkQty`" :rules="subFormRules.storageOkQty"
class="mb-0px!"> class="mb-0px!">
<el-input v-model="scope.row.storageOkQty" v-bind:disabled="ctrView || ctrSave" /> <el-input v-model="scope.row.storageOkQty" :disabled="ctrView || ctrSave" />
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
@ -182,9 +194,10 @@
<template #header> <span class="hl-table_header">*</span> 入库单价 </template> <template #header> <span class="hl-table_header">*</span> 入库单价 </template>
<template #default="scope"> <template #default="scope">
<el-form-item :prop="`${scope.$index}.price`" :rules="subFormRules.price" <el-form-item
:prop="`${scope.$index}.price`" :rules="subFormRules.price"
class="mb-0px!"> class="mb-0px!">
<el-input v-model="scope.row.price" v-bind:disabled="ctrView || ctrSave" /> <el-input v-model="scope.row.price" :disabled="ctrView || ctrSave" />
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
@ -193,23 +206,24 @@
<template #header>入库单价 </template> <template #header>入库单价 </template>
<template #default="scope"> <template #default="scope">
<el-form-item :prop="`${scope.$index}.price`" <el-form-item
:prop="`${scope.$index}.price`"
class="mb-0px!"> class="mb-0px!">
<el-input v-model="scope.row.price" v-bind:disabled="ctrView || ctrSave" /> <el-input v-model="scope.row.price" :disabled="ctrView || ctrSave" />
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="lotNo" label="批次号" align="center" min-width="120" v-if="false"> <el-table-column prop="lotNo" label="批次号" align="center" min-width="120" v-if="false">
<template #default="scope"> <template #default="scope">
<el-input v-model="scope.row.lotNo" v-bind:disabled="ctrView || ctrSave" /> <el-input v-model="scope.row.lotNo" :disabled="ctrView || ctrSave" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="projectSubName" label="子项目名称" align="center" min-width="120"> <el-table-column prop="projectSubName" label="子项目名称" align="center" min-width="120">
<template #default="scope"> <template #default="scope">
<el-input v-model="scope.row.projectSubName" v-bind:disabled="ctrView || ctrSave" readonly> <el-input v-model="scope.row.projectSubName" :disabled="ctrView || ctrSave" readonly>
<template #append ><el-button @click="openProjectForm(scope)" > <Icon icon="ep:search" class="mr-5px" /> </el-button></template> <template #append ><el-button @click="openProjectForm(scope)" > <Icon icon="ep:search" class="mr-5px" /> </el-button></template>
</el-input> </el-input>
</template> </template>
@ -217,14 +231,15 @@
<el-table-column prop="description" label="备注" align="center" min-width="180"> <el-table-column prop="description" label="备注" align="center" min-width="180">
<template #default="scope"> <template #default="scope">
<el-input v-model="scope.row.description" v-bind:disabled="ctrView || ctrSave" /> <el-input v-model="scope.row.description" :disabled="ctrView || ctrSave" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" min-width="120" fixed="right"> <el-table-column label="操作" align="center" min-width="120" fixed="right">
<template #default="scope"> <template #default="scope">
<el-button link type="danger" @click.prevent="handleDelete2(scope.$index)" <el-button
v-bind:disabled="ctrView || ctrDelete"> link type="danger" @click.prevent="handleDelete2(scope.$index)"
:disabled="ctrView || ctrDelete">
删除 删除
</el-button> </el-button>
</template> </template>
@ -245,18 +260,20 @@
<el-col> <el-col>
<el-card class="hl-incard"> <el-card class="hl-incard">
<el-col> <el-col>
<el-upload ref="matUploadRef" :file-list="matUploadFiles" multiple :action="uploadUrl" :headers="{ <el-upload
ref="matUploadRef" :file-list="matUploadFiles" multiple :action="uploadUrl" :headers="{
Authorization: 'Bearer ' + getAccessToken(), Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId() 'tenant-id': getTenantId()
}" name="files" :show-file-list="false" :auto-upload="false" :data="matUploadData" :on-change="matUploadChange" }" name="files" :show-file-list="false" :auto-upload="false" :data="matUploadData" :on-change="matUploadChange"
:on-error="handleError" :on-success="handleSuccess" :before-upload="before" :on-error="handleError" :on-success="handleSuccess" :before-upload="before"
class="upload-file-uploader"> class="upload-file-uploader">
<el-button type="primary" v-bind:disabled="ctrView || ctrSave"> <el-button type="primary" :disabled="ctrView || ctrSave">
<Icon icon="ep:upload-filled" />上传 <Icon icon="ep:upload-filled" />上传
</el-button> </el-button>
</el-upload> </el-upload>
</el-col> </el-col>
<el-table :data="formData.attachments" class="hl-table" v-loading.fullscreen.lock="uploading" <el-table
:data="formData.attachments" class="hl-table" v-loading.fullscreen.lock="uploading"
element-loading-text="附件上传中..." element-loading-background="rgba(122, 122, 122, 0.6)"> element-loading-text="附件上传中..." element-loading-background="rgba(122, 122, 122, 0.6)">
<el-table-column prop="name" label="文件名称" align="center"> <el-table-column prop="name" label="文件名称" align="center">
<!-- <template #default="scope"> <!-- <template #default="scope">
@ -269,11 +286,13 @@
<el-table-column label="操作" align="center"> <el-table-column label="操作" align="center">
<template #default="scope"> <template #default="scope">
<el-button link type="danger" size="small" v-bind:disabled="ctrView || ctrDelete" <el-button
link type="danger" size="small" :disabled="ctrView || ctrDelete"
@click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)"> @click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)">
删除 删除
</el-button> </el-button>
<el-button link type="primary" size="small" v-bind:disabled="ctrView || ctrDelete" <el-button
link type="primary" size="small" :disabled="ctrView || ctrDelete"
@click="downloadAttachment(scope.row.name, scope.row.url)"> @click="downloadAttachment(scope.row.name, scope.row.url)">
下载 下载
</el-button> </el-button>
@ -329,7 +348,7 @@
</el-row> </el-row>
</el-card> </el-card>
</el-form> </el-form>
<div class="text-center hl-footer"> <div class="hl-footer text-center">
<el-button @click="() => router.go(-1)" size="large"> </el-button> <el-button @click="() => router.go(-1)" size="large"> </el-button>
<el-button @click="submitForm" type="success" v-if="btnSave" size="large"> <el-button @click="submitForm" type="success" v-if="btnSave" size="large">
</el-button> </el-button>
@ -693,7 +712,8 @@ const handleDeleteAttachment = async (index, type) => {
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
if (url) { if (url) {
const data = await downloadFile(url) const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }
} }

View File

@ -842,7 +842,8 @@ const handleDeleteAttachment = async (index, type) => {
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
if (url) { if (url) {
const data = await downloadFile(url) const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }
} }

View File

@ -770,7 +770,9 @@ const handleDeleteAttachment = async (index, type) => {
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
if (url) { if (url) {
const data = await downloadFile(url)
const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }
} }

View File

@ -138,8 +138,8 @@
<el-input v-model="scope.row.storageOkQty" @change="(val)=>handleSub(val,scope)" :disabled="ctrView || ctrSave" /> <el-input v-model="scope.row.storageOkQty" @change="(val)=>handleSub(val,scope)" :disabled="ctrView || ctrSave" />
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="money" min-width="120" align="center" > <el-table-column prop="money" min-width="120" align="center" >
<template #header> <span class="hl-table_header">*</span>金额</template> <template #header> <span class="hl-table_header">*</span>金额</template>
<template #default="scope"> <template #default="scope">
@ -149,11 +149,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="onemoney" label="单价" min-width="120" align="center"/> <el-table-column prop="onemoney" label="单价" min-width="120" align="center"/>
<el-table-column prop="matSub" label="盈亏差异" min-width="120" align="center"> <el-table-column prop="matSub" label="盈亏差异" min-width="120" align="center">
<template #default="scope"> <template #default="scope">
<div v-if="scope.row.matSub<0" style="color:#EC808D;"> <div v-if="scope.row.matSub<0" style="color:#EC808D;">
@ -580,7 +580,8 @@ const handleDeleteAttachment = async (index, type) => {
// //
const downloadAttachment = async (name, url) => { const downloadAttachment = async (name, url) => {
if (url) { if (url) {
const data = await downloadFile(url) const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name) download.any(data, name)
} }
} }