|
|
@@ -328,7 +328,6 @@
|
|
|
<el-form-item
|
|
|
style="margin-bottom: 20px"
|
|
|
:prop="'datasource.' + scope.$index + '.supplierName'"
|
|
|
-
|
|
|
>
|
|
|
<el-input
|
|
|
clearable
|
|
|
@@ -406,119 +405,119 @@
|
|
|
</el-form>
|
|
|
</template>
|
|
|
<script>
|
|
|
-import { numberReg } from 'ele-admin';
|
|
|
-import productList from '@/BIZComponents/product-list.vue';
|
|
|
-import dictMixins from '@/mixins/dictMixins';
|
|
|
-import fileUpload from '@/components/upload/fileUpload';
|
|
|
-import headList from '@/BIZComponents/user-select/user-select.vue';
|
|
|
-import timeDialog from '@/components/timeDialog/index.vue';
|
|
|
-import { copyObj } from '@/utils/util';
|
|
|
-import supplierList from '@/views/purchasingManage/supplierManage/components/parentList.vue';
|
|
|
-import { getInventoryTotalAPI } from '@/api/wms';
|
|
|
-import { getByCode } from '@/api/system/dictionary-data';
|
|
|
-import fileMain from '@/components/addDoc/index.vue';
|
|
|
-import taskinstanceDialog from '@/BIZComponents/procedure/taskinstanceDialog.vue';
|
|
|
+ import { numberReg } from 'ele-admin';
|
|
|
+ import productList from '@/BIZComponents/product-list.vue';
|
|
|
+ import dictMixins from '@/mixins/dictMixins';
|
|
|
+ import fileUpload from '@/components/upload/fileUpload';
|
|
|
+ import headList from '@/BIZComponents/user-select/user-select.vue';
|
|
|
+ import timeDialog from '@/components/timeDialog/index.vue';
|
|
|
+ import { copyObj } from '@/utils/util';
|
|
|
+ import supplierList from '@/views/purchasingManage/supplierManage/components/parentList.vue';
|
|
|
+ import { getInventoryTotalAPI } from '@/api/wms';
|
|
|
+ import { getByCode } from '@/api/system/dictionary-data';
|
|
|
+ import fileMain from '@/components/addDoc/index.vue';
|
|
|
+ import taskinstanceDialog from '@/BIZComponents/procedure/taskinstanceDialog.vue';
|
|
|
|
|
|
-export default {
|
|
|
- mixins: [dictMixins],
|
|
|
- props: {
|
|
|
- needInquiry: {
|
|
|
- type: Number,
|
|
|
- default: 1
|
|
|
+ export default {
|
|
|
+ mixins: [dictMixins],
|
|
|
+ props: {
|
|
|
+ needInquiry: {
|
|
|
+ type: Number,
|
|
|
+ default: 1
|
|
|
+ },
|
|
|
+ detailType: {
|
|
|
+ type: Number,
|
|
|
+ default: 0
|
|
|
+ }
|
|
|
},
|
|
|
- detailType: {
|
|
|
- type: Number,
|
|
|
- default: 0
|
|
|
- }
|
|
|
- },
|
|
|
- components: {
|
|
|
- taskinstanceDialog,
|
|
|
- fileMain,
|
|
|
- supplierList,
|
|
|
- productList,
|
|
|
- fileUpload,
|
|
|
- headList,
|
|
|
- timeDialog
|
|
|
- },
|
|
|
- computed: {
|
|
|
- isNeedInquiry() {
|
|
|
- if (this.needInquiry === 1) {
|
|
|
- // this.form.datasource.forEach(item => {
|
|
|
- // item.supplierCode = ''
|
|
|
- // item.supplierId = ''
|
|
|
- // item.supplierName = ''
|
|
|
- // })
|
|
|
+ components: {
|
|
|
+ taskinstanceDialog,
|
|
|
+ fileMain,
|
|
|
+ supplierList,
|
|
|
+ productList,
|
|
|
+ fileUpload,
|
|
|
+ headList,
|
|
|
+ timeDialog
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ isNeedInquiry() {
|
|
|
+ if (this.needInquiry === 1) {
|
|
|
+ // this.form.datasource.forEach(item => {
|
|
|
+ // item.supplierCode = ''
|
|
|
+ // item.supplierId = ''
|
|
|
+ // item.supplierName = ''
|
|
|
+ // })
|
|
|
+ }
|
|
|
+ return this.needInquiry;
|
|
|
}
|
|
|
- return this.needInquiry;
|
|
|
- }
|
|
|
- },
|
|
|
- data() {
|
|
|
- const defaultForm = {
|
|
|
- key: null,
|
|
|
- endTime: '',
|
|
|
- isFirst: 0,
|
|
|
- name: '',
|
|
|
- supplierName: '',
|
|
|
- weightUnit: ''
|
|
|
- };
|
|
|
- return {
|
|
|
- curIndex: null,
|
|
|
- numberReg,
|
|
|
- defaultForm,
|
|
|
- arrivalWayList: [
|
|
|
- { label: '一次性到货', value: 1 },
|
|
|
- { label: '分批到货', value: 2 }
|
|
|
- ],
|
|
|
- form: {
|
|
|
- datasource: []
|
|
|
- },
|
|
|
- taskinstanceDialogFlag: false,
|
|
|
- rules: {},
|
|
|
- dictList: {},
|
|
|
- columns: [
|
|
|
- {
|
|
|
- width: 45,
|
|
|
- type: 'index',
|
|
|
- columnKey: 'index',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
- {
|
|
|
- width: 150,
|
|
|
- prop: 'productCategoryName',
|
|
|
- label: '分类',
|
|
|
- slot: 'productCategoryName',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
- {
|
|
|
- width: 140,
|
|
|
- prop: 'productCode',
|
|
|
- label: '编码',
|
|
|
- slot: 'productCode',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
- {
|
|
|
- width: 240,
|
|
|
- prop: 'productName',
|
|
|
- label: '名称',
|
|
|
- slot: 'productName',
|
|
|
- headerSlot: 'headerProductName',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
- {
|
|
|
- width: 240,
|
|
|
- prop: 'taskName',
|
|
|
- label: '工序',
|
|
|
- slot: 'taskName',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
- {
|
|
|
- width: 110,
|
|
|
- prop: 'batchNo',
|
|
|
- label: '批次号',
|
|
|
- slot: 'batchNo',
|
|
|
- align: 'center'
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ const defaultForm = {
|
|
|
+ key: null,
|
|
|
+ endTime: '',
|
|
|
+ isFirst: 0,
|
|
|
+ name: '',
|
|
|
+ supplierName: '',
|
|
|
+ weightUnit: ''
|
|
|
+ };
|
|
|
+ return {
|
|
|
+ curIndex: null,
|
|
|
+ numberReg,
|
|
|
+ defaultForm,
|
|
|
+ arrivalWayList: [
|
|
|
+ { label: '一次性到货', value: 1 },
|
|
|
+ { label: '分批到货', value: 2 }
|
|
|
+ ],
|
|
|
+ form: {
|
|
|
+ datasource: []
|
|
|
},
|
|
|
- {
|
|
|
+ taskinstanceDialogFlag: false,
|
|
|
+ rules: {},
|
|
|
+ dictList: {},
|
|
|
+ columns: [
|
|
|
+ {
|
|
|
+ width: 45,
|
|
|
+ type: 'index',
|
|
|
+ columnKey: 'index',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 150,
|
|
|
+ prop: 'productCategoryName',
|
|
|
+ label: '分类',
|
|
|
+ slot: 'productCategoryName',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 140,
|
|
|
+ prop: 'productCode',
|
|
|
+ label: '编码',
|
|
|
+ slot: 'productCode',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 240,
|
|
|
+ prop: 'productName',
|
|
|
+ label: '名称',
|
|
|
+ slot: 'productName',
|
|
|
+ headerSlot: 'headerProductName',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 240,
|
|
|
+ prop: 'taskName',
|
|
|
+ label: '工序',
|
|
|
+ slot: 'taskName',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 110,
|
|
|
+ prop: 'batchNo',
|
|
|
+ label: '批次号',
|
|
|
+ slot: 'batchNo',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
prop: 'provenance',
|
|
|
label: '产地',
|
|
|
slot: 'provenance',
|
|
|
@@ -526,464 +525,475 @@ export default {
|
|
|
showOverflowTooltip: true,
|
|
|
minWidth: 200
|
|
|
},
|
|
|
- {
|
|
|
- width: 90,
|
|
|
- prop: 'totalCount',
|
|
|
- label: '数量',
|
|
|
- slot: 'totalCount',
|
|
|
- headerSlot: 'headerTotalCount',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
- {
|
|
|
- width: 80,
|
|
|
- prop: 'availableCountBase',
|
|
|
- label: '库存数量',
|
|
|
- slot: 'availableCountBase',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
- {
|
|
|
- width: 120,
|
|
|
- prop: 'totalWeight',
|
|
|
- label: '重量',
|
|
|
- slot: 'totalWeight',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
- {
|
|
|
- width: 160,
|
|
|
- prop: 'arrivalWay',
|
|
|
- label: '到货方式',
|
|
|
- slot: 'arrivalWay',
|
|
|
- headerSlot: 'headerArrivalWay',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
- {
|
|
|
- width: 170,
|
|
|
- prop: 'expectReceiveDate',
|
|
|
- label: '到货日期',
|
|
|
- slot: 'expectReceiveDate',
|
|
|
- headerSlot: 'headerExpectReceiveDate',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
+ {
|
|
|
+ width: 150,
|
|
|
+ prop: 'reqTotalCount',
|
|
|
+ label: '需求数量',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 90,
|
|
|
+ prop: 'totalCount',
|
|
|
+ label: '数量',
|
|
|
+ slot: 'totalCount',
|
|
|
+ headerSlot: 'headerTotalCount',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 80,
|
|
|
+ prop: 'availableCountBase',
|
|
|
+ label: '库存数量',
|
|
|
+ slot: 'availableCountBase',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 120,
|
|
|
+ prop: 'totalWeight',
|
|
|
+ label: '重量',
|
|
|
+ slot: 'totalWeight',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 160,
|
|
|
+ prop: 'arrivalWay',
|
|
|
+ label: '到货方式',
|
|
|
+ slot: 'arrivalWay',
|
|
|
+ headerSlot: 'headerArrivalWay',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 170,
|
|
|
+ prop: 'expectReceiveDate',
|
|
|
+ label: '到货日期',
|
|
|
+ slot: 'expectReceiveDate',
|
|
|
+ headerSlot: 'headerExpectReceiveDate',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
|
|
|
- {
|
|
|
- width: 130,
|
|
|
- prop: 'supplierName',
|
|
|
- label: '供应商',
|
|
|
- slot: 'supplierName',
|
|
|
- // headerSlot: 'headerSupplierName',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
+ {
|
|
|
+ width: 130,
|
|
|
+ prop: 'supplierName',
|
|
|
+ label: '供应商',
|
|
|
+ slot: 'supplierName',
|
|
|
+ // headerSlot: 'headerSupplierName',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
|
|
|
- {
|
|
|
- width: 130,
|
|
|
- prop: 'brand',
|
|
|
- label: '品牌',
|
|
|
- slot: 'brand',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
- // {
|
|
|
- // width: 120,
|
|
|
- // prop: 'singleWeight',
|
|
|
- // label: '单重',
|
|
|
- // slot: 'singleWeight',
|
|
|
- // align: 'center'
|
|
|
- // },
|
|
|
+ {
|
|
|
+ width: 130,
|
|
|
+ prop: 'brand',
|
|
|
+ label: '品牌',
|
|
|
+ slot: 'brand',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ // {
|
|
|
+ // width: 120,
|
|
|
+ // prop: 'singleWeight',
|
|
|
+ // label: '单重',
|
|
|
+ // slot: 'singleWeight',
|
|
|
+ // align: 'center'
|
|
|
+ // },
|
|
|
|
|
|
- {
|
|
|
- width: 160,
|
|
|
- prop: 'technicalDrawings',
|
|
|
- label: '图纸附件',
|
|
|
- slot: 'technicalDrawings'
|
|
|
- },
|
|
|
- {
|
|
|
- width: 160,
|
|
|
- prop: 'files',
|
|
|
- label: '附件',
|
|
|
- slot: 'files'
|
|
|
- },
|
|
|
- {
|
|
|
- width: 150,
|
|
|
- prop: 'productBrand',
|
|
|
- label: '牌号',
|
|
|
- slot: 'productBrand',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
- {
|
|
|
- width: 130,
|
|
|
- prop: 'modelType',
|
|
|
- label: '型号',
|
|
|
- slot: 'modelType',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
+ {
|
|
|
+ width: 160,
|
|
|
+ prop: 'technicalDrawings',
|
|
|
+ label: '图纸附件',
|
|
|
+ slot: 'technicalDrawings'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 160,
|
|
|
+ prop: 'files',
|
|
|
+ label: '附件',
|
|
|
+ slot: 'files'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 150,
|
|
|
+ prop: 'productBrand',
|
|
|
+ label: '牌号',
|
|
|
+ slot: 'productBrand',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 130,
|
|
|
+ prop: 'modelType',
|
|
|
+ label: '型号',
|
|
|
+ slot: 'modelType',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
|
|
|
- {
|
|
|
- width: 120,
|
|
|
- prop: 'specification',
|
|
|
- label: '规格',
|
|
|
- slot: 'specification',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
- {
|
|
|
- width: 120,
|
|
|
- prop: 'imgCode',
|
|
|
- align: 'center',
|
|
|
- label: '图号/件号',
|
|
|
- showOverflowTooltip: true
|
|
|
- },
|
|
|
- {
|
|
|
- width: 120,
|
|
|
- prop: 'produceType',
|
|
|
- align: 'center',
|
|
|
- label: '生产类型',
|
|
|
- showOverflowTooltip: true,
|
|
|
- formatter: (row, column) => {
|
|
|
- return row.produceType && row.produceType.length
|
|
|
- ? row.produceType
|
|
|
- .map((item) => this.getDictV('productionType', item + ''))
|
|
|
- .join(',')
|
|
|
- : '';
|
|
|
- }
|
|
|
- },
|
|
|
- {
|
|
|
- width: 120,
|
|
|
- prop: 'approvalNumber',
|
|
|
- align: 'center',
|
|
|
- label: '批准文号',
|
|
|
- showOverflowTooltip: true
|
|
|
- },
|
|
|
- {
|
|
|
- width: 120,
|
|
|
- prop: 'packingSpecification',
|
|
|
- align: 'center',
|
|
|
- label: '包装规格',
|
|
|
- showOverflowTooltip: true
|
|
|
- },
|
|
|
+ {
|
|
|
+ width: 120,
|
|
|
+ prop: 'specification',
|
|
|
+ label: '规格',
|
|
|
+ slot: 'specification',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 120,
|
|
|
+ prop: 'imgCode',
|
|
|
+ align: 'center',
|
|
|
+ label: '图号/件号',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 120,
|
|
|
+ prop: 'produceType',
|
|
|
+ align: 'center',
|
|
|
+ label: '生产类型',
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ formatter: (row, column) => {
|
|
|
+ return row.produceType && row.produceType.length
|
|
|
+ ? row.produceType
|
|
|
+ .map((item) => this.getDictV('productionType', item + ''))
|
|
|
+ .join(',')
|
|
|
+ : '';
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 120,
|
|
|
+ prop: 'approvalNumber',
|
|
|
+ align: 'center',
|
|
|
+ label: '批准文号',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ width: 120,
|
|
|
+ prop: 'packingSpecification',
|
|
|
+ align: 'center',
|
|
|
+ label: '包装规格',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
|
|
|
- {
|
|
|
- width: 100,
|
|
|
- prop: 'measuringUnit',
|
|
|
- label: '单位',
|
|
|
- slot: 'measuringUnit',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
+ {
|
|
|
+ width: 100,
|
|
|
+ prop: 'measuringUnit',
|
|
|
+ label: '单位',
|
|
|
+ slot: 'measuringUnit',
|
|
|
+ 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() {
|
|
|
- this.getDictList('productionType');
|
|
|
- },
|
|
|
- methods: {
|
|
|
- getDictV(code, val) {
|
|
|
- if (!this.dictList[code]) return '';
|
|
|
- return this.dictList[code].find((item) => item.value == val)?.label;
|
|
|
- },
|
|
|
- async getDictList(code) {
|
|
|
- let { data: res } = await getByCode(code);
|
|
|
- this.dictList[code] = res.map((item) => {
|
|
|
- let values = Object.keys(item);
|
|
|
- return {
|
|
|
- value: values[0],
|
|
|
- label: item[values[0]]
|
|
|
- };
|
|
|
- });
|
|
|
- },
|
|
|
- // 返回列表数据
|
|
|
- getTableValue() {
|
|
|
- let comitDatasource = this.form.datasource;
|
|
|
- if (comitDatasource.length === 0) return [];
|
|
|
- comitDatasource.forEach((v) => {
|
|
|
- v.totalPrice = (v.totalCount * v.singlePrice)?.toFixed(2) || 0;
|
|
|
- v.files = v.files || [];
|
|
|
- v.technicalDrawings = v.technicalDrawings || [];
|
|
|
- v.arrivalBatch = v.arrivalBatch || [];
|
|
|
- v.detailType = this.detailType;
|
|
|
- });
|
|
|
- return comitDatasource;
|
|
|
+ {
|
|
|
+ width: 220,
|
|
|
+ prop: 'remark',
|
|
|
+ label: '备注',
|
|
|
+ slot: 'remark',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ columnKey: 'action',
|
|
|
+ label: '操作',
|
|
|
+ width: 120,
|
|
|
+ align: 'center',
|
|
|
+ resizable: false,
|
|
|
+ slot: 'action',
|
|
|
+ fixed: 'right',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ };
|
|
|
},
|
|
|
- //计算单重
|
|
|
- singleWeightChange(row, index) {
|
|
|
- if (row && row.singleWeight && row.totalCount) {
|
|
|
- row.totalWeight = (row.singleWeight * row.totalCount).toFixed(2) || 0;
|
|
|
- this.$set(this.form.datasource[index], 'totalWeight', row.totalWeight);
|
|
|
- }
|
|
|
+ created() {
|
|
|
+ this.getDictList('productionType');
|
|
|
},
|
|
|
- //修改回显
|
|
|
- async putTableValue(data) {
|
|
|
- if (data && data?.length) {
|
|
|
- this.form.datasource = [];
|
|
|
- data.forEach((row) => {
|
|
|
- row['arrivalWay']=row.arrivalWay||1
|
|
|
- let item = JSON.parse(JSON.stringify(row));
|
|
|
- item.key = this.form.datasource.length + 1;
|
|
|
- item = {
|
|
|
- ...this.defaultForm,
|
|
|
- ...item
|
|
|
+ methods: {
|
|
|
+ getDictV(code, val) {
|
|
|
+ if (!this.dictList[code]) return '';
|
|
|
+ return this.dictList[code].find((item) => item.value == val)?.label;
|
|
|
+ },
|
|
|
+ async getDictList(code) {
|
|
|
+ let { data: res } = await getByCode(code);
|
|
|
+ this.dictList[code] = res.map((item) => {
|
|
|
+ let values = Object.keys(item);
|
|
|
+ return {
|
|
|
+ value: values[0],
|
|
|
+ label: item[values[0]]
|
|
|
};
|
|
|
- this.form.datasource.push(item);
|
|
|
});
|
|
|
- let codeList = this.form.datasource.map((item) => item.productCode);
|
|
|
- //获取仓库库存
|
|
|
- let inventoryTotalList = await getInventoryTotalAPI(codeList);
|
|
|
- this.form.datasource.forEach((item) => {
|
|
|
- let find =
|
|
|
- inventoryTotalList.find((key) => key.code == item.productCode) ||
|
|
|
- {};
|
|
|
- item.availableCountBase = find.availableCountBase;
|
|
|
+ },
|
|
|
+ // 返回列表数据
|
|
|
+ getTableValue() {
|
|
|
+ let comitDatasource = this.form.datasource;
|
|
|
+ if (comitDatasource.length === 0) return [];
|
|
|
+ comitDatasource.forEach((v) => {
|
|
|
+ v.totalPrice = (v.totalCount * v.singlePrice)?.toFixed(2) || 0;
|
|
|
+ v.files = v.files || [];
|
|
|
+ v.technicalDrawings = v.technicalDrawings || [];
|
|
|
+ v.arrivalBatch = v.arrivalBatch || [];
|
|
|
+ v.detailType = this.detailType;
|
|
|
});
|
|
|
- this.$refs.table.reload();
|
|
|
- }
|
|
|
- },
|
|
|
- handleMethod(row, index) {
|
|
|
- this.curIndex = index;
|
|
|
- this.$refs.timeDialogRef.open(row, index);
|
|
|
- },
|
|
|
- chooseTime(row, arrivalBatch) {
|
|
|
- row.arrivalBatch = copyObj(arrivalBatch);
|
|
|
- this.$set(
|
|
|
- this.form.datasource[this.curIndex],
|
|
|
- 'arrivalBatch',
|
|
|
- copyObj(arrivalBatch)
|
|
|
- );
|
|
|
- },
|
|
|
- handleTaskinstance(row, index) {
|
|
|
- this.taskinstanceDialogFlag = true;
|
|
|
- this.$nextTick(() => {
|
|
|
- this.$refs.taskinstanceDialogRef.open(row, index);
|
|
|
- });
|
|
|
- },
|
|
|
- saveTaskInstance(row = {}) {
|
|
|
- this.$set(this.form.datasource[row.index], 'taskId', row.id);
|
|
|
- this.$set(this.form.datasource[row.index], 'taskName', row.name);
|
|
|
- this.$set(
|
|
|
- this.form.datasource[row.index],
|
|
|
- 'routingId',
|
|
|
- row.produceRoutingId
|
|
|
- );
|
|
|
- },
|
|
|
- //获取供应商信息
|
|
|
- handleGetSup(e, row, index) {
|
|
|
- this.curIndex = index;
|
|
|
- if (e.target.nodeName == 'I') {
|
|
|
- this.$set(this.form.datasource[this.curIndex], 'supplierCode', '');
|
|
|
- this.$set(this.form.datasource[this.curIndex], 'supplierId', '');
|
|
|
- this.$set(this.form.datasource[this.curIndex], 'supplierName', '');
|
|
|
- return;
|
|
|
- }
|
|
|
- let item = { id: row.supplierId };
|
|
|
- this.$refs.supplierListRef.open(item);
|
|
|
- },
|
|
|
- //选择供应商信息回调
|
|
|
- getSupInfo(obj) {
|
|
|
- let params = {
|
|
|
- supplierCode: obj.code,
|
|
|
- supplierId: obj.id,
|
|
|
- supplierName: obj.name
|
|
|
- };
|
|
|
- this.$set(
|
|
|
- this.form.datasource[this.curIndex],
|
|
|
- 'supplierCode',
|
|
|
- params.supplierCode
|
|
|
- );
|
|
|
- this.$set(
|
|
|
- this.form.datasource[this.curIndex],
|
|
|
- 'supplierId',
|
|
|
- params.supplierId
|
|
|
- );
|
|
|
- this.$set(
|
|
|
- this.form.datasource[this.curIndex],
|
|
|
- 'supplierName',
|
|
|
- params.supplierName
|
|
|
- );
|
|
|
- },
|
|
|
- //选择产品
|
|
|
- handParent(row, index) {
|
|
|
- // let item = {
|
|
|
- // id: row.productCode
|
|
|
- // };
|
|
|
- this.$refs.productListRef.open(this.form.datasource, 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);
|
|
|
- },
|
|
|
- getSelectionCbom(obj, idx = -1) {
|
|
|
- obj.forEach((item, index) => {
|
|
|
- let i = idx == -1 ? index : idx;
|
|
|
- let row = JSON.parse(JSON.stringify(this.defaultForm));
|
|
|
- row.key = this.form.datasource.length + 1;
|
|
|
- let parasm = idx == -1 ? row : this.form.datasource[i];
|
|
|
- this.$set(parasm, 'productId', item.id);
|
|
|
- // this.$set(parasm, 'id', item.id);
|
|
|
- this.$set(parasm, 'categoryName', item.name);
|
|
|
- this.$set(parasm, 'productCategoryId', item.categoryLevelId);
|
|
|
- this.$set(parasm, 'productBrand', item.brandNum);
|
|
|
+ return comitDatasource;
|
|
|
+ },
|
|
|
+ //计算单重
|
|
|
+ singleWeightChange(row, index) {
|
|
|
+ if (row && row.singleWeight && row.totalCount) {
|
|
|
+ row.totalWeight = (row.singleWeight * row.totalCount).toFixed(2) || 0;
|
|
|
+ this.$set(
|
|
|
+ this.form.datasource[index],
|
|
|
+ 'totalWeight',
|
|
|
+ row.totalWeight
|
|
|
+ );
|
|
|
+ }
|
|
|
+ },
|
|
|
+ //修改回显
|
|
|
+ async putTableValue(data) {
|
|
|
+ if (data && data?.length) {
|
|
|
+ this.form.datasource = [];
|
|
|
+ data.forEach((row) => {
|
|
|
+ row['reqTotalCount']=row['reqTotalCount']||row.totalCount
|
|
|
+ row['arrivalWay'] = row.arrivalWay || 1;
|
|
|
+ let item = JSON.parse(JSON.stringify(row));
|
|
|
+ item.key = this.form.datasource.length + 1;
|
|
|
+ item = {
|
|
|
+ ...this.defaultForm,
|
|
|
+ ...item
|
|
|
+ };
|
|
|
+ this.form.datasource.push(item);
|
|
|
+ });
|
|
|
+ let codeList = this.form.datasource.map((item) => item.productCode);
|
|
|
+ //获取仓库库存
|
|
|
+ let inventoryTotalList = await getInventoryTotalAPI(codeList);
|
|
|
+ this.form.datasource.forEach((item) => {
|
|
|
+ let find =
|
|
|
+ inventoryTotalList.find((key) => key.code == item.productCode) ||
|
|
|
+ {};
|
|
|
+ item.availableCountBase = find.availableCountBase;
|
|
|
+ });
|
|
|
+ this.$refs.table.reload();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ handleMethod(row, index) {
|
|
|
+ this.curIndex = index;
|
|
|
+ this.$refs.timeDialogRef.open(row, index);
|
|
|
+ },
|
|
|
+ chooseTime(row, arrivalBatch) {
|
|
|
+ row.arrivalBatch = copyObj(arrivalBatch);
|
|
|
this.$set(
|
|
|
- parasm,
|
|
|
- 'productCategoryName',
|
|
|
- item.category.categoryLevelPath
|
|
|
+ this.form.datasource[this.curIndex],
|
|
|
+ 'arrivalBatch',
|
|
|
+ copyObj(arrivalBatch)
|
|
|
);
|
|
|
- this.$set(parasm, 'totalCount', item.dosage);
|
|
|
- this.$set(parasm, 'productCode', item.code);
|
|
|
- this.$set(parasm, 'productName', item.name);
|
|
|
- this.$set(parasm, 'availableCountBase', item.availableCountBase);
|
|
|
- this.$set(parasm, 'modelType', item.modelType);
|
|
|
- this.$set(parasm, 'weightUnit', item.weightUnit);
|
|
|
- this.$set(parasm, 'measuringUnit', item.unit);
|
|
|
- this.$set(parasm, 'specification', item.specification);
|
|
|
- this.$set(parasm, 'remark', '');
|
|
|
- this.$set(parasm, 'imgCode', item.imgCode);
|
|
|
- this.$set(parasm, 'produceType', item.produceType);
|
|
|
- this.$set(parasm, 'singleWeight', item.roughWeight);
|
|
|
-
|
|
|
- this.$set(parasm, 'approvalNumber', item.extField.approvalNumber);
|
|
|
+ },
|
|
|
+ handleTaskinstance(row, index) {
|
|
|
+ this.taskinstanceDialogFlag = true;
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.taskinstanceDialogRef.open(row, index);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ saveTaskInstance(row = {}) {
|
|
|
+ this.$set(this.form.datasource[row.index], 'taskId', row.id);
|
|
|
+ this.$set(this.form.datasource[row.index], 'taskName', row.name);
|
|
|
this.$set(
|
|
|
- parasm,
|
|
|
- 'packingSpecification',
|
|
|
- item.extField.packingSpecification
|
|
|
+ this.form.datasource[row.index],
|
|
|
+ 'routingId',
|
|
|
+ row.produceRoutingId
|
|
|
);
|
|
|
- this.$set(parasm, 'provenance', item.purchaseOrigins || []);
|
|
|
- if (idx == -1) {
|
|
|
- this.form.datasource.push(row);
|
|
|
+ },
|
|
|
+ //获取供应商信息
|
|
|
+ handleGetSup(e, row, index) {
|
|
|
+ this.curIndex = index;
|
|
|
+ if (e.target.nodeName == 'I') {
|
|
|
+ this.$set(this.form.datasource[this.curIndex], 'supplierCode', '');
|
|
|
+ this.$set(this.form.datasource[this.curIndex], 'supplierId', '');
|
|
|
+ this.$set(this.form.datasource[this.curIndex], 'supplierName', '');
|
|
|
+ return;
|
|
|
}
|
|
|
- });
|
|
|
- },
|
|
|
- //选择产品回调
|
|
|
- changeParent(obj, idx) {
|
|
|
- obj.forEach((item, index) => {
|
|
|
- let i = idx == -1 ? index : idx;
|
|
|
- let row = JSON.parse(JSON.stringify(this.defaultForm));
|
|
|
- row.key = this.form.datasource.length + 1;
|
|
|
- let parasm = idx == -1 ? row : this.form.datasource[i];
|
|
|
- this.$set(parasm, 'productId', item.id);
|
|
|
- // this.$set(parasm, 'id', item.id);
|
|
|
- this.$set(parasm, 'categoryName', item.name);
|
|
|
- this.$set(parasm, 'productCategoryId', item.categoryLevelId);
|
|
|
- this.$set(parasm, 'productBrand', item.brandNum);
|
|
|
- this.$set(parasm, 'productCategoryName', item.categoryLevelPath);
|
|
|
- this.$set(parasm, 'productCode', item.code);
|
|
|
- this.$set(parasm, 'productName', item.name);
|
|
|
- this.$set(parasm, 'availableCountBase', item.availableCountBase);
|
|
|
- this.$set(parasm, 'modelType', item.modelType);
|
|
|
- this.$set(parasm, 'weightUnit', item.weightUnit);
|
|
|
- this.$set(parasm, 'measuringUnit', item.measuringUnit);
|
|
|
- this.$set(parasm, 'specification', item.specification);
|
|
|
- this.$set(parasm, 'singleWeight', item.netWeight);
|
|
|
- row['arrivalWay']=row.arrivalWay||1
|
|
|
-
|
|
|
- this.$set(parasm, 'remark', '');
|
|
|
- this.$set(parasm, 'imgCode', item.imgCode);
|
|
|
- this.$set(parasm, 'produceType', item.produceType);
|
|
|
- this.$set(parasm, 'approvalNumber', item.extField.approvalNumber);
|
|
|
+ let item = { id: row.supplierId };
|
|
|
+ this.$refs.supplierListRef.open(item);
|
|
|
+ },
|
|
|
+ //选择供应商信息回调
|
|
|
+ getSupInfo(obj) {
|
|
|
+ let params = {
|
|
|
+ supplierCode: obj.code,
|
|
|
+ supplierId: obj.id,
|
|
|
+ supplierName: obj.name
|
|
|
+ };
|
|
|
this.$set(
|
|
|
- parasm,
|
|
|
- 'packingSpecification',
|
|
|
- item.extField.packingSpecification
|
|
|
+ this.form.datasource[this.curIndex],
|
|
|
+ 'supplierCode',
|
|
|
+ params.supplierCode
|
|
|
);
|
|
|
- if (idx == -1) {
|
|
|
- this.form.datasource.push(row);
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- 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() {
|
|
|
- let item = JSON.parse(JSON.stringify(this.defaultForm));
|
|
|
- item.key = this.form.datasource.length + 1;
|
|
|
- this.form.datasource.push(item);
|
|
|
- },
|
|
|
+ this.$set(
|
|
|
+ this.form.datasource[this.curIndex],
|
|
|
+ 'supplierId',
|
|
|
+ params.supplierId
|
|
|
+ );
|
|
|
+ this.$set(
|
|
|
+ this.form.datasource[this.curIndex],
|
|
|
+ 'supplierName',
|
|
|
+ params.supplierName
|
|
|
+ );
|
|
|
+ },
|
|
|
+ //选择产品
|
|
|
+ handParent(row, index) {
|
|
|
+ // let item = {
|
|
|
+ // id: row.productCode
|
|
|
+ // };
|
|
|
+ this.$refs.productListRef.open(this.form.datasource, 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);
|
|
|
+ },
|
|
|
+ getSelectionCbom(obj, idx = -1) {
|
|
|
+ obj.forEach((item, index) => {
|
|
|
+ let i = idx == -1 ? index : idx;
|
|
|
+ let row = JSON.parse(JSON.stringify(this.defaultForm));
|
|
|
+ row.key = this.form.datasource.length + 1;
|
|
|
+ let parasm = idx == -1 ? row : this.form.datasource[i];
|
|
|
+ this.$set(parasm, 'productId', item.id);
|
|
|
+ // this.$set(parasm, 'id', item.id);
|
|
|
+ this.$set(parasm, 'categoryName', item.name);
|
|
|
+ this.$set(parasm, 'productCategoryId', item.categoryLevelId);
|
|
|
+ this.$set(parasm, 'productBrand', item.brandNum);
|
|
|
+ this.$set(
|
|
|
+ parasm,
|
|
|
+ 'productCategoryName',
|
|
|
+ item.category.categoryLevelPath
|
|
|
+ );
|
|
|
+ this.$set(parasm, 'totalCount', item.dosage);
|
|
|
+ this.$set(parasm, 'productCode', item.code);
|
|
|
+ this.$set(parasm, 'productName', item.name);
|
|
|
+ this.$set(parasm, 'availableCountBase', item.availableCountBase);
|
|
|
+ this.$set(parasm, 'modelType', item.modelType);
|
|
|
+ this.$set(parasm, 'weightUnit', item.weightUnit);
|
|
|
+ this.$set(parasm, 'measuringUnit', item.unit);
|
|
|
+ this.$set(parasm, 'specification', item.specification);
|
|
|
+ this.$set(parasm, 'remark', '');
|
|
|
+ this.$set(parasm, 'imgCode', item.imgCode);
|
|
|
+ this.$set(parasm, 'produceType', item.produceType);
|
|
|
+ this.$set(parasm, 'singleWeight', item.roughWeight);
|
|
|
|
|
|
- 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);
|
|
|
+ this.$set(parasm, 'approvalNumber', item.extField.approvalNumber);
|
|
|
+ this.$set(
|
|
|
+ parasm,
|
|
|
+ 'packingSpecification',
|
|
|
+ item.extField.packingSpecification
|
|
|
+ );
|
|
|
+ this.$set(parasm, 'provenance', item.purchaseOrigins || []);
|
|
|
+ if (idx == -1) {
|
|
|
+ this.form.datasource.push(row);
|
|
|
}
|
|
|
- }
|
|
|
- callback(valid);
|
|
|
- });
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //选择产品回调
|
|
|
+ changeParent(obj, idx) {
|
|
|
+ obj.forEach((item, index) => {
|
|
|
+ let i = idx == -1 ? index : idx;
|
|
|
+ let row = JSON.parse(JSON.stringify(this.defaultForm));
|
|
|
+ row.key = this.form.datasource.length + 1;
|
|
|
+ let parasm = idx == -1 ? row : this.form.datasource[i];
|
|
|
+ this.$set(parasm, 'productId', item.id);
|
|
|
+ // this.$set(parasm, 'id', item.id);
|
|
|
+ this.$set(parasm, 'categoryName', item.name);
|
|
|
+ this.$set(parasm, 'productCategoryId', item.categoryLevelId);
|
|
|
+ this.$set(parasm, 'productBrand', item.brandNum);
|
|
|
+ this.$set(parasm, 'productCategoryName', item.categoryLevelPath);
|
|
|
+ this.$set(parasm, 'productCode', item.code);
|
|
|
+ this.$set(parasm, 'productName', item.name);
|
|
|
+ this.$set(parasm, 'availableCountBase', item.availableCountBase);
|
|
|
+ this.$set(parasm, 'modelType', item.modelType);
|
|
|
+ this.$set(parasm, 'weightUnit', item.weightUnit);
|
|
|
+ this.$set(parasm, 'measuringUnit', item.measuringUnit);
|
|
|
+ this.$set(parasm, 'specification', item.specification);
|
|
|
+ this.$set(parasm, 'singleWeight', item.netWeight);
|
|
|
+ row['arrivalWay'] = row.arrivalWay || 1;
|
|
|
+
|
|
|
+ this.$set(parasm, 'remark', '');
|
|
|
+ this.$set(parasm, 'imgCode', item.imgCode);
|
|
|
+ this.$set(parasm, 'produceType', item.produceType);
|
|
|
+ this.$set(parasm, 'approvalNumber', item.extField.approvalNumber);
|
|
|
+ this.$set(
|
|
|
+ parasm,
|
|
|
+ 'packingSpecification',
|
|
|
+ item.extField.packingSpecification
|
|
|
+ );
|
|
|
+ if (idx == -1) {
|
|
|
+ this.form.datasource.push(row);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ 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() {
|
|
|
+ let item = JSON.parse(JSON.stringify(this.defaultForm));
|
|
|
+ item.key = this.form.datasource.length + 1;
|
|
|
+ this.form.datasource.push(item);
|
|
|
+ },
|
|
|
+
|
|
|
+ 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);
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
-};
|
|
|
+ };
|
|
|
</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;
|
|
|
+ .amount {
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: bold;
|
|
|
+ }
|
|
|
}
|
|
|
-}
|
|
|
|
|
|
-.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;
|
|
|
+ }
|
|
|
</style>
|