|
|
@@ -1,7 +1,20 @@
|
|
|
<template>
|
|
|
- <ele-modal :visible.sync="visible" :closed="cancel" :title="`${type == 'add' ? '创建' : '编辑'}采购配料计划`"
|
|
|
- custom-class="ele-dialog-form" :close-on-click-modal="true" :close-on-press-escape="false" width="80%">
|
|
|
- <el-form :model="formData" ref="formRef" label-width="120px" class="ele-body" :rules="rules">
|
|
|
+ <ele-modal
|
|
|
+ :visible.sync="visible"
|
|
|
+ :closed="cancel"
|
|
|
+ :title="`${type == 'add' ? '创建' : '编辑'}采购配料计划`"
|
|
|
+ custom-class="ele-dialog-form"
|
|
|
+ :close-on-click-modal="true"
|
|
|
+ :close-on-press-escape="false"
|
|
|
+ width="80%"
|
|
|
+ >
|
|
|
+ <el-form
|
|
|
+ :model="formData"
|
|
|
+ ref="formRef"
|
|
|
+ label-width="120px"
|
|
|
+ class="ele-body"
|
|
|
+ :rules="rules"
|
|
|
+ >
|
|
|
<el-row :gutter="32">
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="配料计划名称" prop="name">
|
|
|
@@ -14,47 +27,60 @@
|
|
|
<el-input placeholder="备注" v-model="formData.remark"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
</el-row>
|
|
|
</el-form>
|
|
|
|
|
|
<el-form :model="formData" ref="tableForm">
|
|
|
-
|
|
|
- <ele-pro-table ref="table" :needPage="false" :columns="columns" row-key="id">
|
|
|
-
|
|
|
-
|
|
|
+ <ele-pro-table
|
|
|
+ ref="table"
|
|
|
+ :needPage="false"
|
|
|
+ :columns="columns"
|
|
|
+ row-key="id"
|
|
|
+ >
|
|
|
<template v-slot:toolbar>
|
|
|
- <el-button size="small" type="primary" icon="el-icon-plus" class="ele-btn-icon" @click="showAdd">
|
|
|
+ <el-button
|
|
|
+ size="small"
|
|
|
+ type="primary"
|
|
|
+ icon="el-icon-plus"
|
|
|
+ class="ele-btn-icon"
|
|
|
+ @click="showAdd"
|
|
|
+ >
|
|
|
添加销售订单
|
|
|
</el-button>
|
|
|
</template>
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
<template v-slot:code="{ row }">
|
|
|
- <el-input placeholder="请输入" readonly :value="row.code || row.salesOrderCode"></el-input>
|
|
|
+ <el-input
|
|
|
+ placeholder="请输入"
|
|
|
+ readonly
|
|
|
+ :value="row.code || row.salesOrderCode"
|
|
|
+ ></el-input>
|
|
|
</template>
|
|
|
|
|
|
-
|
|
|
-
|
|
|
<template v-slot:productionPlanId="{ row }">
|
|
|
- <el-link type="primary" v-if="!row.productionPlanId" :underline="false"
|
|
|
- @click.native="openVersion(row)">选择</el-link>
|
|
|
+ <el-link
|
|
|
+ type="primary"
|
|
|
+ v-if="!row.productionPlanId"
|
|
|
+ :underline="false"
|
|
|
+ @click.native="openVersion(row)"
|
|
|
+ >选择</el-link
|
|
|
+ >
|
|
|
</template>
|
|
|
|
|
|
-
|
|
|
-
|
|
|
<template v-slot:action="{ row, $index }">
|
|
|
<template>
|
|
|
- <el-link type="primary" :underline="false" @click="categorySelect(row)">
|
|
|
+ <el-link
|
|
|
+ type="primary"
|
|
|
+ :underline="false"
|
|
|
+ @click="categorySelect(row)"
|
|
|
+ >
|
|
|
添加物料
|
|
|
</el-link>
|
|
|
- <el-popconfirm class="ele-action" title="确定要删除此销售订单吗?" @confirm="remove(row, $index)">
|
|
|
+ <el-popconfirm
|
|
|
+ class="ele-action"
|
|
|
+ title="确定要删除此销售订单吗?"
|
|
|
+ @confirm="remove(row, $index)"
|
|
|
+ >
|
|
|
<template v-slot:reference>
|
|
|
<el-link type="danger" :underline="false" icon="el-icon-delete">
|
|
|
删除
|
|
|
@@ -64,650 +90,654 @@
|
|
|
</template>
|
|
|
</template>
|
|
|
|
|
|
-
|
|
|
<!-- 展开内容 -->
|
|
|
- <template v-slot:expand="{ row, $index }">
|
|
|
- <div style="width:calc(100% - 95px); min-height: 60px; margin-left: 95px;" v-if="row.materialList.length > 0">
|
|
|
- <ele-pro-table :toolbar="false" toolsTheme="none" ref="table2" :need-page="false"
|
|
|
- :datasource="row.materialList" :columns="columns2" :key="row.categoryId + '-'+ $index">
|
|
|
-
|
|
|
-
|
|
|
+ <template v-slot:expand="{ row, $index }">
|
|
|
+ <div
|
|
|
+ style="
|
|
|
+ width: calc(100% - 95px);
|
|
|
+ min-height: 60px;
|
|
|
+ margin-left: 95px;
|
|
|
+ "
|
|
|
+ v-if="row.materialList.length > 0"
|
|
|
+ >
|
|
|
+ <ele-pro-table
|
|
|
+ :toolbar="false"
|
|
|
+ toolsTheme="none"
|
|
|
+ ref="table2"
|
|
|
+ :need-page="false"
|
|
|
+ :datasource="row.materialList"
|
|
|
+ :columns="columns2"
|
|
|
+ :key="row.categoryId + '-' + $index"
|
|
|
+ >
|
|
|
<template v-slot:sort="{ $index }">
|
|
|
{{ $index }}
|
|
|
</template>
|
|
|
|
|
|
<template v-slot:unit="{ row }">
|
|
|
- {{ row.unit }}
|
|
|
+ {{ row.unit }}
|
|
|
</template>
|
|
|
|
|
|
-
|
|
|
<template v-slot:demandQuantity="{ row }">
|
|
|
- <el-input v-model="row.demandQuantity" placeholder="请输入" @input="(value) =>
|
|
|
- (row.demandQuantity = value.replace(
|
|
|
- /^(-)*(\d+)\.(\d\d\d\d\d\d).*$/,
|
|
|
- '$1$2.$3'
|
|
|
- ))
|
|
|
- "></el-input>
|
|
|
+ <el-input
|
|
|
+ v-model="row.demandQuantity"
|
|
|
+ placeholder="请输入"
|
|
|
+ @input="
|
|
|
+ (value) =>
|
|
|
+ (row.demandQuantity = value.replace(
|
|
|
+ /^(-)*(\d+)\.(\d\d\d\d\d\d).*$/,
|
|
|
+ '$1$2.$3'
|
|
|
+ ))
|
|
|
+ "
|
|
|
+ ></el-input>
|
|
|
</template>
|
|
|
|
|
|
-
|
|
|
<template v-slot:purchaseQuantity="{ row }">
|
|
|
- <el-input v-model="row.purchaseQuantity" placeholder="请输入" @input="(value) =>
|
|
|
- (row.purchaseQuantity = value.replace(
|
|
|
- /^(-)*(\d+)\.(\d\d\d\d\d\d).*$/,
|
|
|
- '$1$2.$3'
|
|
|
- ))
|
|
|
- "></el-input>
|
|
|
+ <el-input
|
|
|
+ v-model="row.purchaseQuantity"
|
|
|
+ placeholder="请输入"
|
|
|
+ @input="
|
|
|
+ (value) =>
|
|
|
+ (row.purchaseQuantity = value.replace(
|
|
|
+ /^(-)*(\d+)\.(\d\d\d\d\d\d).*$/,
|
|
|
+ '$1$2.$3'
|
|
|
+ ))
|
|
|
+ "
|
|
|
+ ></el-input>
|
|
|
</template>
|
|
|
|
|
|
<template v-slot:deliveryMethod="{ row }">
|
|
|
- <el-select clearable class="ele-block" v-model="row.deliveryMethod" placeholder="请选择">
|
|
|
- <el-option label="一次性到货" :value="1" @click.native="row.timeList = null" />
|
|
|
- <el-option label="分批到货" :value="2" @click.native="handleMethod(row); row.requireDeliveryTime= null" />
|
|
|
+ <el-select
|
|
|
+ clearable
|
|
|
+ class="ele-block"
|
|
|
+ v-model="row.deliveryMethod"
|
|
|
+ placeholder="请选择"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ label="一次性到货"
|
|
|
+ :value="1"
|
|
|
+ @click.native="row.timeList = null"
|
|
|
+ />
|
|
|
+ <el-option
|
|
|
+ label="分批到货"
|
|
|
+ :value="2"
|
|
|
+ @click.native="
|
|
|
+ handleMethod(row);
|
|
|
+ row.requireDeliveryTime = null;
|
|
|
+ "
|
|
|
+ />
|
|
|
</el-select>
|
|
|
</template>
|
|
|
|
|
|
- <template v-slot:requireDeliveryTime="{ row }" >
|
|
|
- <el-date-picker style="width: 100%" clearable v-model="row.requireDeliveryTime" type="date"
|
|
|
- v-if="row.deliveryMethod == 1" value-format="yyyy-MM-dd" placeholder="请选择日期">
|
|
|
+ <template v-slot:requireDeliveryTime="{ row }">
|
|
|
+ <el-date-picker
|
|
|
+ style="width: 100%"
|
|
|
+ clearable
|
|
|
+ v-model="row.requireDeliveryTime"
|
|
|
+ type="date"
|
|
|
+ v-if="row.deliveryMethod == 1"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ placeholder="请选择日期"
|
|
|
+ >
|
|
|
</el-date-picker>
|
|
|
|
|
|
- <el-link type="primary" :underline="false" v-if="row.deliveryMethod == 2"
|
|
|
- @click.native="handleMethod(row)">
|
|
|
+ <el-link
|
|
|
+ type="primary"
|
|
|
+ :underline="false"
|
|
|
+ v-if="row.deliveryMethod == 2"
|
|
|
+ @click.native="handleMethod(row)"
|
|
|
+ >
|
|
|
设置分批时间
|
|
|
</el-link>
|
|
|
</template>
|
|
|
|
|
|
-
|
|
|
-
|
|
|
<template v-slot:imgUrl="{ row }">
|
|
|
- <fileUpload v-model="row.imgUrl" module="main" :showLib="false" :limit="1" />
|
|
|
+ <fileUpload
|
|
|
+ v-model="row.imgUrl"
|
|
|
+ module="main"
|
|
|
+ :showLib="false"
|
|
|
+ :limit="1"
|
|
|
+ />
|
|
|
</template>
|
|
|
|
|
|
<template v-slot:files="{ row }">
|
|
|
- <fileUpload v-model="row.files" module="main" :showLib="false" :limit="1" />
|
|
|
+ <fileUpload
|
|
|
+ v-model="row.files"
|
|
|
+ module="main"
|
|
|
+ :showLib="false"
|
|
|
+ :limit="1"
|
|
|
+ />
|
|
|
</template>
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
<template v-slot:action="{ row }">
|
|
|
- <el-popconfirm class="ele-action" title="确定要删除当前物料吗?" @confirm="remove2(row)">
|
|
|
+ <el-popconfirm
|
|
|
+ class="ele-action"
|
|
|
+ title="确定要删除当前物料吗?"
|
|
|
+ @confirm="remove2(row)"
|
|
|
+ >
|
|
|
<template v-slot:reference>
|
|
|
- <el-link type="danger" :underline="false" icon="el-icon-delete">
|
|
|
+ <el-link
|
|
|
+ type="danger"
|
|
|
+ :underline="false"
|
|
|
+ icon="el-icon-delete"
|
|
|
+ >
|
|
|
删除
|
|
|
</el-link>
|
|
|
</template>
|
|
|
</el-popconfirm>
|
|
|
</template>
|
|
|
-
|
|
|
</ele-pro-table>
|
|
|
</div>
|
|
|
-
|
|
|
</template>
|
|
|
-
|
|
|
-
|
|
|
</ele-pro-table>
|
|
|
-
|
|
|
</el-form>
|
|
|
|
|
|
<div slot="footer">
|
|
|
<el-button @click="cancel">取消</el-button>
|
|
|
<el-button type="primary" @click="confirm">保存</el-button>
|
|
|
-
|
|
|
</div>
|
|
|
|
|
|
-
|
|
|
<saleOrderPop ref="saleOrderRef" @chooseOrder="chooseOrder"></saleOrderPop>
|
|
|
|
|
|
-
|
|
|
-
|
|
|
<ProductModal ref="productRefs" @chooseModal="chooseModal" />
|
|
|
|
|
|
- <ProductionVersion ref="versionRefs" @changeProduct="changeProduct"></ProductionVersion>
|
|
|
+ <ProductionVersion
|
|
|
+ ref="versionRefs"
|
|
|
+ @changeProduct="changeProduct"
|
|
|
+ ></ProductionVersion>
|
|
|
|
|
|
<timeDialog ref="timeDialogRef" @chooseTime="chooseTime"></timeDialog>
|
|
|
-
|
|
|
</ele-modal>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
+ import saleOrderPop from './saleOrderPop.vue';
|
|
|
+ import ProductModal from './ProductModal.vue';
|
|
|
+ import {
|
|
|
+ listBomBySalesOrderIds,
|
|
|
+ listBomBySalesOrderId,
|
|
|
+ save,
|
|
|
+ getById
|
|
|
+ } from '@/api/materialPlan/index';
|
|
|
+ import ProductionVersion from '@/components/CreatePlan/ProductionVersion2.vue';
|
|
|
+ import fileUpload from '@/components/upload/fileUpload';
|
|
|
+ import timeDialog from './timeDialog';
|
|
|
+ export default {
|
|
|
+ components: {
|
|
|
+ saleOrderPop,
|
|
|
+ ProductModal,
|
|
|
+ ProductionVersion,
|
|
|
+ fileUpload,
|
|
|
+ timeDialog
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ visible: false,
|
|
|
+ type: 'add',
|
|
|
|
|
|
-import saleOrderPop from './saleOrderPop.vue'
|
|
|
-import ProductModal from './ProductModal.vue'
|
|
|
-import { listBomBySalesOrderIds, listBomBySalesOrderId, save, getById } from '@/api/materialPlan/index';
|
|
|
-import ProductionVersion from '@/components/CreatePlan/ProductionVersion2.vue';
|
|
|
-import fileUpload from '@/components/upload/fileUpload';
|
|
|
-import timeDialog from './timeDialog'
|
|
|
-export default {
|
|
|
- components: {
|
|
|
- saleOrderPop,
|
|
|
- ProductModal,
|
|
|
- ProductionVersion,
|
|
|
- fileUpload,
|
|
|
- timeDialog
|
|
|
-
|
|
|
- },
|
|
|
- data() {
|
|
|
-
|
|
|
- return {
|
|
|
- visible: false,
|
|
|
- type: 'add',
|
|
|
-
|
|
|
- tableData: [],
|
|
|
-
|
|
|
- xsId: null,
|
|
|
-
|
|
|
-
|
|
|
- // 表格列配置
|
|
|
- columns: [
|
|
|
- {
|
|
|
- width: 45,
|
|
|
- type: 'expand',
|
|
|
- columnKey: 'materialList',
|
|
|
- align: 'center',
|
|
|
- slot: 'expand'
|
|
|
- },
|
|
|
-
|
|
|
- {
|
|
|
- width: 50,
|
|
|
- label: '序号',
|
|
|
- type: 'index',
|
|
|
- align: 'center',
|
|
|
- slot: 'index'
|
|
|
- },
|
|
|
-
|
|
|
- {
|
|
|
- prop: 'code',
|
|
|
- label: '销售订单号',
|
|
|
- slot: 'code',
|
|
|
- showOverflowTooltip: true,
|
|
|
- align: 'center',
|
|
|
- minWidth: 170,
|
|
|
- sortable: true
|
|
|
- },
|
|
|
- {
|
|
|
- prop: 'customerName',
|
|
|
- label: '客户名称',
|
|
|
- align: 'center',
|
|
|
- showOverflowTooltip: true
|
|
|
- },
|
|
|
- {
|
|
|
- prop: 'deliveryNum',
|
|
|
- label: '客户代号',
|
|
|
- align: 'center',
|
|
|
- showOverflowTooltip: true
|
|
|
- },
|
|
|
- {
|
|
|
- prop: 'productCode',
|
|
|
- label: '产品编码',
|
|
|
- align: 'center',
|
|
|
- showOverflowTooltip: true,
|
|
|
- minWidth: 140
|
|
|
- },
|
|
|
-
|
|
|
- {
|
|
|
- prop: 'productName',
|
|
|
- label: '产品名称',
|
|
|
- align: 'center',
|
|
|
- minWidth: 120
|
|
|
- },
|
|
|
+ tableData: [],
|
|
|
|
|
|
- {
|
|
|
- prop: 'model',
|
|
|
- label: '型号',
|
|
|
- align: 'center',
|
|
|
- minWidth: 120
|
|
|
- },
|
|
|
+ xsId: null,
|
|
|
|
|
|
- {
|
|
|
- prop: 'brandNo',
|
|
|
- label: '牌号',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
+ // 表格列配置
|
|
|
+ columns: [
|
|
|
+ {
|
|
|
+ width: 45,
|
|
|
+ type: 'expand',
|
|
|
+ columnKey: 'materialList',
|
|
|
+ align: 'center',
|
|
|
+ slot: 'expand'
|
|
|
+ },
|
|
|
|
|
|
- {
|
|
|
- prop: 'deliveryTime',
|
|
|
- label: '交付日期',
|
|
|
- align: 'center',
|
|
|
- showOverflowTooltip: true
|
|
|
- },
|
|
|
- {
|
|
|
- prop: 'contractNum',
|
|
|
- label: '合同数量',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
- {
|
|
|
- prop: 'lackNum',
|
|
|
- label: '欠交数量',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
+ {
|
|
|
+ width: 50,
|
|
|
+ label: '序号',
|
|
|
+ type: 'index',
|
|
|
+ align: 'center',
|
|
|
+ slot: 'index'
|
|
|
+ },
|
|
|
|
|
|
+ {
|
|
|
+ prop: 'code',
|
|
|
+ label: '销售订单号',
|
|
|
+ slot: 'code',
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ align: 'center',
|
|
|
+ minWidth: 170,
|
|
|
+ sortable: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'customerName',
|
|
|
+ label: '客户名称',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'deliveryNum',
|
|
|
+ label: '客户代号',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'productCode',
|
|
|
+ label: '产品编码',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ minWidth: 140
|
|
|
+ },
|
|
|
|
|
|
- {
|
|
|
- prop: 'productionPlanId',
|
|
|
- label: '工艺路线',
|
|
|
- slot: 'productionPlanId',
|
|
|
- align: 'center',
|
|
|
- minWidth: 110
|
|
|
- },
|
|
|
+ {
|
|
|
+ prop: 'productName',
|
|
|
+ label: '产品名称',
|
|
|
+ align: 'center',
|
|
|
+ minWidth: 120
|
|
|
+ },
|
|
|
|
|
|
+ {
|
|
|
+ prop: 'model',
|
|
|
+ label: '型号',
|
|
|
+ align: 'center',
|
|
|
+ minWidth: 120
|
|
|
+ },
|
|
|
|
|
|
+ {
|
|
|
+ prop: 'brandNo',
|
|
|
+ label: '牌号',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
|
|
|
- {
|
|
|
- columnKey: 'action',
|
|
|
- label: '操作',
|
|
|
- width: 150,
|
|
|
- align: 'center',
|
|
|
- resizable: false,
|
|
|
- slot: 'action',
|
|
|
- showOverflowTooltip: true
|
|
|
- }
|
|
|
- ],
|
|
|
+ {
|
|
|
+ prop: 'deliveryTime',
|
|
|
+ label: '交付日期',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'contractNum',
|
|
|
+ label: '合同数量',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'lackNum',
|
|
|
+ label: '欠交数量',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
|
|
|
- columns2: [
|
|
|
+ {
|
|
|
+ prop: 'productionPlanId',
|
|
|
+ label: '工艺路线',
|
|
|
+ slot: 'productionPlanId',
|
|
|
+ align: 'center',
|
|
|
+ minWidth: 110
|
|
|
+ },
|
|
|
|
|
|
+ {
|
|
|
+ columnKey: 'action',
|
|
|
+ label: '操作',
|
|
|
+ width: 150,
|
|
|
+ align: 'center',
|
|
|
+ resizable: false,
|
|
|
+ slot: 'action',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ }
|
|
|
+ ],
|
|
|
|
|
|
- {
|
|
|
- width: 50,
|
|
|
- label: '序号',
|
|
|
- prop: 'sort',
|
|
|
- slot: 'sort',
|
|
|
- align: 'center',
|
|
|
- },
|
|
|
+ columns2: [
|
|
|
+ {
|
|
|
+ width: 50,
|
|
|
+ label: '序号',
|
|
|
+ prop: 'sort',
|
|
|
+ slot: 'sort',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
|
|
|
- {
|
|
|
- label: '物料名称',
|
|
|
- prop: 'name',
|
|
|
- align: 'center',
|
|
|
- },
|
|
|
+ {
|
|
|
+ label: '物料名称',
|
|
|
+ prop: 'name',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
|
|
|
- {
|
|
|
- label: '物料编码',
|
|
|
- prop: 'code',
|
|
|
- align: 'center',
|
|
|
- },
|
|
|
- {
|
|
|
- label: '牌号',
|
|
|
- prop: 'brandNum',
|
|
|
- align: 'center',
|
|
|
- },
|
|
|
- {
|
|
|
+ {
|
|
|
+ label: '物料编码',
|
|
|
+ prop: 'code',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '牌号',
|
|
|
+ prop: 'brandNum',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
prop: 'specification',
|
|
|
label: '规格',
|
|
|
align: 'center',
|
|
|
showOverflowTooltip: true,
|
|
|
minWidth: 110
|
|
|
- },
|
|
|
- {
|
|
|
- label: '型号',
|
|
|
- prop: 'modelType',
|
|
|
- align: 'center',
|
|
|
- },
|
|
|
-
|
|
|
- {
|
|
|
- prop: 'inventoryQuantity',
|
|
|
- label: '库存',
|
|
|
- showOverflowTooltip: true,
|
|
|
-
|
|
|
- },
|
|
|
-
|
|
|
- {
|
|
|
- prop: 'unit',
|
|
|
- label: '计量单位',
|
|
|
- showOverflowTooltip: true,
|
|
|
- action: 'unit',
|
|
|
- slot: 'unit',
|
|
|
- },
|
|
|
-
|
|
|
- {
|
|
|
- label: '需求数量',
|
|
|
- slot: 'demandQuantity',
|
|
|
- action: 'demandQuantity',
|
|
|
- align: 'center',
|
|
|
- },
|
|
|
-
|
|
|
- {
|
|
|
- label: '采购数量',
|
|
|
- slot: 'purchaseQuantity',
|
|
|
- action: 'purchaseQuantity',
|
|
|
- align: 'center',
|
|
|
- },
|
|
|
-
|
|
|
- {
|
|
|
- label: '到货方式',
|
|
|
- slot: 'deliveryMethod',
|
|
|
- action: 'deliveryMethod',
|
|
|
- align: 'center',
|
|
|
- minWidth: 140
|
|
|
- },
|
|
|
-
|
|
|
- {
|
|
|
- label: '要求到货时间',
|
|
|
- slot: 'requireDeliveryTime',
|
|
|
- action: 'requireDeliveryTime',
|
|
|
- align: 'center',
|
|
|
- minWidth: 140
|
|
|
- },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '型号',
|
|
|
+ prop: 'modelType',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
|
|
|
+ {
|
|
|
+ prop: 'inventoryQuantity',
|
|
|
+ label: '库存',
|
|
|
+ showOverflowTooltip: true
|
|
|
+ },
|
|
|
|
|
|
+ {
|
|
|
+ prop: 'unit',
|
|
|
+ label: '计量单位',
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ action: 'unit',
|
|
|
+ slot: 'unit'
|
|
|
+ },
|
|
|
|
|
|
- {
|
|
|
- label: '图纸',
|
|
|
- slot: 'imgUrl',
|
|
|
- action: ' imgUrl',
|
|
|
- align: 'center',
|
|
|
- minWidth: 140
|
|
|
- },
|
|
|
+ {
|
|
|
+ label: '需求数量',
|
|
|
+ slot: 'demandQuantity',
|
|
|
+ action: 'demandQuantity',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
|
|
|
+ {
|
|
|
+ label: '采购数量',
|
|
|
+ slot: 'purchaseQuantity',
|
|
|
+ action: 'purchaseQuantity',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
|
|
|
- {
|
|
|
- label: '附件',
|
|
|
- slot: 'files',
|
|
|
- action: ' files',
|
|
|
- align: 'center',
|
|
|
- minWidth: 140
|
|
|
- },
|
|
|
+ {
|
|
|
+ label: '到货方式',
|
|
|
+ slot: 'deliveryMethod',
|
|
|
+ action: 'deliveryMethod',
|
|
|
+ align: 'center',
|
|
|
+ minWidth: 140
|
|
|
+ },
|
|
|
|
|
|
+ {
|
|
|
+ label: '要求到货时间',
|
|
|
+ slot: 'requireDeliveryTime',
|
|
|
+ action: 'requireDeliveryTime',
|
|
|
+ align: 'center',
|
|
|
+ minWidth: 140
|
|
|
+ },
|
|
|
|
|
|
+ {
|
|
|
+ label: '图纸',
|
|
|
+ slot: 'imgUrl',
|
|
|
+ action: ' imgUrl',
|
|
|
+ align: 'center',
|
|
|
+ minWidth: 140
|
|
|
+ },
|
|
|
|
|
|
- {
|
|
|
- columnKey: 'action',
|
|
|
- label: '操作',
|
|
|
- width: 70,
|
|
|
- align: 'center',
|
|
|
- resizable: false,
|
|
|
- slot: 'action',
|
|
|
- showOverflowTooltip: true
|
|
|
- }
|
|
|
+ {
|
|
|
+ label: '附件',
|
|
|
+ slot: 'files',
|
|
|
+ action: ' files',
|
|
|
+ align: 'center',
|
|
|
+ minWidth: 140
|
|
|
+ },
|
|
|
|
|
|
- ],
|
|
|
- rules: {
|
|
|
- name: [
|
|
|
{
|
|
|
- required: true,
|
|
|
- message: '请输入配料计划名称',
|
|
|
- trigger: ['blur', 'change']
|
|
|
+ columnKey: 'action',
|
|
|
+ label: '操作',
|
|
|
+ width: 70,
|
|
|
+ align: 'center',
|
|
|
+ resizable: false,
|
|
|
+ slot: 'action',
|
|
|
+ showOverflowTooltip: true
|
|
|
}
|
|
|
],
|
|
|
-
|
|
|
-
|
|
|
- },
|
|
|
- formData: {
|
|
|
- name: '',
|
|
|
- remark: '',
|
|
|
- detailRemoveIds: [],
|
|
|
- materialRemoveIds: []
|
|
|
-
|
|
|
- },
|
|
|
-
|
|
|
-
|
|
|
- };
|
|
|
- },
|
|
|
- methods: {
|
|
|
- async open(type, row) {
|
|
|
- this.type = type;
|
|
|
- this.visible = true;
|
|
|
- if (row) {
|
|
|
- this.getDetail(row.id)
|
|
|
- } else {
|
|
|
- this.$nextTick(() => {
|
|
|
- this.$refs.table.setData([]);
|
|
|
- })
|
|
|
- }
|
|
|
-
|
|
|
- },
|
|
|
-
|
|
|
-
|
|
|
- getDetail(id) {
|
|
|
- getById(id).then(res => {
|
|
|
- this.$set(this.formData, 'name', res.name)
|
|
|
- this.$set(this.formData, 'remark', res.remark)
|
|
|
- this.formData['id'] = res.id
|
|
|
- this.$refs.table.setData([...res.salesOrderList]);
|
|
|
-
|
|
|
- this.$nextTick(() => {
|
|
|
- this.$refs.table.toggleRowExpansionAll()
|
|
|
- this.$forceUpdate()
|
|
|
- })
|
|
|
-
|
|
|
- })
|
|
|
- },
|
|
|
-
|
|
|
- confirm() {
|
|
|
- this.$refs.formRef.validate(async (value) => {
|
|
|
- if (value) {
|
|
|
-
|
|
|
- let _arr = this.$refs.table.getData() ?? []
|
|
|
-
|
|
|
- if (_arr.length == 0) {
|
|
|
- this.$message.info('请添加销售订单');
|
|
|
- return false
|
|
|
- }
|
|
|
- let _arr2 = []
|
|
|
-
|
|
|
- _arr2 = _arr.map(m => {
|
|
|
- if (Object.prototype.hasOwnProperty.call(m, "salesOrderId") && m.salesOrderId) {
|
|
|
- } else {
|
|
|
- m.salesOrderId = m.id
|
|
|
- m.salesOrderCode = m.code
|
|
|
- delete m.id
|
|
|
- delete m.code
|
|
|
- }
|
|
|
-
|
|
|
- return {
|
|
|
- ...m,
|
|
|
+ rules: {
|
|
|
+ name: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请输入配料计划名称',
|
|
|
+ trigger: ['blur', 'change']
|
|
|
}
|
|
|
- })
|
|
|
-
|
|
|
- this.formData['type'] = 1
|
|
|
- this.formData['salesOrderList'] = _arr2
|
|
|
- await save(this.formData);
|
|
|
- this.$message.success('保存成功!');
|
|
|
- this.$emit('success');
|
|
|
- this.cancel();
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ formData: {
|
|
|
+ name: '',
|
|
|
+ remark: '',
|
|
|
+ detailRemoveIds: [],
|
|
|
+ materialRemoveIds: []
|
|
|
}
|
|
|
- });
|
|
|
+ };
|
|
|
},
|
|
|
- cancel() {
|
|
|
- this.visible = false;
|
|
|
- this.formData = {};
|
|
|
- this.formData.detailRemoveIds = []
|
|
|
- this.formData.materialRemoveIds = []
|
|
|
- this.$refs.table.setData([]);
|
|
|
- this.$refs.formRef.resetFields();
|
|
|
- },
|
|
|
-
|
|
|
- datasource({ }) {
|
|
|
- return []
|
|
|
- },
|
|
|
-
|
|
|
- reload() {
|
|
|
- this.$refs.table.reload();
|
|
|
- },
|
|
|
-
|
|
|
- showAdd() {
|
|
|
- this.tableData = this.$refs.table.getData();
|
|
|
-
|
|
|
- this.$refs.saleOrderRef.open(this.tableData)
|
|
|
- },
|
|
|
-
|
|
|
- chooseOrder(list) {
|
|
|
- let salesOrderIds = []
|
|
|
- list.map((m => {
|
|
|
- salesOrderIds.push(m.id)
|
|
|
- return {
|
|
|
- ...m,
|
|
|
- }
|
|
|
- }))
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- if (salesOrderIds.length > 0) {
|
|
|
- listBomBySalesOrderIds({ salesOrderIds: salesOrderIds }).then((res) => {
|
|
|
-
|
|
|
- res.forEach(m => {
|
|
|
- if(m.materialList.length > 0) {
|
|
|
- m.materialList.forEach(p => {
|
|
|
- p.detailId = m.id
|
|
|
- })
|
|
|
- }
|
|
|
- })
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- this.$refs.table.setData([...this.tableData, ...res]);
|
|
|
-
|
|
|
+ methods: {
|
|
|
+ async open(type, row) {
|
|
|
+ this.type = type;
|
|
|
+ this.visible = true;
|
|
|
+ if (row) {
|
|
|
+ this.getDetail(row.id);
|
|
|
+ } else {
|
|
|
this.$nextTick(() => {
|
|
|
- this.$refs.table.toggleRowExpansionAll()
|
|
|
- this.$forceUpdate()
|
|
|
- })
|
|
|
-
|
|
|
- })
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- remove(row, index) {
|
|
|
- this.formData.detailRemoveIds.push(row.id)
|
|
|
- let _arr = this.$refs.table.getData() || [];
|
|
|
- _arr.splice(index, 1);
|
|
|
- this.$refs.table.setData([..._arr]);
|
|
|
- },
|
|
|
-
|
|
|
- categorySelect(row) {
|
|
|
- this.$refs.productRefs.open(row.materialList, row, this.type)
|
|
|
- },
|
|
|
-
|
|
|
- chooseModal(data, current) {
|
|
|
- data.map((m => {
|
|
|
- m.detailId = current.id
|
|
|
-
|
|
|
- return {
|
|
|
- ...m,
|
|
|
+ this.$refs.table.setData([]);
|
|
|
+ });
|
|
|
}
|
|
|
- }))
|
|
|
+ },
|
|
|
|
|
|
- let tableList = []
|
|
|
- tableList = this.$refs.table.getData()
|
|
|
+ getDetail(id) {
|
|
|
+ getById(id).then((res) => {
|
|
|
+ this.$set(this.formData, 'name', res.name);
|
|
|
+ this.$set(this.formData, 'remark', res.remark);
|
|
|
+ this.formData['id'] = res.id;
|
|
|
+ this.$refs.table.setData([...res.salesOrderList]);
|
|
|
|
|
|
- tableList.forEach(e => {
|
|
|
- if (e.id == current.id) {
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.table.toggleRowExpansionAll();
|
|
|
+ this.$forceUpdate();
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
|
|
|
- if (e.materialList.length == 0) {
|
|
|
- e.materialList = data
|
|
|
+ confirm() {
|
|
|
+ this.$refs.formRef.validate(async (value) => {
|
|
|
+ if (value) {
|
|
|
+ let _arr = this.$refs.table.getData() ?? [];
|
|
|
|
|
|
- } else {
|
|
|
- e.materialList = [...e.materialList, ...data]
|
|
|
+ if (_arr.length == 0) {
|
|
|
+ this.$message.info('请添加销售订单');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ let _arr2 = [];
|
|
|
+
|
|
|
+ _arr2 = _arr.map((m) => {
|
|
|
+ if (
|
|
|
+ Object.prototype.hasOwnProperty.call(m, 'salesOrderId') &&
|
|
|
+ m.salesOrderId
|
|
|
+ ) {
|
|
|
+ } else {
|
|
|
+ m.salesOrderId = m.id;
|
|
|
+ m.salesOrderCode = m.code;
|
|
|
+ delete m.id;
|
|
|
+ delete m.code;
|
|
|
+ }
|
|
|
|
|
|
+ return {
|
|
|
+ ...m
|
|
|
+ };
|
|
|
+ });
|
|
|
+
|
|
|
+ this.formData['type'] = 1;
|
|
|
+ this.formData['salesOrderList'] = _arr2;
|
|
|
+ await save(this.formData);
|
|
|
+ this.$message.success('保存成功!');
|
|
|
+ this.$emit('success');
|
|
|
+ this.cancel();
|
|
|
}
|
|
|
+ });
|
|
|
+ },
|
|
|
+ cancel() {
|
|
|
+ this.visible = false;
|
|
|
+ this.formData = {};
|
|
|
+ this.formData.detailRemoveIds = [];
|
|
|
+ this.formData.materialRemoveIds = [];
|
|
|
+ this.$refs.table.setData([]);
|
|
|
+ this.$refs.formRef.resetFields();
|
|
|
+ },
|
|
|
|
|
|
+ datasource({}) {
|
|
|
+ return [];
|
|
|
+ },
|
|
|
|
|
|
- }
|
|
|
- })
|
|
|
+ reload() {
|
|
|
+ this.$refs.table.reload();
|
|
|
+ },
|
|
|
|
|
|
+ showAdd() {
|
|
|
+ this.tableData = this.$refs.table.getData();
|
|
|
|
|
|
- console.log(tableList);
|
|
|
- this.$refs.table.setData([...tableList]);
|
|
|
- this.$forceUpdate()
|
|
|
- },
|
|
|
+ this.$refs.saleOrderRef.open(this.tableData);
|
|
|
+ },
|
|
|
|
|
|
- remove2(row) {
|
|
|
- const data = this.$refs.table.getData() ?? [];
|
|
|
- this.formData.materialRemoveIds.push(row.categoryId)
|
|
|
- data.forEach((e) => {
|
|
|
- if (row.detailId == e.id) {
|
|
|
- e.materialList = e.materialList.filter((d) => d.categoryId !== row.categoryId);
|
|
|
+ chooseOrder(list) {
|
|
|
+ let salesOrderIds = [];
|
|
|
+ list.map((m) => {
|
|
|
+ salesOrderIds.push(m.id);
|
|
|
+ return {
|
|
|
+ ...m
|
|
|
+ };
|
|
|
+ });
|
|
|
+
|
|
|
+ if (salesOrderIds.length > 0) {
|
|
|
+ listBomBySalesOrderIds({ salesOrderIds: salesOrderIds }).then(
|
|
|
+ (res) => {
|
|
|
+ res.forEach((m) => {
|
|
|
+ if (m.materialList.length > 0) {
|
|
|
+ m.materialList.forEach((p) => {
|
|
|
+ p.detailId = m.id;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ this.$refs.table.setData([...this.tableData, ...res]);
|
|
|
+
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.table.toggleRowExpansionAll();
|
|
|
+ this.$forceUpdate();
|
|
|
+ });
|
|
|
+ }
|
|
|
+ );
|
|
|
}
|
|
|
- })
|
|
|
-
|
|
|
- this.$refs.table.setData([...data])
|
|
|
- this.$forceUpdate()
|
|
|
- },
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- openVersion(row) {
|
|
|
- this.xsId = row.id
|
|
|
- this.$refs.versionRefs.open();
|
|
|
- },
|
|
|
- changeProduct(data) {
|
|
|
- let param = {
|
|
|
- salesOrderIds: [this.xsId],
|
|
|
- produceRoutingId: data.id
|
|
|
- }
|
|
|
-
|
|
|
- listBomBySalesOrderId(param).then((res) => {
|
|
|
+ },
|
|
|
|
|
|
+ remove(row, index) {
|
|
|
+ this.formData.detailRemoveIds.push(row.id);
|
|
|
+ let _arr = this.$refs.table.getData() || [];
|
|
|
+ _arr.splice(index, 1);
|
|
|
+ this.$refs.table.setData([..._arr]);
|
|
|
+ },
|
|
|
|
|
|
- let tableList = []
|
|
|
- tableList = this.$refs.table.getData()
|
|
|
+ categorySelect(row) {
|
|
|
+ this.$refs.productRefs.open(row.materialList, row, this.type);
|
|
|
+ },
|
|
|
|
|
|
- tableList.forEach(e => {
|
|
|
- if (e.id == this.xsId) {
|
|
|
+ chooseModal(data, current) {
|
|
|
+ data.map((m) => {
|
|
|
+ m.detailId = current.id;
|
|
|
|
|
|
- res.map(m => {
|
|
|
- m.detailId = this.xsId
|
|
|
- return {
|
|
|
- ...m,
|
|
|
- }
|
|
|
- })
|
|
|
+ return {
|
|
|
+ ...m
|
|
|
+ };
|
|
|
+ });
|
|
|
|
|
|
- e.materialList = res
|
|
|
+ let tableList = [];
|
|
|
+ tableList = this.$refs.table.getData();
|
|
|
|
|
|
- this.$nextTick(() => {
|
|
|
- this.$refs.table.setData([...tableList]);
|
|
|
- this.$refs.table.toggleRowExpansionAll()
|
|
|
- })
|
|
|
+ tableList.forEach((e) => {
|
|
|
+ if (e.id == current.id) {
|
|
|
+ if (e.materialList.length == 0) {
|
|
|
+ e.materialList = data;
|
|
|
+ } else {
|
|
|
+ e.materialList = [...e.materialList, ...data];
|
|
|
+ }
|
|
|
}
|
|
|
- })
|
|
|
+ });
|
|
|
|
|
|
- })
|
|
|
-
|
|
|
- },
|
|
|
-
|
|
|
-
|
|
|
- handleMethod(row) {
|
|
|
- this.$refs.timeDialogRef.open(row)
|
|
|
- },
|
|
|
- chooseTime(current, timeList) {
|
|
|
+ console.log(tableList);
|
|
|
+ this.$refs.table.setData([...tableList]);
|
|
|
+ this.$forceUpdate();
|
|
|
+ },
|
|
|
|
|
|
+ remove2(row) {
|
|
|
+ const data = this.$refs.table.getData() ?? [];
|
|
|
+ this.formData.materialRemoveIds.push(row.categoryId);
|
|
|
+ data.forEach((e) => {
|
|
|
+ if (row.detailId == e.id) {
|
|
|
+ e.materialList = e.materialList.filter(
|
|
|
+ (d) => d.categoryId !== row.categoryId
|
|
|
+ );
|
|
|
+ }
|
|
|
+ });
|
|
|
|
|
|
- let tableList = []
|
|
|
- tableList = this.$refs.table.getData()
|
|
|
+ this.$refs.table.setData([...data]);
|
|
|
+ this.$forceUpdate();
|
|
|
+ },
|
|
|
|
|
|
- tableList.forEach(e => {
|
|
|
- if (e.id == current.detailId) {
|
|
|
- e.materialList.forEach(m => {
|
|
|
- if (m.categoryId == current.categoryId) {
|
|
|
- m.timeList = timeList || []
|
|
|
+ openVersion(row) {
|
|
|
+ this.xsId = row.id;
|
|
|
+ this.$refs.versionRefs.open();
|
|
|
+ },
|
|
|
+ changeProduct(data) {
|
|
|
+ let param = {
|
|
|
+ salesOrderIds: [this.xsId],
|
|
|
+ produceRoutingId: data.id
|
|
|
+ };
|
|
|
+
|
|
|
+ listBomBySalesOrderId(param).then((res) => {
|
|
|
+ let tableList = [];
|
|
|
+ tableList = this.$refs.table.getData();
|
|
|
+
|
|
|
+ tableList.forEach((e) => {
|
|
|
+ if (e.id == this.xsId) {
|
|
|
+ res.map((m) => {
|
|
|
+ m.detailId = this.xsId;
|
|
|
+ return {
|
|
|
+ ...m
|
|
|
+ };
|
|
|
+ });
|
|
|
+
|
|
|
+ e.materialList = res;
|
|
|
+
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.table.setData([...tableList]);
|
|
|
+ this.$refs.table.toggleRowExpansionAll();
|
|
|
+ });
|
|
|
}
|
|
|
- })
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
- })
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
|
|
|
-
|
|
|
+ handleMethod(row) {
|
|
|
+ this.$refs.timeDialogRef.open(row);
|
|
|
+ },
|
|
|
+ chooseTime(current, timeList) {
|
|
|
+ let tableList = [];
|
|
|
+ tableList = this.$refs.table.getData();
|
|
|
+
|
|
|
+ tableList.forEach((e) => {
|
|
|
+ if (e.id == current.detailId) {
|
|
|
+ e.materialList.forEach((m) => {
|
|
|
+ if (m.categoryId == current.categoryId) {
|
|
|
+ m.timeList = timeList || [];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
|
|
|
- this.$refs.table.setData([...tableList]);
|
|
|
- this.$forceUpdate()
|
|
|
+ this.$refs.table.setData([...tableList]);
|
|
|
+ this.$forceUpdate();
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
-};
|
|
|
+ };
|
|
|
</script>
|
|
|
|
|
|
-
|
|
|
<style lang="scss" scoped>
|
|
|
-:deep(.el-table__expanded-cell) {
|
|
|
-
|
|
|
- padding-bottom: 30px !important;
|
|
|
- border-bottom: 12px solid #CCFFCC !important;
|
|
|
-}
|
|
|
+ :deep(.el-table__expanded-cell) {
|
|
|
+ padding-bottom: 30px !important;
|
|
|
+ border-bottom: 12px solid #ccffcc !important;
|
|
|
+ }
|
|
|
</style>
|