|
@@ -0,0 +1,2060 @@
|
|
|
+<template>
|
|
|
+ <div class="tenant">
|
|
|
+ <div class="content">
|
|
|
+ <byTable
|
|
|
+ :source="sourceList.data"
|
|
|
+ :pagination="sourceList.pagination"
|
|
|
+ :config="config"
|
|
|
+ :loading="loading"
|
|
|
+ highlight-current-row
|
|
|
+ :selectConfig="selectConfig"
|
|
|
+ :table-events="{
|
|
|
+ //element talbe事件都能传
|
|
|
+ }"
|
|
|
+ :action-list="[]"
|
|
|
+ @get-list="getList"
|
|
|
+ @moreSearch="() => (dialogVisibleThree = true)"
|
|
|
+ >
|
|
|
+ <template #contractCode="{ item }">
|
|
|
+ <div
|
|
|
+ style="cursor: pointer; color: #409eff"
|
|
|
+ @click="handleClickContractCode(item)"
|
|
|
+ >
|
|
|
+ {{ item.contractCode }}
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template #arrivalStatus="{ item }">
|
|
|
+ <span
|
|
|
+ style="cursor: pointer; color: #409eff"
|
|
|
+ @click="handleClickArrivalStatus(item)"
|
|
|
+ >
|
|
|
+ {{ dictValueLabel(item.arrivalStatus, arrivalStatus) }}
|
|
|
+ </span>
|
|
|
+ <span v-if="item.isTransit == 1">(有在途)</span>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template #btn="{ item }">
|
|
|
+ <div>
|
|
|
+ <el-button type="primary" link @click="handleUpdateData(item)"
|
|
|
+ >修改</el-button
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </byTable>
|
|
|
+ </div>
|
|
|
+ <el-dialog
|
|
|
+ :title="modalType === 'add' ? '发货登记' : '到货通知'"
|
|
|
+ v-model="dialogVisible"
|
|
|
+ width="80%"
|
|
|
+ destroy-on-close
|
|
|
+ >
|
|
|
+ <byForm
|
|
|
+ :formConfig="formConfig"
|
|
|
+ :formOption="formOption"
|
|
|
+ v-model="formData.data"
|
|
|
+ :rules="rules"
|
|
|
+ ref="byform"
|
|
|
+ v-loading="submitLoading"
|
|
|
+ >
|
|
|
+ <template #detailSlot>
|
|
|
+ <div style="width: 100%">
|
|
|
+ <el-table
|
|
|
+ :data="
|
|
|
+ modalType === 'add'
|
|
|
+ ? formData.data.deliverGoodsDetailsList
|
|
|
+ : formData.data.arrivalDetailList
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <el-table-column
|
|
|
+ prop="productDefinition"
|
|
|
+ label="物品类型"
|
|
|
+ :formatter="
|
|
|
+ (row) =>
|
|
|
+ row.productDefinition == 1
|
|
|
+ ? '产品'
|
|
|
+ : row.productDefinition == 2
|
|
|
+ ? '物料'
|
|
|
+ : ''
|
|
|
+ "
|
|
|
+ />
|
|
|
+
|
|
|
+ <el-table-column prop="productCode" label="物品编码" />
|
|
|
+ <el-table-column prop="productName" label="物品名称" />
|
|
|
+ <el-table-column prop="productSpec" label="规格型号" />
|
|
|
+ <el-table-column
|
|
|
+ prop="productUnit"
|
|
|
+ label="单位"
|
|
|
+ :formatter="
|
|
|
+ (row) => dictValueLabel(row.productUnit, productUnit)
|
|
|
+ "
|
|
|
+ />
|
|
|
+ <el-table-column prop="count" label="采购数量" />
|
|
|
+ <el-table-column
|
|
|
+ prop="alreadyDeliverGoodsQuantity"
|
|
|
+ label="累计发货"
|
|
|
+ v-if="modalType === 'add'"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ prop="deliverGoodsQuantity"
|
|
|
+ label="本次发货"
|
|
|
+ min-width="150"
|
|
|
+ v-if="modalType === 'add'"
|
|
|
+ >
|
|
|
+ <template #default="{ row, $index }">
|
|
|
+ <el-form-item
|
|
|
+ :prop="
|
|
|
+ 'deliverGoodsDetailsList.' +
|
|
|
+ $index +
|
|
|
+ '.deliverGoodsQuantity'
|
|
|
+ "
|
|
|
+ :rules="rules.deliverGoodsQuantity"
|
|
|
+ :inline-message="true"
|
|
|
+ >
|
|
|
+ <el-input-number
|
|
|
+ v-model="row.deliverGoodsQuantity"
|
|
|
+ :precision="2"
|
|
|
+ :controls="false"
|
|
|
+ :min="0"
|
|
|
+ onmousewheel="return false;"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="transitQuantity"
|
|
|
+ label="剩余在途"
|
|
|
+ v-if="modalType === 'edit'"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ prop="deliverGoodsQuantity"
|
|
|
+ label="本次到货"
|
|
|
+ min-width="150"
|
|
|
+ v-if="modalType === 'edit'"
|
|
|
+ >
|
|
|
+ <template #default="{ row, $index }">
|
|
|
+ <el-form-item
|
|
|
+ :prop="
|
|
|
+ 'arrivalDetailList.' + $index + '.deliverGoodsQuantity'
|
|
|
+ "
|
|
|
+ :rules="rules.deliverGoodsQuantity"
|
|
|
+ :inline-message="true"
|
|
|
+ >
|
|
|
+ <el-input-number
|
|
|
+ v-model="row.deliverGoodsQuantity"
|
|
|
+ :precision="2"
|
|
|
+ :controls="false"
|
|
|
+ :min="0"
|
|
|
+ onmousewheel="return false;"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </byForm>
|
|
|
+
|
|
|
+ <template #footer>
|
|
|
+ <el-button @click="dialogVisible = false" size="large">取 消</el-button>
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ @click="submitForm()"
|
|
|
+ size="large"
|
|
|
+ :loading="submitLoading"
|
|
|
+ >
|
|
|
+ 确 定
|
|
|
+ </el-button>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
+ <el-dialog
|
|
|
+ :title="'到货详情'"
|
|
|
+ v-model="dialogVisibleOne"
|
|
|
+ width="80%"
|
|
|
+ destroy-on-close
|
|
|
+ >
|
|
|
+ <byForm
|
|
|
+ :formConfig="formConfigOne"
|
|
|
+ :formOption="formOption"
|
|
|
+ v-model="formData.dataOne"
|
|
|
+ :rules="rules"
|
|
|
+ ref="byformOne"
|
|
|
+ >
|
|
|
+ <template #detailSlot>
|
|
|
+ <div style="width: 100%">
|
|
|
+ <el-table :data="formData.dataOne.purchaseDetailVoList">
|
|
|
+ <el-table-column prop="productCustomCode" label="物品编码" />
|
|
|
+ <el-table-column prop="productName" label="物品名称" />
|
|
|
+ <el-table-column prop="count" label="采购数量" />
|
|
|
+ <el-table-column prop="deliverGoodsQuantity" label="已发货">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <div>
|
|
|
+ <el-popover
|
|
|
+ placement="bottom-start"
|
|
|
+ title="发货详情"
|
|
|
+ :width="500"
|
|
|
+ trigger="hover"
|
|
|
+ >
|
|
|
+ <div default>
|
|
|
+ <el-table :data="row.deliverGoodsDetailList">
|
|
|
+ <el-table-column
|
|
|
+ label="发货时间"
|
|
|
+ prop="createTime"
|
|
|
+ width="155"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ label="物流单号"
|
|
|
+ prop="logisticsCode"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ label="数量"
|
|
|
+ prop="deliverGoodsQuantity"
|
|
|
+ width="100"
|
|
|
+ />
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ <template #reference>
|
|
|
+ <div style="cursor: pointer; color: #0084ff">
|
|
|
+ {{ row.deliverGoodsQuantity }}
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-popover>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <!-- <el-table-column prop="arrivalQuantity" label="已到货">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <div>
|
|
|
+ <el-popover
|
|
|
+ placement="bottom-start"
|
|
|
+ title="到货详情"
|
|
|
+ :width="500"
|
|
|
+ trigger="hover"
|
|
|
+ >
|
|
|
+ <div default>
|
|
|
+ <el-table :data="row.arrivalDetailList">
|
|
|
+ <el-table-column
|
|
|
+ label="到货时间"
|
|
|
+ prop="createTime"
|
|
|
+ width="155"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ label="物流单号"
|
|
|
+ prop="logisticsCode"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ label="数量"
|
|
|
+ prop="count"
|
|
|
+ width="100"
|
|
|
+ />
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ <template #reference>
|
|
|
+ <div style="cursor: pointer; color: #0084ff">
|
|
|
+ {{ row.arrivalQuantity }}
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-popover>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column> -->
|
|
|
+ <el-table-column prop="receiptQuantity" label="已入库">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <div>
|
|
|
+ <el-popover
|
|
|
+ placement="bottom-start"
|
|
|
+ title="入库详情"
|
|
|
+ :width="500"
|
|
|
+ trigger="hover"
|
|
|
+ >
|
|
|
+ <div default>
|
|
|
+ <el-table :data="row.receiptList">
|
|
|
+ <el-table-column
|
|
|
+ label="入库时间"
|
|
|
+ prop="createTime"
|
|
|
+ width="155"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ label="入库单号"
|
|
|
+ prop="logisticsCode"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ label="数量"
|
|
|
+ prop="quantity"
|
|
|
+ width="100"
|
|
|
+ />
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ <template #reference>
|
|
|
+ <div style="cursor: pointer; color: #0084ff">
|
|
|
+ {{ row.receiptQuantity }}
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-popover>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+
|
|
|
+ <el-table-column prop="purchaseBackQuantity" label="退货">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <div>
|
|
|
+ <el-popover
|
|
|
+ placement="bottom-start"
|
|
|
+ title="退货详情"
|
|
|
+ :width="500"
|
|
|
+ trigger="hover"
|
|
|
+ >
|
|
|
+ <div default>
|
|
|
+ <el-table :data="row.purchaseBackDetailsList">
|
|
|
+ <el-table-column
|
|
|
+ label="申请时间"
|
|
|
+ prop="createTime"
|
|
|
+ width="155"
|
|
|
+ />
|
|
|
+ <el-table-column label="申请数量" prop="quantity" />
|
|
|
+ <el-table-column
|
|
|
+ label="已退数量"
|
|
|
+ prop="returnedQuantity"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ label="操作"
|
|
|
+ width="90"
|
|
|
+ align="center"
|
|
|
+ >
|
|
|
+ <template #default="{ row, $index }">
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ text
|
|
|
+ @click="handleClickStatus(row)"
|
|
|
+ >查看关联</el-button
|
|
|
+ >
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ <template #reference>
|
|
|
+ <div style="cursor: pointer; color: #0084ff">
|
|
|
+ {{ row.purchaseBackQuantity }}
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-popover>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="qualityQuantity" label="已质检数量" />
|
|
|
+ <el-table-column prop="noQualifiedCount" label="不合格数量" />
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </byForm>
|
|
|
+ <template #footer>
|
|
|
+ <el-button @click="dialogVisibleOne = false" size="large"
|
|
|
+ >取 消</el-button
|
|
|
+ >
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
+ <el-dialog
|
|
|
+ :title="'采购退货'"
|
|
|
+ v-model="dialogVisibleTwo"
|
|
|
+ width="60%"
|
|
|
+ destroy-on-close
|
|
|
+ >
|
|
|
+ <byForm
|
|
|
+ :formConfig="formConfigTwo"
|
|
|
+ :formOption="formOption"
|
|
|
+ v-model="formData.dataTwo"
|
|
|
+ :rules="rulesTwo"
|
|
|
+ ref="byformTwo"
|
|
|
+ v-loading="loadingTwo"
|
|
|
+ >
|
|
|
+ <template #detailSlot>
|
|
|
+ <div style="width: 100%">
|
|
|
+ <el-table :data="formData.dataTwo.purchaseBackDetailsList">
|
|
|
+ <el-table-column
|
|
|
+ prop="subscribeCode"
|
|
|
+ label="申购单号"
|
|
|
+ width="110"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ prop="planArrivalTime"
|
|
|
+ label="要求到货时间"
|
|
|
+ width="160"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ prop="productCustomCode"
|
|
|
+ label="物品编码"
|
|
|
+ width="110"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ prop="productName"
|
|
|
+ label="物品名称"
|
|
|
+ width="160"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ prop="productUnit"
|
|
|
+ label="物品单位"
|
|
|
+ width="80"
|
|
|
+ :formatter="
|
|
|
+ (row) => dictValueLabel(row.productUnit, productUnit)
|
|
|
+ "
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ prop="price"
|
|
|
+ label="单价"
|
|
|
+ width="60"
|
|
|
+ :formatter="
|
|
|
+ (row) => dictValueLabel(row.productUnit, productUnit)
|
|
|
+ "
|
|
|
+ />
|
|
|
+ <el-table-column prop="count" label="采购数量" width="100" />
|
|
|
+ <el-table-column
|
|
|
+ prop="defectiveQuantity"
|
|
|
+ label="次品数量"
|
|
|
+ width="100"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ prop="quantity"
|
|
|
+ label="退货数量"
|
|
|
+ min-width="150"
|
|
|
+ fixed="right"
|
|
|
+ >
|
|
|
+ <template #default="{ row, $index }">
|
|
|
+ <el-form-item
|
|
|
+ :prop="'purchaseBackDetailsList.' + $index + '.quantity'"
|
|
|
+ :rules="rulesTwo.quantity"
|
|
|
+ :inline-message="true"
|
|
|
+ >
|
|
|
+ <el-input-number
|
|
|
+ v-model="row.quantity"
|
|
|
+ :precision="0"
|
|
|
+ :controls="false"
|
|
|
+ :min="0"
|
|
|
+ onmousewheel="return false;"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template #countryId>
|
|
|
+ <div>
|
|
|
+ <el-select
|
|
|
+ v-model="formData.dataTwo.countryId"
|
|
|
+ placeholder="国家"
|
|
|
+ @change="(val) => getCityData(val, '20', true)"
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in countryData"
|
|
|
+ :label="item.chineseName"
|
|
|
+ :value="item.id"
|
|
|
+ >
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template #provinceId>
|
|
|
+ <div style="width: 100%">
|
|
|
+ <selectCity
|
|
|
+ placeholder="省/洲"
|
|
|
+ @change="(val) => getCityData(val, '30', true)"
|
|
|
+ addressId="provinceId"
|
|
|
+ addressName="provinceName"
|
|
|
+ v-model="formData.dataTwo"
|
|
|
+ :data="provinceData"
|
|
|
+ >
|
|
|
+ </selectCity>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template #cityId>
|
|
|
+ <div style="width: 100%">
|
|
|
+ <selectCity
|
|
|
+ placeholder="城市"
|
|
|
+ addressId="cityId"
|
|
|
+ addressName="cityName"
|
|
|
+ v-model="formData.dataTwo"
|
|
|
+ :data="cityData"
|
|
|
+ >
|
|
|
+ </selectCity>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </byForm>
|
|
|
+ <template #footer>
|
|
|
+ <el-button @click="dialogVisibleTwo = false" size="large"
|
|
|
+ >取 消</el-button
|
|
|
+ >
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ @click="submitFormTwo()"
|
|
|
+ size="large"
|
|
|
+ :loading="loadingTwo"
|
|
|
+ >
|
|
|
+ 确 定
|
|
|
+ </el-button>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
+ <el-dialog
|
|
|
+ :title="'高级检索'"
|
|
|
+ v-model="dialogVisibleThree"
|
|
|
+ width="500px"
|
|
|
+ destroy-on-close
|
|
|
+ >
|
|
|
+ <el-form
|
|
|
+ :model="sourceList.pagination"
|
|
|
+ label-width="100px"
|
|
|
+ label-position="top"
|
|
|
+ >
|
|
|
+ <el-form-item label="采购单号">
|
|
|
+ <el-input
|
|
|
+ v-model="sourceList.pagination.contractCode"
|
|
|
+ placeholder="请输入"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="供应商">
|
|
|
+ <el-select
|
|
|
+ v-model="sourceList.pagination.supplyId"
|
|
|
+ placeholder="请选择"
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in supplierData"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id"
|
|
|
+ >
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="收货仓库">
|
|
|
+ <el-select
|
|
|
+ v-model="sourceList.pagination.receiptWarehouseId"
|
|
|
+ placeholder="请选择"
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in warehouseList"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value"
|
|
|
+ >
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="采购金额">
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-input-number
|
|
|
+ v-model="sourceList.pagination.startAmount"
|
|
|
+ placeholder="请输入"
|
|
|
+ :controls="false"
|
|
|
+ :min="1"
|
|
|
+ :precision="2"
|
|
|
+ style="width: 100%"
|
|
|
+ onmousewheel="return false;"
|
|
|
+ />
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="2" style="text-align: center"> 到 </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-input-number
|
|
|
+ v-model="sourceList.pagination.endAmount"
|
|
|
+ placeholder="请输入"
|
|
|
+ :controls="false"
|
|
|
+ :min="1"
|
|
|
+ :precision="2"
|
|
|
+ style="width: 100%"
|
|
|
+ onmousewheel="return false;"
|
|
|
+ />
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="采购人">
|
|
|
+ <el-select
|
|
|
+ v-model="sourceList.pagination.purchaseUserId"
|
|
|
+ placeholder="请选择"
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in userList"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value"
|
|
|
+ >
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="采购时间">
|
|
|
+ <!-- <el-date-picker
|
|
|
+ v-model="sourceList.pagination.arr"
|
|
|
+ type="datetimerange"
|
|
|
+ range-separator="到"
|
|
|
+ start-placeholder="请选择"
|
|
|
+ end-placeholder="请选择"
|
|
|
+ /> -->
|
|
|
+ <el-date-picker
|
|
|
+ v-model="sourceList.pagination.arr"
|
|
|
+ type="daterange"
|
|
|
+ range-separator="到"
|
|
|
+ start-placeholder="请选择"
|
|
|
+ end-placeholder="请选择"
|
|
|
+ value-format="YYYY-MM-DD HH:mm:ss"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="7">
|
|
|
+ <el-form-item label="采购状态">
|
|
|
+ <el-select
|
|
|
+ v-model="sourceList.pagination.purchaseStatus"
|
|
|
+ placeholder="请选择"
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in statusData"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value"
|
|
|
+ >
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="1"></el-col>
|
|
|
+ <el-col :span="7">
|
|
|
+ <el-form-item label="到货状态">
|
|
|
+ <el-select
|
|
|
+ v-model="sourceList.pagination.arrivalStatus"
|
|
|
+ placeholder="请选择"
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in arrivalStatus"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value"
|
|
|
+ >
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="1"></el-col>
|
|
|
+ <el-col :span="7">
|
|
|
+ <el-form-item label="付款状态">
|
|
|
+ <el-select
|
|
|
+ v-model="sourceList.pagination.payStatus"
|
|
|
+ placeholder="请选择"
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in paymentStatus"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value"
|
|
|
+ >
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form>
|
|
|
+ <template #footer>
|
|
|
+ <el-button @click="handleReset" size="large">重置</el-button>
|
|
|
+ <el-button @click="handleQuery" type="primary" size="large"
|
|
|
+ >搜索</el-button
|
|
|
+ >
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
+ <el-dialog
|
|
|
+ :title="'查看'"
|
|
|
+ v-model="recordDialog"
|
|
|
+ width="900"
|
|
|
+ destroy-on-close
|
|
|
+ >
|
|
|
+ <byForm
|
|
|
+ :formConfig="recordFormConfig"
|
|
|
+ :formOption="recordFormOption"
|
|
|
+ v-model="recordFormData.data"
|
|
|
+ >
|
|
|
+ <template #products>
|
|
|
+ <div style="width: 100%">
|
|
|
+ <el-table :data="recordFormData.data.list">
|
|
|
+ <el-table-column
|
|
|
+ prop="logisticsCompanyName"
|
|
|
+ label="物流/快递公司"
|
|
|
+ />
|
|
|
+ <el-table-column prop="code" label="物流/快递单号" />
|
|
|
+ <el-table-column
|
|
|
+ prop="logisticsStatus"
|
|
|
+ label="物流状态"
|
|
|
+ width="100"
|
|
|
+ :formatter="(row) => handleShowKdStatus(row.logisticsStatus)"
|
|
|
+ />
|
|
|
+ <el-table-column prop="createTime" label="创建时间" width="155" />
|
|
|
+ <el-table-column label="操作" width="90" align="center">
|
|
|
+ <template #default="{ row, $index }">
|
|
|
+ <el-button type="primary" text @click="pushKdRoute(row)"
|
|
|
+ >查看</el-button
|
|
|
+ >
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </byForm>
|
|
|
+ <template #footer>
|
|
|
+ <el-button @click="recordDialog = false" size="large">取 消</el-button>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
+ <!-- <el-drawer v-model="dialogVisibleThree" direction="rtl">
|
|
|
+ <template #header>
|
|
|
+ <h4>高级检索</h4>
|
|
|
+ </template>
|
|
|
+ <template #default>
|
|
|
+ <byForm
|
|
|
+ :formConfig="formConfig"
|
|
|
+ :formOption="ListOption"
|
|
|
+ v-model="sourceList.pagination"
|
|
|
+ >
|
|
|
+ <template #slot> 可自定义所需功能 </template>
|
|
|
+ </byForm>
|
|
|
+ </template>
|
|
|
+ <template #footer>
|
|
|
+ <div style="flex: auto">
|
|
|
+ <el-button @click="handleReset" size="large">重置</el-button>
|
|
|
+ <el-button @click="handleQuery" type="primary" size="large"
|
|
|
+ >搜索</el-button
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-drawer> -->
|
|
|
+ <el-dialog
|
|
|
+ :title="'修改合同'"
|
|
|
+ v-model="purchaseDialog"
|
|
|
+ width="1200"
|
|
|
+ destroy-on-close
|
|
|
+ >
|
|
|
+ <byForm
|
|
|
+ :formConfig="purchaseFormConfig"
|
|
|
+ :formOption="formOption"
|
|
|
+ v-model="formData.purchaseData"
|
|
|
+ :rules="purchaseFormRules"
|
|
|
+ ref="purchaseDom"
|
|
|
+ >
|
|
|
+ <template #details>
|
|
|
+ <div style="width: 100%">
|
|
|
+ <el-table :data="formData.purchaseData.purchaseDetailList">
|
|
|
+ <el-table-column
|
|
|
+ prop="productDefinition"
|
|
|
+ label="物品类型"
|
|
|
+ :formatter="
|
|
|
+ (row) =>
|
|
|
+ row.productDefinition == 1
|
|
|
+ ? '产品'
|
|
|
+ : row.productDefinition == 2
|
|
|
+ ? '物料'
|
|
|
+ : ''
|
|
|
+ "
|
|
|
+ width="100"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ prop="productCustomCode"
|
|
|
+ label="物品编码"
|
|
|
+ min-width="150"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ prop="productName"
|
|
|
+ label="物品名称"
|
|
|
+ min-width="160"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ prop="productUnit"
|
|
|
+ label="单位"
|
|
|
+ :formatter="
|
|
|
+ (row) => dictValueLabel(row.productUnit, productUnit)
|
|
|
+ "
|
|
|
+ width="80"
|
|
|
+ />
|
|
|
+ <el-table-column prop="count" label="采购数量" width="100" />
|
|
|
+ <el-table-column prop="price" label="单价" min-width="150">
|
|
|
+ <template #default="{ row, $index }">
|
|
|
+ <el-form-item
|
|
|
+ :prop="'purchaseDetailList.' + $index + '.price'"
|
|
|
+ :rules="purchaseFormRules.price"
|
|
|
+ :inline-message="true"
|
|
|
+ >
|
|
|
+ <el-input-number
|
|
|
+ :model-value="
|
|
|
+ formData.purchaseData.purchaseDetailList[$index].price
|
|
|
+ "
|
|
|
+ :precision="4"
|
|
|
+ :controls="false"
|
|
|
+ :min="0"
|
|
|
+ onmousewheel="return false;"
|
|
|
+ @change="(val) => handleChangeMoney(val, $index, 'price')"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="amount" label="金额" width="120" />
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <template #otherDetails>
|
|
|
+ <div style="width: 100%">
|
|
|
+ <el-table :data="formData.purchaseData.otherFeeList">
|
|
|
+ <el-table-column prop="name" label="费用名称" min-width="150">
|
|
|
+ <template #default="{ row, $index }">
|
|
|
+ <el-form-item
|
|
|
+ :prop="'otherFeeList.' + $index + '.name'"
|
|
|
+ :rules="purchaseFormRules.name"
|
|
|
+ :inline-message="true"
|
|
|
+ >
|
|
|
+ <el-input v-model="row.name" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="price" label="金额" min-width="150">
|
|
|
+ <template #default="{ row, $index }">
|
|
|
+ <el-form-item
|
|
|
+ :prop="'otherFeeList.' + $index + '.price'"
|
|
|
+ :rules="purchaseFormRules.price"
|
|
|
+ :inline-message="true"
|
|
|
+ >
|
|
|
+ <el-input-number
|
|
|
+ v-model="row.price"
|
|
|
+ :precision="4"
|
|
|
+ :controls="false"
|
|
|
+ onmousewheel="return false;"
|
|
|
+ @change="handleChangeAmount"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+
|
|
|
+ <el-table-column prop="remark" label="备注" min-width="150">
|
|
|
+ <template #default="{ row, $index }">
|
|
|
+ <el-form-item
|
|
|
+ :prop="'otherFeeList.' + $index + '.remark'"
|
|
|
+ :inline-message="true"
|
|
|
+ >
|
|
|
+ <el-input v-model="row.remark" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <template #fileSlot>
|
|
|
+ <div style="width: 100%">
|
|
|
+ <el-upload
|
|
|
+ v-model:fileList="fileList"
|
|
|
+ action="https://winfaster.obs.cn-south-1.myhuaweicloud.com"
|
|
|
+ :data="uploadData"
|
|
|
+ multiple
|
|
|
+ :before-upload="handleBeforeUpload"
|
|
|
+ :on-success="handleSuccess"
|
|
|
+ :on-preview="onPreviewFile"
|
|
|
+ >
|
|
|
+ <el-button disabled>选择</el-button>
|
|
|
+ </el-upload>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </byForm>
|
|
|
+ <template #footer>
|
|
|
+ <el-button @click="purchaseDialog = false" size="large"
|
|
|
+ >取 消</el-button
|
|
|
+ >
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ @click="submitUpdate()"
|
|
|
+ size="large"
|
|
|
+ :loading="loadingTwo"
|
|
|
+ >
|
|
|
+ 确 定
|
|
|
+ </el-button>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup>
|
|
|
+import { ElMessage, ElMessageBox } from "element-plus";
|
|
|
+import byTable from "@/components/byTable/index";
|
|
|
+import byForm from "@/components/byForm/index";
|
|
|
+import { computed } from "vue";
|
|
|
+import selectCity from "@/components/selectCity/index.vue";
|
|
|
+import useUserStore from "@/store/modules/user";
|
|
|
+
|
|
|
+const loading = ref(false);
|
|
|
+const loadingTwo = ref(false);
|
|
|
+const submitLoading = ref(false);
|
|
|
+const sourceList = ref({
|
|
|
+ data: [],
|
|
|
+ pagination: {
|
|
|
+ total: 3,
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 10,
|
|
|
+ arr: [],
|
|
|
+ },
|
|
|
+});
|
|
|
+const dialogVisible = ref(false);
|
|
|
+const dialogVisibleOne = ref(false);
|
|
|
+const dialogVisibleTwo = ref(false);
|
|
|
+const dialogVisibleThree = ref(false);
|
|
|
+const modalType = ref("add");
|
|
|
+let rules = ref({
|
|
|
+ deliverGoodsId: [
|
|
|
+ { required: true, message: "请选择快递单号", trigger: "change" },
|
|
|
+ ],
|
|
|
+ logisticsCompanyCode: [
|
|
|
+ { required: true, message: "请选择物流公司", trigger: "change" },
|
|
|
+ ],
|
|
|
+ code: [{ required: true, message: "请输入物流/快递单号", trigger: "blur" }],
|
|
|
+ deliverGoodsQuantity: [
|
|
|
+ { required: true, message: "请输入本次发货", trigger: "blur" },
|
|
|
+ ],
|
|
|
+ aa: [{ required: true, message: "请输入退货数量", trigger: "blur" }],
|
|
|
+});
|
|
|
+
|
|
|
+let rulesTwo = ref({
|
|
|
+ contacts: [{ required: true, message: "请输入收件人", trigger: "blur" }],
|
|
|
+ phone: [{ required: true, message: "请输入联系电话", trigger: "blur" }],
|
|
|
+ countryId: [{ required: true, message: "请选择国家", trigger: "change" }],
|
|
|
+ quantity: [{ required: true, message: "请输入退货数量", trigger: "blur" }],
|
|
|
+ detailedAddress: [
|
|
|
+ { required: true, message: "请输入详细地址", trigger: "blur" },
|
|
|
+ ],
|
|
|
+});
|
|
|
+
|
|
|
+const { proxy } = getCurrentInstance();
|
|
|
+const arrivalStatus = [
|
|
|
+ {
|
|
|
+ label: "未到货",
|
|
|
+ value: "0",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "部分到货",
|
|
|
+ value: "10",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "已到货",
|
|
|
+ value: "20",
|
|
|
+ },
|
|
|
+];
|
|
|
+const statusData = ref([
|
|
|
+ {
|
|
|
+ label: "审批中",
|
|
|
+ value: "10",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "驳回",
|
|
|
+ value: "20",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "已采购",
|
|
|
+ value: "30",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "结束",
|
|
|
+ value: "99",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "已作废",
|
|
|
+ value: "88",
|
|
|
+ },
|
|
|
+]);
|
|
|
+const paymentStatus = ref([
|
|
|
+ {
|
|
|
+ label: "未付款",
|
|
|
+ value: "0",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "部分付款",
|
|
|
+ value: "10",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "已付款",
|
|
|
+ value: "20",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "付款结束",
|
|
|
+ value: "30",
|
|
|
+ },
|
|
|
+]);
|
|
|
+const inRransitData = ref([
|
|
|
+ {
|
|
|
+ label: "有在途",
|
|
|
+ value: "1",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "无在途",
|
|
|
+ value: "0",
|
|
|
+ },
|
|
|
+]);
|
|
|
+const deptData = ref([]);
|
|
|
+
|
|
|
+const selectConfig = computed(() => [
|
|
|
+ {
|
|
|
+ label: "采购状态",
|
|
|
+ prop: "purchaseStatus",
|
|
|
+ data: statusData.value,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "到货状态",
|
|
|
+ prop: "arrivalStatus",
|
|
|
+ data: arrivalStatus,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "付款状态",
|
|
|
+ prop: "payStatus",
|
|
|
+ data: paymentStatus.value,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "有无在途",
|
|
|
+ prop: "isTransit",
|
|
|
+ data: inRransitData.value,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "项目组",
|
|
|
+ prop: "deptId",
|
|
|
+ data: deptData.value,
|
|
|
+ },
|
|
|
+]);
|
|
|
+
|
|
|
+const config = computed(() => {
|
|
|
+ return [
|
|
|
+ {
|
|
|
+ attrs: {
|
|
|
+ label: "采购单号",
|
|
|
+ prop: "contractCode",
|
|
|
+ slot: "contractCode",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ attrs: {
|
|
|
+ label: "供应商",
|
|
|
+ prop: "supplyName",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ attrs: {
|
|
|
+ label: "收货仓库",
|
|
|
+ prop: "receiptWarehouseName",
|
|
|
+ width: 140,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ attrs: {
|
|
|
+ label: "采购金额",
|
|
|
+ prop: "amount",
|
|
|
+ width: 120,
|
|
|
+ },
|
|
|
+ render(amount) {
|
|
|
+ return proxy.moneyFormat(amount, 2);
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ attrs: {
|
|
|
+ label: "采购人",
|
|
|
+ prop: "purchaseName",
|
|
|
+ width: 130,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ attrs: {
|
|
|
+ label: "项目组",
|
|
|
+ prop: "deptName",
|
|
|
+ width: 150,
|
|
|
+ },
|
|
|
+ },
|
|
|
+
|
|
|
+ {
|
|
|
+ attrs: {
|
|
|
+ label: "采购时间",
|
|
|
+ prop: "createTime",
|
|
|
+ width: 160,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ attrs: {
|
|
|
+ label: "采购状态",
|
|
|
+ prop: "purchaseStatus",
|
|
|
+ width: 100,
|
|
|
+ },
|
|
|
+ render(status) {
|
|
|
+ const current = statusData.value.find((x) => x.value == status);
|
|
|
+ if (current) return current.label;
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ attrs: {
|
|
|
+ label: "到货状态",
|
|
|
+ prop: "arrivalStatus",
|
|
|
+ slot: "arrivalStatus",
|
|
|
+ width: 100,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ attrs: {
|
|
|
+ label: "付款状态",
|
|
|
+ prop: "payStatus",
|
|
|
+ width: 100,
|
|
|
+ },
|
|
|
+ render(status) {
|
|
|
+ return proxy.dictValueLabel(status, paymentStatus.value);
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ attrs: {
|
|
|
+ label: "操作",
|
|
|
+ slot: "btn",
|
|
|
+ width: "80",
|
|
|
+ align: "center",
|
|
|
+ fixed: "right",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ];
|
|
|
+});
|
|
|
+
|
|
|
+let formData = reactive({
|
|
|
+ data: {},
|
|
|
+ dataOne: {},
|
|
|
+ dataTwo: {},
|
|
|
+ purchaseData: {},
|
|
|
+});
|
|
|
+const formOption = reactive({
|
|
|
+ inline: true,
|
|
|
+ labelWidth: 100,
|
|
|
+ itemWidth: 100,
|
|
|
+});
|
|
|
+const byform = ref(null);
|
|
|
+const byformTwo = ref(null);
|
|
|
+let formConfig = reactive([]);
|
|
|
+let formConfigOne = computed(() => [
|
|
|
+ {
|
|
|
+ type: "title",
|
|
|
+ title: "基础信息",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "input",
|
|
|
+ prop: "supplyName",
|
|
|
+ label: "供应商",
|
|
|
+ disabled: true,
|
|
|
+ itemWidth: 50,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "input",
|
|
|
+ prop: "purchaseCode",
|
|
|
+ label: "采购单号",
|
|
|
+ disabled: true,
|
|
|
+ itemWidth: 50,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "title",
|
|
|
+ title: "采购明细",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "slot",
|
|
|
+ slotName: "detailSlot",
|
|
|
+ label: "",
|
|
|
+ },
|
|
|
+]);
|
|
|
+
|
|
|
+let formConfigTwo = computed(() => [
|
|
|
+ {
|
|
|
+ type: "title",
|
|
|
+ title: "基础信息",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "input",
|
|
|
+ prop: "supplyName",
|
|
|
+ label: "供应商",
|
|
|
+ disabled: true,
|
|
|
+ itemWidth: 50,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "input",
|
|
|
+ prop: "purchaseCode",
|
|
|
+ label: "采购单号",
|
|
|
+ disabled: true,
|
|
|
+ itemWidth: 50,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "title",
|
|
|
+ title: "采购明细",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "slot",
|
|
|
+ slotName: "detailSlot",
|
|
|
+ label: "",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "title",
|
|
|
+ title: "收货信息",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "input",
|
|
|
+ prop: "contacts",
|
|
|
+ label: "收件人",
|
|
|
+ itemWidth: 20,
|
|
|
+ placeholder: "收件人",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "input",
|
|
|
+ prop: "phone",
|
|
|
+ label: " ",
|
|
|
+ itemWidth: 80,
|
|
|
+ placeholder: "联系电话",
|
|
|
+ style: {
|
|
|
+ width: "30%",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "slot",
|
|
|
+ slotName: "countryId",
|
|
|
+ prop: "countryId",
|
|
|
+ label: "收件地址",
|
|
|
+ itemWidth: 33.33,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "slot",
|
|
|
+ slotName: "provinceId",
|
|
|
+ label: " ",
|
|
|
+ itemWidth: 33.33,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "slot",
|
|
|
+ slotName: "cityId",
|
|
|
+ prop: "cityId",
|
|
|
+ label: " ",
|
|
|
+ itemWidth: 33.33,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "input",
|
|
|
+ itemType: "textarea",
|
|
|
+ prop: "detailedAddress",
|
|
|
+ },
|
|
|
+]);
|
|
|
+const logisticsData = ref([]);
|
|
|
+const getLogisticsData = (row) => {
|
|
|
+ proxy.post("/companyInfo/list", { pageNum: 1, pageSize: 999 }).then((res) => {
|
|
|
+ logisticsData.value = res.reverse();
|
|
|
+ logisticsData.value = logisticsData.value.map((x) => ({
|
|
|
+ label: x.name,
|
|
|
+ value: x.code,
|
|
|
+ }));
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+const configData = computed(() => [
|
|
|
+ [
|
|
|
+ {
|
|
|
+ type: "title",
|
|
|
+ title: "基础信息",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "input",
|
|
|
+ prop: "supplyName",
|
|
|
+ label: "供应商",
|
|
|
+ disabled: true,
|
|
|
+ itemWidth: 50,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "input",
|
|
|
+ prop: "purchaseCode",
|
|
|
+ label: "采购单号",
|
|
|
+ disabled: true,
|
|
|
+ itemWidth: 50,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "select",
|
|
|
+ label: "物流信息",
|
|
|
+ prop: "logisticsCompanyCode",
|
|
|
+ filterable: true,
|
|
|
+ data: logisticsData.value,
|
|
|
+ itemWidth: 50,
|
|
|
+ style: {
|
|
|
+ width: "100%",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "input",
|
|
|
+ label: " ",
|
|
|
+ prop: "code",
|
|
|
+ placeholder: "物流/快递单号",
|
|
|
+ itemWidth: 50,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "title",
|
|
|
+ title: "发货明细",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "slot",
|
|
|
+ slotName: "detailSlot",
|
|
|
+ label: "",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ {
|
|
|
+ type: "title",
|
|
|
+ title: "基础信息",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "input",
|
|
|
+ prop: "supplyName",
|
|
|
+ label: "供应商",
|
|
|
+ disabled: true,
|
|
|
+ itemWidth: 50,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "input",
|
|
|
+ prop: "purchaseCode",
|
|
|
+ label: "采购单号",
|
|
|
+ disabled: true,
|
|
|
+ itemWidth: 50,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "select",
|
|
|
+ label: "物流/快递单号",
|
|
|
+ prop: "deliverGoodsId",
|
|
|
+ itemWidth: 50,
|
|
|
+ style: {
|
|
|
+ width: "100%",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "title",
|
|
|
+ title: "发货明细",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "slot",
|
|
|
+ slotName: "detailSlot",
|
|
|
+ label: "",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+]);
|
|
|
+
|
|
|
+const deliverData = ref([]);
|
|
|
+const getList = async (req) => {
|
|
|
+ sourceList.value.pagination = { ...sourceList.value.pagination, ...req };
|
|
|
+ loading.value = true;
|
|
|
+ proxy
|
|
|
+ .post("/purchase/pageByWdly", sourceList.value.pagination)
|
|
|
+ .then((message) => {
|
|
|
+ sourceList.value.data = message.rows.map((x) => ({
|
|
|
+ ...x,
|
|
|
+ ...JSON.parse(x.victoriatouristJson),
|
|
|
+ }));
|
|
|
+ sourceList.value.pagination.total = message.total;
|
|
|
+ setTimeout(() => {
|
|
|
+ loading.value = false;
|
|
|
+ }, 200);
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+const submitForm = () => {
|
|
|
+ byform.value.handleSubmit((valid) => {
|
|
|
+ if (modalType.value === "add") {
|
|
|
+ const list = formData.data.deliverGoodsDetailsList;
|
|
|
+ const total = list.reduce(
|
|
|
+ (total, x) => (total += Number(x.deliverGoodsQuantity)),
|
|
|
+ 0
|
|
|
+ );
|
|
|
+ if (!(total > 0)) {
|
|
|
+ return ElMessage({
|
|
|
+ message: `本次发货不能为0!`,
|
|
|
+ type: "info",
|
|
|
+ });
|
|
|
+ }
|
|
|
+ // for (let i = 0; i < list.length; i++) {
|
|
|
+ // const e = list[i];
|
|
|
+ // if (
|
|
|
+ // Number(e.alreadyDeliverGoodsQuantity) +
|
|
|
+ // Number(e.deliverGoodsQuantity) >
|
|
|
+ // Number(e.count)
|
|
|
+ // ) {
|
|
|
+ // return ElMessage({
|
|
|
+ // message: `本次发货加累计发货不可大于采购数量!`,
|
|
|
+ // type: "info",
|
|
|
+ // });
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ submitLoading.value = true;
|
|
|
+ formData.data.deliverGoodsDetailsList = list.map((x) => ({
|
|
|
+ purchaseDetailId: x.purchaseDetailId,
|
|
|
+ deliverGoodsQuantity: x.deliverGoodsQuantity,
|
|
|
+ }));
|
|
|
+ proxy.post("/deliverGoods/add", formData.data).then((res) => {
|
|
|
+ ElMessage({
|
|
|
+ message: `操作成功!`,
|
|
|
+ type: "success",
|
|
|
+ });
|
|
|
+ dialogVisible.value = false;
|
|
|
+ submitLoading.value = false;
|
|
|
+ getList();
|
|
|
+ });
|
|
|
+ } else if (modalType.value === "edit") {
|
|
|
+ submitLoading.value = true;
|
|
|
+ formData.data.arrivalDetailList = formData.data.arrivalDetailList.map(
|
|
|
+ (x) => ({
|
|
|
+ bussinessId: x.bussinessId,
|
|
|
+ purchaseDetailId: x.purchaseDetailId,
|
|
|
+ deliverGoodsDetailsId: x.deliverGoodsDetailsId,
|
|
|
+ count: x.deliverGoodsQuantity,
|
|
|
+ })
|
|
|
+ );
|
|
|
+ const victoriatouristJson = {
|
|
|
+ deliverGoodsId: formData.data.deliverGoodsId,
|
|
|
+ logisticsCompanyCode: formData.data.logisticsCompanyCode,
|
|
|
+ code: formData.data.code,
|
|
|
+ };
|
|
|
+ formData.data.victoriatouristJson = JSON.stringify(victoriatouristJson);
|
|
|
+ proxy.post("/arrival/addByWdly", formData.data).then((res) => {
|
|
|
+ ElMessage({
|
|
|
+ message: `操作成功!`,
|
|
|
+ type: "success",
|
|
|
+ });
|
|
|
+ dialogVisible.value = false;
|
|
|
+ submitLoading.value = false;
|
|
|
+ getList();
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+const submitFormTwo = () => {
|
|
|
+ byformTwo.value.handleSubmit((valid) => {
|
|
|
+ loadingTwo.value = true;
|
|
|
+ let submitData = { ...formData.dataTwo };
|
|
|
+ submitData.purchaseBackDetailsList = submitData.purchaseBackDetailsList.map(
|
|
|
+ (x) => ({
|
|
|
+ purchaseDetailsId: x.id,
|
|
|
+ productId: x.bussinessId,
|
|
|
+ quantity: x.quantity,
|
|
|
+ })
|
|
|
+ );
|
|
|
+ proxy.post("/purchaseBack/add", submitData).then(
|
|
|
+ (res) => {
|
|
|
+ ElMessage({
|
|
|
+ message: `操作成功!`,
|
|
|
+ type: "success",
|
|
|
+ });
|
|
|
+ dialogVisibleTwo.value = false;
|
|
|
+ loadingTwo.value = false;
|
|
|
+ getList();
|
|
|
+ },
|
|
|
+ (err) => {
|
|
|
+ loadingTwo.value = false;
|
|
|
+ }
|
|
|
+ );
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+const getDtl = (row) => {
|
|
|
+ modalType.value = "edit";
|
|
|
+ proxy.post("/productionProcesses/detail", { id: row.id }).then((res) => {
|
|
|
+ formData.data = res;
|
|
|
+ dialogVisible.value = true;
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+const handleEdit = (row, status) => {
|
|
|
+ let purchaseStatusName = status == 88 ? "作废" : "结束";
|
|
|
+ const data = { ...row, purchaseStatus: status };
|
|
|
+ // 弹窗提示是否删除
|
|
|
+ ElMessageBox.confirm(
|
|
|
+ `此操作将${purchaseStatusName}该数据, 是否继续?`,
|
|
|
+ "提示",
|
|
|
+ {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
+ type: "warning",
|
|
|
+ }
|
|
|
+ ).then(() => {
|
|
|
+ // 删除
|
|
|
+ proxy.post("/purchase/edit", data).then((res) => {
|
|
|
+ ElMessage({
|
|
|
+ message: `${purchaseStatusName}成功`,
|
|
|
+ type: "success",
|
|
|
+ });
|
|
|
+ getList();
|
|
|
+ });
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+const handleArrival = (row, type) => {
|
|
|
+ modalType.value = type;
|
|
|
+ if (type === "add") {
|
|
|
+ formConfig = configData.value[0];
|
|
|
+ proxy.post("/deliverGoodsDetails/detail", { id: row.id }).then((res) => {
|
|
|
+ formData.data = {
|
|
|
+ purchaseId: row.id,
|
|
|
+ supplyName: row.supplyName,
|
|
|
+ purchaseCode: row.contractCode,
|
|
|
+ supplyId: res.supplyId,
|
|
|
+ code: "",
|
|
|
+ logisticsCompanyCode: "",
|
|
|
+ deliverGoodsDetailsList: res.map((x) => ({
|
|
|
+ ...x,
|
|
|
+ purchaseDetailId: x.id,
|
|
|
+ alreadyDeliverGoodsQuantity: x.deliverGoodsQuantity,
|
|
|
+ deliverGoodsQuantity:
|
|
|
+ Number(x.count) - Number(x.deliverGoodsQuantity),
|
|
|
+ })),
|
|
|
+ };
|
|
|
+ dialogVisible.value = true;
|
|
|
+ });
|
|
|
+ } else if (type === "edit") {
|
|
|
+ formConfig = configData.value[1];
|
|
|
+ proxy.post("/deliverGoods/list", { id: row.id }).then((res) => {
|
|
|
+ deliverData.value = res;
|
|
|
+ formConfig[3].data = res.map((x) => ({
|
|
|
+ ...x,
|
|
|
+ label: x.code,
|
|
|
+ value: x.id,
|
|
|
+ }));
|
|
|
+ formData.data = {
|
|
|
+ purchaseId: row.id,
|
|
|
+ supplyName: row.supplyName,
|
|
|
+ purchaseCode: row.contractCode,
|
|
|
+ supplyId: row.supplyId,
|
|
|
+ code: "",
|
|
|
+ logisticsCompanyCode: "",
|
|
|
+ deliverGoodsId: "",
|
|
|
+ arrivalDetailList: [],
|
|
|
+ };
|
|
|
+ dialogVisible.value = true;
|
|
|
+ });
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+watch(
|
|
|
+ () => formData.data.deliverGoodsId,
|
|
|
+ (val) => {
|
|
|
+ if (val) {
|
|
|
+ const current = deliverData.value.find((x) => x.id === val);
|
|
|
+ formData.data.logisticsCompanyCode = current
|
|
|
+ ? current.logisticsCompanyCode
|
|
|
+ : "";
|
|
|
+ formData.data.code = current ? current.code : "";
|
|
|
+ proxy.post("/deliverGoods/detail", { id: val }).then((res) => {
|
|
|
+ formData.data.arrivalDetailList = res.map((x) => ({
|
|
|
+ count: x.count,
|
|
|
+ productName: x.name,
|
|
|
+ productSpec: x.spec,
|
|
|
+ productUnit: x.unit,
|
|
|
+ productType: x.type,
|
|
|
+ productCode: x.code,
|
|
|
+ bussinessId: x.productId,
|
|
|
+ purchaseDetailId: x.purchaseDetailId,
|
|
|
+ deliverGoodsDetailsId: x.id,
|
|
|
+ transitQuantity: x.transitQuantity,
|
|
|
+ deliverGoodsQuantity: x.deliverGoodsQuantity,
|
|
|
+ productDefinition: x.definition,
|
|
|
+ }));
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+);
|
|
|
+
|
|
|
+const handleClickContractCode = (row) => {
|
|
|
+ proxy.$router.replace({
|
|
|
+ path: "/platform_manage/process/processApproval",
|
|
|
+ query: {
|
|
|
+ flowKey: row.processInstanceId,
|
|
|
+ id: row.flowId,
|
|
|
+ businessId: row.id,
|
|
|
+ processType: 20,
|
|
|
+ random: proxy.random(),
|
|
|
+ },
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+const handleClickArrivalStatus = (row) => {
|
|
|
+ proxy
|
|
|
+ .post("/deliverGoods/arrivalDetail", { purchaseId: row.id })
|
|
|
+ .then((res) => {
|
|
|
+ formData.dataOne = {
|
|
|
+ supplyName: row.supplyName,
|
|
|
+ purchaseCode: row.contractCode,
|
|
|
+ purchaseDetailVoList: res.purchaseDetailVoList,
|
|
|
+ };
|
|
|
+ dialogVisibleOne.value = true;
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+const handleReturnGoods = (row) => {
|
|
|
+ proxy.post("/purchase/detail", { id: row.id }).then((res) => {
|
|
|
+ formData.dataTwo = {
|
|
|
+ purchaseId: row.id,
|
|
|
+ supplyName: row.supplyName,
|
|
|
+ purchaseCode: row.contractCode,
|
|
|
+ countryId: "44",
|
|
|
+ purchaseBackDetailsList: res.purchaseDetailList.map((x) => ({
|
|
|
+ ...x,
|
|
|
+ planArrivalTime: res.planArrivalTime,
|
|
|
+ subscribeCode: res.subscribeCode,
|
|
|
+ })),
|
|
|
+ };
|
|
|
+ getCityData(formData.dataTwo.countryId, "20");
|
|
|
+ dialogVisibleTwo.value = true;
|
|
|
+ });
|
|
|
+};
|
|
|
+const countryData = ref([]);
|
|
|
+const provinceData = ref([]);
|
|
|
+const cityData = ref([]);
|
|
|
+
|
|
|
+const getCityData = (id, type, flag) => {
|
|
|
+ proxy.post("/customizeArea/list", { parentId: id }).then((res) => {
|
|
|
+ if (type === "20") {
|
|
|
+ provinceData.value = res;
|
|
|
+ if (flag) {
|
|
|
+ formData.data.provinceId = "";
|
|
|
+ formData.data.provinceName = "";
|
|
|
+ formData.data.cityId = "";
|
|
|
+ formData.data.cityName = "";
|
|
|
+ }
|
|
|
+ } else if (type === "30") {
|
|
|
+ cityData.value = res;
|
|
|
+ if (flag) {
|
|
|
+ formData.data.cityId = "";
|
|
|
+ formData.data.cityName = "";
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ countryData.value = res;
|
|
|
+ }
|
|
|
+ });
|
|
|
+};
|
|
|
+const productUnit = ref([]);
|
|
|
+const fundsPaymentMethod = ref([]);
|
|
|
+const supplierData = ref([]);
|
|
|
+const warehouseList = ref([]);
|
|
|
+const userList = ref([]);
|
|
|
+const getDict = () => {
|
|
|
+ proxy.getDictOne(["unit", "funds_payment_method"]).then((res) => {
|
|
|
+ productUnit.value = res["unit"].map((x) => ({
|
|
|
+ label: x.dictValue,
|
|
|
+ value: x.dictKey,
|
|
|
+ }));
|
|
|
+ fundsPaymentMethod.value = res["funds_payment_method"].map((x) => ({
|
|
|
+ label: x.dictValue,
|
|
|
+ value: x.dictKey,
|
|
|
+ }));
|
|
|
+ });
|
|
|
+ proxy
|
|
|
+ .post("/supplierInfo/page", { pageNum: 1, pageSize: 9999 })
|
|
|
+ .then((res) => {
|
|
|
+ supplierData.value = res.rows;
|
|
|
+ });
|
|
|
+
|
|
|
+ proxy.get("/purchase/getDepts").then((res) => {
|
|
|
+ deptData.value = res.data.map((x) => ({
|
|
|
+ ...x,
|
|
|
+ label: x.deptName,
|
|
|
+ value: x.deptId,
|
|
|
+ }));
|
|
|
+ });
|
|
|
+
|
|
|
+ proxy.post("/warehouse/page", { pageNum: 1, pageSize: 999 }).then((res) => {
|
|
|
+ if (res.rows && res.rows.length > 0) {
|
|
|
+ warehouseList.value = res.rows.map((item) => {
|
|
|
+ return {
|
|
|
+ label: item.name,
|
|
|
+ value: item.id,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ proxy
|
|
|
+ .get("/tenantUser/list", {
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 10000,
|
|
|
+ tenantId: useUserStore().user.tenantId,
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ userList.value = res.rows.map((item) => {
|
|
|
+ return {
|
|
|
+ label: item.nickName,
|
|
|
+ value: item.userId,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ });
|
|
|
+};
|
|
|
+getCityData("0");
|
|
|
+getList();
|
|
|
+getLogisticsData();
|
|
|
+getDict();
|
|
|
+
|
|
|
+const handleQuery = () => {
|
|
|
+ if (
|
|
|
+ sourceList.value.pagination.arr &&
|
|
|
+ sourceList.value.pagination.arr.length > 1
|
|
|
+ ) {
|
|
|
+ sourceList.value.pagination.purchaseStartTime =
|
|
|
+ sourceList.value.pagination.arr[0];
|
|
|
+ sourceList.value.pagination.purchaseEndTime =
|
|
|
+ sourceList.value.pagination.arr[1];
|
|
|
+ }
|
|
|
+ dialogVisibleThree.value = false;
|
|
|
+ getList();
|
|
|
+};
|
|
|
+const handleReset = () => {
|
|
|
+ sourceList.value.pagination = {
|
|
|
+ pageNum: sourceList.value.pagination.pageNum,
|
|
|
+ pageSize: sourceList.value.pagination.pageSize,
|
|
|
+ arr: [],
|
|
|
+ };
|
|
|
+ handleQuery();
|
|
|
+};
|
|
|
+
|
|
|
+const kdStatusData = ref([
|
|
|
+ {
|
|
|
+ label: "在途",
|
|
|
+ value: "0",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "揽收",
|
|
|
+ value: "1",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "疑难",
|
|
|
+ value: "2",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "签收",
|
|
|
+ value: "3",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "退签",
|
|
|
+ value: "4",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "派件",
|
|
|
+ value: "5",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "退回",
|
|
|
+ value: "6",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "转投",
|
|
|
+ value: "7",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "清关",
|
|
|
+ value: "8",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "拒签",
|
|
|
+ value: "14",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "完成",
|
|
|
+ value: "15",
|
|
|
+ },
|
|
|
+]);
|
|
|
+const recordDialog = ref(false);
|
|
|
+const recordFormOption = reactive({
|
|
|
+ disabled: false,
|
|
|
+ inline: true,
|
|
|
+ labelWidth: 100,
|
|
|
+ itemWidth: 100,
|
|
|
+ rules: [],
|
|
|
+});
|
|
|
+const recordFormConfig = reactive([
|
|
|
+ {
|
|
|
+ type: "title",
|
|
|
+ title: "物流数据",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "slot",
|
|
|
+ slotName: "products",
|
|
|
+ },
|
|
|
+]);
|
|
|
+const recordFormData = reactive({
|
|
|
+ data: {
|
|
|
+ list: [],
|
|
|
+ },
|
|
|
+});
|
|
|
+const handleClickStatus = (row) => {
|
|
|
+ recordDialog.value = true;
|
|
|
+ proxy
|
|
|
+ .post("/purchaseBack/getLogisticsInfo", { id: row.purchaseBackId })
|
|
|
+ .then((res) => {
|
|
|
+ recordFormData.data.list = res;
|
|
|
+ });
|
|
|
+};
|
|
|
+const handleShowKdStatus = (status) => {
|
|
|
+ const current = kdStatusData.value.find((x) => x.value === status);
|
|
|
+ if (current && current.label) {
|
|
|
+ return current.label;
|
|
|
+ } else {
|
|
|
+ return "异常";
|
|
|
+ }
|
|
|
+};
|
|
|
+const pushKdRoute = (row) => {
|
|
|
+ proxy.$router.push({
|
|
|
+ name: "Logistics",
|
|
|
+ query: {
|
|
|
+ keyword: row.code,
|
|
|
+ },
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+const purchaseDialog = ref(false);
|
|
|
+const fileList = ref([]);
|
|
|
+const purchaseDom = ref(null);
|
|
|
+const purchaseFormConfig = computed(() => [
|
|
|
+ {
|
|
|
+ type: "title",
|
|
|
+ title: "基础信息",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "input",
|
|
|
+ prop: "deptName",
|
|
|
+ label: "采购部门",
|
|
|
+ disabled: true,
|
|
|
+ itemWidth: 25,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "input",
|
|
|
+ prop: "purchaseName",
|
|
|
+ label: "采购人",
|
|
|
+ disabled: true,
|
|
|
+ itemWidth: 25,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "date",
|
|
|
+ itemType: "datetime",
|
|
|
+ prop: "purchaseName",
|
|
|
+ label: "采购时间",
|
|
|
+ disabled: true,
|
|
|
+ itemWidth: 25.01,
|
|
|
+ style: {
|
|
|
+ width: "100%",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "select",
|
|
|
+ label: "供应商",
|
|
|
+ prop: "supplyId",
|
|
|
+ filterable: true,
|
|
|
+ data: supplierData.value,
|
|
|
+ disabled: true,
|
|
|
+ itemWidth: 25,
|
|
|
+ style: {
|
|
|
+ width: "100%",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "select",
|
|
|
+ label: "是否合同",
|
|
|
+ prop: "isAgreement",
|
|
|
+ data: [
|
|
|
+ {
|
|
|
+ label: "是",
|
|
|
+ value: "1",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "否",
|
|
|
+ value: "0",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ disabled: true,
|
|
|
+ itemWidth: 25,
|
|
|
+ style: {
|
|
|
+ width: "100%",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "select",
|
|
|
+ label: "付款方式",
|
|
|
+ prop: "paymentMethod",
|
|
|
+ data: fundsPaymentMethod.value,
|
|
|
+ itemWidth: 25,
|
|
|
+ disabled: true,
|
|
|
+ style: {
|
|
|
+ width: "100%",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "input",
|
|
|
+ label: "采购单号",
|
|
|
+ prop: "contractCode",
|
|
|
+ disabled: true,
|
|
|
+ itemWidth: 25,
|
|
|
+ },
|
|
|
+
|
|
|
+ {
|
|
|
+ type: "input",
|
|
|
+ itemType: "textarea",
|
|
|
+ label: "采购说明",
|
|
|
+ prop: "purchaseContent",
|
|
|
+ disabled: true,
|
|
|
+ itemWidth: 50,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "title",
|
|
|
+ title: "采购明细",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "slot",
|
|
|
+ slotName: "details",
|
|
|
+ label: "",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "title",
|
|
|
+ title: "其他费用",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "slot",
|
|
|
+ slotName: "otherDetails",
|
|
|
+ label: "",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "number",
|
|
|
+ prop: "freight",
|
|
|
+ label: "运费",
|
|
|
+ itemWidth: 25,
|
|
|
+ precision: 2,
|
|
|
+ min: -9999999,
|
|
|
+ controls: false,
|
|
|
+ fn: () => handleChangeAmount(),
|
|
|
+ style: {
|
|
|
+ width: "100%",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "number",
|
|
|
+ prop: "preferential",
|
|
|
+ label: "优惠",
|
|
|
+ itemWidth: 25,
|
|
|
+ precision: 2,
|
|
|
+ min: -9999999,
|
|
|
+ controls: false,
|
|
|
+ fn: () => handleChangeAmount(),
|
|
|
+ style: {
|
|
|
+ width: "100%",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "input",
|
|
|
+ prop: "amount",
|
|
|
+ label: "采购总金额",
|
|
|
+ disabled: true,
|
|
|
+ itemWidth: 100,
|
|
|
+ style: {
|
|
|
+ width: "25%",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "slot",
|
|
|
+ slotName: "fileSlot",
|
|
|
+ label: "附件",
|
|
|
+ },
|
|
|
+]);
|
|
|
+const purchaseFormRules = ref({
|
|
|
+ name: [{ required: true, message: "请输入费用名称", trigger: "blur" }],
|
|
|
+ price: [{ required: true, message: "请输入单价/金额", trigger: "blur" }],
|
|
|
+ freight: [{ required: true, message: "请输入运费", trigger: "blur" }],
|
|
|
+ preferential: [{ required: true, message: "请输入优惠", trigger: "blur" }],
|
|
|
+});
|
|
|
+const handleUpdateData = (row) => {
|
|
|
+ let val = row.id;
|
|
|
+ purchaseDialog.value = true;
|
|
|
+ proxy
|
|
|
+ .post("/purchase/detail", {
|
|
|
+ id: val,
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ let jsonData = {};
|
|
|
+ if (res.victoriatouristJson) {
|
|
|
+ jsonData = JSON.parse(res.victoriatouristJson);
|
|
|
+ }
|
|
|
+ formData.purchaseData = { ...res, ...jsonData };
|
|
|
+ formData.purchaseData.purchaseDetailList =
|
|
|
+ formData.purchaseData.purchaseDetailList.map((x) => ({
|
|
|
+ ...x,
|
|
|
+ subscribeCount: x.subscribeQuantity,
|
|
|
+ purchaseCount: x.purchaseQuantity,
|
|
|
+ }));
|
|
|
+ });
|
|
|
+ proxy.post("/fileInfo/getList", { businessIdList: [val] }).then((fileObj) => {
|
|
|
+ formData.purchaseData.fileList = fileObj[val] || [];
|
|
|
+ if (
|
|
|
+ formData.purchaseData.fileList &&
|
|
|
+ formData.purchaseData.fileList.length > 0
|
|
|
+ ) {
|
|
|
+ fileList.value = formData.purchaseData.fileList.map((item) => {
|
|
|
+ return {
|
|
|
+ raw: item,
|
|
|
+ name: item.fileName,
|
|
|
+ url: item.fileUrl,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+// 计算采购总金额
|
|
|
+const handleChangeAmount = () => {
|
|
|
+ let sum = 0;
|
|
|
+ for (let i = 0; i < formData.purchaseData.purchaseDetailList.length; i++) {
|
|
|
+ const e = formData.purchaseData.purchaseDetailList[i];
|
|
|
+ // e.amount = parseFloat(e.count * e.price).toFixed(4);
|
|
|
+ sum += Number(e.amount);
|
|
|
+ }
|
|
|
+ for (let i = 0; i < formData.purchaseData.otherFeeList.length; i++) {
|
|
|
+ const e = formData.purchaseData.otherFeeList[i];
|
|
|
+ sum += Number(e.price);
|
|
|
+ }
|
|
|
+ sum += formData.purchaseData.freight;
|
|
|
+ sum += formData.purchaseData.preferential;
|
|
|
+ formData.purchaseData.amount = parseFloat(sum).toFixed(4);
|
|
|
+};
|
|
|
+
|
|
|
+const handleChangeMoney = (val, index, key) => {
|
|
|
+ formData.purchaseData.purchaseDetailList[index][key] = val;
|
|
|
+ for (let i = 0; i < formData.purchaseData.purchaseDetailList.length; i++) {
|
|
|
+ formData.purchaseData.purchaseDetailList[i].amount = parseFloat(
|
|
|
+ formData.purchaseData.purchaseDetailList[i].count *
|
|
|
+ formData.purchaseData.purchaseDetailList[i].price
|
|
|
+ ).toFixed(4);
|
|
|
+ }
|
|
|
+ handleChangeAmount();
|
|
|
+};
|
|
|
+
|
|
|
+const onPreviewFile = (file) => {
|
|
|
+ window.open(file.raw.fileUrl, "_blank");
|
|
|
+};
|
|
|
+const submitUpdate = () => {
|
|
|
+ purchaseDom.value.handleSubmit(() => {
|
|
|
+ loadingTwo.value = true;
|
|
|
+ const data = proxy.deepClone(formData.purchaseData);
|
|
|
+ const jsonData = JSON.parse(data.victoriatouristJson);
|
|
|
+ const victoriatouristJson = {
|
|
|
+ ...jsonData,
|
|
|
+ otherFeeList: data.otherFeeList,
|
|
|
+ freight: data.freight,
|
|
|
+ preferential: data.preferential,
|
|
|
+ };
|
|
|
+ data.victoriatouristJson = JSON.stringify(victoriatouristJson);
|
|
|
+ proxy.post("/purchase/edit", data).then((res) => {
|
|
|
+ ElMessage({
|
|
|
+ message: `操作成功`,
|
|
|
+ type: "success",
|
|
|
+ });
|
|
|
+ purchaseDialog.value = false;
|
|
|
+ loadingTwo.value = false;
|
|
|
+ getList();
|
|
|
+ });
|
|
|
+ });
|
|
|
+};
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+.tenant {
|
|
|
+ padding: 20px;
|
|
|
+}
|
|
|
+</style>
|