| | |
| | | @confirm="handleProcessFlowSelectConfirm" /> |
| | | <el-space wrap> |
| | | <el-button type="primary" |
| | | @click="handleAudit">å®¡æ ¸</el-button> |
| | | <el-button type="primary" |
| | | @click="handleReverseAudit">å审</el-button> |
| | | <el-button type="primary" |
| | | @click="handleSalesStock">å
¥åº</el-button> |
| | | <el-button type="primary" |
| | | @click="openForm('add')">æ°å¢å°è´¦</el-button> |
| | |
| | | type="info">-</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å®¡æ ¸ç¶æ" |
| | | width="120" |
| | | align="center"> |
| | | <template #default="scope"> |
| | | <el-tag v-if="Number(scope.row.reviewStatus) === 0" |
| | | type="warning">å¾
å®¡æ ¸</el-tag> |
| | | <el-tag v-else-if="Number(scope.row.reviewStatus) === 1" |
| | | type="success">å·²å®¡æ ¸</el-tag> |
| | | <el-tag v-else |
| | | type="info">å¾
å®¡æ ¸</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å
¥åºç¶æ" |
| | | width="120" |
| | | align="center"> |
| | |
| | | <el-button link |
| | | type="primary" |
| | | @click="openProcessFlowSelect(scope.row)" |
| | | :disabled="!scope.row.isEdit">å·¥èºè·¯çº¿</el-button> |
| | | :disabled="!scope.row.isEdit || Number(scope.row.reviewStatus) === 1">å·¥èºè·¯çº¿</el-button> |
| | | <el-button link |
| | | type="primary" |
| | | @click="downLoadFile(scope.row)">éä»¶</el-button> |
| | |
| | | <el-select v-model="form.salesman" |
| | | placeholder="è¯·éæ©" |
| | | clearable |
| | | :disabled="operationType === 'view'"> |
| | | :disabled="operationType === 'view' || Number(form.reviewStatus) === 1"> |
| | | <el-option v-for="item in userList" |
| | | :key="item.nickName" |
| | | :label="item.nickName" |
| | |
| | | filterable |
| | | placeholder="è¯·éæ©" |
| | | clearable |
| | | :disabled="operationType === 'view'"> |
| | | :disabled="operationType === 'view' || Number(form.reviewStatus) === 1"> |
| | | <el-option v-for="item in customerOption" |
| | | :key="item.id" |
| | | :label="item.customerName" |
| | |
| | | <el-input v-model="form.projectName" |
| | | placeholder="请è¾å
¥" |
| | | clearable |
| | | :disabled="operationType === 'view'" /> |
| | | :disabled="operationType === 'view' || Number(form.reviewStatus) === 1" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | type="date" |
| | | placeholder="è¯·éæ©" |
| | | clearable |
| | | :disabled="operationType === 'view'" /> |
| | | :disabled="operationType === 'view' || Number(form.reviewStatus) === 1" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | |
| | | format="YYYY-MM-DD" |
| | | type="date" |
| | | placeholder="è¯·éæ©" |
| | | clearable /> |
| | | clearable |
| | | :disabled="operationType === 'view' || Number(form.reviewStatus) === 1" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | :reserve-keyword="false" |
| | | placeholder="è¯·éæ©" |
| | | clearable |
| | | @change="changs"> |
| | | @change="changs" |
| | | :disabled="operationType === 'view' || Number(form.reviewStatus) === 1"> |
| | | <el-option v-for="item in userList" |
| | | :key="item.userId" |
| | | :label="item.nickName" |
| | |
| | | format="YYYY-MM-DD" |
| | | type="date" |
| | | placeholder="è¯·éæ©" |
| | | clearable /> |
| | | clearable |
| | | :disabled="operationType === 'view' || Number(form.reviewStatus) === 1" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | prop="entryDate"> |
| | | <el-button v-if="operationType !== 'view'" |
| | | type="primary" |
| | | :disabled="hasEditingProductRow()" |
| | | :disabled="hasEditingProductRow() || Number(form.reviewStatus) === 1" |
| | | @click="addProductInline"> |
| | | æ·»å |
| | | </el-button> |
| | | <el-button v-if="operationType !== 'view'" |
| | | plain |
| | | type="danger" |
| | | :disabled="Number(form.reviewStatus) === 1" |
| | | @click="deleteProduct">å é¤</el-button> |
| | | </el-form-item> |
| | | </el-row> |
| | |
| | | :render-after-expand="false" |
| | | style="width: 100%" |
| | | :filter-node-method="filterProductCategoryNode" |
| | | @change="(val) => handleInlineProductCategoryChange(scope.row, val)" /> |
| | | @change="(val) => handleInlineProductCategoryChange(scope.row, val)" |
| | | :disabled="Number(form.reviewStatus) === 1" /> |
| | | <span v-else>{{ scope.row.productCategory ?? "" }}</span> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | clearable |
| | | filterable |
| | | style="width: 100%" |
| | | @change="(val) => handleInlineProductModelChange(scope.row, val)"> |
| | | @change="(val) => handleInlineProductModelChange(scope.row, val)" |
| | | :disabled="Number(form.reviewStatus) === 1"> |
| | | <el-option v-for="item in modelOptions" |
| | | :key="item.id" |
| | | :label="item.model" |
| | |
| | | :precision="2" |
| | | style="width: 100%" |
| | | placeholder="请è¾å
¥" |
| | | clearable /> |
| | | clearable |
| | | :disabled="Number(form.reviewStatus) === 1" /> |
| | | <span v-else>{{ scope.row.thickness ?? "" }}</span> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | v-model="scope.row.floorCode" |
| | | placeholder="请è¾å
¥" |
| | | clearable |
| | | style="width: 100%" /> |
| | | style="width: 100%" |
| | | :disabled="Number(form.reviewStatus) === 1" /> |
| | | <span v-else>{{ scope.row.floorCode ?? "" }}</span> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | placeholder="请è¾å
¥" |
| | | clearable |
| | | @change="() => handleInlineSizeChange(scope.row)" |
| | | @input="() => handleInlineSizeChange(scope.row)" /> |
| | | @input="() => handleInlineSizeChange(scope.row)" |
| | | :disabled="Number(form.reviewStatus) === 1" /> |
| | | <span v-else>{{ scope.row.width ?? "" }}</span> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | placeholder="请è¾å
¥" |
| | | clearable |
| | | @change="() => handleInlineSizeChange(scope.row)" |
| | | @input="() => handleInlineSizeChange(scope.row)" /> |
| | | @input="() => handleInlineSizeChange(scope.row)" |
| | | :disabled="Number(form.reviewStatus) === 1" /> |
| | | <span v-else>{{ scope.row.height ?? "" }}</span> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | placeholder="请è¾å
¥" |
| | | clearable |
| | | @change="() => handleInlineQuantityChange(scope.row)" |
| | | @input="() => handleInlineQuantityChange(scope.row)" /> |
| | | @input="() => handleInlineQuantityChange(scope.row)" |
| | | :disabled="Number(form.reviewStatus) === 1" /> |
| | | <span v-else>{{ scope.row.quantity ?? "" }}</span> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | style="width: 100%" |
| | | placeholder="请è¾å
¥" |
| | | clearable |
| | | @change="() => handleInlineSettleAreaChange(scope.row)" /> |
| | | @change="() => handleInlineSettleAreaChange(scope.row)" |
| | | :disabled="Number(form.reviewStatus) === 1" /> |
| | | <span v-else>{{ scope.row.settlePieceArea ? Number(scope.row.settlePieceArea).toFixed(4) : "" }}</span> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | :step="1" |
| | | :precision="4" |
| | | style="width: 100%" |
| | | placeholder="èªå¨è®¡ç®" /> |
| | | placeholder="èªå¨è®¡ç®" |
| | | :disabled="Number(form.reviewStatus) === 1" /> |
| | | <span v-else>{{ scope.row.actualTotalArea ? Number(scope.row.actualTotalArea).toFixed(4) : "" }}</span> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | placeholder="è¯·éæ©" |
| | | clearable |
| | | style="width: 100%" |
| | | @change="() => handleInlineTaxRateChange(scope.row)"> |
| | | @change="() => handleInlineTaxRateChange(scope.row)" |
| | | :disabled="Number(form.reviewStatus) === 1"> |
| | | <el-option label="1" |
| | | value="1" /> |
| | | <el-option label="3" |
| | |
| | | v-model="scope.row.processRequirement" |
| | | placeholder="请è¾å
¥" |
| | | clearable |
| | | style="width: 100%" /> |
| | | style="width: 100%" |
| | | :disabled="Number(form.reviewStatus) === 1" /> |
| | | <span v-else>{{ scope.row.processRequirement ?? "" }}</span> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | v-model="scope.row.invoiceType" |
| | | placeholder="è¯·éæ©" |
| | | clearable |
| | | style="width: 100%"> |
| | | style="width: 100%" |
| | | :disabled="Number(form.reviewStatus) === 1"> |
| | | <el-option label="墿®ç¥¨" |
| | | value="墿®ç¥¨" /> |
| | | <el-option label="å¢ä¸ç¥¨" |
| | |
| | | v-model="scope.row.remark" |
| | | placeholder="请è¾å
¥" |
| | | clearable |
| | | style="width: 100%" /> |
| | | style="width: 100%" |
| | | :disabled="Number(form.reviewStatus) === 1" /> |
| | | <span v-else>{{ scope.row.remark ?? "" }}</span> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | v-model="scope.row.heavyBox" |
| | | placeholder="请è¾å
¥" |
| | | clearable |
| | | style="width: 100%" /> |
| | | style="width: 100%" |
| | | :disabled="Number(form.reviewStatus) === 1" /> |
| | | <span v-else>{{ scope.row.heavyBox ?? "" }}</span> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | <el-button link |
| | | type="primary" |
| | | size="small" |
| | | :disabled="isProductShipped(scope.row) || hasEditingProductRow()" |
| | | :disabled="isProductShipped(scope.row) || Number(form.reviewStatus) === 1" |
| | | @click="copyProductInline(scope.row, scope.$index)"> |
| | | å¤å¶æ°å»º |
| | | </el-button> |
| | |
| | | <el-button type="primary" |
| | | plain |
| | | size="small" |
| | | :disabled="isProductShipped(scope.row)" |
| | | :disabled="isProductShipped(scope.row) || Number(form.reviewStatus) === 1" |
| | | @click="startAddOtherAmountForRow(scope.row)"> |
| | | æ°å¢ |
| | | </el-button> |
| | |
| | | clearable |
| | | placeholder="è¯·éæ©é¢å¤å 工项ç®" |
| | | style="width: 100%;" |
| | | :disabled="isProductShipped(scope.row)"> |
| | | :disabled="isProductShipped(scope.row) || Number(form.reviewStatus) === 1"> |
| | | <el-option v-for="item in otherAmountSelectOptions" |
| | | :key="item.id" |
| | | :label="item.processName" |
| | |
| | | </el-select> |
| | | <div style="display:flex; justify-content:flex-end; gap: 8px;"> |
| | | <el-button size="small" |
| | | :disabled="isProductShipped(scope.row)" |
| | | :disabled="isProductShipped(scope.row) || Number(form.reviewStatus) === 1" |
| | | @click="scope.row.__inlineOtherAmountAdding = false; scope.row.__inlineOtherAmountAddId = null"> |
| | | åæ¶ |
| | | </el-button> |
| | | <el-button type="primary" |
| | | size="small" |
| | | :disabled="isProductShipped(scope.row) || scope.row.__inlineOtherAmountAddId === null || scope.row.__inlineOtherAmountAddId === undefined || scope.row.__inlineOtherAmountAddId === ''" |
| | | :disabled="isProductShipped(scope.row) || Number(form.reviewStatus) === 1 || scope.row.__inlineOtherAmountAddId === null || scope.row.__inlineOtherAmountAddId === undefined || scope.row.__inlineOtherAmountAddId === ''" |
| | | @click="confirmAddOtherAmountForRow(scope.row)"> |
| | | 确认添å |
| | | </el-button> |
| | |
| | | :precision="0" |
| | | style="width: 120px;" |
| | | placeholder="æ°é" |
| | | :disabled="operationType === 'view' || isProductShipped(scope.row)" |
| | | :disabled="operationType === 'view' || isProductShipped(scope.row) || Number(form.reviewStatus) === 1" |
| | | @change="handleOtherAmountQuantityChange(scope.row)" /> |
| | | <el-button type="danger" |
| | | link |
| | | size="small" |
| | | :disabled="isProductShipped(scope.row)" |
| | | :disabled="isProductShipped(scope.row) || Number(form.reviewStatus) === 1" |
| | | @click="removeOtherAmountAtForRow(scope.row, idx)"> |
| | | å é¤ |
| | | </el-button> |
| | |
| | | clearable |
| | | type="textarea" |
| | | :rows="2" |
| | | :disabled="operationType === 'view'" /> |
| | | :disabled="operationType === 'view' || Number(form.reviewStatus) === 1" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | clearable |
| | | type="textarea" |
| | | :rows="2" |
| | | :disabled="operationType === 'view'" /> |
| | | :disabled="operationType === 'view' || Number(form.reviewStatus) === 1" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | const ctx = canvas.getContext("2d"); |
| | | canvas.width = Math.max(QR_SIZE + horizontalPad * 2, 280); |
| | | ctx.font = `${fontSize}px "Microsoft YaHei", "PingFang SC", sans-serif`; |
| | | const lines = wrapLedgerQrTextLines(ctx, label, canvas.width - horizontalPad * 2); |
| | | const lines = wrapLedgerQrTextLines( |
| | | ctx, |
| | | label, |
| | | canvas.width - horizontalPad * 2 |
| | | ); |
| | | const textBlockHeight = lines.length * lineHeight; |
| | | canvas.height = padTop + QR_SIZE + gapAfterQr + textBlockHeight + bottomPad; |
| | | canvas.height = |
| | | padTop + QR_SIZE + gapAfterQr + textBlockHeight + bottomPad; |
| | | |
| | | ctx.fillStyle = "#ffffff"; |
| | | ctx.fillRect(0, 0, canvas.width, canvas.height); |
| | |
| | | entryDateEnd: undefined, |
| | | deliveryStatus: undefined, // åè´§ç¶æï¼1æªåè´§ 2审æ¹ä¸ 3审æ¹ä¸éè¿ 4审æ¹éè¿ 5å·²åè´§ 6é¨ååè´§ |
| | | stockStatus: undefined, // å
¥åºç¶æï¼0æªå
¥åº 1é¨åå
¥åº 2å·²å
¥åº |
| | | reviewStatus: undefined, // å®¡æ ¸ç¶æï¼0å¾
å®¡æ ¸ 1å·²å®¡æ ¸ 2å·²å审 |
| | | }, |
| | | form: { |
| | | salesContractNo: "", |
| | |
| | | maintenanceTime: "", |
| | | productData: [], |
| | | executionDate: "", |
| | | reviewStatus: undefined, |
| | | stockStatus: undefined, |
| | | }, |
| | | rules: { |
| | | salesman: [{ required: true, message: "è¯·éæ©", trigger: "change" }], |
| | |
| | | copied.productModelId = row.productModelId ?? null; |
| | | copied.specificationModel = row.specificationModel ?? ""; |
| | | copied.thickness = |
| | | row.thickness !== null && row.thickness !== undefined && row.thickness !== "" |
| | | row.thickness !== null && |
| | | row.thickness !== undefined && |
| | | row.thickness !== "" |
| | | ? Number(row.thickness) |
| | | : null; |
| | | copied.floorCode = row?.floorCode ?? row?.floor_code ?? ""; |
| | |
| | | } |
| | | if (row.actualTotalArea <= 0) { |
| | | proxy.$modal.msgWarning("é¢ç§¯å¿
须大äº0"); |
| | | return false; |
| | | } |
| | | if (row.taxInclusiveUnitPrice <= 0) { |
| | | proxy.$modal.msgWarning("å«ç¨åä»·å¿
须大äº0"); |
| | | return false; |
| | | } |
| | | if (!row.productModelId) { |
| | |
| | | expandedRowKeys.value = []; |
| | | getList(); |
| | | }; |
| | | |
| | | /** å®¡æ ¸æé®æä½ */ |
| | | const handleAudit = async () => { |
| | | if (selectedRows.value.length === 0) { |
| | | proxy.$modal.msgWarning("è¯·éæ©è¦å®¡æ ¸çæ°æ®"); |
| | | return; |
| | | } |
| | | const canNotAudit = selectedRows.value.filter( |
| | | row => Number(row.reviewStatus) !== 0 |
| | | ); |
| | | if (canNotAudit.length > 0) { |
| | | proxy.$modal.msgWarning("éä¸çæ°æ®ä¸å
å«éå¾
å®¡æ ¸é¡¹ï¼è¯·éæ°éæ©"); |
| | | return; |
| | | } |
| | | try { |
| | | await ElMessageBox.confirm("æ¯å¦ç¡®è®¤å®¡æ ¸éä¸çéå®å°è´¦ï¼", "æç¤º", { |
| | | confirmButtonText: "ç¡®å®", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning", |
| | | }); |
| | | for (const row of selectedRows.value) { |
| | | await addOrUpdateSalesLedger({ ...row, reviewStatus: 1 }); |
| | | } |
| | | proxy.$modal.msgSuccess("å®¡æ ¸æå"); |
| | | getList(); |
| | | } catch (error) { |
| | | console.log(error); |
| | | } |
| | | }; |
| | | |
| | | /** å审æé®æä½ */ |
| | | const handleReverseAudit = async () => { |
| | | if (selectedRows.value.length === 0) { |
| | | proxy.$modal.msgWarning("è¯·éæ©è¦åå®¡çæ°æ®"); |
| | | return; |
| | | } |
| | | const canNotReverse = selectedRows.value.filter( |
| | | row => Number(row.reviewStatus) !== 1 |
| | | ); |
| | | if (canNotReverse.length > 0) { |
| | | proxy.$modal.msgWarning("éä¸çæ°æ®ä¸å
å«éå·²å®¡æ ¸é¡¹ï¼è¯·éæ°éæ©"); |
| | | return; |
| | | } |
| | | try { |
| | | await ElMessageBox.confirm("æ¯å¦ç¡®è®¤å审éä¸çéå®å°è´¦ï¼", "æç¤º", { |
| | | confirmButtonText: "ç¡®å®", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning", |
| | | }); |
| | | |
| | | for (const row of selectedRows.value) { |
| | | await addOrUpdateSalesLedger({ ...row, reviewStatus: 2 }); |
| | | } |
| | | |
| | | proxy.$modal.msgSuccess("å审æå"); |
| | | getList(); |
| | | } catch (error) { |
| | | console.log(error); |
| | | } |
| | | }; |
| | | |
| | | const paginationChange = obj => { |
| | | page.current = obj.page; |
| | | page.size = obj.limit; |
| | |
| | | tableLoading.value = true; |
| | | const { entryDate, ...rest } = searchForm; |
| | | // å°èå´æ¥æåæ®µä¼ éç»å端 |
| | | const params = { ...rest, ...page }; |
| | | const params = { ...rest, ...page, reviewStatusList: [0, 1] }; |
| | | // ç§»é¤å½å
¥æ¥æçé»è®¤å¼è®¾ç½®ï¼åªä¿çèå´æ¥æå段 |
| | | delete params.entryDate; |
| | | // æ¥è¯¢å®¢æ·åç§°ä¸æ°å¢ä¿æä¸è´ï¼å
é customerIdï¼åæ å°ä¸º customerName æ¥è¯¢ |
| | |
| | | delete params.customerName; |
| | | } |
| | | } |
| | | const widthValue = |
| | | params.width != null ? String(params.width).trim() : ""; |
| | | const widthValue = params.width != null ? String(params.width).trim() : ""; |
| | | if (widthValue) { |
| | | params.width = widthValue; |
| | | } else { |
| | | delete params.width; |
| | | } |
| | | const heightValue = |
| | | params.height != null ? String(params.height).trim() : ""; |
| | | const heightValue = params.height != null ? String(params.height).trim() : ""; |
| | | if (heightValue) { |
| | | params.height = heightValue; |
| | | } else { |
| | |
| | | const res = await productList({ salesLedgerId: id, type: 1 }); |
| | | stockProductList.value = []; |
| | | stockProductList.value = |
| | | res.data.filter(item => item.productStockStatus == 0 || item.productStockStatus == 1) || []; |
| | | res.data.filter( |
| | | item => item.productStockStatus == 0 || item.productStockStatus == 1 |
| | | ) || []; |
| | | } catch (e) { |
| | | proxy?.$modal?.msgError?.("è·å产åæå®¡æ¹äººå¤±è´¥"); |
| | | } finally { |
| | |
| | | |
| | | proxy?.$modal?.loading?.("æ£å¨å
¥åºï¼è¯·ç¨å..."); |
| | | try { |
| | | const approveUserIds = stockApproverNodes.value.map(node => node.userId).join(","); |
| | | const approveUserIds = stockApproverNodes.value |
| | | .map(node => node.userId) |
| | | .join(","); |
| | | const approveUserName = stockApproverNodes.value |
| | | .map(node => stockApproverOptions.value.find(item => String(item.userId) === String(node.userId))?.userName) |
| | | .map( |
| | | node => |
| | | stockApproverOptions.value.find( |
| | | item => String(item.userId) === String(node.userId) |
| | | )?.userName |
| | | ) |
| | | .filter(Boolean) |
| | | .join(","); |
| | | await salesStock({ |
| | |
| | | } |
| | | form.value.tempFileIds = tempFileIds; |
| | | form.value.type = 1; |
| | | form.value.reviewStatus = 0; // é»è®¤å®¡æ ¸ç¶æä¸ºå¾
å®¡æ ¸ |
| | | form.value.stockStatus = 0; // é»è®¤å
¥åºç¶æä¸ºæªå
¥åº |
| | | const submitPayload = { ...form.value }; |
| | | delete submitPayload.paymentMethod; |
| | | addOrUpdateSalesLedger(submitPayload).then(res => { |
| | |
| | | const templateUrl = HISTORY_IMPORT_TEMPLATE_URL_MAP[command]; |
| | | const fileName = HISTORY_IMPORT_TEMPLATE_FILE_NAME_MAP[command]; |
| | | if (templateUrl) { |
| | | proxy.download(templateUrl, {}, fileName || "éå®åè´§å岿°æ®å¯¼å
¥æ¨¡æ¿.xlsx"); |
| | | proxy.download( |
| | | templateUrl, |
| | | {}, |
| | | fileName || "éå®åè´§å岿°æ®å¯¼å
¥æ¨¡æ¿.xlsx" |
| | | ); |
| | | return; |
| | | } |
| | | } |
| | |
| | | return; |
| | | } |
| | | const ids = selectedRows.value.map(item => item.id); |
| | | |
| | | // æ£æ¥æ¯å¦æå·²å®¡æ ¸çå°è´¦ |
| | | const audited = selectedRows.value.filter( |
| | | row => Number(row.reviewStatus) === 1 |
| | | ); |
| | | if (audited.length > 0) { |
| | | proxy.$modal.msgWarning("éä¸çæ°æ®ä¸å
å«å·²å®¡æ ¸é¡¹ï¼ä¸è½å é¤"); |
| | | return; |
| | | } |
| | | |
| | | // æ£æ¥æ¯å¦æå·²è¿è¡åè´§æåè´§å®æçéå®è®¢åï¼è¥æåä¸å
许å é¤ |
| | | const cannotDeleteNames = []; |
| | |
| | | const processCardData = res?.data ?? {}; |
| | | // è¡¥é½äºç»´ç æéçå°è´¦æ è¯ï¼åç«¯æ°æ®ææ¶ä¸å¸¦ idï¼ |
| | | if (processCardData && typeof processCardData === "object") { |
| | | processCardData.salesLedgerId = processCardData.salesLedgerId ?? selectedId; |
| | | processCardData.salesLedgerId = |
| | | processCardData.salesLedgerId ?? selectedId; |
| | | processCardData.salesContractNo = |
| | | (processCardData.salesContractNo ?? "").trim() || |
| | | String(selectedRow?.salesContractNo ?? "").trim(); |
| | |
| | | |
| | | // å
许ï¼1æªåè´§ã3审æ¹ä¸éè¿ã4审æ¹éè¿ã6é¨ååè´§ï¼ä¸å
许ï¼2审æ¹ä¸ã5å·²åè´§ |
| | | const statusItem = selectedRows.value[0].deliveryStatus; |
| | | const ledgerAllowsDelivery = s => |
| | | [1, 3, 4, 6].includes(Number(s)); |
| | | const ledgerAllowsDelivery = s => [1, 3, 4, 6].includes(Number(s)); |
| | | let isTrue = true; |
| | | selectedRows.value.forEach(row => { |
| | | if (!ledgerAllowsDelivery(row.deliveryStatus)) { |