| src/api/equipmentManagement/maintenanceTaskFile.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/api/procurementManagement/procurementLedger.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/collaborativeApproval/approvalProcess/components/approvalDia.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/collaborativeApproval/approvalProcess/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/equipmentManagement/upkeep/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/salesManagement/deliveryLedger/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/salesManagement/salesLedger/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/api/equipmentManagement/maintenanceTaskFile.js
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,28 @@ import request from "@/utils/request"; // æ¥è¯¢ä¿å »ä»»å¡éä»¶å表 export function listMaintenanceTaskFiles(query) { return request({ url: "/maintenanceTaskFile/listPage", method: "get", params: query, }); } // æ°å¢ä¿å »ä»»å¡éä»¶ export function addMaintenanceTaskFile(data) { return request({ url: "/maintenanceTaskFile/add", method: "post", data, }); } // å é¤ä¿å »ä»»å¡éä»¶ export function delMaintenanceTaskFile(id) { return request({ url: "/maintenanceTaskFile/del", method: "delete", data: Array.isArray(id) ? id : [id], }); } src/api/procurementManagement/procurementLedger.js
@@ -114,4 +114,12 @@ method: "delete", data: id, }); } // æ¥è¯¢éè´è¯¦æ export function getPurchaseByCode(id) { return request({ url: "/purchase/ledger/getPurchaseByCode", method: "get", params: id, }); } src/views/collaborativeApproval/approvalProcess/components/approvalDia.vue
@@ -2,7 +2,7 @@ <div> <el-dialog v-model="dialogFormVisible" :title="operationType === 'add' ? 'æ°å¢å®¡æ¹æµç¨' : 'ç¼è¾å®¡æ¹æµç¨'" :title="operationType === 'approval' ? '审æ¹' : '详æ '" width="700px" @close="closeDia" > @@ -32,9 +32,9 @@ </el-form-item> </el-col> </el-row> <el-row v-if="!isQuotationApproval"> <el-row v-if="!isQuotationApproval && !isPurchaseApproval"> <el-col :span="24"> <el-form-item label="审æ¹äºç±ï¼" prop="approveReason"> <el-form-item :label="props.approveType == 5 ? 'éè´ååå·ï¼' : '审æ¹äºç±ï¼'" prop="approveReason"> <el-input v-model="form.approveReason" placeholder="请è¾å ¥" clearable type="textarea" disabled/> </el-form-item> </el-col> @@ -74,7 +74,7 @@ </el-row> </el-form> <!-- æ¥ä»·å®¡æ¹ï¼å±ç¤ºæ¥ä»·è¯¦æ ï¼å¤ç¨é宿¥ä»·âæ¥ç详æ å¯¹è¯æ¡âå å®¹ç»æï¼ --> <!-- æ¥ä»·å®¡æ¹ï¼å±ç¤ºæ¥ä»·è¯¦æ ï¼å¤ç¨é宿¥ä»·"æ¥ç详æ å¯¹è¯æ¡"å å®¹ç»æï¼ --> <div v-if="isQuotationApproval" style="margin: 10px 0 18px;"> <el-divider content-position="left">æ¥ä»·è¯¦æ </el-divider> <el-skeleton :loading="quotationLoading" animated> @@ -104,7 +104,7 @@ <h4>产åæç»</h4> <el-table :data="currentQuotation.products || []" border style="width: 100%"> <el-table-column prop="product" label="产ååç§°" /> <el-table-column prop="specification" label="è§æ ¼åå·" /> <el-table-column prop="specificationModel" label="è§æ ¼åå·" /> <el-table-column prop="unit" label="åä½" /> <el-table-column prop="unitPrice" label="åä»·"> <template #default="scope">Â¥{{ Number(scope.row.unitPrice ?? 0).toFixed(2) }}</template> @@ -115,6 +115,53 @@ <div v-if="currentQuotation.remark" style="margin-top: 20px;"> <h4>夿³¨</h4> <p>{{ currentQuotation.remark }}</p> </div> </template> </template> </el-skeleton> </div> <!-- éè´å®¡æ¹ï¼å±ç¤ºéè´è¯¦æ --> <div v-if="isPurchaseApproval" style="margin: 10px 0 18px;"> <el-divider content-position="left">éè´è¯¦æ </el-divider> <el-skeleton :loading="purchaseLoading" animated> <template #template> <el-skeleton-item variant="h3" style="width: 30%" /> <el-skeleton-item variant="text" style="width: 100%" /> <el-skeleton-item variant="text" style="width: 100%" /> </template> <template #default> <el-empty v-if="!currentPurchase || !currentPurchase.purchaseContractNumber" description="æªæ¥è¯¢å°å¯¹åºéè´è¯¦æ " /> <template v-else> <el-descriptions :column="2" border> <el-descriptions-item label="éè´ååå·">{{ currentPurchase.purchaseContractNumber }}</el-descriptions-item> <el-descriptions-item label="ä¾åºååç§°">{{ currentPurchase.supplierName }}</el-descriptions-item> <el-descriptions-item label="项ç®åç§°">{{ currentPurchase.projectName }}</el-descriptions-item> <el-descriptions-item label="éå®ååå·">{{ currentPurchase.salesContractNo }}</el-descriptions-item> <el-descriptions-item label="ç¾è®¢æ¥æ">{{ currentPurchase.executionDate }}</el-descriptions-item> <el-descriptions-item label="å½å ¥æ¥æ">{{ currentPurchase.entryDate }}</el-descriptions-item> <el-descriptions-item label="仿¬¾æ¹å¼">{{ currentPurchase.paymentMethod }}</el-descriptions-item> <el-descriptions-item label="ååéé¢" :span="2"> <span style="font-size: 18px; color: #e6a23c; font-weight: bold;"> Â¥{{ Number(currentPurchase.contractAmount ?? 0).toFixed(2) }} </span> </el-descriptions-item> </el-descriptions> <div style="margin-top: 20px;"> <h4>产åæç»</h4> <el-table :data="currentPurchase.productData || []" border style="width: 100%"> <el-table-column prop="productCategory" label="产ååç§°" /> <el-table-column prop="specificationModel" label="è§æ ¼åå·" /> <el-table-column prop="unit" label="åä½" /> <el-table-column prop="quantity" label="æ°é" /> <el-table-column prop="taxInclusiveUnitPrice" label="å«ç¨åä»·"> <template #default="scope">Â¥{{ Number(scope.row.taxInclusiveUnitPrice ?? 0).toFixed(2) }}</template> </el-table-column> <el-table-column prop="taxInclusiveTotalPrice" label="å«ç¨æ»ä»·"> <template #default="scope">Â¥{{ Number(scope.row.taxInclusiveTotalPrice ?? 0).toFixed(2) }}</template> </el-table-column> </el-table> </div> </template> </template> @@ -188,6 +235,7 @@ import {userListNoPageByTenantId} from "@/api/system/user.js"; import { WarningFilled, Edit, Check, MoreFilled } from '@element-plus/icons-vue' import { getQuotationList } from "@/api/salesManagement/salesQuotation.js"; import { getPurchaseByCode } from "@/api/procurementManagement/procurementLedger.js"; const emit = defineEmits(['close']) const { proxy } = getCurrentInstance() @@ -207,7 +255,10 @@ const userList = ref([]) const quotationLoading = ref(false) const currentQuotation = ref({}) const purchaseLoading = ref(false) const currentPurchase = ref({}) const isQuotationApproval = computed(() => Number(props.approveType) === 6) const isPurchaseApproval = computed(() => Number(props.approveType) === 5) const data = reactive({ form: { @@ -247,6 +298,7 @@ operationType.value = type; dialogFormVisible.value = true; currentQuotation.value = {} currentPurchase.value = {} userListNoPageByTenantId().then((res) => { userList.value = res.data; }); @@ -277,7 +329,7 @@ }); }); // æ¥ä»·å®¡æ¹ï¼ç¨å®¡æ¹äºç±å段æ¿è½½çâæ¥ä»·åå·â廿¥æ¥ä»·å表 // æ¥ä»·å®¡æ¹ï¼ç¨å®¡æ¹äºç±å段æ¿è½½ç"æ¥ä»·åå·"廿¥æ¥ä»·å表 if (isQuotationApproval.value) { const quotationNo = row?.approveReason; if (quotationNo) { @@ -287,6 +339,22 @@ currentQuotation.value = records[0] || {} }).finally(() => { quotationLoading.value = false }) } } // éè´å®¡æ¹ï¼ç¨å®¡æ¹äºç±å段æ¿è½½ç"éè´ååå·"廿¥éè´è¯¦æ if (isPurchaseApproval.value) { const purchaseContractNumber = row?.approveReason; if (purchaseContractNumber) { purchaseLoading.value = true getPurchaseByCode({ purchaseContractNumber }).then((res) => { currentPurchase.value = res }).catch((err) => { console.error('æ¥è¯¢éè´è¯¦æ 失败:', err) proxy.$modal.msgError('æ¥è¯¢éè´è¯¦æ 失败') }).finally(() => { purchaseLoading.value = false }) } } @@ -341,6 +409,8 @@ dialogFormVisible.value = false; quotationLoading.value = false currentQuotation.value = {} purchaseLoading.value = false currentPurchase.value = {} emit('close') }; defineExpose({ src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue
@@ -35,7 +35,7 @@ </el-row> <el-row> <el-col :span="24"> <el-form-item :label="props.approveType == 5 ? 'éè´è¯´æï¼' : '审æ¹äºç±ï¼'" prop="approveReason"> <el-form-item :label="props.approveType == 5 ? 'éè´ååå·ï¼' : '审æ¹äºç±ï¼'" prop="approveReason"> <el-input v-model="form.approveReason" placeholder="请è¾å ¥" clearable type="textarea" /> </el-form-item> </el-col> src/views/collaborativeApproval/approvalProcess/index.vue
@@ -113,6 +113,7 @@ const isLeaveType = currentApproveType.value === 2; // 请å管ç const isReimburseType = currentApproveType.value === 4; // æ¥é管ç const isQuotationType = currentApproveType.value === 6; // æ¥ä»·å®¡æ¹ const isPurchaseType = currentApproveType.value === 5; // éè´å®¡æ¹ // åºç¡åé ç½® const baseColumns = [ @@ -159,7 +160,7 @@ width: 220 }, { label: isQuotationType ? "æ¥ä»·åå·" : "审æ¹äºç±", label: isQuotationType ? "æ¥ä»·åå·" : isPurchaseType ? "éè´ååå·" : "审æ¹äºç±", prop: "approveReason", width: 200 }, src/views/equipmentManagement/upkeep/index.vue
@@ -203,6 +203,13 @@ > å é¤ </el-button> <el-button type="primary" link @click="openFileDialog(row)" > éä»¶ </el-button> </template> </PIMTable> </div> @@ -211,6 +218,15 @@ <PlanModal ref="planModalRef" @ok="getTableData" /> <MaintenanceModal ref="maintainModalRef" @ok="getTableData" /> <FormDia ref="formDiaRef" @closeDia="getScheduledTableData" /> <FileListDialog ref="fileListDialogRef" v-model="fileDialogVisible" :show-upload-button="true" :show-delete-button="true" :delete-method="handleAttachmentDelete" :name-column-label="'éä»¶åç§°'" :rulesRegulationsManagementId="currentMaintenanceTaskId" @upload="handleAttachmentUpload" /> </div> </template> @@ -221,12 +237,18 @@ import PlanModal from './Form/PlanModal.vue' import MaintenanceModal from './Form/MaintenanceModal.vue' import FormDia from './Form/formDia.vue' import FileListDialog from '@/components/Dialog/FileListDialog.vue' import { getUpkeepPage, delUpkeep, deviceMaintenanceTaskList, deviceMaintenanceTaskDel, } from '@/api/equipmentManagement/upkeep' import { listMaintenanceTaskFiles, addMaintenanceTaskFile, delMaintenanceTaskFile, } from '@/api/equipmentManagement/maintenanceTaskFile' import dayjs from 'dayjs' const { proxy } = getCurrentInstance() @@ -240,6 +262,10 @@ const maintainModalRef = ref() // 宿¶ä»»å¡å¼¹çªæ§å¶å¨ const formDiaRef = ref() // éä»¶å¼¹çª const fileListDialogRef = ref(null) const fileDialogVisible = ref(false) const currentMaintenanceTaskId = ref(null) // ä»»å¡è®°å½tabï¼å设å¤ä¿å »é¡µé¢ï¼ç¸å ³åé const filters = reactive({ @@ -385,7 +411,7 @@ dataType: "slot", slot: "operation", align: "center", width: "300px", width: "350px", }, ]) @@ -571,6 +597,79 @@ getTableData() } // éä»¶ç¸å ³æ¹æ³ // æ¥è¯¢éä»¶å表 const fetchMaintenanceTaskFiles = async (deviceMaintenanceId) => { try { const params = { current: 1, size: 100, deviceMaintenanceId, rulesRegulationsManagementId:deviceMaintenanceId } const res = await listMaintenanceTaskFiles(params) const records = res?.data?.records || [] const mapped = records.map(item => ({ id: item.id, name: item.fileName || item.name, url: item.fileUrl || item.url, raw: item, })) fileListDialogRef.value?.setList(mapped) } catch (error) { ElMessage.error('è·åéä»¶å表失败') } } // æå¼éä»¶å¼¹çª const openFileDialog = async (row) => { currentMaintenanceTaskId.value = row.id fileDialogVisible.value = true await fetchMaintenanceTaskFiles(row.id) } // å·æ°éä»¶å表 const refreshFileList = async () => { if (!currentMaintenanceTaskId.value) return await fetchMaintenanceTaskFiles(currentMaintenanceTaskId.value) } // ä¸ä¼ éä»¶ const handleAttachmentUpload = async (filePayload) => { if (!currentMaintenanceTaskId.value) return try { const payload = { name: filePayload?.fileName || filePayload?.name, url: filePayload?.fileUrl || filePayload?.url, deviceMaintenanceId: currentMaintenanceTaskId.value, } await addMaintenanceTaskFile(payload) ElMessage.success('æä»¶ä¸ä¼ æå') await refreshFileList() } catch (error) { ElMessage.error('æä»¶ä¸ä¼ 失败') } } // å é¤éä»¶ const handleAttachmentDelete = async (row) => { if (!row?.id) return false try { await ElMessageBox.confirm('确认å é¤è¯¥éä»¶ï¼', 'æç¤º', { type: 'warning' }) } catch { return false } try { await delMaintenanceTaskFile(row.id) ElMessage.success('å 餿å') await refreshFileList() return true } catch (error) { ElMessage.error('å é¤å¤±è´¥') return false } } onMounted(() => { // æ ¹æ®é»è®¤æ¿æ´»ç Tab è°ç¨å¯¹åºçæ¥è¯¢æ¥å£ if (activeTab.value === 'scheduled') { src/views/salesManagement/deliveryLedger/index.vue
@@ -51,13 +51,13 @@ link type="primary" size="small" :disabled="!isApproved(scope.row.status)" :disabled="isApproving(scope.row.status)" @click="openForm('edit', scope.row)">ç¼è¾</el-button> <el-button link type="danger" size="small" :disabled="!isApproved(scope.row.status)" :disabled="isApproving(scope.row.status)" @click="handleDeleteSingle(scope.row)">å é¤</el-button> </template> </el-table-column> @@ -284,9 +284,9 @@ // æå¼å¼¹æ¡ const openForm = async (type, row) => { // ç¼è¾æ¶æ£æ¥å®¡æ ¸ç¶æ if (type === 'edit' && row && !isApproved(row.status)) { proxy.$modal.msgWarning("åªè½ç¼è¾å®¡æ ¸éè¿çæ°æ®"); // ç¼è¾æ¶æ£æ¥å®¡æ ¸ç¶æï¼åªæå®¡æ ¸ä¸ä¸è½ç¼è¾ if (type === 'edit' && row && isApproving(row.status)) { proxy.$modal.msgWarning("å®¡æ ¸ä¸çæ°æ®ä¸è½ç¼è¾"); return; } @@ -430,10 +430,10 @@ return; } // æ£æ¥éä¸çè¡æ¯å¦é½æ¯"å®¡æ ¸éè¿"ç¶æ const notApprovedRows = selectedRows.value.filter(row => !isApproved(row.status)); if (notApprovedRows.length > 0) { proxy.$modal.msgWarning("åªè½å é¤å®¡æ ¸éè¿çæ°æ®"); // æ£æ¥éä¸çè¡æ¯å¦æ"å®¡æ ¸ä¸"ç¶æ const approvingRows = selectedRows.value.filter(row => isApproving(row.status)); if (approvingRows.length > 0) { proxy.$modal.msgWarning("å®¡æ ¸ä¸çæ°æ®ä¸è½å é¤"); return; } @@ -456,9 +456,9 @@ // å个å é¤ const handleDeleteSingle = (row) => { // æ£æ¥æ¯å¦ä¸º"å®¡æ ¸éè¿"ç¶æ if (!isApproved(row.deliveryLedger)) { proxy.$modal.msgWarning("åªè½å é¤å®¡æ ¸éè¿çæ°æ®"); // æ£æ¥æ¯å¦ä¸º"å®¡æ ¸ä¸"ç¶æ if (isApproving(row.status)) { proxy.$modal.msgWarning("å®¡æ ¸ä¸çæ°æ®ä¸è½å é¤"); return; } @@ -635,6 +635,20 @@ return statusStr === 'å®¡æ ¸éè¿' || statusStr === '3'; }; // æ£æ¥å®¡æ ¸ç¶ææ¯å¦ä¸º"å®¡æ ¸ä¸" const isApproving = (status) => { if (status === null || status === undefined || status === '') { return false; } // å¦ææ¯æ°åï¼1 è¡¨ç¤ºå®¡æ ¸ä¸ if (typeof status === 'number') { return status === 1; } // 妿æ¯å符串 const statusStr = String(status).trim(); return statusStr === 'å®¡æ ¸ä¸' || statusStr === '1'; }; onMounted(() => { getList(); }); src/views/salesManagement/salesLedger/index.vue
@@ -6,10 +6,6 @@ <el-input v-model="searchForm.customerName" placeholder="请è¾å ¥" clearable prefix-icon="Search" @change="handleQuery" /> </el-form-item> <el-form-item label="客æ·ååå·ï¼"> <el-input v-model="searchForm.customerContractNo" placeholder="请è¾å ¥" clearable prefix-icon="Search" @change="handleQuery" /> </el-form-item> <el-form-item label="éå®ååå·ï¼"> <el-input v-model="searchForm.salesContractNo" placeholder="请è¾å ¥" clearable prefix-icon="Search" @change="handleQuery" /> @@ -61,14 +57,20 @@ type="danger">ä¸è¶³</el-tag> </template> </el-table-column> <el-table-column label="åè´§ç¶æ" prop="shippingStatus" width="140" align="center" show-overflow-tooltip /> <el-table-column label="åè´§ç¶æ" width="140" align="center"> <template #default="scope"> <el-tag :type="getShippingStatusType(scope.row)" size="small"> {{ getShippingStatusText(scope.row) }} </el-tag> </template> </el-table-column> <el-table-column label="å¿«éå ¬å¸" prop="expressCompany" show-overflow-tooltip /> <el-table-column label="å¿«éåå·" prop="expressNumber" show-overflow-tooltip /> <el-table-column label="å货车ç" minWidth="100px" align="center"> <template #default="scope"> <div> <el-tag type="success" v-if="scope.row.shippingCarNumber">{{ scope.row.shippingCarNumber }}</el-tag> <el-tag v-else type="info">æªåè´§</el-tag> <el-tag v-else type="info">-</el-tag> </div> </template> </el-table-column> @@ -94,8 +96,8 @@ <el-button link type="primary" size="small" :disabled="scope.row.approveStatus !== 1 || !!scope.row.shippingDate || !!scope.row.shippingCarNumber" size="small" :disabled="!canShip(scope.row)" @click="openDeliveryForm(scope.row)"> åè´§ </el-button> @@ -106,7 +108,6 @@ </el-table-column> <el-table-column align="center" label="åºå·" type="index" width="60" /> <el-table-column label="éå®ååå·" prop="salesContractNo" width="180" show-overflow-tooltip /> <el-table-column label="客æ·ååå·" prop="customerContractNo" width="180" show-overflow-tooltip /> <el-table-column label="客æ·åç§°" prop="customerName" width="300" show-overflow-tooltip /> <el-table-column label="ä¸å¡å" prop="salesman" width="100" show-overflow-tooltip /> <el-table-column label="项ç®åç§°" prop="projectName" width="180" show-overflow-tooltip /> @@ -148,11 +149,6 @@ </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="客æ·ååå·ï¼" prop="customerContractNo"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable :disabled="operationType === 'view'"/> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="客æ·åç§°ï¼" prop="customerId"> <el-select v-model="form.customerId" placeholder="è¯·éæ©" clearable :disabled="operationType === 'view'"> <el-option v-for="item in customerOption" :key="item.id" :label="item.customerName" :value="item.id"> @@ -163,17 +159,22 @@ </el-select> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="项ç®åç§°ï¼" prop="projectName"> <el-input v-model="form.projectName" placeholder="请è¾å ¥" clearable :disabled="operationType === 'view'" /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="项ç®åç§°ï¼" prop="projectName"> <el-input v-model="form.projectName" placeholder="请è¾å ¥" clearable :disabled="operationType === 'view'" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="ç¾è®¢æ¥æï¼" prop="executionDate"> <el-date-picker style="width: 100%" v-model="form.executionDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="date" placeholder="è¯·éæ©" clearable :disabled="operationType === 'view'" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="仿¬¾æ¹å¼"> <el-input v-model="form.paymentMethod" placeholder="请è¾å ¥" clearable :disabled="operationType === 'view'" /> </el-form-item> </el-col> </el-row> @@ -195,7 +196,6 @@ </el-form-item> </el-col> </el-row> <el-row> <el-form-item label="产åä¿¡æ¯ï¼" prop="entryDate"> <el-button v-if="operationType !== 'view'" type="primary" @click="openProductForm('add')">æ·»å </el-button> @@ -1186,19 +1186,15 @@ const openProductForm = async (type, row, index) => { productOperationType.value = type; productForm.value = {}; modelOptions.value = []; // æ¸ ç©ºè§æ ¼åå·é项 proxy.resetForm("productFormRef"); // ç¡®ä¿äº§åå¤§ç±»æ°æ®å·²å è½½ const options = productOptions.value && productOptions.value.length > 0 ? productOptions.value : await getProductOptions(); if (type === "edit") { productForm.value = { ...row }; productIndex.value = index; // ç¼è¾æ¶æ ¹æ®äº§å大类åç§°åæ¥ tree èç¹ idï¼å¹¶å è½½è§æ ¼åå·å表 try { const options = productOptions.value && productOptions.value.length > 0 ? productOptions.value : await getProductOptions(); const categoryId = findNodeIdByLabel(options, productForm.value.productCategory); if (categoryId) { const models = await modelList({ id: categoryId }); @@ -1215,6 +1211,8 @@ // å 载失败æ¶ä¿æå¯ç¼è¾ï¼ä¸ä¸æå¼¹çª console.error("å 载产åè§æ ¼åå·å¤±è´¥", e); } } else { getProductOptions() } productFormVisible.value = true; }; @@ -1884,6 +1882,92 @@ isCalculating.value = false; }; /** * è·ååè´§ç¶æææ¬ * @param row è¡æ°æ® */ const getShippingStatusText = (row) => { // 妿已åè´§ï¼æåè´§æ¥ææè½¦çå·ï¼ï¼æ¾ç¤º"å·²åè´§" if (row.shippingDate || row.shippingCarNumber) { return 'å·²åè´§'; } // è·ååè´§ç¶æåæ®µ const status = row.shippingStatus; // å¦æç¶æä¸ºç©ºææªå®ä¹ï¼é»è®¤ä¸º"å¾ åè´§" if (status === null || status === undefined || status === '') { return 'å¾ åè´§'; } // ç¶ææ¯å符串 const statusStr = String(status).trim(); const statusTextMap = { 'å¾ åè´§': 'å¾ åè´§', 'å¾ å®¡æ ¸': 'å¾ å®¡æ ¸', 'å®¡æ ¸ä¸': 'å®¡æ ¸ä¸', 'å®¡æ ¸æç»': 'å®¡æ ¸æç»', 'å®¡æ ¸éè¿': 'å®¡æ ¸éè¿', 'å·²åè´§': 'å·²åè´§' }; return statusTextMap[statusStr] || 'å¾ åè´§'; }; /** * è·ååè´§ç¶ææ ç¾ç±»åï¼é¢è²ï¼ * @param row è¡æ°æ® */ const getShippingStatusType = (row) => { // 妿已åè´§ï¼æåè´§æ¥ææè½¦çå·ï¼ï¼æ¾ç¤ºç»¿è² if (row.shippingDate || row.shippingCarNumber) { return 'success'; } // è·ååè´§ç¶æåæ®µ const status = row.shippingStatus; // å¦æç¶æä¸ºç©ºææªå®ä¹ï¼é»è®¤ä¸ºç°è²ï¼å¾ åè´§ï¼ if (status === null || status === undefined || status === '') { return 'info'; } // ç¶ææ¯å符串 const statusStr = String(status).trim(); const typeTextMap = { 'å¾ åè´§': 'info', 'å¾ å®¡æ ¸': 'info', 'å®¡æ ¸ä¸': 'warning', 'å®¡æ ¸æç»': 'danger', 'å®¡æ ¸éè¿': 'success', 'å·²åè´§': 'success' }; return typeTextMap[statusStr] || 'info'; }; /** * 夿æ¯å¦å¯ä»¥åè´§ * åªæå¨äº§åç¶ææ¯å è¶³ï¼åè´§ç¶ææ¯å¾ åè´§åå®¡æ ¸æç»çæ¶åæå¯ä»¥åè´§ * @param row è¡æ°æ® */ const canShip = (row) => { // 产åç¶æå¿ é¡»æ¯å è¶³ï¼approveStatus === 1ï¼ if (row.approveStatus !== 1) { return false; } // è·ååè´§ç¶æ const shippingStatus = row.shippingStatus; // 妿已åè´§ï¼æåè´§æ¥ææè½¦çå·ï¼ï¼ä¸è½å次åè´§ if (row.shippingDate || row.shippingCarNumber) { return false; } // åè´§ç¶æå¿ é¡»æ¯"å¾ åè´§"æ"å®¡æ ¸æç»" const statusStr = shippingStatus ? String(shippingStatus).trim() : ''; return statusStr === 'å¾ åè´§' || statusStr === 'å®¡æ ¸æç»'; }; /** * ä¸è½½æä»¶ * * @param row ä¸è½½æä»¶çç¸å ³ä¿¡æ¯å¯¹è±¡ @@ -1900,15 +1984,12 @@ // æå¼åè´§å¼¹æ¡ const openDeliveryForm = (row) => { // æ ¡éªï¼åªæäº§åç¶æä¸ºå è¶³ä¸æªåè´§æ¶æè½åè´§ if (row.approveStatus !== 1) { proxy.$modal.msgWarning("产åç¶æä¸è¶³ï¼æ æ³åè´§"); // æ£æ¥æ¯å¦å¯ä»¥åè´§ if (!canShip(row)) { proxy.$modal.msgWarning("åªæå¨äº§åç¶ææ¯å è¶³ï¼åè´§ç¶ææ¯å¾ åè´§æå®¡æ ¸æç»çæ¶åæå¯ä»¥åè´§"); return; } if (row.shippingDate || row.shippingCarNumber) { proxy.$modal.msgWarning("该产åå·²åè´§ï¼æ æ³éå¤åè´§"); return; } currentDeliveryRow.value = row; deliveryForm.value = { type: "货车",