ysy il y a 2 ans
Parent
commit
21bac7d994

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

@@ -95,3 +95,19 @@ export async function getProduceList (params) {
   }
   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));
+}
+
+

+ 341 - 0
src/views/factoryModel/station/components/ProductModal.vue

@@ -0,0 +1,341 @@
+<template>
+  <el-dialog :title="title" :visible.sync="visible" v-if="visible" :before-close="handleClose"
+    :close-on-click-modal="false" :close-on-press-escape="false" append-to-body width="75%">
+    <el-card shadow="never">
+      <ProductSearch @search="reload" ref="searchRef" />
+
+      <ele-split-layout width="244px" allow-collapse :right-style="{ overflow: 'hidden' }">
+        <div class="ele-border-lighter split-layout-right-content">
+          <AssetTree ref="assetTreeRef" :id="categoryLevelId" @handleNodeClick="handleNodeClick" />
+        </div>
+        <!-- 表格 -->
+        <template v-slot:content>
+          <ele-pro-table ref="table" :columns="isLedger ? columns2 : columns" :datasource="datasource" row-key="id"
+            height="calc(100vh - 350px)" class="dict-table" @cell-click="cellClick">
+            <!-- 表头工具栏 -->
+            <template v-slot:action="{ row }">
+              <span v-if="deviceList.includes(row.id)">已占用</span>
+              <el-radio v-else class="radio"  v-model="radio" :label="row.id"><i></i></el-radio>
+            </template>
+          </ele-pro-table>
+        </template>
+      </ele-split-layout>
+    </el-card>
+    <div class="btns">
+      <el-button type="primary" size="small" @click="selected">选择</el-button>
+      <el-button size="small" @click="handleClose">关闭</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import AssetTree from '@/components/AssetTree';
+import ProductSearch from '@/views/technology/productParam/components/product-search.vue'
+import { getMaterialList } from '@/api/material/list.js';
+import { getAssetList } from '@/api/ledgerAssets/index'
+import {
+  allDeviceList
+} from '@/api/factoryModel';
+
+export default {
+  components: { AssetTree, ProductSearch },
+  props: {
+    isLedger: {
+      type: Boolean,
+      default: false
+    }
+  },
+  data() {
+    return {
+      visible: false,
+
+      deviceList: [],
+
+      // 表格列配置
+      columns: [
+        {
+          columnKey: 'index',
+          type: 'index',
+          width: 45,
+          align: 'center',
+          reserveSelection: true
+        },
+        {
+          prop: 'code',
+          label: '编码'
+        },
+        {
+          prop: 'name',
+          label: '名称',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'brandNum',
+          label: '牌号'
+        },
+
+        {
+          prop: 'modelType',
+          label: '型号',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'specification',
+          label: '规格',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'measuringUnit',
+          label: '计量单位',
+          showOverflowTooltip: true,
+          minWidth: 90
+        },
+
+        {
+          prop: 'weightUnit',
+          label: '重量单位',
+          showOverflowTooltip: true,
+          minWidth: 90
+        },
+
+        {
+          prop: 'roughWeight',
+          label: '毛重',
+          showOverflowTooltip: true,
+          minWidth: 90
+        },
+
+        {
+          prop: 'netWeight',
+          label: '净重',
+          showOverflowTooltip: true,
+          minWidth: 90
+        },
+
+
+        {
+          prop: 'packingUnit',
+          align: 'center',
+          label: '包装单位',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'categoryLevelPath',
+          label: '分类',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+
+        {
+          action: 'action',
+          slot: 'action',
+          align: 'center',
+          label: '选择'
+        }
+      ],
+
+      columns2: [
+        {
+          columnKey: 'index',
+          type: 'index',
+          label: '序号',
+          width: 55,
+          align: 'center',
+          showOverflowTooltip: true,
+          fixed: 'left'
+        },
+        {
+          prop: 'fixCode',
+          label: '固资编码',
+          showOverflowTooltip: true,
+          minWidth: 110
+        },
+        {
+          prop: 'code',
+          label: '编码'
+        },
+        {
+          prop: 'name',
+          label: '名称',
+          showOverflowTooltip: true
+        },
+
+        {
+          prop: 'codeNumber',
+          label: '编号',
+          showOverflowTooltip: true,
+          minWidth: 110
+        },
+
+        {
+          prop: 'category.modelType',
+          label: '型号',
+          showOverflowTooltip: true,
+          minWidth: 110
+        },
+        {
+          prop: 'category.specification',
+          label: '规格',
+          showOverflowTooltip: true,
+          minWidth: 110
+        },
+        {
+          prop: 'pathName',
+          label: '位置',
+          showOverflowTooltip: true,
+          minWidth: 110,
+          formatter: (_row) => {
+            return _row.position[0].pathName;
+          }
+        },
+        {
+          prop: 'source',
+          label: '生命周期',
+          showOverflowTooltip: true,
+          minWidth: 110
+        },
+        {
+          action: 'action',
+          slot: 'action',
+          align: 'center',
+          label: '选择'
+        }
+      ],
+
+      title: null,
+      categoryLevelId: null,
+      radio: null,
+      idx: null,
+
+      isCategory: true
+    }
+  },
+
+  created() {
+  
+  },
+
+  watch: {
+
+  },
+  methods: {
+    /* 表格数据源 */
+    datasource({ page, where, limit }) {
+      let URL = this.isLedger ? getAssetList : getMaterialList
+
+      if (this.isCategory) {
+        return URL({
+          ...where,
+          pageNum: page,
+          size: limit,
+          categoryLevelId: this.categoryLevelId
+        });
+      } else {
+        return URL({
+          ...where,
+          pageNum: page,
+          size: limit,
+        });
+      }
+
+    },
+    handleNodeClick(data) {
+      this.isCategory = true
+      this.categoryLevelId = data.id;
+      this.$refs.table.reload({ pageNum: 1, where: {} });
+      this.$refs.searchRef.reset2()
+
+
+    },
+
+    getAllDeviceList() {
+      allDeviceList().then(res => {
+      
+        this.deviceList =  res.map(item => {
+           return item.assetId
+        })
+       
+          
+      })
+    },
+    /* 刷新表格 */
+    reload(where) {
+      this.isCategory = false
+      this.$refs.table.reload({ pageNum: 1, where: where });
+    },
+    open(item, title, categoryLevelId, idx) {
+      if (item) {
+        this.title = title
+        this.categoryLevelId = categoryLevelId
+        this.idx = idx
+
+        this.current = {
+          id: item.categoryId,
+          name: item.categoryName,
+          code: item.categoryCode
+        }
+        this.radio = item.categoryId
+
+      }
+      this.getAllDeviceList()
+      this.visible = true
+    },
+
+
+
+
+
+    // 单击获取id
+    cellClick(row) {
+      this.current = row
+      this.radio = row.id
+    },
+    handleClose() {
+      this.visible = false
+      this.current = null
+      this.radio = ''
+    },
+    selected() {
+      if (!this.current) {
+        return this.$message.warning('请选择工作中心')
+      }
+      this.$emit('changeProduct', this.title, this.current, this.idx)
+      this.handleClose()
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.tree_col {
+  border: 1px solid #eee;
+  padding: 10px 0;
+  box-sizing: border-box;
+  height: 500px;
+  overflow: auto;
+}
+
+.table_col {
+  padding-left: 10px;
+
+  ::v-deep .el-table th.el-table__cell {
+    background: #f2f2f2;
+  }
+}
+
+.pagination {
+  text-align: right;
+  padding: 10px 0;
+}
+
+.btns {
+  text-align: center;
+  padding: 10px 0;
+}
+
+.topsearch {
+  margin-bottom: 15px;
+}
+</style>

+ 1 - 1
src/views/factoryModel/station/components/edit.vue

@@ -172,7 +172,7 @@ import {
   getById
 } from '@/api/factoryModel';
 import { getUserPage } from '@/api/system/organization';
-import ProductModal from '@/views/technology/productParam/components/ProductModal.vue'
+import ProductModal from './ProductModal.vue'
 import producetask from '@/api/technology/production';
 import work from '@/api/technology/work';
 import ProduceDialog from './ProduceDialog'