ysy il y a 2 ans
Parent
commit
3fa623a36e

+ 11 - 0
src/api/classifyManage/index.js

@@ -50,3 +50,14 @@ export async function getInfoById (id) {
   }
   return Promise.reject(new Error(res.data.message));
 }
+
+
+
+// 物品信息列表
+export async function getList (params) {
+  const res = await request.get('/main/category/getList', { params });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 12 - 0
src/api/inspectionStandard/index.js

@@ -31,6 +31,18 @@ export async function update(data) {
 }
 
 
+export async function getById(id) {
+  const res = await request.get(`/qms/qualitystandard/getById/${id}`);
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+
+
+
+
 // 删除
 export async function removeItem(data) {
   const res = await request.delete('/qms/qualitystandard/delete', {

+ 253 - 0
src/views/inspectionStandard/components/ProductModal.vue

@@ -0,0 +1,253 @@
+<template>
+  <el-dialog :title="title" :visible.sync="visible" :before-close="handleClose" :close-on-click-modal="false"
+    :close-on-press-escape="false" append-to-body width="70%">
+
+    <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">
+          <el-tree :data="treeList" :props="defaultProps" ref="treeRef"
+            :default-expanded-keys="categoryId ? [categoryId] : []" :highlight-current="true" node-key="id"
+            @node-click="handleNodeClick"></el-tree>
+        </div>
+
+
+        <!-- 数据表格 -->
+        <template v-slot:content>
+          <ele-pro-table style="min-height: 400px;" ref="table" :columns="columns" :datasource="datasource"
+            :selection.sync="selection" row-key="id">
+          </ele-pro-table>
+        </template>
+      </ele-split-layout>
+
+    </el-card>
+
+
+
+
+
+    <div class="rx-sc">
+
+      <el-button type="primary" size="small" @click="selected">选择</el-button>
+      <el-button size="small" @click="handleClose">关闭</el-button>
+
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+
+
+
+import ProductSearch from './product-search.vue'
+import { getTreeByPid, getList } from '@/api/classifyManage';
+export default {
+  components: {
+    ProductSearch
+  },
+  data() {
+    return {
+      visible: false,
+      title: '选择工具',
+
+      categoryLevelId: null,
+      categoryId: 1,
+      treeList: [],
+      treeLoading: false,
+
+      defaultProps: {
+        children: 'children',
+        label: 'name'
+      },
+      type: null,
+
+      // 表格列配置
+      columns: [
+        {
+          columnKey: 'selection',
+          type: 'selection',
+          width: 45,
+          align: 'center',
+          selectable: (row, index) => {
+            return !this.processData.some((it) => row.id == it.categoryId);
+          },
+          reserveSelection: true,
+          fixed: 'left'
+        },
+
+        {
+          label: '物料名称',
+          prop: 'name',
+        },
+
+        {
+          label: '物料编码',
+          prop: 'code'
+        },
+        {
+          label: '牌号',
+          prop: 'brandNum'
+        },
+        {
+          label: '型号',
+          prop: 'modelType'
+        },
+
+        {
+          prop: 'availableCountBase',
+          label: '包装库存',
+          sortable: 'custom',
+        },
+        {
+          label: '单位',
+          prop: 'weightUnit'
+        },
+
+        {
+          prop: 'packingCountBase',
+          label: '计量库存',
+          sortable: 'custom',
+        },
+
+        {
+          label: '计量单位',
+          prop: 'unit'
+        },
+
+
+
+        {
+          label: '数量',
+          prop: 'count'
+        },
+
+
+
+
+
+      ],
+
+      // 表格选中数据
+      selection: [],
+
+      processData: [],
+      current: null,
+
+
+
+
+
+    }
+  },
+
+  watch: {
+
+  },
+  methods: {
+
+
+    /* 表格数据源 */
+    async datasource({ page, limit, where }) {
+      const res = await getList({
+        ...where,
+        pageNum: page,
+        size: limit,
+        categoryLevelId: 15,
+
+      });
+      return res;
+    },
+
+    open(item) {
+      this.processData = item || []
+      this.visible = true
+
+      this.getTreeData();
+
+    },
+
+
+
+    async getTreeData() {
+      try {
+        this.treeLoading = true;
+
+        const res = await getTreeByPid(15);
+        this.treeLoading = false;
+        if (res?.code === '0') {
+          this.treeList = res.data;
+
+          this.$nextTick(() => {
+            // 默认高亮第一级树节点
+            if (this.treeList[0]) {
+              this.rootTreeId = this.treeList[0].id
+              this.$nextTick(() => {
+                this.$refs.treeRef.setCurrentKey(this.treeList[0].id);
+              });
+
+            }
+          });
+          return this.treeList;
+        }
+      } catch (error) { }
+      this.treeLoading = false;
+    },
+
+
+
+
+    handleNodeClick(data) {
+      this.categoryLevelId = data.id;
+      this.$refs.table.reload({ pageNum: 1, where: {} });
+
+    },
+
+
+    /* 刷新表格 */
+    reload(where) {
+      this.$refs.table.reload({ page: 1, where: where });
+    },
+
+
+
+    handleClose() {
+      this.visible = false
+      this.$refs.table.setSelectedRows([]);
+      this.selection = []
+
+    },
+    selected() {
+      let _arr = []
+      if (!this.selection.length) {
+        this.$message.error('请至少选择一条数据');
+        return;
+      }
+
+      _arr = this.selection.map(m => {
+        m.categoryId = m.id
+        return {
+          ...m
+        }
+      })
+
+
+      this.$emit('chooseModal', _arr)
+      this.handleClose()
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.rx-sc {
+
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.ml60 {
+  margin-left: 60px;
+}
+</style>

+ 138 - 8
src/views/inspectionStandard/components/edit.vue

@@ -5,7 +5,7 @@
     <el-form ref="form" :model="form" :rules="rules" label-width="100px">
       <el-row>
 
-       
+
         <el-col :span="12">
           <el-form-item label="质检名称:" prop="name">
             <el-input clearable v-model="form.name" placeholder="请输入" />
@@ -26,14 +26,14 @@
         </el-col>
 
         <el-col :span="12">
-        <el-form-item label="标准类型:" prop="type">
+          <el-form-item label="标准类型:" prop="type">
             <DictSelection dictName="质检标准类型" v-model="form.type"></DictSelection>
           </el-form-item>
         </el-col>
 
         <el-col :span="12">
-        <el-form-item label="标准代码:" prop="standardCode">
-          <el-input v-model="form.standardCode"></el-input>
+          <el-form-item label="标准代码:" prop="standardCode">
+            <el-input v-model="form.standardCode"></el-input>
           </el-form-item>
         </el-col>
 
@@ -41,19 +41,98 @@
 
       </el-row>
     </el-form>
+
+    <headerTitle title="质检工具">
+      <el-button type="primary" size="small" @click="handleAdd">新增</el-button>
+    </headerTitle>
+
+    <el-table ref="multipleTable" :data="form.toolList" tooltip-effect="dark" style="width: 100%" stripe
+      :header-cell-style="{ background: '#EEEEEE', border: 'none' }">
+
+
+      <el-table-column label="设备名称" prop="code" min-width="120">
+        <template slot-scope="{ row }">
+          {{ row.name }}
+        </template></el-table-column>
+
+      <el-table-column label="设备编码" prop="code" min-width="120">
+        <template slot-scope="{ row }">
+          {{ row.code }}
+        </template></el-table-column>
+
+
+
+
+
+      <el-table-column label="操作" fixed="right">
+        <template slot-scope="{ $index, row }">
+          <el-button type="text" @click="removeItem($index, row)">删除设备</el-button>
+        </template>
+      </el-table-column>
+
+
+    </el-table>
+
+    <headerTitle title="质检注意事项">
+      <el-button type="primary" size="small" @click="addPostscript">新增</el-button>
+    </headerTitle>
+
+
+    <el-table ref="multipleTable" :data="form.postscriptList" tooltip-effect="dark" style="width: 100%" stripe
+      :header-cell-style="{ background: '#EEEEEE', border: 'none' }">
+
+
+      <el-table-column label="排序" prop="" width="220">
+        <template slot-scope="{ row }">
+          <el-input placeholder="请输入" type="number" v-model.number="row.sort
+            " clearable></el-input>
+        </template></el-table-column>
+
+      <el-table-column label="注意事项" prop="" min-width="120">
+        <template slot-scope="{ row }">
+          <el-input placeholder="请输入" type="textarea" :rows="1" v-model="row.content
+            " clearable></el-input>
+        </template></el-table-column>
+
+
+
+
+
+
+      <el-table-column label="操作" fixed="right">
+        <template slot-scope="{ $index, row }">
+          <el-button type="text" @click="removePostscript($index, row)">删除</el-button>
+        </template>
+      </el-table-column>
+
+
+    </el-table>
+
+
+
     <template v-slot:footer>
       <el-button @click="handleClose">取消</el-button>
       <el-button type="primary" :loading="loading" @click="save">
         保存
       </el-button>
     </template>
+
+
+    <ProductModal ref="productRefs" @chooseModal="chooseModal" />
+
   </el-dialog>
 </template>
 
 <script>
 
-import { save, update  } from '@/api/inspectionStandard';
+import { save, update, getById } from '@/api/inspectionStandard';
+import ProductModal from './ProductModal.vue'
 export default {
+  components: {
+    ProductModal
+  },
+
+
 
   data() {
     const defaultForm = function () {
@@ -63,7 +142,11 @@ export default {
         status: '',
         type: '',
         version: '',
-        standardCode: ''
+        standardCode: '',
+        toolList: [],
+        postscriptList: [],
+        toolRemoveIds: [],
+        postscriptRemoveIds: []
       };
     };
     return {
@@ -103,14 +186,21 @@ export default {
     open(type, row) {
       this.title = type == 'add' ? '新增' : '编辑'
       this.type = type;
-      if(this.type =='edit') {
-        this.form = row
+      if (this.type == 'edit') {
+
+        this.getDetail(row.id)
       }
       this.visible = true;
 
 
     },
 
+    getDetail(id) {
+      getById(id).then(res => {
+        this.form = res.data
+      })
+    },
+
     /* 保存编辑 */
     save() {
       this.$refs.form.validate((valid) => {
@@ -145,6 +235,46 @@ export default {
       this.visible = false;
     },
 
+    handleAdd() {
+      this.$refs.productRefs.open(this.form.toolList)
+    },
+
+    chooseModal(data) {
+      this.form.toolList = data
+      console.log(data)
+    },
+
+    removeItem(idx, row) {
+      if (this.form.toolList.length == 1) {
+        return this.$message.error('至少保留一个设备!');
+      }
+
+      this.$confirm(`是否删除这个设备?`).then(async () => {
+        this.form.toolList.splice(idx, 1)
+
+
+        this.form.toolRemoveIds.push(row.id)
+
+      })
+    },
+
+    addPostscript() {
+      this.form.postscriptList.push({ sort: null, content: '' })
+    },
+    removePostscript(idx, row) {
+      if (this.form.postscriptList.length == 1) {
+        return this.$message.error('至少保留一个事项!');
+      }
+
+      this.$confirm(`是否删除这个事项?`).then(async () => {
+        this.form.postscriptList.splice(idx, 1)
+
+
+        this.form.postscriptRemoveIds.push(row.id)
+
+      })
+    },
+
 
   }
 };

+ 102 - 0
src/views/inspectionStandard/components/product-search.vue

@@ -0,0 +1,102 @@
+<!-- 搜索表单 -->
+<template>
+  <el-form
+    label-width="77px"
+    class="ele-form-search"
+    @keyup.enter.native="search"
+    @submit.native.prevent
+  >
+    <el-row :gutter="10">
+      <el-col v-bind="styleResponsive ? { md: 6 } : { span: 6 }">
+        <el-form-item label="编码">
+          <el-input clearable v-model="where.code" placeholder="请输入" />
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { md: 6 } : { span: 6 }">
+        <el-form-item label="名称">
+          <el-input clearable v-model="where.name" placeholder="请输入" />
+        </el-form-item>
+      </el-col>
+
+      <el-col v-bind="styleResponsive ? { md: 6 } : { span: 6 }">
+        <el-form-item label="型号">
+          <el-input clearable v-model="where.modelType" placeholder="请输入" />
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { md: 4 } : { md: 4 }">
+        <div class="ele-form-actions">
+          <el-button
+            type="primary"
+            icon="el-icon-search"
+            class="ele-btn-icon"
+            @click="search"
+          >
+            查询
+          </el-button>
+
+          <el-button
+            @click="reset"
+            icon="el-icon-refresh"
+            class="ele-btn-icon"
+            size="medium"
+            >重置</el-button
+          >
+        </div>
+      </el-col>
+    </el-row>
+  </el-form>
+</template>
+
+<script>
+  export default {
+    data () {
+      // 默认表单数据
+      const defaultWhere = {
+        name: '',
+        code: '',
+        modelType: ''
+      };
+      return {
+        defaultWhere,
+        // 表单数据
+        where: { ...defaultWhere },
+        treeData:[]
+      };
+    },
+    computed: {
+      // 是否开启响应式布局
+      styleResponsive () {
+        return this.$store.state.theme.styleResponsive;
+      }
+    },
+    created() {
+    },
+    methods: {
+
+      /* 搜索 */
+      search () {
+        if (this.where.appType === 0) {
+          this.where.appType = '';
+        }
+        this.$emit('search', this.where);
+      },
+      /*  重置 */
+      reset () {
+        this.where = { ...this.defaultWhere };
+        this.search();
+      },
+      reset2 () {
+        this.where = { ...this.defaultWhere };
+
+      }
+    }
+  };
+</script>
+
+<style>
+  .ele-form-actions {
+    display: inline-block;
+    transform: translate(0);
+    transition: all;
+  }
+</style>