|
|
@@ -11,7 +11,7 @@
|
|
|
>
|
|
|
<!-- 表头工具栏 -->
|
|
|
<template v-slot:toolbar>
|
|
|
- <div class="headbox" v-if="!contractId&&isShowAdd">
|
|
|
+ <div class="headbox" v-if="!contractId && isShowAdd">
|
|
|
<el-button
|
|
|
size="small"
|
|
|
type="primary"
|
|
|
@@ -29,7 +29,6 @@
|
|
|
:prop="'datasource.' + $index + '.technicalDrawings'"
|
|
|
>
|
|
|
<fileMain v-model="row.technicalDrawings" type="view"></fileMain>
|
|
|
-
|
|
|
</el-form-item>
|
|
|
</template>
|
|
|
<template v-slot:industryArtFiles="{ row, $index }">
|
|
|
@@ -38,7 +37,6 @@
|
|
|
:prop="'datasource.' + $index + '.industryArtFiles'"
|
|
|
>
|
|
|
<fileMain v-model="row.industryArtFiles" type="view"></fileMain>
|
|
|
-
|
|
|
</el-form-item>
|
|
|
</template>
|
|
|
<template v-slot:otherFiles="{ row, $index }">
|
|
|
@@ -47,7 +45,6 @@
|
|
|
:prop="'datasource.' + $index + '.otherFiles'"
|
|
|
>
|
|
|
<fileMain v-model="row.otherFiles" type="view"></fileMain>
|
|
|
-
|
|
|
</el-form-item>
|
|
|
</template>
|
|
|
<template v-slot:customerReqFiles="{ row, $index }">
|
|
|
@@ -56,18 +53,18 @@
|
|
|
:prop="'datasource.' + $index + '.customerReqFiles'"
|
|
|
>
|
|
|
<fileMain v-model="row.customerReqFiles" type="view"></fileMain>
|
|
|
-<!-- <div v-if="row.customerReqFiles && row.customerReqFiles?.length">-->
|
|
|
-<!-- <el-link-->
|
|
|
-<!-- v-for="link in row.customerReqFiles"-->
|
|
|
-<!-- :key="link.id"-->
|
|
|
-<!-- type="primary"-->
|
|
|
-<!-- :underline="false"-->
|
|
|
-<!-- @click="downloadFile(link)"-->
|
|
|
-<!-- >-->
|
|
|
-<!-- {{ link.name }}-->
|
|
|
-<!-- </el-link-->
|
|
|
-<!-- >-->
|
|
|
-<!-- </div>-->
|
|
|
+ <!-- <div v-if="row.customerReqFiles && row.customerReqFiles?.length">-->
|
|
|
+ <!-- <el-link-->
|
|
|
+ <!-- v-for="link in row.customerReqFiles"-->
|
|
|
+ <!-- :key="link.id"-->
|
|
|
+ <!-- type="primary"-->
|
|
|
+ <!-- :underline="false"-->
|
|
|
+ <!-- @click="downloadFile(link)"-->
|
|
|
+ <!-- >-->
|
|
|
+ <!-- {{ link.name }}-->
|
|
|
+ <!-- </el-link-->
|
|
|
+ <!-- >-->
|
|
|
+ <!-- </div>-->
|
|
|
</el-form-item>
|
|
|
</template>
|
|
|
|
|
|
@@ -96,7 +93,7 @@
|
|
|
<!-- { validator: validateTotalCount(scope.row), trigger: 'blur' }-->
|
|
|
<el-input
|
|
|
v-model="scope.row.totalCount"
|
|
|
- @input="(val) => changeNum(val,scope.row, scope.$index)"
|
|
|
+ @input="(val) => changeNum(val, scope.row, scope.$index)"
|
|
|
></el-input>
|
|
|
</el-form-item>
|
|
|
</template>
|
|
|
@@ -155,575 +152,614 @@
|
|
|
</el-form>
|
|
|
</template>
|
|
|
<script>
|
|
|
-import {emailReg, phoneReg, numberReg} from 'ele-admin';
|
|
|
-import dictMixins from '@/mixins/dictMixins';
|
|
|
-import productList from './product-list.vue';
|
|
|
-import {
|
|
|
- getWarehouseList,
|
|
|
- getWarehouseOutStock
|
|
|
-} from '@/api/saleManage/saleorder';
|
|
|
+ import { emailReg, phoneReg, numberReg } from 'ele-admin';
|
|
|
+ import dictMixins from '@/mixins/dictMixins';
|
|
|
+ import productList from './product-list.vue';
|
|
|
+ import {
|
|
|
+ getWarehouseList,
|
|
|
+ getWarehouseOutStock
|
|
|
+ } from '@/api/saleManage/saleorder';
|
|
|
|
|
|
-import {copyObj} from '@/utils/util';
|
|
|
-import {getFile} from "@/api/system/file";
|
|
|
-import fileMain from "@/components/addDoc/index.vue";
|
|
|
+ import { copyObj } from '@/utils/util';
|
|
|
+ import { getFile } from '@/api/system/file';
|
|
|
+ import fileMain from '@/components/addDoc/index.vue';
|
|
|
|
|
|
-export default {
|
|
|
- mixins: [dictMixins],
|
|
|
- props: {
|
|
|
- orderId: String,
|
|
|
- isShowAdd: {
|
|
|
- type: Boolean,
|
|
|
- default: true
|
|
|
- },
|
|
|
- pricingWay: [Number, String]
|
|
|
- },
|
|
|
- components: {
|
|
|
- fileMain,
|
|
|
- productList
|
|
|
- },
|
|
|
- data() {
|
|
|
- const defaultForm = {
|
|
|
- key: null,
|
|
|
- endTime: '',
|
|
|
- isFirst: 0,
|
|
|
- name: '',
|
|
|
- startTime: '',
|
|
|
- workHour: '',
|
|
|
- technicalDrawings: []
|
|
|
- // warehouseCode:"",
|
|
|
- // warehouseId:'',
|
|
|
- // warehouseName:'',
|
|
|
- };
|
|
|
- return {
|
|
|
- discountTotalPrice: 0.0,
|
|
|
- allPrice: 0.0,
|
|
|
- numberReg,
|
|
|
- defaultForm,
|
|
|
- warehouseList: [],
|
|
|
- form: {
|
|
|
- datasource: []
|
|
|
+ export default {
|
|
|
+ mixins: [dictMixins],
|
|
|
+ props: {
|
|
|
+ orderId: String,
|
|
|
+ isShowAdd: {
|
|
|
+ type: Boolean,
|
|
|
+ default: true
|
|
|
},
|
|
|
- rules: {},
|
|
|
- columns: [
|
|
|
- {
|
|
|
- width: 45,
|
|
|
- type: 'index',
|
|
|
- columnKey: 'index',
|
|
|
- align: 'center',
|
|
|
- fixed: 'left'
|
|
|
- },
|
|
|
- {
|
|
|
- minWidth: 200,
|
|
|
- prop: 'productName',
|
|
|
- label: '名称',
|
|
|
- slot: 'productName',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- minWidth: 120,
|
|
|
- prop: 'productCode',
|
|
|
- label: '编码',
|
|
|
- slot: 'productCode',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- minWidth: 150,
|
|
|
- prop: 'productCategoryName',
|
|
|
- label: '类型',
|
|
|
- slot: 'productCategoryName',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- prop: 'batchNo',
|
|
|
- label: '批次号',
|
|
|
- align: 'center',
|
|
|
- showOverflowTooltip: true,
|
|
|
- minWidth: 100
|
|
|
- },
|
|
|
- {
|
|
|
- minWidth: 100,
|
|
|
- prop: 'productBrand',
|
|
|
- label: '牌号',
|
|
|
- slot: 'productBrand',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- minWidth: 120,
|
|
|
- prop: 'modelType',
|
|
|
- label: '型号',
|
|
|
- slot: 'modelType',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- minWidth: 120,
|
|
|
- prop: 'specification',
|
|
|
- label: '规格',
|
|
|
- slot: 'specification',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- minWidth: 150,
|
|
|
- prop: 'customerMark',
|
|
|
- label: '客户代号',
|
|
|
- slot: 'customerMark',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- minWidth: 200,
|
|
|
- prop: 'warehouseId',
|
|
|
- label: '仓库名称',
|
|
|
- slot: 'warehouseId',
|
|
|
- headerSlot: 'headerWarehouseId',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- minWidth: 80,
|
|
|
- prop: 'warehouseNum',
|
|
|
- label: '库存',
|
|
|
- slot: 'warehouseNum',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- width: 110,
|
|
|
- prop: 'orderTotalCount',
|
|
|
- label: '订单总数量',
|
|
|
- slot: 'orderTotalCount',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- width: 120,
|
|
|
- prop: 'totalCount',
|
|
|
- label: '本次收货数量',
|
|
|
- slot: 'totalCount',
|
|
|
- headerSlot: 'headerTotalCount',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- width: 100,
|
|
|
- prop: 'receiveTotalCount',
|
|
|
- label: '已收货总数',
|
|
|
- slot: 'receiveTotalCount',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- minWidth: 100,
|
|
|
- prop: 'measuringUnit',
|
|
|
- label: '计量单位',
|
|
|
- slot: 'measuringUnit',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- width: 120,
|
|
|
- prop: 'singleWeight',
|
|
|
- label: '单重',
|
|
|
- slot: 'singleWeight',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- width: 100,
|
|
|
- prop: 'receiveTotalWeight',
|
|
|
- label: '收货总重',
|
|
|
- slot: 'receiveTotalWeight',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- width: 100,
|
|
|
- prop: 'weightUnit',
|
|
|
- label: '重量单位',
|
|
|
- slot: 'weightUnit',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
+ pricingWay: [Number, String]
|
|
|
+ },
|
|
|
+ components: {
|
|
|
+ fileMain,
|
|
|
+ productList
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ const defaultForm = {
|
|
|
+ key: null,
|
|
|
+ endTime: '',
|
|
|
+ isFirst: 0,
|
|
|
+ name: '',
|
|
|
+ startTime: '',
|
|
|
+ workHour: '',
|
|
|
+ technicalDrawings: []
|
|
|
+ // warehouseCode:"",
|
|
|
+ // warehouseId:'',
|
|
|
+ // warehouseName:'',
|
|
|
+ };
|
|
|
+ return {
|
|
|
+ discountTotalPrice: 0.0,
|
|
|
+ allPrice: 0.0,
|
|
|
+ numberReg,
|
|
|
+ defaultForm,
|
|
|
+ warehouseList: [],
|
|
|
+ form: {
|
|
|
+ datasource: []
|
|
|
+ },
|
|
|
+ rules: {},
|
|
|
+ columns: [
|
|
|
+ {
|
|
|
+ width: 45,
|
|
|
+ type: 'index',
|
|
|
+ columnKey: 'index',
|
|
|
+ align: 'center',
|
|
|
+ fixed: 'left'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ minWidth: 200,
|
|
|
+ prop: 'productName',
|
|
|
+ label: '名称',
|
|
|
+ slot: 'productName',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ minWidth: 120,
|
|
|
+ prop: 'productCode',
|
|
|
+ label: '编码',
|
|
|
+ slot: 'productCode',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ minWidth: 150,
|
|
|
+ prop: 'productCategoryName',
|
|
|
+ label: '类型',
|
|
|
+ slot: 'productCategoryName',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'batchNo',
|
|
|
+ label: '批次号',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ minWidth: 100
|
|
|
+ },
|
|
|
+ {
|
|
|
+ minWidth: 100,
|
|
|
+ prop: 'productBrand',
|
|
|
+ label: '牌号',
|
|
|
+ slot: 'productBrand',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ minWidth: 120,
|
|
|
+ prop: 'modelType',
|
|
|
+ label: '型号',
|
|
|
+ slot: 'modelType',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ minWidth: 120,
|
|
|
+ prop: 'specification',
|
|
|
+ label: '规格',
|
|
|
+ slot: 'specification',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ minWidth: 150,
|
|
|
+ prop: 'customerMark',
|
|
|
+ label: '客户代号',
|
|
|
+ slot: 'customerMark',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ minWidth: 200,
|
|
|
+ prop: 'warehouseId',
|
|
|
+ label: '仓库名称',
|
|
|
+ slot: 'warehouseId',
|
|
|
+ headerSlot: 'headerWarehouseId',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ minWidth: 80,
|
|
|
+ prop: 'warehouseNum',
|
|
|
+ label: '库存',
|
|
|
+ slot: 'warehouseNum',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 110,
|
|
|
+ prop: 'orderTotalCount',
|
|
|
+ label: '订单总数量',
|
|
|
+ slot: 'orderTotalCount',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 120,
|
|
|
+ prop: 'totalCount',
|
|
|
+ label: '本次收货数量',
|
|
|
+ slot: 'totalCount',
|
|
|
+ headerSlot: 'headerTotalCount',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 100,
|
|
|
+ prop: 'receiveTotalCount',
|
|
|
+ label: '已收货总数',
|
|
|
+ slot: 'receiveTotalCount',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ minWidth: 100,
|
|
|
+ prop: 'measuringUnit',
|
|
|
+ label: '计量单位',
|
|
|
+ slot: 'measuringUnit',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 120,
|
|
|
+ prop: 'singleWeight',
|
|
|
+ label: '单重',
|
|
|
+ slot: 'singleWeight',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 100,
|
|
|
+ prop: 'receiveTotalWeight',
|
|
|
+ label: '收货总重',
|
|
|
+ slot: 'receiveTotalWeight',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 100,
|
|
|
+ prop: 'weightUnit',
|
|
|
+ label: '重量单位',
|
|
|
+ slot: 'weightUnit',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
width: 160,
|
|
|
prop: 'pricingWay',
|
|
|
label: '计价方式',
|
|
|
slot: 'pricingWay',
|
|
|
align: 'center',
|
|
|
formatter: (row, column) => {
|
|
|
- return row.pricingWay == 1 ? '按数量计费' : row.pricingWay == 2 ? '按重量计费':'';
|
|
|
-
|
|
|
+ return row.pricingWay == 1
|
|
|
+ ? '按数量计费'
|
|
|
+ : row.pricingWay == 2
|
|
|
+ ? '按重量计费'
|
|
|
+ : '';
|
|
|
}
|
|
|
},
|
|
|
- {
|
|
|
- width: 80,
|
|
|
- prop: 'singlePrice',
|
|
|
- label: '单价',
|
|
|
- slot: 'singlePrice',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
+ {
|
|
|
+ width: 80,
|
|
|
+ prop: 'singlePrice',
|
|
|
+ label: '单价',
|
|
|
+ slot: 'singlePrice',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
width: 100,
|
|
|
prop: 'taxRate',
|
|
|
label: '税率',
|
|
|
+ formatter: (_row, _column, cellValue) => {
|
|
|
+ return _row.taxRate ? _row.taxRate + '%' : '';
|
|
|
+ },
|
|
|
align: 'center'
|
|
|
},
|
|
|
- {
|
|
|
- width: 100,
|
|
|
- prop: 'discountSinglePrice',
|
|
|
- label: '折让单价',
|
|
|
- slot: 'discountSinglePrice',
|
|
|
- align: "center",
|
|
|
- formatter: (_row, _column, cellValue) => {
|
|
|
- return _row.discountSinglePrice
|
|
|
- ? Number(_row.discountSinglePrice).toFixed(2)
|
|
|
- : '';
|
|
|
- }
|
|
|
- },
|
|
|
- {
|
|
|
- width: 80,
|
|
|
- prop: 'totalPrice',
|
|
|
- label: '合计',
|
|
|
- slot: 'totalPrice',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- width: 100,
|
|
|
- prop: 'discountTotalPrice',
|
|
|
- label: '折让合计',
|
|
|
- slot: 'discountTotalPrice',
|
|
|
- align: "center",
|
|
|
- formatter: (_row, _column, cellValue) => {
|
|
|
- return _row.discountTotalPrice
|
|
|
- ? Number(_row.discountTotalPrice).toFixed(2)
|
|
|
- : '';
|
|
|
- }
|
|
|
- },
|
|
|
+ {
|
|
|
+ width: 100,
|
|
|
+ prop: 'discountSinglePrice',
|
|
|
+ label: '折让单价',
|
|
|
+ slot: 'discountSinglePrice',
|
|
|
+ align: 'center',
|
|
|
+ formatter: (_row, _column, cellValue) => {
|
|
|
+ return _row.discountSinglePrice
|
|
|
+ ? Number(_row.discountSinglePrice).toFixed(2)
|
|
|
+ : '';
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 80,
|
|
|
+ prop: 'totalPrice',
|
|
|
+ label: '合计',
|
|
|
+ slot: 'totalPrice',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 100,
|
|
|
+ prop: 'discountTotalPrice',
|
|
|
+ label: '折让合计',
|
|
|
+ slot: 'discountTotalPrice',
|
|
|
+ align: 'center',
|
|
|
+ formatter: (_row, _column, cellValue) => {
|
|
|
+ return _row.discountTotalPrice
|
|
|
+ ? Number(_row.discountTotalPrice).toFixed(2)
|
|
|
+ : '';
|
|
|
+ }
|
|
|
+ },
|
|
|
|
|
|
- // {
|
|
|
- // width: 80,
|
|
|
- // prop: 'deliveryDays',
|
|
|
- // label: '交期(天)',
|
|
|
- // slot: 'deliveryDays'
|
|
|
- // },
|
|
|
- // {
|
|
|
- // width: 160,
|
|
|
- // prop: 'deliveryDeadline',
|
|
|
- // label: '交期截止日期',
|
|
|
- // slot: 'deliveryDeadline',
|
|
|
- // show: this.isDeliveryDeadline
|
|
|
- // },
|
|
|
- {
|
|
|
- minWidth: 140,
|
|
|
- prop: 'customerExpectDeliveryDeadline',
|
|
|
- label: '客户期望交期',
|
|
|
- slot: 'customerExpectDeliveryDeadline',
|
|
|
- headerSlot: 'headerCustomerExpectDeliveryDeadline',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- minWidth: 140,
|
|
|
- prop: 'produceDeliveryDeadline',
|
|
|
- label: '生产交付交期',
|
|
|
- slot: 'produceDeliveryDeadline',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- width: 100,
|
|
|
- prop: 'guaranteePeriod',
|
|
|
- label: '质保期',
|
|
|
- slot: 'guaranteePeriod',
|
|
|
- formatter: (_row, _column, cellValue) => {
|
|
|
- return (_row.guaranteePeriod || '') + _row.guaranteePeriodUnitName;
|
|
|
- },
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- minWidth: 120,
|
|
|
- prop: 'guaranteePeriodDeadline',
|
|
|
- label: '质保截止日期',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- minWidth: 200,
|
|
|
- prop: 'customerReqFiles',
|
|
|
- label: '客户需求',
|
|
|
- slot: 'customerReqFiles',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- width: 130,
|
|
|
- prop: 'technicalAnswerName',
|
|
|
- label: '技术答疑人',
|
|
|
- slot: 'technicalAnswerName',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- width: 220,
|
|
|
- prop: 'technicalParams',
|
|
|
- label: '技术参数',
|
|
|
- slot: 'technicalParams',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- width: 240,
|
|
|
- prop: 'technicalDrawings',
|
|
|
- label: '技术图纸',
|
|
|
- slot: 'technicalDrawings',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- width: 240,
|
|
|
- prop: 'industryArtFiles',
|
|
|
- label: '工艺附件',
|
|
|
- slot: 'industryArtFiles',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- width: 240,
|
|
|
- prop: 'otherFiles',
|
|
|
- label: '其他附件',
|
|
|
- slot: 'otherFiles',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- width: 220,
|
|
|
- prop: 'remark',
|
|
|
- label: '备注',
|
|
|
- slot: 'remark',
|
|
|
- align: "center"
|
|
|
- },
|
|
|
- {
|
|
|
- columnKey: 'action',
|
|
|
- label: '操作',
|
|
|
- width: 120,
|
|
|
- align: 'center',
|
|
|
- resizable: false,
|
|
|
- slot: 'action',
|
|
|
- fixed: 'right',
|
|
|
- showOverflowTooltip: true
|
|
|
- }
|
|
|
- ]
|
|
|
- };
|
|
|
- },
|
|
|
- created() {
|
|
|
- getWarehouseList().then((res) => {
|
|
|
- this.warehouseList = res;
|
|
|
- });
|
|
|
- },
|
|
|
- computed: {
|
|
|
- canHandl() {
|
|
|
- return this.form.datasource.length;
|
|
|
- },
|
|
|
- contractId() {
|
|
|
- return this.$store.state.order.contractId;
|
|
|
- }
|
|
|
- },
|
|
|
- methods: {
|
|
|
- downloadFile(file) {
|
|
|
- getFile({objectName: file.storePath}, file.name);
|
|
|
+ // {
|
|
|
+ // width: 80,
|
|
|
+ // prop: 'deliveryDays',
|
|
|
+ // label: '交期(天)',
|
|
|
+ // slot: 'deliveryDays'
|
|
|
+ // },
|
|
|
+ // {
|
|
|
+ // width: 160,
|
|
|
+ // prop: 'deliveryDeadline',
|
|
|
+ // label: '交期截止日期',
|
|
|
+ // slot: 'deliveryDeadline',
|
|
|
+ // show: this.isDeliveryDeadline
|
|
|
+ // },
|
|
|
+ {
|
|
|
+ minWidth: 140,
|
|
|
+ prop: 'customerExpectDeliveryDeadline',
|
|
|
+ label: '客户期望交期',
|
|
|
+ slot: 'customerExpectDeliveryDeadline',
|
|
|
+ headerSlot: 'headerCustomerExpectDeliveryDeadline',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ minWidth: 140,
|
|
|
+ prop: 'produceDeliveryDeadline',
|
|
|
+ label: '生产交付交期',
|
|
|
+ slot: 'produceDeliveryDeadline',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 100,
|
|
|
+ prop: 'guaranteePeriod',
|
|
|
+ label: '质保期',
|
|
|
+ slot: 'guaranteePeriod',
|
|
|
+ formatter: (_row, _column, cellValue) => {
|
|
|
+ return (
|
|
|
+ (_row.guaranteePeriod || '') + _row.guaranteePeriodUnitName
|
|
|
+ );
|
|
|
+ },
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ minWidth: 120,
|
|
|
+ prop: 'guaranteePeriodDeadline',
|
|
|
+ label: '质保截止日期',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ minWidth: 200,
|
|
|
+ prop: 'customerReqFiles',
|
|
|
+ label: '客户需求',
|
|
|
+ slot: 'customerReqFiles',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 130,
|
|
|
+ prop: 'technicalAnswerName',
|
|
|
+ label: '技术答疑人',
|
|
|
+ slot: 'technicalAnswerName',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 220,
|
|
|
+ prop: 'technicalParams',
|
|
|
+ label: '技术参数',
|
|
|
+ slot: 'technicalParams',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 240,
|
|
|
+ prop: 'technicalDrawings',
|
|
|
+ label: '技术图纸',
|
|
|
+ slot: 'technicalDrawings',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 240,
|
|
|
+ prop: 'industryArtFiles',
|
|
|
+ label: '工艺附件',
|
|
|
+ slot: 'industryArtFiles',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 240,
|
|
|
+ prop: 'otherFiles',
|
|
|
+ label: '其他附件',
|
|
|
+ slot: 'otherFiles',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 220,
|
|
|
+ prop: 'remark',
|
|
|
+ label: '备注',
|
|
|
+ slot: 'remark',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ columnKey: 'action',
|
|
|
+ label: '操作',
|
|
|
+ width: 120,
|
|
|
+ align: 'center',
|
|
|
+ resizable: false,
|
|
|
+ slot: 'action',
|
|
|
+ fixed: 'right',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ };
|
|
|
},
|
|
|
- async warehouseChange(index, row) {
|
|
|
- let warehouseIds = this.form.datasource.filter((item, i) => row.productCode == item.productCode && index != i).map((item) => item.warehouseId) || [];
|
|
|
- const data = this.warehouseList.find((item) => item.id == row.warehouseId);
|
|
|
- if (warehouseIds.length > 0 && warehouseIds.includes(row.warehouseId)) {
|
|
|
- row.warehouseId = '';
|
|
|
- return this.$message.error('同一个产品不能选择相同的仓库');
|
|
|
- }
|
|
|
- this.$set(this.form.datasource[index], 'warehouseName', data.name);
|
|
|
- this.$set(this.form.datasource[index], 'warehouseCode', data.code);
|
|
|
- const warehouseOutStock = await getWarehouseOutStock({
|
|
|
- warehouseId: data.id,
|
|
|
- code: row.productCode
|
|
|
+ created() {
|
|
|
+ getWarehouseList().then((res) => {
|
|
|
+ this.warehouseList = res;
|
|
|
});
|
|
|
- this.$set(
|
|
|
- this.form.datasource[index],
|
|
|
- 'warehouseNum',
|
|
|
- warehouseOutStock
|
|
|
- );
|
|
|
- },
|
|
|
-
|
|
|
- //修改数量更新合计
|
|
|
- changeNum(val, row, index) {
|
|
|
- console.log(val, row, index);
|
|
|
- this.$set(this.form.datasource[index], 'receiveTotalWeight', val ? val * row.singleWeight : '');
|
|
|
- this.$set(this.form.datasource[index], 'totalPrice', this.getTotalPrice(row).toFixed(2));
|
|
|
- this.$set(this.form.datasource[index], 'discountTotalPrice', this.getDiscountTotalPrice(row).toFixed(2));
|
|
|
- this.$refs.table.reload()
|
|
|
},
|
|
|
- getTotalPrice(row) {
|
|
|
- let num = 0
|
|
|
- if(row.pricingWay==1){
|
|
|
- num = Number(row.singlePrice) * Number(row.totalCount)
|
|
|
- }
|
|
|
- if(row.pricingWay==2){
|
|
|
- num = Number(row.singlePrice) * Number(row.totalCount) * Number(row.singleWeight)
|
|
|
- }
|
|
|
- return num
|
|
|
-
|
|
|
- },
|
|
|
- getDiscountTotalPrice(row) {
|
|
|
- let num = 0
|
|
|
- if(row.pricingWay==1){
|
|
|
- num = Number(row.discountSinglePrice) * Number(row.totalCount)
|
|
|
- }
|
|
|
- if(row.pricingWay==2){
|
|
|
- num = Number(row.discountSinglePrice) * Number(row.totalCount) * Number(row.singleWeight)
|
|
|
+ computed: {
|
|
|
+ canHandl() {
|
|
|
+ return this.form.datasource.length;
|
|
|
+ },
|
|
|
+ contractId() {
|
|
|
+ return this.$store.state.order.contractId;
|
|
|
}
|
|
|
-
|
|
|
- return num
|
|
|
- },
|
|
|
- //选择产品回调
|
|
|
- changeParent(obj, idx) {
|
|
|
- obj.orderTotalCount = obj.totalCount;
|
|
|
- obj.id = '';
|
|
|
- obj['pricingWay']=obj.pricingWay||this.pricingWay
|
|
|
- this.$set(
|
|
|
- this.form.datasource,
|
|
|
- this.form.datasource.length,
|
|
|
- copyObj(obj)
|
|
|
- );
|
|
|
},
|
|
|
- validateTotalCount(row) {
|
|
|
- return (rule, value, callback) => {
|
|
|
- if (isNaN(value) || Number(value) <= 0) {
|
|
|
- callback(new Error('请输入大于0的数字'));
|
|
|
- } else if ((Number(value)+Number(row.receiveTotalCount)) > row.orderTotalCount) {
|
|
|
- callback(new Error('输入的数字不能大于最大发货值'));
|
|
|
- } else {
|
|
|
- callback();
|
|
|
+ methods: {
|
|
|
+ downloadFile(file) {
|
|
|
+ getFile({ objectName: file.storePath }, file.name);
|
|
|
+ },
|
|
|
+ async warehouseChange(index, row) {
|
|
|
+ let warehouseIds =
|
|
|
+ this.form.datasource
|
|
|
+ .filter(
|
|
|
+ (item, i) => row.productCode == item.productCode && index != i
|
|
|
+ )
|
|
|
+ .map((item) => item.warehouseId) || [];
|
|
|
+ const data = this.warehouseList.find(
|
|
|
+ (item) => item.id == row.warehouseId
|
|
|
+ );
|
|
|
+ if (warehouseIds.length > 0 && warehouseIds.includes(row.warehouseId)) {
|
|
|
+ row.warehouseId = '';
|
|
|
+ return this.$message.error('同一个产品不能选择相同的仓库');
|
|
|
+ }
|
|
|
+ this.$set(this.form.datasource[index], 'warehouseName', data.name);
|
|
|
+ this.$set(this.form.datasource[index], 'warehouseCode', data.code);
|
|
|
+ const warehouseOutStock = await getWarehouseOutStock({
|
|
|
+ warehouseId: data.id,
|
|
|
+ code: row.productCode
|
|
|
+ });
|
|
|
+ this.$set(
|
|
|
+ this.form.datasource[index],
|
|
|
+ 'warehouseNum',
|
|
|
+ warehouseOutStock
|
|
|
+ );
|
|
|
+ },
|
|
|
+
|
|
|
+ //修改数量更新合计
|
|
|
+ changeNum(val, row, index) {
|
|
|
+ console.log(val, row, index);
|
|
|
+ this.$set(
|
|
|
+ this.form.datasource[index],
|
|
|
+ 'receiveTotalWeight',
|
|
|
+ val ? val * row.singleWeight : ''
|
|
|
+ );
|
|
|
+ this.$set(
|
|
|
+ this.form.datasource[index],
|
|
|
+ 'totalPrice',
|
|
|
+ this.getTotalPrice(row).toFixed(2)
|
|
|
+ );
|
|
|
+ this.$set(
|
|
|
+ this.form.datasource[index],
|
|
|
+ 'discountTotalPrice',
|
|
|
+ this.getDiscountTotalPrice(row).toFixed(2)
|
|
|
+ );
|
|
|
+ this.$refs.table.reload();
|
|
|
+ },
|
|
|
+ getTotalPrice(row) {
|
|
|
+ let num = 0;
|
|
|
+ if (row.pricingWay == 1) {
|
|
|
+ num = Number(row.singlePrice) * Number(row.totalCount);
|
|
|
+ }
|
|
|
+ if (row.pricingWay == 2) {
|
|
|
+ num =
|
|
|
+ Number(row.singlePrice) *
|
|
|
+ Number(row.totalCount) *
|
|
|
+ Number(row.singleWeight);
|
|
|
+ }
|
|
|
+ return num;
|
|
|
+ },
|
|
|
+ getDiscountTotalPrice(row) {
|
|
|
+ let num = 0;
|
|
|
+ if (row.pricingWay == 1) {
|
|
|
+ num = Number(row.discountSinglePrice) * Number(row.totalCount);
|
|
|
+ }
|
|
|
+ if (row.pricingWay == 2) {
|
|
|
+ num =
|
|
|
+ Number(row.discountSinglePrice) *
|
|
|
+ Number(row.totalCount) *
|
|
|
+ Number(row.singleWeight);
|
|
|
}
|
|
|
- };
|
|
|
- },
|
|
|
- // 返回列表数据
|
|
|
- getTableValue() {
|
|
|
- let comitDatasource = this.form.datasource;
|
|
|
- if (comitDatasource.length === 0) return [];
|
|
|
- comitDatasource.forEach(async (v) => {
|
|
|
- v.totalCount = Number(v.totalCount);
|
|
|
- item['pricingWay']=item.pricingWay||this.pricingWay
|
|
|
- v.technicalDrawings = Array.isArray(v.technicalDrawings) ? v.technicalDrawings : [];
|
|
|
- v.customerReqFiles = Array.isArray(v.customerReqFiles) ? v.customerReqFiles : [];
|
|
|
- v.industryArtFiles = v.industryArtFiles || [];
|
|
|
- v.otherFiles = v.otherFiles || [];
|
|
|
- // v.ownerId = this.warehouseList.find(item => v.warehouseId == item.id)?.ownerId 获取仓库人员id
|
|
|
- });
|
|
|
- return comitDatasource;
|
|
|
- },
|
|
|
- getPrice() {
|
|
|
- return [this.allPrice];
|
|
|
- },
|
|
|
|
|
|
- //修改回显
|
|
|
- putTableValue(data) {
|
|
|
- if (data) {
|
|
|
- this.form.datasource = data;
|
|
|
- data.forEach(async (item, index) => {
|
|
|
- if (item.warehouseId) {
|
|
|
- this.$set(this.form.datasource[index], 'warehouseNum',
|
|
|
- await getWarehouseOutStock({
|
|
|
- warehouseId: item.warehouseId,
|
|
|
- code: item.productCode
|
|
|
- })
|
|
|
- );
|
|
|
+ return num;
|
|
|
+ },
|
|
|
+ //选择产品回调
|
|
|
+ changeParent(obj, idx) {
|
|
|
+ obj.orderTotalCount = obj.totalCount;
|
|
|
+ obj.id = '';
|
|
|
+ obj['pricingWay'] = obj.pricingWay || this.pricingWay;
|
|
|
+ this.$set(
|
|
|
+ this.form.datasource,
|
|
|
+ this.form.datasource.length,
|
|
|
+ copyObj(obj)
|
|
|
+ );
|
|
|
+ },
|
|
|
+ validateTotalCount(row) {
|
|
|
+ return (rule, value, callback) => {
|
|
|
+ if (isNaN(value) || Number(value) <= 0) {
|
|
|
+ callback(new Error('请输入大于0的数字'));
|
|
|
+ } else if (
|
|
|
+ Number(value) + Number(row.receiveTotalCount) >
|
|
|
+ row.orderTotalCount
|
|
|
+ ) {
|
|
|
+ callback(new Error('输入的数字不能大于最大发货值'));
|
|
|
+ } else {
|
|
|
+ callback();
|
|
|
}
|
|
|
- //发货数量因已发货数量被修改需要重新计算金额,总重
|
|
|
- this.changeNum(item.totalCount,item,index)
|
|
|
+ };
|
|
|
+ },
|
|
|
+ // 返回列表数据
|
|
|
+ getTableValue() {
|
|
|
+ let comitDatasource = this.form.datasource;
|
|
|
+ if (comitDatasource.length === 0) return [];
|
|
|
+ comitDatasource.forEach(async (v) => {
|
|
|
+ v.totalCount = Number(v.totalCount);
|
|
|
+ item['pricingWay'] = item.pricingWay || this.pricingWay;
|
|
|
+ v.technicalDrawings = Array.isArray(v.technicalDrawings)
|
|
|
+ ? v.technicalDrawings
|
|
|
+ : [];
|
|
|
+ v.customerReqFiles = Array.isArray(v.customerReqFiles)
|
|
|
+ ? v.customerReqFiles
|
|
|
+ : [];
|
|
|
+ v.industryArtFiles = v.industryArtFiles || [];
|
|
|
+ v.otherFiles = v.otherFiles || [];
|
|
|
+ // v.ownerId = this.warehouseList.find(item => v.warehouseId == item.id)?.ownerId 获取仓库人员id
|
|
|
});
|
|
|
- }
|
|
|
- },
|
|
|
- //选择产品
|
|
|
- handParent(row, index) {
|
|
|
- let item = {
|
|
|
- id: row.productCode
|
|
|
- };
|
|
|
- this.$refs.productListRef.open(item, index);
|
|
|
- },
|
|
|
- //选择技术人回调
|
|
|
- changeAnswer(obj, idx) {
|
|
|
- this.$set(this.form.datasource[idx], 'technicalAnswerId', obj.id);
|
|
|
- this.$set(this.form.datasource[idx], 'technicalAnswerName', obj.name);
|
|
|
- },
|
|
|
- handHead(row, index) {
|
|
|
- let item = {
|
|
|
- id: row.technicalAnswerId
|
|
|
- };
|
|
|
- this.$refs.headRef.open(item, index);
|
|
|
- },
|
|
|
-
|
|
|
- remove(i) {
|
|
|
- this.form.datasource.splice(i, 1);
|
|
|
- this.setSort();
|
|
|
- },
|
|
|
- // 清空表格
|
|
|
- restTable() {
|
|
|
- this.form.datasource = [];
|
|
|
- },
|
|
|
- // 重新排序
|
|
|
- setSort() {
|
|
|
- this.form.datasource.forEach((n, index) => {
|
|
|
- n.key = index + 1;
|
|
|
- });
|
|
|
- },
|
|
|
- // 添加
|
|
|
- handlAdd() {
|
|
|
- if (!this.orderId) return this.$message.error('请先选择订单');
|
|
|
- this.$refs.productListRef.open(this.form.datasource);
|
|
|
- },
|
|
|
+ return comitDatasource;
|
|
|
+ },
|
|
|
+ getPrice() {
|
|
|
+ return [this.allPrice];
|
|
|
+ },
|
|
|
|
|
|
- validateForm(callback) {
|
|
|
- //开始表单校验
|
|
|
- this.$refs.form.validate((valid,obj) => {
|
|
|
- if(obj){
|
|
|
- let messages= Object.keys(obj).map(key=>obj[key][0])
|
|
|
- if(messages.length>0){
|
|
|
- this.$message.warning(messages[0].message);
|
|
|
+ //修改回显
|
|
|
+ putTableValue(data) {
|
|
|
+ if (data) {
|
|
|
+ this.form.datasource = data;
|
|
|
+ data.forEach(async (item, index) => {
|
|
|
+ if (item.warehouseId) {
|
|
|
+ this.$set(
|
|
|
+ this.form.datasource[index],
|
|
|
+ 'warehouseNum',
|
|
|
+ await getWarehouseOutStock({
|
|
|
+ warehouseId: item.warehouseId,
|
|
|
+ code: item.productCode
|
|
|
+ })
|
|
|
+ );
|
|
|
+ }
|
|
|
+ //发货数量因已发货数量被修改需要重新计算金额,总重
|
|
|
+ this.changeNum(item.totalCount, item, index);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ //选择产品
|
|
|
+ handParent(row, index) {
|
|
|
+ let item = {
|
|
|
+ id: row.productCode
|
|
|
+ };
|
|
|
+ this.$refs.productListRef.open(item, index);
|
|
|
+ },
|
|
|
+ //选择技术人回调
|
|
|
+ changeAnswer(obj, idx) {
|
|
|
+ this.$set(this.form.datasource[idx], 'technicalAnswerId', obj.id);
|
|
|
+ this.$set(this.form.datasource[idx], 'technicalAnswerName', obj.name);
|
|
|
+ },
|
|
|
+ handHead(row, index) {
|
|
|
+ let item = {
|
|
|
+ id: row.technicalAnswerId
|
|
|
+ };
|
|
|
+ this.$refs.headRef.open(item, index);
|
|
|
+ },
|
|
|
|
|
|
- }
|
|
|
+ remove(i) {
|
|
|
+ this.form.datasource.splice(i, 1);
|
|
|
+ this.setSort();
|
|
|
+ },
|
|
|
+ // 清空表格
|
|
|
+ restTable() {
|
|
|
+ this.form.datasource = [];
|
|
|
+ },
|
|
|
+ // 重新排序
|
|
|
+ setSort() {
|
|
|
+ this.form.datasource.forEach((n, index) => {
|
|
|
+ n.key = index + 1;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 添加
|
|
|
+ handlAdd() {
|
|
|
+ if (!this.orderId) return this.$message.error('请先选择订单');
|
|
|
+ this.$refs.productListRef.open(this.form.datasource);
|
|
|
+ },
|
|
|
|
|
|
+ validateForm(callback) {
|
|
|
+ //开始表单校验
|
|
|
+ this.$refs.form.validate((valid, obj) => {
|
|
|
+ if (obj) {
|
|
|
+ let messages = Object.keys(obj).map((key) => obj[key][0]);
|
|
|
+ if (messages.length > 0) {
|
|
|
+ this.$message.warning(messages[0].message);
|
|
|
+ }
|
|
|
}
|
|
|
- callback(valid);
|
|
|
- });
|
|
|
+ callback(valid);
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
-};
|
|
|
+ };
|
|
|
</script>
|
|
|
<style lang="scss" scoped>
|
|
|
-.headbox {
|
|
|
- display: flex;
|
|
|
- justify-content: space-between;
|
|
|
- align-items: center;
|
|
|
+ .headbox {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
|
|
|
- .amount {
|
|
|
- font-size: 14px;
|
|
|
- font-weight: bold;
|
|
|
- padding-right: 30px;
|
|
|
+ .amount {
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: bold;
|
|
|
+ padding-right: 30px;
|
|
|
+ }
|
|
|
}
|
|
|
-}
|
|
|
|
|
|
-.time-form .el-form-item {
|
|
|
- margin-bottom: 0 !important;
|
|
|
-}
|
|
|
+ .time-form .el-form-item {
|
|
|
+ margin-bottom: 0 !important;
|
|
|
+ }
|
|
|
|
|
|
-::v-deep .period {
|
|
|
- display: flex;
|
|
|
+ ::v-deep .period {
|
|
|
+ display: flex;
|
|
|
|
|
|
- .borderleftnone {
|
|
|
- .el-input--medium .el-input__inner {
|
|
|
- border-top-right-radius: 0;
|
|
|
- border-bottom-right-radius: 0;
|
|
|
+ .borderleftnone {
|
|
|
+ .el-input--medium .el-input__inner {
|
|
|
+ border-top-right-radius: 0;
|
|
|
+ border-bottom-right-radius: 0;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- .borderrightnone {
|
|
|
- .el-input--medium .el-input__inner {
|
|
|
- border-top-left-radius: 0;
|
|
|
- border-bottom-left-radius: 0;
|
|
|
+ .borderrightnone {
|
|
|
+ .el-input--medium .el-input__inner {
|
|
|
+ border-top-left-radius: 0;
|
|
|
+ border-bottom-left-radius: 0;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
-}
|
|
|
|
|
|
-::v-deep .time-form tbody > tr:hover > td {
|
|
|
- background-color: transparent !important;
|
|
|
-}
|
|
|
+ ::v-deep .time-form tbody > tr:hover > td {
|
|
|
+ background-color: transparent !important;
|
|
|
+ }
|
|
|
|
|
|
-::v-deep .time-form .el-table tr {
|
|
|
- background-color: #ffffff;
|
|
|
-}
|
|
|
+ ::v-deep .time-form .el-table tr {
|
|
|
+ background-color: #ffffff;
|
|
|
+ }
|
|
|
|
|
|
-.pricebox {
|
|
|
- display: flex;
|
|
|
- justify-content: flex-start;
|
|
|
- align-items: center;
|
|
|
- font-weight: bold;
|
|
|
-}
|
|
|
+ .pricebox {
|
|
|
+ display: flex;
|
|
|
+ justify-content: flex-start;
|
|
|
+ align-items: center;
|
|
|
+ font-weight: bold;
|
|
|
+ }
|
|
|
</style>
|