ysy пре 2 година
родитељ
комит
bb95602cda

+ 7 - 55
src/views/materialPlan/components/materialPlan-search.vue

@@ -12,34 +12,9 @@
           <el-input clearable v-model="where.code" placeholder="请输入" />
         </el-form-item>
       </el-col>
-      <el-col v-bind="styleResponsive ? { lg: 5, md: 12 } : { span: 5 }">
-        <el-form-item label="物料编码:">
-          <el-input
-            clearable
-            v-model="where.materialCode"
-            placeholder="请输入"
-          />
-        </el-form-item>
-      </el-col>
-      <el-col v-bind="styleResponsive ? { lg: 5, md: 12 } : { span: 5 }">
-        <el-form-item label="牌号:" label-width="80px">
-          <el-input clearable v-model="where.brandNo" placeholder="请输入" />
-        </el-form-item>
-      </el-col>
-      <el-col v-bind="styleResponsive ? { lg: 9, md: 12 } : { span: 9 }">
-        <el-form-item label="要求交付日期:" label-width="100px">
-          <el-date-picker
-            class="w100"
-            v-model="where.deliveryTime"
-            type="daterange"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            value-format="yyyy-MM-dd"
-          >
-          </el-date-picker>
-        </el-form-item>
-      </el-col>
+ 
+
+ 
       <el-col v-bind="styleResponsive ? { lg: 5, md: 12 } : { span: 5 }">
         <el-form-item label="计划状态:" label-width="80px">
           <el-select
@@ -70,32 +45,9 @@
           </el-date-picker>
         </el-form-item>
       </el-col>
+
       <el-col
-        v-bind="styleResponsive ? { lg: 7, md: 12 } : { span: 7 }"
-        v-if="activeName == 'second'"
-      >
-        <el-form-item label="发布时间:">
-          <el-date-picker
-            class="w100"
-            v-model="where.releaseTime"
-            type="daterange"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            value-format="yyyy-MM-dd"
-          >
-          </el-date-picker>
-        </el-form-item>
-      </el-col>
-      <el-col
-        v-bind="
-          styleResponsive
-            ? {
-                lg: activeName == 'second' ? 5 : 12,
-                md: activeName == 'second' ? 12 : 24
-              }
-            : { span: activeName == 'second' ? 5 : 12 }
-        "
+      v-bind="styleResponsive ? { lg: 5, md: 12 } : { span: 5 }"
       >
         <div class="ele-form-actions">
           <el-button
@@ -121,8 +73,8 @@
     data () {
       // 默认表单数据
       const defaultWhere = {
-        materialCode: '',
-        brandNo: '',
+     
+
         statusList: '',
         code: '',
         releaseTime: [],

+ 30 - 9
src/views/materialPlan/components/plan-edit-dialog.vue

@@ -4,8 +4,8 @@
     <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="materialName">
-            <el-input placeholder="请选择" v-model="formData.materialName"></el-input>
+          <el-form-item label="配料计划名称" prop="name">
+            <el-input placeholder="请选择" v-model="formData.name"></el-input>
           </el-form-item>
         </el-col>
 
@@ -321,7 +321,7 @@ export default {
 
       ],
       rules: {
-        materialName: [
+        name: [
           {
             required: true,
             message: '请选择物料',
@@ -332,8 +332,8 @@ export default {
 
       },
       formData: {
-        materialName: '',
-        type: 1,
+        name: '',
+
 
       },
 
@@ -357,7 +357,20 @@ export default {
             this.$message.info('请添加销售订单');
             return false
           }
-          this.formData['salesOrderPOList'] = _arr
+          let _arr2 = []
+
+          _arr2 =  _arr.map(m => {
+            m.salesOrderId = m.id
+            m.salesOrderCode = m.code
+            delete m.id
+            delete m.code
+            return {
+              ...m,
+            }
+          })
+
+          this.formData['type'] = 1
+          this.formData['salesOrderPOList'] = _arr2
           const request = this.type == 'add' ? save : update;
           await request(this.formData);
           this.$message.success('保存成功!');
@@ -369,6 +382,7 @@ export default {
     cancel() {
       this.visible = false;
       this.formData = {};
+      this.$refs.table.setData([]);
       this.$refs.formRef.resetFields();
     },
 
@@ -388,13 +402,12 @@ export default {
     chooseOrder(list) {
       let salesOrderIds = []
       list.map((m => {
-        m.materialList = []
         salesOrderIds.push(m.id)
         return {
           ...m,
         }
       }))
-      this.$refs.table.setData([...this.tableData, ...list]);
+
 
 
       if (salesOrderIds.length > 0) {
@@ -482,11 +495,19 @@ export default {
 
         tableList.forEach(e => {
           if (e.id == this.xsId) {
+
+            res.map(m => {
+              m.parentId = this.xsId
+              return {
+                ...m,
+              }
+            })
+
             e.materialList = res
 
             this.$nextTick(() => {
               this.$refs.table.setData([...tableList]);
-            this.$refs.table.toggleRowExpansionAll()
+              this.$refs.table.toggleRowExpansionAll()
             })
           }
         })

+ 137 - 251
src/views/materialPlan/index.vue

@@ -1,12 +1,7 @@
 <template>
   <div class="ele-body">
     <el-card shadow="never" v-loading="loading">
-      <materialPlan-search
-        @search="reload"
-        :statusOpt="statusOpt"
-        :activeName="activeName"
-        ref="searchRef"
-      >
+      <materialPlan-search @search="reload" :statusOpt="statusOpt" :activeName="activeName" ref="searchRef">
       </materialPlan-search>
 
       <el-tabs v-model="activeName" type="card">
@@ -14,24 +9,12 @@
         <el-tab-pane label="生产配料计划" name="second"></el-tab-pane>
       </el-tabs>
       <!-- 数据表格 -->
-      <ele-pro-table
-        ref="table"
-        :key="activeName"
-        :initLoad="false"
-        :columns="columns"
-        :datasource="datasource"
-        :cache-key="`${activeName}materialPlanTable`"
-      >
+      <ele-pro-table ref="table" :key="activeName" :initLoad="false" :columns="columns" :datasource="datasource"
+        :cache-key="`${activeName}materialPlanTable`">
         <template v-slot:toolbar>
-          <el-button type="primary" @click="handleEdit('add')"
-            >创建计划</el-button
-          >
+          <el-button type="primary" @click="handleEdit('add')">创建计划</el-button>
         </template>
-        <template v-slot:code="{ row }">
-        
-            {{ row.code }}
 
-        </template>
         <template v-slot:status="{ row }">
           <span :class="{ 'ele-text-danger': row.status == 3 }">
             {{ statusFormatter(row.status) }}
@@ -39,38 +22,12 @@
         </template>
         <!-- 操作列 -->
         <template v-slot:action="{ row }">
-          <el-link
-            type="primary"
-            :underline="false"
-            icon="el-icon-truck"
-            v-if="row.status == 2"
-            @click="handleOrderPublish(1, row)"
-          >
-            发布工单
-          </el-link>
-          <el-link
-            type="primary"
-            v-if="row.status == 3"
-            :underline="false"
-            icon="el-icon-truck"
-            @click="handleOrderPublish(2, row)"
-          >
-            重新发布
-          </el-link>
-          <el-link
-            type="primary"
-            :underline="false"
-            icon="el-icon-edit"
-            @click="handleEdit('edit', row)"
-          >
+
+
+          <el-link type="primary" :underline="false" icon="el-icon-edit" @click="handleEdit('edit', row)">
             修改计划
           </el-link>
-          <el-link
-            type="primary"
-            @click="handleDel(row)"
-            :underline="false"
-            icon="el-icon-edit"
-          >
+          <el-link @click="handleDel(row)" type="danger" :underline="false" icon="el-icon-delete">
             删除
           </el-link>
         </template>
@@ -81,215 +38,144 @@
 </template>
 
 <script>
-  import materialPlanSearch from './components/materialPlan-search.vue';
-  import planEditDialog from './components/plan-edit-dialog.vue';
-  import { getList, del } from '@/api/materialPlan/index';
-  export default {
-    components: {
-      planEditDialog,
-      materialPlanSearch
-    },
+import materialPlanSearch from './components/materialPlan-search.vue';
+import planEditDialog from './components/plan-edit-dialog.vue';
+import { getList, del } from '@/api/materialPlan/index';
+export default {
+  components: {
+    planEditDialog,
+    materialPlanSearch
+  },
+
+  data() {
+    return {
+      activeName: 'first',
+
+      // 加载状态
+      loading: false,
+      pageType: 'add',
+      dialogTitle: '',
+      isBindPlan: false,
+      statusOpt: {
+        first: [
+          { label: '所有状态', value: '3,2' },
+          { label: '待发布', value: '2' },
+          { label: '发布失败', value: '3' }
+        ],
+        second: [
+          { label: '所有状态', value: '7,4,5,6' },
+          { label: '待生产', value: '4' },
+          { label: '生产中', value: '5' },
+          { label: '已完成', value: '6' },
+          { label: '已延期', value: '7' }
+        ]
+      }
+    };
+  },
+  computed: {
+    // 表格列配置
+    columns() {
+      return [
+        {
+          columnKey: 'index',
+          label: '序号',
+          type: 'index',
+          width: 55,
+          align: 'center',
+          fixed: 'left'
+        },
+        {
+          slot: 'name',
+          prop: 'name',
+          label: '计划名称',
+          align: 'center',
+
+        },
+        {
+          prop: 'code',
+          label: '计划编号',
+          align: 'center',
+
+        },
+
+
 
-    data() {
-      return {
-        activeName: 'first',
 
-        // 加载状态
-        loading: false,
-        pageType: 'add',
-        dialogTitle: '',
-        isBindPlan: false,
-        statusOpt: {
-          first: [
-            { label: '所有状态', value: '3,2' },
-            { label: '待发布', value: '2' },
-            { label: '发布失败', value: '3' }
-          ],
-          second: [
-            { label: '所有状态', value: '7,4,5,6' },
-            { label: '待生产', value: '4' },
-            { label: '生产中', value: '5' },
-            { label: '已完成', value: '6' },
-            { label: '已延期', value: '7' }
-          ]
+        {
+          columnKey: 'status',
+          label: '状态',
+          align: 'center',
+          slot: 'status',
+          action: 'status'
+        },
+        {
+          prop: 'createUserName',
+          label: '创建人',
+          align: 'center'
+        },
+        {
+          prop: 'createTime',
+          label: '创建时间',
+          align: 'center',
+
+        },
+        {
+          columnKey: 'action',
+          label: '操作',
+          width: 250,
+          align: 'center',
+          resizable: false,
+          fixed: 'right',
+          slot: 'action'
         }
-      };
-    },
-    computed: {
-      // 表格列配置
-      columns() {
-        return [
-          {
-            columnKey: 'index',
-            label: '序号',
-            type: 'index',
-            width: 55,
-            align: 'center',
-            fixed: 'left'
-          },
-          {
-            slot: 'code',
-            prop: 'code',
-            action: 'code',
-            label: '计划编号',
-            align: 'center',
-            width: 200
-          },
-          {
-            prop: 'materialCode',
-            label: '编号',
-            align: 'center',
-            width: 150
-          },
-          {
-            prop: 'materialName',
-            label: '物料名称',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 110
-          },
-          {
-            prop: 'brandNo',
-            label: '牌号',
-            align: 'center'
-          },
-          {
-            prop: 'num',
-            label:
-              this.activeName === 'second'
-                ? '计划生产重量(KG)'
-                : '生产重量(KG)',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 150
-          },
-          ...(this.activeName === 'second'
-            ? [
-                {
-                  prop: 'producedWeight',
-                  label: '已生产重量(KG)',
-                  align: 'center',
-                  showOverflowTooltip: true,
-                  minWidth: 150
-                }
-              ]
-            : []),
+      ];
+    }
+  },
+  methods: {
+    statusFormatter(status) {
+      const obj = this.statusOpt[this.activeName].find(
+        (i) => i.value == status
+      );
 
-          {
-            prop: 'deliveryTime',
-            label: '要求交付日期',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 110
-          },
-          ...(this.activeName === 'second'
-            ? [
-                {
-                  prop: 'completeTime',
-                  label: '实际完成时间',
-                  align: 'center',
-                  showOverflowTooltip: true,
-                  minWidth: 110
-                }
-              ]
-            : []),
-          {
-            columnKey: 'status',
-            label: '状态',
-            align: 'center',
-            slot: 'status',
-            action: 'status'
-          },
-          {
-            prop: 'createUserName',
-            label: '创建人',
-            align: 'center'
-          },
-          {
-            prop: 'createTime',
-            label: '创建时间',
-            align: 'center',
-            width: 160
-          },
-          ...(this.activeName === 'second'
-            ? [
-                {
-                  prop: 'releaseTime',
-                  label: '发布时间',
-                  align: 'center'
-                }
-              ]
-            : []),
-          ...(this.activeName === 'first'
-            ? [
-                {
-                  columnKey: 'action',
-                  label: '操作',
-                  width: 250,
-                  align: 'center',
-                  resizable: false,
-                  fixed: 'right',
-                  slot: 'action'
-                }
-              ]
-            : [])
-        ];
+      return obj && obj.label;
+    },
+    /* 表格数据源 */
+    datasource({ page, limit, where, order }) {
+      return getList({
+        pageNum: page,
+        size: limit,
+        ...where
+      });
+    },
+    handleEdit(type, row) {
+      if (this.activeName == 'first') {
+        this.$refs.planEditDialogRef.open(type, row);
       }
+
+    },
+    handleDel({ id }) {
+      this.$confirm('确认删除当前数据!', '提示').then(async () => {
+        await del([id]);
+        this.$message.success('删除成功!');
+        this.reload();
+      });
     },
-    methods: {
-      statusFormatter(status) {
-        const obj = this.statusOpt[this.activeName].find(
-          (i) => i.value == status
-        );
 
-        return obj && obj.label;
-      },
-      /* 表格数据源 */
-      datasource({ page, limit, where, order }) {
-        return getList({
-          pageNum: page,
-          size: limit,
-          ...where
-        });
-      },
-      handleEdit(type, row) {
-        if(this.activeName == 'first') {
-          this.$refs.planEditDialogRef.open(type, row);
-        }
-       
-      },
-      handleDel({ id }) {
-        this.$confirm('确认删除当前数据!', '提示').then(async () => {
-          await del([id]);
-          this.$message.success('删除成功!');
-          this.reload();
-        });
-      },
-      // 发布工单
-      handleOrderPublish(type, row) {
-        this.$router.push({
-          path: '/materialPlan/workOrderPublish',
-          query: {
-            type,
-            id: row.id
-          }
-        });
-      },
-      handleTabChange() {
-        this.$refs.searchRef.reset();
-      },
+    handleTabChange() {
+      this.$refs.searchRef.reset();
+    },
 
-      /* 刷新表格 */
-      reload(where = {}) {
-        where.statusList = this.statusOpt[this.activeName][0].value.split(',');
-        this.$nextTick(() => {
-          this.$refs.table.reload({ page: 1, where });
-        });
-      },
+    /* 刷新表格 */
+    reload(where = {}) {
+      where.statusList = this.statusOpt[this.activeName][0].value.split(',');
+      this.$nextTick(() => {
+        this.$refs.table.reload({ page: 1, where });
+      });
+    },
 
- 
-    }
-  };
+
+  }
+};
 </script>
 
 <style lang="scss" scoped></style>

+ 0 - 230
src/views/materialPlan/workOrderPublish.vue

@@ -1,230 +0,0 @@
-<template>
-  <div class="ele-body">
-    <el-card shadow="never">
-      <div class="page-title">
-        <el-page-header @back="back" content="发布工单"> </el-page-header>
-      </div>
-
-      <el-descriptions title="" :column="6" border class="mb-20">
-        <el-descriptions-item label="计划编号">{{
-          infoData.code
-        }}</el-descriptions-item>
-        <el-descriptions-item label="物料名称">{{
-          infoData.materialName
-        }}</el-descriptions-item>
-        <el-descriptions-item label="物料编码">{{
-          infoData.materialCode
-        }}</el-descriptions-item>
-        <el-descriptions-item label="牌号">{{
-          infoData.brandNo
-        }}</el-descriptions-item>
-        <el-descriptions-item label="型号">{{
-          infoData.model
-        }}</el-descriptions-item>
-        <el-descriptions-item label="生产版本">{{
-          infoData.produceVersionName
-        }}</el-descriptions-item>
-        <el-descriptions-item label="工艺路线名称">{{
-          infoData.routingName
-        }}</el-descriptions-item>
-        <el-descriptions-item label="工艺路线版本">{{
-          infoData.routingVersion
-        }}</el-descriptions-item>
-        <el-descriptions-item label="生产重量">{{
-          infoData.num
-        }}</el-descriptions-item>
-        <el-descriptions-item label="要求交付日期">{{
-          infoData.deliveryTime
-        }}</el-descriptions-item>
-        <el-descriptions-item label="创建时间">{{
-          infoData.createTime
-        }}</el-descriptions-item>
-      </el-descriptions>
-
-      <!-- <div class="rules-box">
-        <div class="rule-label">工单生成规则</div>
-        <div class="rule-wrapper">
-          <div class="content">
-            <div class="select-box" v-for="(item, index) in rules" :key="index">
-              <el-radio-group v-model="item.value" v-if="item.type === 'radio'">
-                <el-radio
-                  v-for="(itm, idx) in item.list"
-                  :key="idx"
-                  :label="itm.label"
-                ></el-radio>
-              </el-radio-group>
-              <el-checkbox-group v-model="item.value" v-else>
-                <el-checkbox
-                  v-for="(itm, idx) in item.list"
-                  :key="idx"
-                  :label="itm.label"
-                  :disabled="
-                    itm.lastDisabled
-                      ? item.value.length < item.list.length - 1
-                      : false
-                  "
-                ></el-checkbox>
-              </el-checkbox-group>
-            </div>
-          </div>
-          <div class="btn-box">
-            <el-tooltip
-              placement="top-start"
-              title="标题"
-              width="200"
-              trigger="hover"
-              content="这是一段内容,这是一段内容,这是一段内容,这是一段内容。"
-            >
-              <el-button type="text" icon="el-icon-question"></el-button>
-            </el-tooltip>
-            <el-button type="primary" plain>一键生成方案</el-button>
-          </div>
-        </div>
-      </div> -->
-      <planView key="first" :infoData="infoData" :orderList="orderList" />
-      <!-- <el-tabs v-model="activeName" type="card">
-        <el-tab-pane label="默认" name="first"
-          ><planView key="first" :infoData="infoData"
-        /></el-tab-pane>
-        <el-tab-pane
-          v-for="(item, index) in planList"
-          :label="item.label"
-          :name="index"
-          ><planView :key="index" :infoData="infoData"
-        /></el-tab-pane>
-      </el-tabs> -->
-    </el-card>
-  </div>
-</template>
-
-<script>
-  import planView from './components/plan-view';
-  import { getById, getReleaseInfoById } from '@/api/materialPlan/index';
-  import { getRouteTabKey, removePageTab } from '@/utils/page-tab-util';
-  export default {
-    components: { planView },
-    data () {
-      return {
-        activeName: 'first',
-        planList: [],
-        rules: [
-          {
-            type: 'radio',
-            value: '',
-            list: [
-              { label: '多设备优先', value: 0 },
-              { label: '多班次优先', value: 1 }
-            ]
-          },
-          {
-            type: 'checked',
-            value: [],
-
-            list: [
-              { label: '设备产能优先', value: 0 },
-              { label: '最早开始时间优先', value: 1 },
-              { label: '开始时间优先', value: 2, lastDisabled: true }
-            ]
-          },
-          {
-            type: 'checked',
-            value: [],
-            list: [
-              { label: '非空闲设备可用', value: 0 },
-              { label: '检修设备可用', value: 1 },
-              { label: '检修设备优先', value: 1, lastDisabled: true }
-            ]
-          },
-          {
-            type: 'radio',
-            value: '',
-            list: [{ label: '末单均衡', value: 0 }]
-          }
-        ],
-        infoData: {},
-        orderList: [],
-        planType: ['', '内销计划', '外销计划', '预制计划'],
-        id: null
-      };
-    },
-    methods: {
-      back () {
-        const key = getRouteTabKey();
-        if (this.type == 2) {
-          this.$router.push('/materialPlan');
-          removePageTab({ key });
-          return;
-        }
-        this.$confirm('返回后将清空所有方案,是否要继续?', '提示').then(() => {
-          this.$router.push('/materialPlan');
-
-          removePageTab({ key });
-        });
-      },
-      async getInfo () {
-        const data = await getById(this.id);
-
-        this.infoData = data;
-      },
-      async getReleaseInfoById () {
-        const data = await getReleaseInfoById(this.id);
-
-        this.infoData = data.productionPlan;
-
-        this.orderList = data.workOrderList;
-      }
-    },
-    created () {
-      const { query = {} } = this.$route;
-
-      this.type = query.type;
-      this.id = query.id;
-      if (query.type == 2) {
-        this.getReleaseInfoById();
-      } else {
-        this.getInfo();
-      }
-    }
-  };
-</script>
-<style lang="scss" scoped>
-  .rules-box {
-    padding: 20px 0;
-    display: flex;
-    justify-content: space-between;
-    .rule-label {
-      font-size: 18px;
-      font-weight: bold;
-    }
-    .rule-wrapper {
-      flex: 1;
-      display: flex;
-      justify-content: space-between;
-      align-items: flex-start;
-
-      .content {
-        flex: 1;
-        display: flex;
-        flex-wrap: wrap;
-        align-items: center;
-        padding: 0 10px;
-
-        .select-box {
-          border: 1px solid #ccc;
-          padding: 5px 10px;
-          margin: 0 10px 10px 0;
-        }
-      }
-
-      .btn-box {
-        display: flex;
-        justify-content: space-between;
-        width: 160px;
-      }
-    }
-  }
-
-  .mb-20 {
-    margin-bottom: 20px;
-  }
-</style>