天津宝东
1.发货的时候加一个金额字段,需要在财库管理显示出来,因为会有发票
| | |
| | | width: 220, |
| | | }, |
| | | { |
| | | label: "纳税人识别码", |
| | | prop: "taxpayerIdentificationNumber", |
| | | width: 220, |
| | | }, |
| | | { |
| | | label: "地址及联系方式", |
| | | prop: "companyAddress", |
| | | width: 250, |
| | |
| | | label: "联系人岗位", |
| | | prop: "contactPosition", |
| | | width: 140, |
| | | }, |
| | | { |
| | | label: "银行基本户", |
| | | prop: "basicBankAccount", |
| | | width: 220, |
| | | }, |
| | | { |
| | | label: "银行账号", |
| | | prop: "bankAccount", |
| | | width: 220, |
| | | }, |
| | | { |
| | | label: "开户行号", |
| | | prop: "bankCode", |
| | | width: 220, |
| | | }, |
| | | { |
| | | label: "维护人", |
| | |
| | | width: 220, |
| | | }, |
| | | { |
| | | label: "纳税人识别码", |
| | | prop: "taxpayerIdentificationNumber", |
| | | width: 220, |
| | | }, |
| | | { |
| | | label: "地址及联系方式", |
| | | prop: "addressPhone", |
| | | width: 250, |
| | |
| | | label: "联系人岗位", |
| | | prop: "contactPosition", |
| | | width: 140, |
| | | }, |
| | | // { |
| | | // label: "跟进进度", |
| | | // prop: "followUpLevel", |
| | | // width: 120, |
| | | // }, |
| | | // { |
| | | // label: "跟进时间", |
| | | // prop: "followUpTime", |
| | | // width: 120, |
| | | // }, |
| | | { |
| | | label: "银行基本户", |
| | | prop: "basicBankAccount", |
| | | width: 220, |
| | | }, |
| | | { |
| | | label: "银行账号", |
| | | prop: "bankAccount", |
| | | width: 220, |
| | | }, |
| | | { |
| | | label: "开户行号", |
| | | prop: "bankCode", |
| | | width: 220, |
| | | }, |
| | | { |
| | | label: "维护人", |
| | |
| | | </el-tag> |
| | | </div> |
| | | </div> |
| | | <div class="header-actions" v-if="approverList.length > 0"> |
| | | <div class="header-actions"> |
| | | <el-button @click="handleReset" size="default"> |
| | | <el-icon><RefreshLeft /></el-icon> |
| | | 重置 |
| | |
| | | <!-- 底部提示 --> |
| | | <div class="bottom-tips"> |
| | | <el-icon><InfoFilled /></el-icon> |
| | | <span>提示:每个流程至少配置一个审批人,审批按顺序流转,可通过箭头调整顺序</span> |
| | | <span>提示:可不配置审批人;若配置多人,审批将按顺序流转,可通过箭头调整顺序</span> |
| | | </div> |
| | | </div> |
| | | </template> |
| | |
| | | |
| | | // 保存配置 |
| | | const handleSave = async () => { |
| | | if (approverList.value.length === 0) { |
| | | ElMessage.warning('请至少配置一个审批人'); |
| | | return; |
| | | } |
| | | |
| | | const hasEmptyApprover = approverList.value.some((item) => !item.approverId); |
| | | const configuredApprovers = approverList.value.filter((item) => item.approverId); |
| | | const hasEmptyApprover = false; |
| | | if (hasEmptyApprover) { |
| | | ElMessage.warning('请选择所有审批人'); |
| | | return; |
| | | } |
| | | |
| | | const approverIds = approverList.value.map((item) => item.approverId); |
| | | const approverIds = configuredApprovers.map((item) => item.approverId); |
| | | const uniqueIds = [...new Set(approverIds)]; |
| | | if (uniqueIds.length !== approverIds.length) { |
| | | ElMessage.warning('审批人不能重复'); |
| | |
| | | |
| | | saveLoading.value = true; |
| | | try { |
| | | const payload = approverList.value.map((item, index) => ({ |
| | | const approveProcessConfigNodes = configuredApprovers.map((item, index) => ({ |
| | | approveType: currentApproveType.value, |
| | | nodeOrder: index + 1, |
| | | approverId: item.approverId, |
| | | approverName: item.approverName, |
| | | })); |
| | | const payload = { |
| | | approveType: currentApproveType.value, |
| | | approveProcessConfigNodes, |
| | | }; |
| | | await addApproveProcessConfigNode(payload); |
| | | ElMessage.success('保存成功'); |
| | | await loadData(); |
| | | } catch (error) { |
| | | ElMessage.error('保存失败'); |
| | | console.log('保存失败') |
| | | } finally { |
| | | saveLoading.value = false; |
| | | } |
| | |
| | | <el-table-column label="销售订单" prop="salesContractNo" show-overflow-tooltip /> |
| | | <el-table-column label="发货订单号" prop="shippingNo" show-overflow-tooltip /> |
| | | <el-table-column label="客户名称" prop="customerName" show-overflow-tooltip /> |
| | | <el-table-column label="产品名称" prop="productName" show-overflow-tooltip /> |
| | | <el-table-column label="产品名称" prop="productCategory" show-overflow-tooltip /> |
| | | <el-table-column label="规格型号" prop="specificationModel" show-overflow-tooltip /> |
| | | <el-table-column label="发货进度" align="center" width="150"> |
| | | <template #default="scope"> |
| | |
| | | <div class="summary-value shipped">{{ currentShippingOrder.shippingSuccessTotal || 0 }}</div> |
| | | </div> |
| | | <div class="summary-item"> |
| | | <div class="summary-label">已退货数量</div> |
| | | <div class="summary-value returned">{{ currentShippingOrder.returnTotal || 0 }}</div> |
| | | </div> |
| | | <div class="summary-item"> |
| | | <div class="summary-label">待发货数量</div> |
| | | <div class="summary-value waiting">{{ currentShippingOrder.waitShippingTotal || 0 }}</div> |
| | | </div> |
| | |
| | | <span class="info-value quantity">{{ record.shippingNum }}</span> |
| | | </div> |
| | | <div class="info-row"> |
| | | <span class="info-label">发货金额</span> |
| | | <span class="info-label">运费</span> |
| | | <span class="info-value">{{ Number(record.shippingAmount || 0).toFixed(2) }}</span> |
| | | </div> |
| | | <div class="info-row"> |
| | | <span class="info-label">退货数量</span> |
| | | <span class="info-value returned">{{ record.returnTotal || 0 }}</span> |
| | | </div> |
| | | <div class="info-row" v-if="record.type === '货车'"> |
| | | <span class="info-label">车牌号</span> |
| | |
| | | /> |
| | | </div> |
| | | </div> |
| | | <div class="info-row"> |
| | | <span class="info-label">库位</span> |
| | | <span class="info-value">{{ record.stockLocation || '--' }}</span> |
| | | </div> |
| | | <div class="record-actions" v-if="canRevokeShipping(record)"> |
| | | <el-button |
| | | type="danger" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="发货金额" prop="shippingAmount"> |
| | | <el-form-item label="运费" prop="shippingAmount"> |
| | | <el-input-number |
| | | v-model="shippingForm.shippingAmount" |
| | | :min="0" |
| | | :precision="2" |
| | | :step="0.01" |
| | | placeholder="请输入发货金额" |
| | | placeholder="请输入运费" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | |
| | | <el-radio label="货车">货车</el-radio> |
| | | <el-radio label="快递">快递</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="库位" prop="stockLocation"> |
| | | <el-input v-model="shippingForm.stockLocation" placeholder="请输入库位" clearable/> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | shippingCarNumber: "", |
| | | expressCompany: "", |
| | | expressNumber: "", |
| | | stockLocation: "", |
| | | }); |
| | | const shippingRules = { |
| | | shippingAmount: [{ required: true, message: "请输入发货金额", trigger: "blur" }], |
| | | shippingAmount: [{ required: true, message: "请输入运费", trigger: "blur" }], |
| | | shippingNum: [{ required: true, message: "请输入发货数量", trigger: "blur" }], |
| | | stockLocation: [{ required: true, message: "请输入库位", trigger: "blur" }], |
| | | type: [{ required: true, message: "请选择发货类型", trigger: "change" }], |
| | | shippingDate: [{ required: true, message: "请选择发货日期", trigger: "change" }], |
| | | shippingCarNumber: [ |
| | |
| | | shippingCarNumber: "", |
| | | expressCompany: "", |
| | | expressNumber: "", |
| | | stockLocation: "", |
| | | }; |
| | | shippingFileList.value = []; |
| | | |
| | |
| | | shippingCarNumber: "", |
| | | expressCompany: "", |
| | | expressNumber: "", |
| | | stockLocation: "", |
| | | }; |
| | | shippingFileList.value = []; |
| | | }; |
| | |
| | | shippingCarNumber: "", |
| | | expressCompany: "", |
| | | expressNumber: "", |
| | | stockLocation: "", |
| | | }; |
| | | shippingFileList.value = []; |
| | | }; |
| | |
| | | return shippingNum > 0 && returnNum > 0 && shippingNum === returnNum; |
| | | }; |
| | | |
| | | // 计算本次发货金额(按发货数量占比分摊整单发货金额) |
| | | // 计算本次运费(按发货数量占比分摊整单运费) |
| | | |
| | | // 撤销发货 |
| | | const handleRevokeShipping = (record) => { |
| | |
| | | shippingAmount: Number(shippingForm.value.shippingAmount) || 0, |
| | | type: shippingForm.value.type, |
| | | shippingDate: shippingForm.value.shippingDate, |
| | | stockLocation: shippingForm.value.stockLocation, |
| | | shippingCarNumber: shippingForm.value.type === "货车" ? shippingForm.value.shippingCarNumber : "", |
| | | expressCompany: shippingForm.value.type === "快递" ? shippingForm.value.expressCompany : "", |
| | | expressNumber: shippingForm.value.type === "快递" ? shippingForm.value.expressNumber : "", |