Просмотр исходного кода

首工序派单新增添加工位

695593266@qq.com 6 месяцев назад
Родитель
Сommit
fba99ef6dc

+ 235 - 0
src/api/factoryModel/index.js

@@ -0,0 +1,235 @@
+import request from '@/utils/request';
+// 获取车间下的所有产线
+export async function listFactoryLine(params) {
+  const res = await request.post(`/main/factoryarea/listFactoryLine`, params);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+// 获取工厂下的所有车间
+export async function listWorkshopByParentId(params) {
+  const res = await request.get(
+    `/main/factoryarea/listWorkshopByParentId/${params}`,
+    {}
+  );
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+// 保存
+export async function saveOrUpdate(params) {
+  const res = await request.post(`/main/factoryarea/saveOrUpdate`, params);
+  if (res.data.code == 0) {
+    return res.data.message;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+// 查询工厂列表-分页
+export async function getFactoryarea(params) {
+  const res = await request.get(`/main/factoryarea/page`, {
+    params
+  });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+// 删除
+export async function deletefactoryarea(params) {
+  const res = await request.get(`/main/factoryarea/delete/${params}`);
+  if (res.data.code == 0) {
+    return res.data.message;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+// 保存修改工位
+export async function saveOrUpdate_gw(params) {
+  const res = await request.post(
+    `/main/factoryworkstation/saveOrUpdate`,
+    params
+  );
+  if (res.data.code == 0) {
+    return res.data.message;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+// 工位分页查询
+export async function getFactoryworkstation(params) {
+  const res = await request.get(`/main/factoryworkstation/page`, {
+    params
+  });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+// 工位删除
+export async function deleteFactoryworkstation(params) {
+  const res = await request.delete(`/main/factoryworkstation/delete/${params}`);
+  if (res.data.code == 0) {
+    return res.data.message;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+// 工位详情
+export async function getById(params) {
+  const res = await request.get(`/main/factoryworkstation/getById/${params}`);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+// 工艺路线工序实例-列表(查询所有)
+export async function getProduceList(params) {
+  const res = await request.get(
+    `/main/producerouting/taskinstance/getAllList`,
+    { params }
+  );
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 所有在工位的设备
+export async function allDeviceList(params) {
+  const res = await request.get(`/main/factoryworkstation/allDeviceList`, {
+    params
+  });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 工种列表查询
+export async function getProfessionPageList(params) {
+  const res = await request.get(`/main/profession/page`, { params });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 新增工种
+export async function saveJobTypes(data) {
+  const res = await request.post(`/main/profession/save`, data);
+  if (res.data.code == 0) {
+    return res.data.message;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 通过id查询工种详情
+export async function getProfessiongetById(id) {
+  const res = await request.get(`/main/profession/getById/${id}`);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 删除工种
+export async function deleteProfessiongetById(data) {
+  const res = await request.delete(`/main/profession/delete`, { data });
+  if (res.data.code == 0) {
+    return res.data.message;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 修改工种
+export async function updateProfessiongetById(data) {
+  const res = await request.put(`/main/profession/update`, data);
+  if (res.data.code == 0) {
+    return res.data.message;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 资质列表查询
+export async function getProfessionCertificationPageList(params) {
+  const res = await request.get(`/main/professionCertification/page`, {
+    params
+  });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 新增资质
+export async function saveProfessionCertification(data) {
+  const res = await request.post(`/main/professionCertification/save`, data);
+  if (res.data.code == 0) {
+    return res.data.message;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 通过id查询资质详情
+export async function getProfessionCertificationById(id) {
+  const res = await request.get(`/main/professionCertification/getById/${id}`);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 删除资质
+export async function deleteProfessionCertificationById(data) {
+  const res = await request.delete(`/main/professionCertification/delete`, {
+    data
+  });
+  if (res.data.code == 0) {
+    return res.data.message;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 修改资质
+export async function updateProfessionCertificationById(data) {
+  const res = await request.put(`/main/professionCertification/update`, data);
+  if (res.data.code == 0) {
+    return res.data.message;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 获取供应商/客户列表
+export async function getVendorPageList(params) {
+  const res = await request.get(`/eom/contact/page`, {
+    params
+  });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 编码是否存在
+export async function codeExists(code) {
+  const res = await request.get(`/main/factoryworkstation/codeExists/${code}`);
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+// 获取工厂下的所有产线
+export async function listFactoryLineByFactoryId(params) {
+  const res = await request.post(`/main/factoryarea/listFactoryLineByFactoryId`, params);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+// 获取产线下的所有工位
+export async function listByProductionLineId(productionLineId) {
+  const res = await request.get(`/main/factoryworkstation/listByProductionLineId/${productionLineId}`);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 1 - 1
src/views/productionPlan/components/kittingComplete.vue

@@ -1047,7 +1047,7 @@
       async getBomData(data) {
         // this.loading = true;
         try {
-          this.planId = data.id;
+          this.planId = data.productionPlanId;
           let params = { categoryId: data.categoryId };
           const res = await listBomType(params);
           if (!res || res.length === 0) return;

+ 232 - 0
src/views/workOrder/components/chooseStation.vue

@@ -0,0 +1,232 @@
+<template>
+  <ele-modal
+    :width="modelWidth"
+    :visible.sync="dispatchVisible"
+    v-if="dispatchVisible"
+    :close-on-click-modal="false"
+    custom-class="ele-dialog-form"
+    :maxable="true"
+    title="选择工位"
+    append-to-body
+    :before-close="cancel"
+  >
+    <ele-pro-table
+      ref="table"
+      :columns="columns"
+      :datasource="datasource"
+      @update:selection="handleSelectionChange"
+      :cache-key="cacheKeyUrl"
+      :pageSize="20"
+      :selection.sync="selection"
+      :row-click-checked="true"
+      :row-click-checked-intelligent="false"
+      row-key="id"
+    >
+      <template v-slot:meterTime="{ row }">
+        <div v-if="row.extInfo.meterTime">
+          {{ `${row.extInfo.meterTime}  ${row.extInfo.meterTimeUnit}/次 ` }}
+        </div>
+      </template>
+
+      <template v-slot:enabled="{ row }">
+        {{ dict.enabled[row.enabled] }}
+      </template>
+    </ele-pro-table>
+
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="dispatchVisible = false">取 消</el-button>
+      <el-button type="primary" @click="comfirm">确定</el-button>
+    </span>
+  </ele-modal>
+</template>
+
+<script>
+  import { getFactoryworkstation } from '@/api/factoryModel';
+  export default {
+    data() {
+      return {
+        dispatchVisible: false,
+        workCenterId: '',
+        cacheKeyUrl: 'chooseStation-2025-12-04',
+        selection: [],
+        dict: {
+          groupId: [],
+          factory: [],
+          enabled: {
+            1: '生效',
+            0: '未生效'
+          }
+        },
+        allSelection: [],
+        index: '',
+        sourceTaskId: ''
+      };
+    },
+
+    computed: {
+      modelWidth() {
+        return '75vw';
+      },
+
+      columns() {
+        return [
+          {
+            width: 45,
+            type: 'selection',
+            columnKey: 'selection',
+            align: 'center',
+            reserveSelection: true,
+            selectable: (row) => this.isRowSelectable(row)
+          },
+          {
+            columnKey: 'index',
+            slot: 'index',
+            label: '序号',
+            type: 'index',
+            width: 55,
+            align: 'center',
+            showOverflowTooltip: true,
+            fixed: 'left'
+          },
+          {
+            prop: 'code',
+            label: '工位编码',
+            showOverflowTooltip: true
+          },
+          {
+            label: '工位名称',
+            prop: 'name',
+            showOverflowTooltip: true
+          },
+          {
+            label: '责任人',
+            prop: 'leaderName',
+            slot: 'factory',
+            showOverflowTooltip: true
+          },
+          {
+            label: '所属区域',
+            prop: 'areaName',
+            showOverflowTooltip: true
+          },
+
+          {
+            label: '所属工厂',
+            prop: 'factoryName',
+            showOverflowTooltip: true
+          },
+
+          {
+            label: '所属厂房',
+            prop: 'workshopPlanName',
+            showOverflowTooltip: true
+          },
+          {
+            label: '所属车间',
+            prop: 'workshopName',
+            showOverflowTooltip: true
+          },
+          {
+            label: '所属产线',
+            prop: 'productionLineName',
+            showOverflowTooltip: true
+          },
+          {
+            label: '设备名称',
+            prop: 'extInfo.assetName',
+            formatter: (_row, _column, cellValue) => {
+              return typeof cellValue === 'string' ? cellValue : '';
+            },
+            showOverflowTooltip: true
+          },
+          {
+            label: '设备编码',
+            prop: 'extInfo.assetCode',
+            formatter: (_row, _column, cellValue) => {
+              return typeof cellValue === 'string' ? cellValue : '';
+            },
+            showOverflowTooltip: true
+          },
+          {
+            label: '节拍时间',
+            prop: 'extInfo.meterTime',
+            slot: 'meterTime',
+            showOverflowTooltip: true
+          },
+          {
+            //修改此prop名称时,请同步修改columnKey属性和下方selectType方法
+            label: '状态',
+            prop: 'enabled',
+            slot: 'enabled',
+            filters: [
+              { value: 1, text: '生效' },
+              { value: 0, text: '未生效' }
+            ],
+            filterMultiple: false,
+            columnKey: 'enabled',
+            showOverflowTooltip: true
+          }
+        ];
+      }
+    },
+
+    methods: {
+      open(id, list = [], index) {
+        this.dispatchVisible = true;
+        this.index = index;
+        this.workCenterId = id;
+
+        this.allSelection = Array.isArray(list) ? list : [];
+
+        this.$nextTick(() => {
+          const table = this.$refs.table;
+          if (!table) return;
+
+          this.allSelection.forEach((item) => {
+            if (item.isNew == 1) {
+              table.toggleRowSelection(item, true);
+            }
+          });
+        });
+      },
+
+      isRowSelectable(row) {
+        const existsOld = this.allSelection.some(
+          (item) => item.id === row.id && item.isNew !== 1
+        );
+        return !existsOld;
+      },
+
+      cancel() {
+        this.dispatchVisible = false;
+      },
+
+      reload(where) {
+        this.$refs.table.reload({ pageNum: 1, where: where });
+      },
+
+      datasource({ page, limit }) {
+        return getFactoryworkstation({
+          pageNum: page,
+          size: limit,
+          workCenterId: this.workCenterId
+        });
+      },
+
+      handleSelectionChange(val) {
+        // this.allSelection = val;
+      },
+
+      comfirm() {
+        if (this.selection.length == 0) {
+          return this.$message.warning('请选择一条数据');
+        }
+
+        this.$emit('chooseStationList', this.selection, this.index);
+        this.dispatchVisible = false;
+      }
+    }
+  };
+</script>
+
+<style></style>

+ 18 - 1
src/views/workOrder/components/releaseDialog.vue

@@ -236,6 +236,15 @@
                   保存
                 </el-button>
 
+                <el-button
+                  type="success"
+                  @click="addStation(item, index)"
+                  :loading="toolbarLoading"
+                  :disabled="!item.isDisable || item.assignType == 3"
+                >
+                  添加工位
+                </el-button>
+
                 <div style="margin-left: 50px; display: inline-block">
                   <span
                     class="text"
@@ -364,14 +373,22 @@
         >确定</el-button
       >
     </div>
+
+    <choose-station
+      ref="chooseStationRef"
+      @chooseStationList="chooseStationList"
+    ></choose-station>
   </ele-modal>
 </template>
 
 <script>
   import releaseMixin from '../mixins/release';
   import { parameterGetByCode } from '@/api/mainData/index';
+  import chooseStation from './chooseStation.vue';
   export default {
-    components: {},
+    components: {
+      chooseStation
+    },
     props: {
       current: {
         type: Object,

+ 3 - 2
src/views/workOrder/index.vue

@@ -49,7 +49,7 @@
         @columns-change="handleColumnChange"
         @select-all="selectAll"
         default-expand-all
-        height="calc(100vh - 390px)"
+        :height="tableHeight"
         full-height="calc(100vh - 116px)"
         :page-size="20"
       >
@@ -309,7 +309,8 @@
         selectionMap: {},
         detailsVisible: false,
         tabValue: '1',
-        treeId: []
+        treeId: [],
+        tableHeight: 'calc(100vh - 345px)'
       };
     },
     computed: {

+ 36 - 1
src/views/workOrder/mixins/release.js

@@ -20,6 +20,7 @@ import {
   getcheckLoginUserIsTeamLeader,
   getUserInfo
 } from '@/api/workOrder/index.js';
+// import {  }
 export default {
   data() {
     return {
@@ -480,6 +481,38 @@ export default {
           this.$message.error(err.message);
         });
     },
+
+    //添加工位
+    addStation(item, index) {
+      console.log(item, index);
+      this.$refs.chooseStationRef.open(
+        this.form.workCenterId,
+        item.list,
+        index
+      );
+    },
+
+    chooseStationList(list, index) {
+      const process = this.processList?.[index];
+
+      if (!process) {
+        console.warn(`processList[${index}] 不存在`);
+        return;
+      }
+
+      const oldList = structuredClone(
+        Array.isArray(process.list) ? process.list : []
+      );
+
+      list.forEach((item) => {
+        item.isNew = 1;
+      });
+
+      const newList = structuredClone(Array.isArray(list) ? list : []);
+
+      this.$set(this.processList[index], 'list', [...oldList, ...newList]);
+    },
+
     cancel() {
       this.$emit('update:dispatchVisible', false);
     },
@@ -778,6 +811,8 @@ export default {
       let listMap = {};
       listArr.map((el, index) => (listMap[el.id] = index));
       let arrList = codeT ? arrMap[codeT].arr : res[0].assignees;
+
+      console.log(arrList, '全部的数据858');
       dataRow.startDate = ''; // 每次计算的时候清空之前的
       dataRow.endDate = '';
       arrList.map((item) => {
@@ -921,7 +956,7 @@ export default {
     shiftSelection(e, row, item) {
       // this.$refs.tableRef0[0].setSelectedRowKeys(row.id);
       // let data = this.shiftList.find((item) => item.id == e);
-      this.selectedListData(row, item);
+      // this.selectedListData(row, item);
       let data = this.shifTimeData(e, row);
       let startTime = `${this.dateValue} ${data.startTime}`;
       let endTime = `${this.dateValue} ${data.endTime}`;

+ 2 - 2
vue.config.js

@@ -40,8 +40,8 @@ module.exports = {
         // target: 'http://192.168.1.211:18086',
         // target: 'http://192.168.1.251:18186',
         // target: 'http://192.168.1.102:18086',
-        target: 'http://aiot.zoomwin.com.cn:51001/api',
-        // target: 'http://192.168.1.125:18086',
+        // target: 'http://aiot.zoomwin.com.cn:51001/api',
+        target: 'http://192.168.1.125:18086',
 
         // target: 'http://192.168.1.116:18086',