Pārlūkot izejas kodu

Merge branch 'dev' of http://172.16.100.139/new-business/drp-web into dev

002390 2 gadi atpakaļ
vecāks
revīzija
ffddbb77a6

+ 62 - 0
src/api/material/label.js

@@ -59,6 +59,33 @@ export function remove(params) {
 }
 
 // 查询用户列表
+export function bindList(params) {
+  return request({
+    url: "/system/label/bindList",
+    method: "get",
+    params: params,
+  });
+}
+
+// 查询用户列表
+export function removeBind(params) {
+  return request({
+    url: "/system/label/removeBind",
+    method: "get",
+    params: params,
+  });
+}
+
+// 查询用户列表
+export function removeAllBind(params) {
+  return request({
+    url: "/system/label/removeAllBind",
+    method: "get",
+    params: params,
+  });
+}
+
+// 查询用户列表
 export function type(data, params) {
   return request({
     url: "/system/label/parentLabels",
@@ -67,3 +94,38 @@ export function type(data, params) {
     params: params,
   });
 }
+
+// 查询用户列表
+export function classifyTree() {
+  return request({
+    url: "/system/label/ClassifyTree",
+    method: "post",
+  });
+}
+
+// 查询用户列表
+export function autoBind(data) {
+  return request({
+    url: "/system/label/autoBind",
+    method: "post",
+    data,
+  });
+}
+
+// 查询用户列表
+export function manualBindQuery(data) {
+  return request({
+    url: "/system/label/manualBindQuery",
+    method: "post",
+    data,
+  });
+}
+
+// 查询用户列表
+export function manualBindOK(data) {
+  return request({
+    url: "/system/label/manualBindOK",
+    method: "post",
+    data,
+  });
+}

+ 43 - 30
src/components/PopDialog/fourClass.vue

@@ -12,23 +12,30 @@
       <el-container style="height: 500px">
         <el-container>
           <el-main>
-            <el-row :gutter="10" class="content">
-              <el-col :span="12">
+            <el-row :gutter="24" class="content">
+              <el-col :span="24">
                 <el-input
                   placeholder="输入关键字进行过滤"
                   size="small"
-                  v-model="filterText">
+                  v-model="filterText"
+                  style="margin-bottom: 16px"
+                >
                 </el-input>
 
                 <el-tree
                   class="filter-tree"
                   :data="threedata"
                   :props="defaultProps"
+                  accordion
                   node-key="id"
                   highlight-current
                   @node-click="clickTree"
                   :filter-node-method="filterNode"
-                  ref="tree">
+                  ref="tree"
+                >
+                  <span slot-scope="{ node, data }">
+                    {{ data.code }}{{ data.materialType }}
+                  </span>
                 </el-tree>
               </el-col>
             </el-row>
@@ -55,75 +62,81 @@
 </template>
 
 <script>
-import { getTree } from '@/api/classify/basic';
+import { getTree } from "@/api/classify/basic";
 export default {
   data() {
     return {
       loading: false,
       visible: false,
-      filterText: '',
+      filterText: "",
       threedata: [],
       defaultProps: {
-        children: 'childrens',
-        label: 'materialType'
+        children: "childrens",
+        label: "materialType",
       },
       // 判断是否为最末级节点
       isLast: false,
       // 选中的节点
-      choosePoint: {}
+      choosePoint: {},
     };
   },
   props: {},
   watch: {
-      filterText(val) {
-        this.$refs.tree.filter(val);
-      }
+    filterText(val) {
+      this.$refs.tree.filter(val);
+    },
   },
   methods: {
     init() {
       this.visible = true;
       this.$nextTick(() => {
-        this.refreshList()
+        this.refreshList();
       });
     },
     // 获取数据列表
     refreshList(data) {
       this.loading = true;
-      getTree({isEnable: '0'}).then(res => {
-        console.log('res',res)
-        if(res.code === 200) {
-          this.threedata = res.rows
+      getTree({ isEnable: "0" }).then((res) => {
+        console.log("res", res);
+        if (res.code === 200) {
+          this.threedata = res.rows.sort((a, b) => a.code - b.code);
         }
         this.loading = false;
       });
     },
     clickTree(data) {
-      console.log('树形节点信息:',data)
+      console.log("树形节点信息:", data);
       if (data.childrens.length == 0) {
-        this.isLast = true
+        this.isLast = true;
       } else {
-        this.isLast = false
+        this.isLast = false;
       }
-      this.choosePoint = data
+      this.choosePoint = data;
     },
     filterNode(value, data) {
-      console.log('value', value)
-      console.log('data', data)
-        if (!value) return true;
-        return data.materialType.indexOf(value) !== -1;
+      console.log("value", value);
+      console.log("data", data);
+      if (!value) return true;
+      return data.materialType.indexOf(value) !== -1;
     },
     doSubmit() {
-      if(this.isLast == false) {
+      if (this.isLast == false) {
         this.$message({
-          message: '请选择最末级节点',
-          type: 'warning'
+          message: "请选择最末级节点",
+          type: "warning",
         });
       } else {
-        console.log('子组件选择的数据',this.choosePoint)
+        console.log("子组件选择的数据", this.choosePoint);
         this.$emit("doSubmit", this.choosePoint);
         this.visible = false;
       }
     },
+    loadNode(node, resolve) {
+      console.log("node, resolve", node, resolve);
+      // if (!node.data.length)
+      //   resolve(node.data.childrens.sort((a, b) => a.code - b.code));
+      // else resolve(this.threedata);
+    },
   },
 };
 </script>
@@ -142,4 +155,4 @@ export default {
     }
   }
 }
-</style>
+</style>

+ 7 - 7
src/layout/components/Navbar.vue

@@ -2,12 +2,12 @@
   <div class="navbar">
     <hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
 
-    <breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!topNav"/>
+    <!-- <breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!topNav"/> -->
     <top-nav id="topmenu-container" class="topmenu-container" v-if="topNav"/>
 
     <div class="right-menu">
       <template v-if="device!=='mobile'">
-        <search id="header-search" class="right-menu-item" />
+        <!-- <search id="header-search" class="right-menu-item" /> -->
         
         <!-- <el-tooltip content="源码地址" effect="dark" placement="bottom">
           <ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />
@@ -17,15 +17,15 @@
           <ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />
         </el-tooltip> -->
 
-        <screenfull id="screenfull" class="right-menu-item hover-effect" />
+        <!-- <screenfull id="screenfull" class="right-menu-item hover-effect" /> -->
 
-        <el-tooltip content="布局大小" effect="dark" placement="bottom">
+        <!-- <el-tooltip content="布局大小" effect="dark" placement="bottom">
           <size-select id="size-select" class="right-menu-item hover-effect" />
-        </el-tooltip>
+        </el-tooltip> -->
 
       </template>
 
-      <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
+      <!-- <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
         <div class="avatar-wrapper">
           <img :src="avatar" class="user-avatar">
           <i class="el-icon-caret-bottom" />
@@ -41,7 +41,7 @@
             <span>退出登录</span>
           </el-dropdown-item>
         </el-dropdown-menu>
-      </el-dropdown>
+      </el-dropdown> -->
     </div>
   </div>
 </template>

+ 2 - 8
src/views/material/classify/index.vue

@@ -16,12 +16,6 @@
           >删除</el-button
         >
       </el-col>
-      <!-- <el-col :span="1.5">
-        <el-button type="primary" size="small" plain>启用</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button type="primary" size="small" plain>停用</el-button>
-      </el-col> -->
     </el-row>
 
     <el-card v-loading="loading">
@@ -46,7 +40,7 @@
             ref="tree"
           >
             <span slot-scope="{ node, data }">
-              {{ data.materialType }} {{ data.code }}
+              {{ data.code }}{{ data.materialType }}
             </span>
           </el-tree>
         </el-col>
@@ -221,7 +215,7 @@ export default {
   watch: {
     filterText(val) {
       this.$refs.tree.filter(val);
-    }
+    },
   },
   created() {
     this.getTreeData();

+ 9 - 0
src/views/material/label/index.vue

@@ -2,12 +2,18 @@
 import LabelTable from "./label-table.vue";
 import LabelAddDialog from "./label-add-dialog.vue";
 import LabelEditDialog from "./label-edit-dialog.vue";
+import LabelBindDialog from "./label-bind-dialog.vue";
+import LabelAutoBindDialog from "./label-auto-bind-dialog.vue";
+import LabelHandBindDialog from "./label-hand-bind-dialog.vue";
 export default {
   name: "MaterialLabel",
   components: {
     LabelTable,
     LabelAddDialog,
     LabelEditDialog,
+    LabelBindDialog,
+    LabelAutoBindDialog,
+    LabelHandBindDialog,
   },
   data() {
     return {};
@@ -21,6 +27,9 @@ export default {
     <label-table></label-table>
     <label-add-dialog></label-add-dialog>
     <label-edit-dialog></label-edit-dialog>
+    <label-bind-dialog></label-bind-dialog>
+    <label-auto-bind-dialog></label-auto-bind-dialog>
+    <label-hand-bind-dialog></label-hand-bind-dialog>
   </el-container>
 </template>
 

+ 21 - 16
src/views/material/label/label-add-dialog.vue

@@ -1,25 +1,25 @@
 <script>
 import { add, type } from "@/api/material/label";
 export default {
-  name: "MaterialAddLabelDialog",
+  name: "AddDialog",
   data() {
     const initDict = {
-      label_type: [
+      labelType: [
         { label: "类别", value: 1 },
         { label: "标签", value: 2 },
       ],
-      parent_id: [],
+      parentId: [],
     };
     const initColumns = [
       {
         type: "select",
-        prop: "label_type",
+        prop: "labelType",
         label: "标签类别",
         required: true,
       },
       {
         type: "select",
-        prop: "parent_id",
+        prop: "parentId",
         label: "上级类别",
         required: false,
       },
@@ -54,7 +54,7 @@ export default {
       this.loading = true;
       type()
         .then((res) => {
-          this.dict.parent_id = res.map((item) => ({
+          this.dict.parentId = res.map((item) => ({
             value: item.id,
             label: item.name,
           }));
@@ -64,11 +64,16 @@ export default {
         });
     },
 
+    fetchItem() {
+      this.dialogFormVisible = true;
+      this.fetchType();
+    },
+
     onSubmit(formName) {
       this.$refs[formName].validate((valid) => {
         if (valid) {
           this.loading = true;
-          if (this.form.label_type === 1) this.form.parent_id = 0;
+          if (this.form.labelType === 1) this.form.parentId = 0;
           add(this.form)
             .then((res) => {
               let { code } = res;
@@ -90,7 +95,7 @@ export default {
     },
   },
   created() {
-    this.fetchType();
+
   },
 };
 </script>
@@ -98,10 +103,10 @@ export default {
 <template>
   <el-dialog destroy-on-close title="新增" :visible.sync="dialogFormVisible">
     <el-form :model="form" ref="addForm" label-position="top">
-      <el-form-item prop="label_type" label="标签类别" required>
-        <el-select v-model="form.label_type">
+      <el-form-item prop="labelType" label="标签类别" required>
+        <el-select v-model="form.labelType">
           <el-option
-            v-for="item in dict.label_type"
+            v-for="item in dict.labelType"
             :key="item.value"
             :label="item.label"
             :value="item.value"
@@ -109,14 +114,14 @@ export default {
         </el-select>
       </el-form-item>
       <el-form-item
-        v-if="form.label_type === 2"
-        prop="parent_id"
+        v-if="form.labelType === 2"
+        prop="parentId"
         label="上级类别"
-        :required="form.label_type === 2"
+        :required="form.labelType === 2"
       >
-        <el-select v-model="form.parent_id">
+        <el-select v-model="form.parentId">
           <el-option
-            v-for="item in dict.parent_id"
+            v-for="item in dict.parentId"
             :key="item.value"
             :label="item.label"
             :value="item.value"

+ 144 - 0
src/views/material/label/label-auto-bind-dialog.vue

@@ -0,0 +1,144 @@
+<script>
+import { classifyTree, autoBind } from "@/api/material/label";
+export default {
+  name: "AutoBindDialog",
+  data() {
+    return {
+      loading: false,
+      dialogFormVisible: false,
+      options: [],
+      form: {},
+    };
+  },
+  methods: {
+    async fetchItem(prop) {
+      this.dialogFormVisible = true;
+      this.form = { ...this.form, ...prop };
+    },
+
+    async fetchClassifyTree() {
+      let data = await classifyTree();
+      this.options = data;
+    },
+
+    onOpen() {
+      this.fetchClassifyTree();
+    },
+
+    onClose() {
+      this.$parent.$children
+        .find((el) => el.$vnode.tag.indexOf("BindDialog") > -1)
+        .fetchItem({});
+    },
+
+    onSubmit(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          let p = {
+            ...this.form,
+            labelId: this.form.id,
+          };
+          this.loading = true;
+          autoBind(p)
+            .then((res) => {
+              let { code } = res;
+              if (code === 200) {
+                this.dialogFormVisible = false;
+                this.$message.success("success");
+                this.form = {};
+              }
+            })
+            .finally(() => {
+              this.loading = false;
+            });
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
+  },
+  created() {},
+};
+</script>
+
+<template>
+  <el-dialog
+    title="自动绑定"
+    :visible.sync="dialogFormVisible"
+    append-to-body
+    @open="onOpen"
+    @close="onClose"
+  >
+    <el-form ref="form" :model="form" label-width="80px">
+      <el-row :gutter="20">
+        <el-col :span="24">
+          <el-form-item label="匹配类别" prop="flag" required>
+            <el-select
+              v-model="form.flag"
+              placeholder="请选择"
+              style="width: 100%"
+            >
+              <el-option label="物料分类" value="1"></el-option>
+              <el-option label="特殊属性" value="2"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col v-show="form.flag === '1'" :span="24">
+          <el-form-item label="物料名称" required>
+            <el-input v-model="form.name"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col>
+          <el-form-item label="物料分类">
+            <el-cascader
+              v-model="form.classifyId"
+              :options="options"
+              :props="{
+                checkStrictly: true,
+                value: 'id',
+                label: 'materialType',
+                children: 'childrens',
+              }"
+              clearable
+              style="width: 100%"
+            ></el-cascader>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row v-show="form.flag === '2'" :gutter="20">
+        <el-col :span="24">
+          <el-form-item label="颜色">
+            <el-input v-model="form.color"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="长度">
+            <el-input v-model="form.length"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="宽度">
+            <el-input v-model="form.width"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="试用范围">
+            <el-input v-model="form.scope"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="包装">
+            <el-input v-model="form.wrap"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button type="primary" @click="onSubmit('form')">立即创建</el-button>
+      <el-button @click="dialogFormVisible = false">取消</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<style scoped></style>

+ 206 - 0
src/views/material/label/label-bind-dialog.vue

@@ -0,0 +1,206 @@
+<script>
+import {
+  add,
+  bindList,
+  removeBind,
+  removeAllBind,
+  classifyTree,
+  autoBind,
+} from "@/api/material/label";
+export default {
+  name: "BindDialog",
+  data() {
+    const initDict = {
+      labelType: [
+        { label: "类别", value: 1 },
+        { label: "标签", value: 2 },
+      ],
+      parentId: [],
+    };
+    const initColumns = () => [
+      {
+        type: "text",
+        prop: "materialCode",
+        label: "物料编码",
+        required: true,
+        showOverflowTooltip: true,
+      },
+      {
+        type: "select",
+        prop: "materialName",
+        label: "物料名称",
+        required: true,
+        showOverflowTooltip: true,
+      },
+      {
+        type: "text",
+        prop: "materialClassifyName",
+        label: "物料分类",
+        required: false,
+        showOverflowTooltip: true,
+      },
+      {
+        type: "text",
+        prop: "materialStatues",
+        label: "物料状态",
+        required: false,
+        showOverflowTooltip: true,
+      },
+      {
+        type: "text",
+        prop: "createTime",
+        label: "创建时间",
+        required: false,
+        showOverflowTooltip: true,
+      },
+      {
+        type: "text",
+        prop: "bindTime",
+        label: "绑定时间",
+        required: false,
+        showOverflowTooltip: true,
+      },
+    ];
+    const initForm = () => {
+      let form = {};
+      initColumns().forEach((item) => (form[item.prop] = ""));
+      return form;
+    };
+    return {
+      loading: false,
+      dialogFormVisible: false,
+      autoInnerVisible: false,
+      handInnerVisible: false,
+      form: initForm(),
+      columns: initColumns(),
+      tableData: [],
+      page: { pageNum: 1, pageSize: 25, total: 0 },
+      dict: initDict,
+      filterText: "",
+      options: [],
+      innerForm: {},
+    };
+  },
+  methods: {
+    async fetchList(prop) {
+      this.loading = true;
+      await bindList(prop)
+        .then((res) => {
+          this.tableData = res;
+        })
+        .finally(() => {
+          this.loading = false;
+        });
+    },
+
+    async fetchItem(prop) {
+      this.dialogFormVisible = true;
+      this.form = { ...this.form, ...prop };
+      await this.fetchList({ labelId: this.form.id });
+    },
+
+    async fetchClassifyTree() {
+      let data = await classifyTree();
+      this.options = data;
+    },
+
+    onAutoBindLabel(prop) {
+      this.$parent.$children
+        .find((el) => el.$vnode.tag.indexOf("AutoBindDialog") > -1)
+        .fetchItem(prop);
+    },
+
+    onHandBindLabel(prop) {
+      this.$parent.$children
+        .find((el) => el.$vnode.tag.indexOf("HandBindDialog") > -1)
+        .fetchItem(prop);
+    },
+
+    async onUnbind(prop) {
+      const { id } = prop;
+      await removeBind({ id });
+      await this.fetchList({ labelId: this.form.id });
+    },
+
+    async onAllUnbind(prop) {
+      const { id } = prop;
+      await removeAllBind({ id });
+      await this.fetchList({ labelId: id });
+    },
+
+    onSubmit(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          this.loading = true;
+          if (this.form.labelType === 1) this.form.parentId = 0;
+          add(this.form)
+            .then((res) => {
+              let { code } = res;
+              if (code === 200) {
+                this.dialogFormVisible = false;
+                this.$message.success("success");
+                this.$parent.$children[0].fetchList();
+                this.form = {};
+              }
+            })
+            .finally(() => {
+              this.loading = false;
+            });
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
+  },
+  created() {},
+};
+</script>
+
+<template>
+  <el-dialog destroy-on-close title="绑定" :visible.sync="dialogFormVisible">
+    <el-button :disabled="loading" @click="onAutoBindLabel(form)">
+      自动绑定
+    </el-button>
+    <el-button :disabled="loading" @click="onHandBindLabel(form)">
+      手动绑定
+    </el-button>
+    <el-button :disabled="loading" @click="onAllUnbind(form)">
+      全部解绑
+    </el-button>
+    <el-table
+      v-loading="loading"
+      lazy
+      border
+      row-key="id"
+      :data="tableData"
+      style="margin-top: 16px"
+    >
+      <el-table-column
+        v-for="column in columns"
+        :key="column.prop"
+        :prop="column.prop"
+        :label="column.label"
+        :show-overflow-tooltip="column.showOverflowTooltip"
+      >
+      </el-table-column>
+      <el-table-column fixed="right" label="操作" width="225">
+        <template slot-scope="scope">
+          <el-button @click.native.prevent="onUnbind(scope.row)" size="small">
+            解绑
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div slot="footer" class="dialog-footer">
+      <el-button :disabled="loading" @click="dialogFormVisible = false"
+        >取 消</el-button
+      >
+      <el-button type="primary" :disabled="loading" @click="onSubmit('addForm')"
+        >确 定</el-button
+      >
+    </div>
+  </el-dialog>
+</template>
+
+<style scoped></style>

+ 21 - 21
src/views/material/label/label-edit-dialog.vue

@@ -1,25 +1,25 @@
 <script>
-import { add, type } from "@/api/material/label";
+import { edit, type } from "@/api/material/label";
 export default {
-  name: "MaterialAddLabelDialog",
+  name: "EditDialog",
   data() {
     const initDict = {
-      label_type: [
+      labelType: [
         { label: "类别", value: 1 },
         { label: "标签", value: 2 },
       ],
-      parent_id: [],
+      parentId: [],
     };
     const initColumns = [
       {
         type: "select",
-        prop: "label_type",
+        prop: "labelType",
         label: "标签类别",
         required: true,
       },
       {
         type: "select",
-        prop: "parent_id",
+        prop: "parentId",
         label: "上级类别",
         required: false,
       },
@@ -54,7 +54,7 @@ export default {
       this.loading = true;
       type()
         .then((res) => {
-          this.dict.parent_id = res.map((item) => ({
+          this.dict.parentId = res.map((item) => ({
             value: item.id,
             label: item.name,
           }));
@@ -65,16 +65,18 @@ export default {
     },
 
     fetchItem(prop) {
+      console.log(prop);
       this.dialogFormVisible = true;
       this.form = prop;
+      this.fetchType();
     },
 
     onSubmit(formName) {
       this.$refs[formName].validate((valid) => {
         if (valid) {
           this.loading = true;
-          if (this.form.label_type === 1) this.form.parent_id = 0;
-          add(this.form)
+          if (this.form.labelType === 1) this.form.parentId = 0;
+          edit(this.form)
             .then((res) => {
               let { code } = res;
               if (code === 200) {
@@ -94,19 +96,17 @@ export default {
       });
     },
   },
-  created() {
-    this.fetchType();
-  },
+  created() {},
 };
 </script>
 
 <template>
-  <el-dialog destroy-on-close title="新增" :visible.sync="dialogFormVisible">
+  <el-dialog destroy-on-close title="编辑" :visible.sync="dialogFormVisible">
     <el-form :model="form" ref="addForm" label-position="top">
-      <el-form-item prop="label_type" label="标签类别" required>
-        <el-select v-model="form.label_type">
+      <el-form-item prop="labelType" label="标签类别" required>
+        <el-select v-model="form.labelType" disabled>
           <el-option
-            v-for="item in dict.label_type"
+            v-for="item in dict.labelType"
             :key="item.value"
             :label="item.label"
             :value="item.value"
@@ -114,14 +114,14 @@ export default {
         </el-select>
       </el-form-item>
       <el-form-item
-        v-if="form.label_type === 2"
-        prop="parent_id"
+        v-if="form.labelType === 2"
+        prop="parentId"
         label="上级类别"
-        :required="form.label_type === 2"
+        :required="form.labelType === 2"
       >
-        <el-select v-model="form.parent_id">
+        <el-select v-model="form.parentId">
           <el-option
-            v-for="item in dict.parent_id"
+            v-for="item in dict.parentId"
             :key="item.value"
             :label="item.label"
             :value="item.value"

+ 229 - 0
src/views/material/label/label-hand-bind-dialog.vue

@@ -0,0 +1,229 @@
+<script>
+import {
+  manualBindQuery,
+  classifyTree,
+  manualBindOK,
+} from "@/api/material/label";
+export default {
+  name: "HandBindDialog",
+  data() {
+    const initDict = {
+      labelType: [
+        { label: "类别", value: 1 },
+        { label: "标签", value: 2 },
+      ],
+      parentId: [],
+    };
+    const initColumns = () => [
+      {
+        type: "text",
+        prop: "orgId",
+        label: "使用组织",
+        required: true,
+        showOverflowTooltip: true,
+      },
+      {
+        type: "text",
+        prop: "code",
+        label: "物料编码",
+        required: true,
+        showOverflowTooltip: true,
+      },
+      {
+        type: "text",
+        prop: "name",
+        label: "物料名称",
+        required: true,
+        showOverflowTooltip: true,
+      },
+      {
+        type: "text",
+        prop: "id",
+        label: "物料分类",
+        required: false,
+        showOverflowTooltip: true,
+      },
+      {
+        type: "text",
+        prop: "isEnable",
+        label: "物料状态",
+        required: false,
+        showOverflowTooltip: true,
+      },
+      {
+        type: "text",
+        prop: "createTime",
+        label: "创建时间",
+        required: false,
+        showOverflowTooltip: true,
+      },
+      {
+        type: "text",
+        prop: "bindTime",
+        label: "绑定时间",
+        required: false,
+        showOverflowTooltip: true,
+      },
+    ];
+    const initForm = () => {
+      let form = {};
+      initColumns().forEach((item) => (form[item.prop] = ""));
+      return form;
+    };
+    return {
+      loading: false,
+      dialogFormVisible: false,
+      form: initForm(),
+      columns: initColumns(),
+      tableData: [],
+      page: { pageNum: 1, pageSize: 25, total: 0 },
+      dict: initDict,
+      options: [],
+      multipleSelection: [],
+    };
+  },
+  methods: {
+    handleSelectionChange(val) {
+      this.multipleSelection = val;
+    },
+    async fetchList(prop) {
+      this.loading = true;
+      await manualBindQuery(prop)
+        .then((res) => {
+          this.tableData = res;
+        })
+        .finally(() => {
+          this.loading = false;
+        });
+    },
+
+    async fetchItem(prop) {
+      this.dialogFormVisible = true;
+      this.form = { ...this.form, ...prop };
+      this.fetchClassifyTree();
+      // await this.fetchList({ classifyid: prop.id });
+    },
+
+    async fetchClassifyTree() {
+      let data = await classifyTree();
+      this.options = data;
+    },
+
+    onSearch(prop) {
+      const classifyid = prop.classifyid || "";
+      const code = prop.code ? prop.code[prop.code.length - 1] : "";
+      this.fetchList({ code: "408-01-01-000001", classifyid: "43" });
+    },
+
+    onClose() {
+      this.$parent.$children
+        .find((el) => el.$vnode.tag.indexOf("BindDialog") > -1)
+        .fetchItem({});
+    },
+
+    onSubmit(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          this.loading = true;
+          const labelId = this.form.id;
+          const material = this.multipleSelection;
+          manualBindOK({ labelId, material })
+            .then((res) => {
+              let { code } = res;
+              if (code === 200) {
+                this.dialogFormVisible = false;
+                this.$message.success("success");
+                this.form = {};
+              }
+            })
+            .finally(() => {
+              this.loading = false;
+            });
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
+  },
+  created() {},
+};
+</script>
+
+<template>
+  <el-dialog
+    title="手动绑定"
+    :visible.sync="dialogFormVisible"
+    append-to-body
+    @close="onClose"
+  >
+    <el-form ref="form" :model="form" label-width="80px">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="物料分类">
+            <el-cascader
+              v-model="form.code"
+              :options="options"
+              :show-all-levels="false"
+              :props="{
+                checkStrictly: true,
+                value: 'code',
+                label: 'materialType',
+                children: 'childrens',
+              }"
+              clearable
+              style="width: 100%"
+            ></el-cascader>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="物料编码">
+            <el-input v-model="form.classifyid"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-button :disabled="loading" @click="onSearch(form)">
+            搜索
+          </el-button>
+        </el-col>
+        <el-col :span="24">
+          <el-table
+            v-loading="loading"
+            lazy
+            border
+            row-key="id"
+            :data="tableData"
+            @selection-change="handleSelectionChange"
+            style="margin-top: 16px"
+          >
+            <el-table-column type="selection" width="55"> </el-table-column>
+            <el-table-column
+              v-for="column in columns"
+              :key="column.prop"
+              :prop="column.prop"
+              :label="column.label"
+              :show-overflow-tooltip="column.showOverflowTooltip"
+            >
+            </el-table-column>
+            <!-- <el-table-column fixed="right" label="操作" width="225">
+              <template slot-scope="scope">
+                <el-button
+                  @click.native.prevent="onUnbind(scope.row)"
+                  size="small"
+                >
+                  解绑
+                </el-button>
+              </template>
+            </el-table-column> -->
+          </el-table>
+        </el-col>
+      </el-row>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button type="primary" @click="onSubmit('form')">立即创建</el-button>
+      <el-button @click="dialogFormVisible = false">取消</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<style scoped></style>

+ 17 - 22
src/views/material/label/label-table.vue

@@ -112,35 +112,28 @@ export default {
       this.fetchList();
     },
 
+    onBindLabel(prop) {
+      this.$parent.$children
+        .find((el) => el.$vnode.tag.indexOf("BindDialog") > -1)
+        .fetchItem(prop);
+    },
+
     onAddLabel() {
-      console.log("this", this);
-      this.getAddDialogRef().dialogFormVisible = true;
+      this.$parent.$children
+        .find((el) => el.$vnode.tag.indexOf("AddDialog") > -1)
+        .fetchItem();
     },
 
     onEditLabel(prop) {
-      // let { id } = prop;
-      // item({ id }).then((res) => {
-      //   let { code } = res;
-      //   if (code === 200) {
-      //     this.$message.success("success");
-      //   }
-      // });
-      console.log(prop);
-      this.getEditDialogRef().fetchItem(prop);
+      this.$parent.$children
+        .find((el) => el.$vnode.tag.indexOf("EditDialog") > -1)
+        .fetchItem(prop);
     },
 
     onLoad(tree, treeNode, resolve) {
       setTimeout(() => {
         resolve(tree.childrens);
-      }, 1000);
-    },
-
-    getAddDialogRef() {
-      return this.$parent.$children[1];
-    },
-
-    getEditDialogRef() {
-      return this.$parent.$children[2];
+      }, 200);
     },
   },
   created() {
@@ -230,12 +223,14 @@ export default {
         <el-table-column fixed="right" label="操作" width="225">
           <template slot-scope="scope">
             <el-button
-              @click.native.prevent="onAuthTemplate(scope.row)"
+              v-if="scope.row.labelType === 2"
+              @click.native.prevent="onBindLabel(scope.row)"
               size="small"
             >
-              授权
+              绑定
             </el-button>
             <el-button
+              v-if="scope.row.labelType === 2"
               @click.native.prevent="onEditLabel(scope.row)"
               size="small"
             >

+ 1 - 0
vue.config.js

@@ -36,6 +36,7 @@ module.exports = {
     proxy: {
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
+        // target: `http://172.16.100.107:8080/drp-admin`, //测试
         target: `http://test-sy.derom.com/drp-admin`, //测试
         // target: `http://sy.derom.com/drp-admin`, //生产
         // target: `http://172.16.63.202:8000/drp-admin`, // D本地