| src/views/equipmentManagement/inspectionManagement/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/qualityManagement/processInspection/components/formDia.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/qualityManagement/rawMaterialInspection/components/formDia.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/safeProduction/dangerInvestigation/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/salesManagement/salesLedger/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/views/equipmentManagement/inspectionManagement/index.vue
@@ -1,22 +1,24 @@ <template> <div class="app-container"> <el-form :inline="true" :model="queryParams" class="search-form"> <el-form :inline="true" :model="queryParams" class="search-form"> <el-form-item label="巡检任务名称"> <el-input v-model="queryParams.taskName" <el-input v-model="queryParams.taskName" placeholder="请输入巡检任务名称" clearable style="width: 200px " /> style="width: 200px " /> </el-form-item> <el-form-item> <el-button type="primary" @click="handleQuery">查询</el-button> <el-button type="primary" @click="handleQuery">查询</el-button> <el-button @click="resetQuery">重置</el-button> </el-form-item> </el-form> <el-card> <div style="display: flex;flex-direction: row;justify-content: space-between;margin-bottom: 10px;"> <el-radio-group v-model="activeRadio" @change="radioChange"> <el-radio-group v-model="activeRadio" @change="radioChange"> <el-radio-button v-for="tab in radios" :key="tab.name" :label="tab.label" @@ -24,8 +26,12 @@ </el-radio-group> <!-- 操作按钮区 --> <el-space v-if="activeRadio !== 'task'"> <el-button type="primary" :icon="Plus" @click="handleAdd(undefined)">新建</el-button> <el-button type="danger" :icon="Delete" @click="handleDelete">删除</el-button> <el-button type="primary" :icon="Plus" @click="handleAdd(undefined)">新建</el-button> <el-button type="danger" :icon="Delete" @click="handleDelete">删除</el-button> <el-button @click="handleOut">导出</el-button> </el-space> <el-space v-else> @@ -46,30 +52,29 @@ total: total, layout: 'total, sizes, prev, pager, next, jumper' }" :table-style="{ width: '100%', height: 'calc(100vh - 23em)' }" > :table-style="{ width: '100%', height: 'calc(100vh - 23em)' }"> <template #inspector="{ row }"> <div class="person-tags"> <!-- 调试信息,上线时删除 --> <!-- {{ console.log('inspector data:', row.inspector) }} --> <template v-if="row.inspector && row.inspector.length > 0"> <el-tag v-for="(person, index) in row.inspector" <el-tag v-for="(person, index) in row.inspector" :key="index" size="small" type="primary" class="person-tag" > class="person-tag"> {{ person }} </el-tag> </template> <span v-else class="no-data">--</span> <span v-else class="no-data">--</span> </div> </template> </PIMTable> </div> </el-card> <form-dia ref="formDia" @closeDia="handleQuery"></form-dia> <form-dia ref="formDia" @closeDia="handleQuery"></form-dia> <view-files ref="viewFiles"></view-files> </div> </template> @@ -88,7 +93,7 @@ import { delTimingTask, inspectionTaskList, timingTaskList timingTaskList, } from "@/api/inspectionManagement/index.js"; // 全局变量 @@ -127,12 +132,23 @@ prop: "frequencyType", label: "频次", minWidth: 150, formatter: (_, __, val) => ({ DAILY: "每日", WEEKLY: "每周", MONTHLY: "每月", QUARTERLY: "季度" }[val] || "") // formatter: (_, __, val) => ({ // DAILY: "每日", // WEEKLY: "每周", // MONTHLY: "每月", // QUARTERLY: "季度" // }[val] || "") formatData: params => { return params === "DAILY" ? "每日" : params === "WEEKLY" ? "每周" : params === "MONTHLY" ? "每月" : params === "QUARTERLY" ? "季度" : ""; }, }, { prop: "frequencyDetail", @@ -140,27 +156,30 @@ minWidth: 150, formatter: (row, column, cellValue) => { // 先判断是否是字符串 if (typeof cellValue !== 'string') return ''; if (typeof cellValue !== "string") return ""; let val = cellValue; const replacements = { MON: '周一', TUE: '周二', WED: '周三', THU: '周四', FRI: '周五', SAT: '周六', SUN: '周日' MON: "周一", TUE: "周二", WED: "周三", THU: "周四", FRI: "周五", SAT: "周六", SUN: "周日", }; // 使用正则一次性替换所有匹配项 return val.replace(/MON|TUE|WED|THU|FRI|SAT|SUN/g, match => replacements[match]); } return val.replace( /MON|TUE|WED|THU|FRI|SAT|SUN/g, match => replacements[match] ); }, }, { prop: "registrant", label: "登记人", minWidth: 100 }, { prop: "createTime", label: "登记日期", minWidth: 100 }, ]); // 操作列配置 const getOperationColumn = (operations) => { const getOperationColumn = operations => { if (!operations || operations.length === 0) return null; const operationConfig = { @@ -168,43 +187,51 @@ width: 130, fixed: "right", dataType: "action", operation: operations.map(op => { operation: operations .map(op => { switch (op) { case 'edit': case "edit": return { name: "编辑", clickFun: handleAdd, color: "#409EFF" color: "#409EFF", }; case 'viewFile': case "viewFile": return { name: "查看附件", clickFun: viewFile, color: "#67C23A" color: "#67C23A", }; default: return null; } }).filter(Boolean) }) .filter(Boolean), }; return operationConfig; }; onMounted(() => { radioChange('taskManage'); radioChange("taskManage"); }); // 单选变化 const radioChange = (value) => { const radioChange = value => { if (value === "taskManage") { const operationColumn = getOperationColumn(['edit']); tableColumns.value = [...columns.value, ...(operationColumn ? [operationColumn] : [])]; operationsArr.value = ['edit']; const operationColumn = getOperationColumn(["edit"]); tableColumns.value = [ ...columns.value, ...(operationColumn ? [operationColumn] : []), ]; operationsArr.value = ["edit"]; } else if (value === "task") { const operationColumn = getOperationColumn(['viewFile']); tableColumns.value = [...columns.value, ...(operationColumn ? [operationColumn] : [])]; operationsArr.value = ['viewFile']; const operationColumn = getOperationColumn(["viewFile"]); tableColumns.value = [ ...columns.value, ...(operationColumn ? [operationColumn] : []), ]; operationsArr.value = ["viewFile"]; } pageNum.value = 1; pageSize.value = 10; @@ -218,7 +245,7 @@ getList(); }; // 分页处理 const handlePagination = (val) => { const handlePagination = val => { pageNum.value = val.page; pageSize.value = val.limit; getList(); @@ -227,7 +254,11 @@ const getList = () => { tableLoading.value = true; const params = { ...queryParams, size: pageSize.value, current: pageNum.value }; const params = { ...queryParams, size: pageSize.value, current: pageNum.value, }; let apiCall; if (activeRadio.value === "task") { @@ -236,7 +267,8 @@ apiCall = timingTaskList(params); } apiCall.then(res => { apiCall .then(res => { const rawData = res.data.records || []; // 处理 inspector 字段,将字符串转换为数组(适用于所有情况) tableData.value = rawData.map(item => { @@ -244,9 +276,12 @@ // 处理 inspector 字段 if (processedItem.inspector) { if (typeof processedItem.inspector === 'string') { if (typeof processedItem.inspector === "string") { // 字符串按逗号分割 processedItem.inspector = processedItem.inspector.split(',').map(s => s.trim()).filter(s => s); processedItem.inspector = processedItem.inspector .split(",") .map(s => s.trim()) .filter(s => s); } else if (!Array.isArray(processedItem.inspector)) { // 非数组转为数组 processedItem.inspector = [processedItem.inspector]; @@ -259,7 +294,8 @@ return processedItem; }); total.value = res.data.total || 0; }).finally(() => { }) .finally(() => { tableLoading.value = false; }); }; @@ -275,15 +311,15 @@ }; // 新增 / 编辑 const handleAdd = (row) => { const type = row ? 'edit' : 'add'; const handleAdd = row => { const type = row ? "edit" : "add"; nextTick(() => { formDia.value?.openDialog(type, row); }); }; // 查看附件 const viewFile = (row) => { const viewFile = row => { nextTick(() => { viewFiles.value?.openDialog(row); }); @@ -298,16 +334,20 @@ const deleteIds = selectedRows.value.map(item => item.id); proxy.$modal.confirm('是否确认删除所选数据项?').then(() => { proxy.$modal .confirm("是否确认删除所选数据项?") .then(() => { return delTimingTask(deleteIds); }).then(() => { }) .then(() => { proxy.$modal.msgSuccess("删除成功"); handleQuery(); }).catch(() => {}); }) .catch(() => {}); }; // 多选变更 const handleSelectionChange = (selection) => { const handleSelectionChange = selection => { selectedRows.value = selection; }; src/views/qualityManagement/processInspection/components/formDia.vue
@@ -207,22 +207,50 @@ // 打开弹框 const openDialog = async (type, row) => { operationType.value = type; dialogFormVisible.value = true; getOptions().then((res) => { supplierList.value = res.data; }); let userLists = await userListNoPage(); userList.value = userLists.data; form.value = {} // 先重置表单数据(保持字段完整,避免弹窗首次渲染时触发必填红框“闪一下”) form.value = { checkTime: "", process: "", checkName: "", productName: "", productId: "", productModelId: "", model: "", testStandardId: "", unit: "", quantity: "", checkCompany: "", checkResult: "", } testStandardOptions.value = []; tableData.value = []; getProductOptions(); // 先确保产品树已加载,否则编辑时产品/规格型号无法反显 await getProductOptions(); if (operationType.value === 'edit') { // 先保存 testStandardId,避免被清空 const savedTestStandardId = row.testStandardId; // 先设置表单数据,但暂时清空 testStandardId,等选项加载完成后再设置 form.value = {...row, testStandardId: ''} currentProductId.value = row.productId || 0 // 关键:编辑时加载规格型号下拉选项,才能反显 productModelId if (currentProductId.value) { try { const res = await modelList({ id: currentProductId.value }); modelOptions.value = res || []; // 同步回填 model / unit(有些接口返回的 row 里可能没带全) if (form.value.productModelId) { handleChangeModel(form.value.productModelId); } } catch (e) { console.error("加载规格型号失败", e); modelOptions.value = []; } } // 编辑模式下,先加载指标选项,然后加载参数列表 if (currentProductId.value) { // 先加载指标选项 @@ -264,10 +292,16 @@ getQualityInspectParamList(row.id); } } // 最后再打开弹窗,并清理校验态,避免必填提示闪烁 dialogFormVisible.value = true; nextTick(() => { proxy.$refs?.formRef?.clearValidate?.(); }); } const getProductOptions = () => { productTreeList().then((res) => { return productTreeList().then((res) => { productOptions.value = convertIdToValue(res); return productOptions.value; }); }; const getModels = (value) => { src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
@@ -218,21 +218,49 @@ const modelOptions = ref([]); // 打开弹框 const openDialog = (type, row) => { const openDialog = async (type, row) => { operationType.value = type; dialogFormVisible.value = true; getOptions().then((res) => { supplierList.value = res.data; }); form.value = {} // 先重置表单数据(保持字段完整,避免弹窗首次渲染时触发必填红框“闪一下”) form.value = { checkTime: "", supplier: "", checkName: "", productName: "", productId: "", productModelId: "", model: "", testStandardId: "", unit: "", quantity: "", checkCompany: "", checkResult: "", } testStandardOptions.value = []; tableData.value = []; getProductOptions(); // 先确保产品树已加载,否则编辑时产品/规格型号无法反显 await getProductOptions(); if (operationType.value === 'edit') { // 先保存 testStandardId,避免被清空 const savedTestStandardId = row.testStandardId; form.value = {...row} currentProductId.value = row.productId || 0 // 关键:编辑时加载规格型号下拉选项,才能反显 productModelId if (currentProductId.value) { try { const res = await modelList({ id: currentProductId.value }); modelOptions.value = res || []; // 同步回填 model / unit(有些接口返回的 row 里可能没带全) if (form.value.productModelId) { handleChangeModel(form.value.productModelId); } } catch (e) { console.error("加载规格型号失败", e); modelOptions.value = []; } } // 编辑模式下,先加载指标选项,然后加载参数列表 if (currentProductId.value) { // 先加载指标选项 @@ -273,10 +301,16 @@ getQualityInspectParamList(row.id); } } // 最后再打开弹窗,并清理校验态,避免必填提示闪烁 dialogFormVisible.value = true; nextTick(() => { proxy.$refs?.formRef?.clearValidate?.(); }); } const getProductOptions = () => { productTreeList().then((res) => { return productTreeList().then((res) => { productOptions.value = convertIdToValue(res); return productOptions.value; }); }; const getModels = (value) => { src/views/safeProduction/dangerInvestigation/index.vue
@@ -125,7 +125,7 @@ <el-button link type="primary" size="small" :disabled="!isPeople(scope.row.rectifyUserId)" :disabled="scope.row.isRectify" @click="openForm('edit2', scope.row)">整改</el-button> <el-button link type="primary" @@ -659,6 +659,14 @@ tableLoading.value = false; tableData.value = res.data.records; total.value = res.data.total; tableData.value.forEach(item => { // console.log(item.rectifyUserId, currentUserId.value, "======="); if (Number(item.rectifyUserId) != Number(currentUserId.value)) { item.isRectify = true; } else { item.isRectify = false; } }); return res; }) .catch(() => { @@ -893,8 +901,8 @@ proxy.$modal.msg("已取消"); }); }; const isPeople = row => { return row.rectifyUserId === Number(currentUserId.value); const isPeople = rectifyUserId => { return Number(rectifyUserId) == Number(currentUserId.value); }; /** @@ -976,11 +984,11 @@ }; onMounted(() => { getCurrentFactoryName(); getList(); userListNoPage().then(res => { userList.value = res.data; }); getCurrentFactoryName(); }); // 上传附件 const handleUpload = async () => { src/views/salesManagement/salesLedger/index.vue
@@ -221,7 +221,8 @@ </el-row> <el-table :data="productData" border @selection-change="productSelected" show-summary :summary-method="summarizeMainTable"> <el-table-column align="center" type="selection" width="55" v-if="operationType !== 'view'" /> <el-table-column align="center" type="selection" width="55" v-if="operationType !== 'view'" :selectable="(row) => !isProductShipped(row)" /> <el-table-column align="center" label="序号" type="index" width="60" /> <el-table-column label="产品大类" prop="productCategory" /> <el-table-column label="规格型号" prop="specificationModel" /> @@ -233,7 +234,9 @@ <el-table-column label="不含税总价(元)" prop="taxExclusiveTotalPrice" :formatter="formattedNumber" /> <el-table-column fixed="right" label="操作" min-width="60" align="center" v-if="operationType !== 'view'"> <template #default="scope"> <el-button link type="primary" size="small" @click="openProductForm('edit', scope.row,scope.$index)">编辑</el-button> <el-button link type="primary" size="small" :disabled="isProductShipped(scope.row)" @click="openProductForm('edit', scope.row,scope.$index)">编辑</el-button> </template> </el-table-column> </el-table> @@ -1222,6 +1225,12 @@ const productIndex = ref(0); // 打开产品弹框 const openProductForm = async (type, row, index) => { // 编辑时检查产品是否已发货或审核通过 if (type === "edit" && isProductShipped(row)) { proxy.$modal.msgWarning("已发货或审核通过的产品不能编辑"); return; } productOperationType.value = type; productForm.value = {}; proxy.resetForm("productFormRef"); @@ -1288,6 +1297,14 @@ proxy.$modal.msgWarning("请选择数据"); return; } // 检查是否有已发货或审核通过的产品 const shippedProducts = productSelectedRows.value.filter(row => isProductShipped(row)); if (shippedProducts.length > 0) { proxy.$modal.msgWarning("已发货或审核通过的产品不能删除"); return; } if (operationType.value === "add") { productSelectedRows.value.forEach((selectedRow) => { const index = productData.value.findIndex( @@ -1362,6 +1379,14 @@ proxy.$modal.msg("已取消"); }); }; /** 判断单个产品是否已发货(根据shippingStatus判断,已发货或审核通过不可编辑和删除) */ const isProductShipped = (product) => { if (!product) return false; const status = String(product.shippingStatus || "").trim(); // 如果发货状态是"已发货"或"审核通过",则不可编辑和删除 return status === "已发货" || status === "审核通过"; }; /** 判断销售订单下是否存在已发货/发货完成的产品(不可删除) */ const hasShippedProducts = (products) => { if (!products || !products.length) return false;