Переглянути джерело

Merge remote-tracking branch 'origin/dev' into dev

Z 1 рік тому
батько
коміт
01e9a829f0

+ 5 - 6
package.json

@@ -18,15 +18,11 @@
     "@babel/core": "^7.18.13",
     "@bytemd/plugin-gfm": "^1.17.2",
     "@bytemd/vue": "^1.17.2",
+    "@riophae/vue-treeselect": "0.4.0",
     "axios": "^0.27.2",
-
     "bpmn-js": "8.9.0",
     "bpmn-js-properties-panel": "0.46.0",
     "bpmn-js-token-simulation": "0.10.0",
-    "xml-js": "1.6.11",
-    "highlight.js": "9.18.5",
-    "@riophae/vue-treeselect": "0.4.0",
-
     "bytemd": "^1.17.2",
     "core-js": "^3.25.0",
     "countup.js": "^2.3.2",
@@ -34,9 +30,11 @@
     "dayjs": "^1.11.8",
     "echarts": "^5.3.3",
     "echarts-wordcloud": "^2.0.0",
+    "el-tree-transfer": "^2.4.7",
     "ele-admin": "^1.11.2",
     "element-ui": "2.15.7",
     "github-markdown-css": "^5.1.0",
+    "highlight.js": "9.18.5",
     "jsbarcode": "^3.11.5",
     "json-bigint": "^1.0.0",
     "nprogress": "^0.2.0",
@@ -52,7 +50,8 @@
     "vuex": "^3.6.2",
     "vuex-persistedstate": "^4.1.0",
     "xgplayer-vue": "^1.1.5",
-    "xlsx": "^0.18.5"
+    "xlsx": "^0.18.5",
+    "xml-js": "1.6.11"
   },
   "devDependencies": {
     "@vue/cli-plugin-babel": "^5.0.8",

+ 102 - 0
src/api/businessCode/index.js

@@ -0,0 +1,102 @@
+import request from '@/utils/request';
+
+// 保存/修改 类型 /编码信息
+export async function save(data) {
+
+  const res = await request.post('/main/business_code_category/' + (data.id ? 'update' : 'save'), data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 获取编码树
+export async function selectTreeList(data) {
+  const res = await request.post(`/main/business_code_category/selectTreeList`, data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 获取右侧列表
+export async function listParentId(data) {
+  const res = await request.post(`/main/business_code_category/listPageParentId`, data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+// 获取右侧码段列表
+export async function pageSegment(data) {
+  const res = await request.post(`/main/business_code_manage/page`, data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+// 保存/修改 码段
+export async function saveSegment(data) {
+  const res = await request.post('/main/business_code_manage/' + (data.id ? 'update' : 'save'), data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+/**
+ * 删除码段
+ */
+export async function removeSegment(data) {
+  const res = await request.delete('/main/business_code_manage/delete', { data });
+  if (res.data.code == 0) {
+    return res.data.message;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+/**
+ * 删除编码
+ */
+export async function removeCode(data) {
+  const res = await request.delete('/main/business_code_category/delete', { data });
+  if (res.data.code == 0) {
+    return res.data.message;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+
+// // 生成编码
+// export async function getCode(code) {
+//   const res = await request.get(`/main/codemanage/getCode/` + code, {});
+//   if (res.data.code == 0) {
+//     return res.data.data;
+//   }
+//   return Promise.reject(new Error(res.data.message));
+// }
+
+// /**
+//  * 检查编码是否存在
+//  * @param code 编码
+//  */
+// export async function checkCode(code) {
+//   const res = await request.get('/main/codemanage/getByCode/' + code);
+//   if (res.data.code == 0) {
+//     return res.data.data;
+//   }
+//   return Promise.reject(new Error(res.data.message));
+// }
+
+
+
+
+/**
+ * 查询文件夹分类数据
+ * @data data
+ */
+export async function getDocTreeListAPI(data) {
+  const res = await request.post('/fm/directory/selectTreeList', data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

BIN
src/assets/code1.png


BIN
src/assets/code2.png


BIN
src/assets/code3.png


BIN
src/assets/error.png


+ 85 - 1
src/enum/dict.js

@@ -58,7 +58,8 @@ export default {
   质检计划类型: 'inspection_plan_type',
   预警类型: 'warning_type',
   包装强度: 'packagingStrength',
-  包装密度: 'packagingDensity'
+  包装密度: 'packagingDensity',
+  编码间隔符: 'codeSpaceMark'
 };
 
 export const numberList = [
@@ -82,3 +83,86 @@ export const reviewStatus = {
   2: '已审核',
   3: '审核不通过'
 };
+//编码粗规则
+export const roughRule = [
+  {
+    label: '数字',
+    value: 1
+  },
+  {
+    label: '字母',
+    value: 2
+  },
+  {
+    label: '数字或字母',
+    value: 3
+  },
+  {
+    label: '日期',
+    value: 4
+  },
+  {
+    label: '流水码',
+    value: 5
+  }
+]
+//编码细规则
+export const fineRule = [
+  {
+    label: '0-9',
+    value: '1',
+    pid: '1', reg: '[0-9]'
+  },
+
+  {
+    label: 'A-Z',
+    value: '1',
+    pid: '2', reg: '[A-Z]'
+  },
+  {
+    label: 'a-z',
+    value: '2',
+    pid: '2', reg: '[a-z]'
+  },
+  {
+    label: 'A-Z或a-z',
+    value: '3',
+    pid: '2', reg: '[A-Za-z]'
+  },
+  {
+    label: '0-9或A-Z',
+    value: '1',
+    pid: '3',
+    reg: '[A-Z0-9]'
+  },
+  {
+    label: '0-9或a-z',
+    value: '2',
+    pid: '3', reg: '[a-z0-9]'
+  },
+  {
+    label: '年份',
+    value: '1',
+    pid: '4'
+  },
+  {
+    label: '年月',
+    value: '2',
+    pid: '4'
+  },
+  {
+    label: '年月日',
+    value: '3',
+    pid: '4'
+  },
+  {
+    label: '0-9',
+    value: '1',
+    pid: '5', reg: '[0-9]'
+  },
+  {
+    label: 'A-Z0-9',
+    value: '2',
+    pid: '5', reg: '[A-Z0-9]'
+  }
+];

+ 229 - 0
src/views/codeManagement/businessCode/codeList.vue

@@ -0,0 +1,229 @@
+<template>
+  <!-- 数据表格 -->
+  <ele-pro-table
+    ref="table"
+    :columns="columns"
+    :datasource="datasource"
+    height="calc(100vh - 265px)"
+    full-height="calc(100vh - 116px)"
+    tool-class="ele-toolbar-form"
+    cache-key="systemOrgUserTable"
+    :selection.sync="selection"
+  >
+    <template v-slot:name="{ row }">
+      <span class="listName">
+        <img src="../../../assets/code1.png" v-if="row.type == 1" />
+        <img src="../../../assets/code2.png" v-if="row.type == 2" />
+        {{ row.name }}
+      </span>
+    </template>
+    <template v-slot:toolbar>
+      <el-dropdown trigger="click">
+        <el-button type="primary">
+          新建<i class="el-icon-arrow-down el-icon--right"></i>
+        </el-button>
+        <el-dropdown-menu slot="dropdown">
+          <el-dropdown-item @click.native="openType('add')"
+            >新建分类</el-dropdown-item
+          >
+          <el-dropdown-item
+            @click.native="openEdit('add')"
+            v-if="parentData.parentId != 0"
+            >新建编码</el-dropdown-item
+          >
+        </el-dropdown-menu>
+      </el-dropdown>
+      <el-button
+        type="primary"
+        @click.native="openEdit('edit')"
+        :disabled="selection.length != 1"
+      >
+        编辑
+      </el-button>
+      <el-popconfirm
+        class="ele-action"
+        title="确定要删除吗?"
+        @confirm="remove()"
+      >
+        <template v-slot:reference>
+          <el-button type="danger" :disabled="selection.length == 0">
+            删除
+          </el-button>
+        </template>
+      </el-popconfirm>
+      <!-- <el-button type="primary"> 启用 </el-button>
+      <el-button type="primary"> 停用 </el-button> -->
+    </template>
+    <TypeEdit
+      ref="typeEditRef"
+      :parentId="parentData.id"
+      @done="done"
+    ></TypeEdit>
+    <codeEdit
+      ref="codeEditRef"
+      :parentId="parentData.id"
+      @done="done"
+    ></codeEdit>
+  </ele-pro-table>
+</template>
+   
+  <script>
+import codeEdit from './components/codeEdit.vue';
+import TypeEdit from './components/typeEdit.vue';
+
+import { listParentId,removeCode } from '@/api/businessCode';
+export default {
+  components: {
+    codeEdit,
+    TypeEdit
+  },
+  props: {
+    // 上级
+    parentData: {
+      type: Object,
+      default: () => {}
+    }
+  },
+
+  data() {
+    return {
+      selection: [],
+      // 表格列配置
+      columns: [
+        {
+          width: 45,
+          type: 'selection',
+          columnKey: 'selection',
+          align: 'center'
+          // selectable: (row, index) => {
+          //   return !this.disabledTableList
+          //     .map((item) => item.id)
+          //     .includes(row.id);
+          // }
+        },
+        {
+          label: '名称',
+          prop: 'name',
+          align: 'center',
+          showOverflowTooltip: true,
+          fixed: 'left',
+          slot: 'name'
+        },
+        {
+          prop: 'remark',
+          label: '描述',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+
+        {
+          prop: 'createUserName',
+          label: '创建人',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'createTime',
+          label: '创建时间',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'updateUserName',
+          label: '修改人',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'updateTime',
+          label: '修改时间',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+
+        {
+          prop: '',
+          label: '状态',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 100,
+          formatter: (_row, _column, cellValue) => {
+            return this.$util.toDateString(cellValue);
+          }
+        }
+      ],
+      // 是否显示编辑弹窗
+      showEditFlag: false
+    };
+  },
+  created() {},
+
+  methods: {
+    /* 表格数据源 */
+    datasource({ page, limit, where, order }) {
+      return listParentId({
+        ...where,
+        pageNum: page,
+        size: limit,
+        parentId: this.parentData?.id
+      });
+    },
+    /* 刷新表格 */
+    reload(where) {
+      this.$nextTick(() => {
+        this.$refs.table.reload({ pageNum: 1, where: where });
+      });
+    },
+
+    /* 显示编辑 */
+    openEdit(type, row = '') {
+      if (type == 'edit' && this.selection[0].type == 1) {
+        this.openType(type, this.selection[0]);
+        return;
+      }
+      this.$refs.codeEditRef.open(type, this.selection[0]);
+    },
+    openType(type, row = '') {
+      this.$refs.typeEditRef.open(type, row);
+    },
+
+    // async success(current) {
+    //   await this.reload();
+    //   this.current = current;
+    //   this.$nextTick(() => {
+    //     this.$refs.PowerRef &&
+    //       this.$refs.PowerRef.setTableList(this.current.userAuthority);
+    //   });
+    // },
+
+    /* 删除 */
+    remove(row) {
+      removeCode(this.selection.map((item) => item.id))
+        .then((msg) => {
+          this.$message.success('操作成功');
+          this.$emit('done', this.parentData);
+        })
+        .catch((e) => {
+          // this.$message.error(e.message);
+        });
+    },
+    done() {
+      this.$emit('done', this.parentData);
+    },
+    getTableList() {
+      return JSON.parse(JSON.stringify(this.selection));
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.listName {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  img {
+    margin-right: 3px;
+  }
+}
+</style>

+ 223 - 0
src/views/codeManagement/businessCode/codeSegmentList.vue

@@ -0,0 +1,223 @@
+<template>
+  <el-tabs type="border-card">
+    <el-tab-pane label="属性">
+      <el-form ref="form" disabled label-width="82px">
+        <el-row :gutter="15">
+          <el-col :span="13">
+            <el-form-item label="名称" prop="name">
+              <el-input v-model="parentData.name"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="13">
+            <el-form-item label="描述" prop="remark">
+              <el-input v-model="parentData.remark" type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="13">
+            <el-form-item label="使用对象" prop="useObjList"> </el-form-item>
+          </el-col>
+          <el-col :span="13">
+            <el-form-item label="状态" prop="status"> </el-form-item>
+          </el-col>
+          <el-col :span="13">
+            <el-form-item label="创建人" prop="createUserName"> 
+              <el-input v-model="parentData.createUserName" ></el-input>
+
+            </el-form-item>
+          </el-col>
+          <el-col :span="13">
+            <el-form-item label="创建时间" prop="createTime">
+              <el-input v-model="parentData.createTime" ></el-input>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :span="13">
+            <el-form-item label="修改人" prop="updateUserName">
+              <el-input v-model="parentData.updateUserName" ></el-input>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :span="13">
+            <el-form-item label="修改时间" prop="updateTime"> 
+              <el-input v-model="parentData.updateTime" ></el-input>
+
+
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </el-tab-pane>
+    <el-tab-pane label="编码码段">
+      <ele-pro-table
+        ref="table"
+        :columns="columns"
+        :datasource="datasource"
+        height="calc(100vh - 335px)"
+        full-height="calc(100vh - 116px)"
+        tool-class="ele-toolbar-form"
+        cache-key="systemOrgUserTable"
+        :selection.sync="selection"
+        :needPage="false"
+      >
+        <template v-slot:toolbar>
+          <el-button type="primary" @click.native="openEdit('add')">
+            新建
+          </el-button>
+
+          <el-button
+            type="primary"
+            :disabled="selection.length != 1"
+            @click.native="openEdit('edit')"
+          >
+            编辑
+          </el-button>
+          <el-popconfirm
+            class="ele-action"
+            title="确定要删除此码段吗?"
+            @confirm="remove()"
+          >
+            <template v-slot:reference>
+              <el-button type="danger" :disabled="selection.length == 0">
+                删除
+              </el-button>
+            </template>
+          </el-popconfirm>
+
+          <!-- <el-button type="primary"> 启用 </el-button>
+      <el-button type="primary"> 停用 </el-button> -->
+        </template>
+
+        <codeSegmentEdit
+          ref="codeSegmentEditRef"
+          :businessCodeCategoryId="parentData.id"
+          @done="done"
+        ></codeSegmentEdit>
+      </ele-pro-table>
+    </el-tab-pane>
+  </el-tabs>
+  <!-- 数据表格 -->
+</template>
+   
+  <script>
+import codeSegmentEdit from './components/codeSegmentEdit.vue';
+import { roughRule, fineRule } from '@/enum/dict.js';
+import { pageSegment, removeSegment } from '@/api/businessCode';
+export default {
+  components: {
+    codeSegmentEdit
+  },
+  props: {
+    // 上级
+    parentData: {
+      type: Object,
+      default: () => {}
+    }
+  },
+
+  data() {
+    return {
+      form: {},
+      selection: [],
+      // 表格列配置
+      columns: [
+        {
+          width: 45,
+          type: 'selection',
+          columnKey: 'selection',
+          align: 'center'
+        },
+        {
+          label: '名称',
+          prop: 'name',
+          align: 'center',
+          showOverflowTooltip: true,
+          fixed: 'left'
+        },
+        {
+          prop: 'remark',
+          label: '描述',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'length',
+          label: '长度',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'roughRule',
+          label: '粗规则',
+          align: 'center',
+          showOverflowTooltip: true,
+          formatter: (_row, _column, cellValue) => {
+            return roughRule.find((item) => item.value == cellValue)?.label;
+          }
+        },
+        {
+          prop: 'fineRule',
+          label: '细规则',
+          align: 'center',
+          showOverflowTooltip: true,
+          formatter: (_row, _column, cellValue) => {
+            let _fineRule=fineRule.filter(item=>item.pid==_row.roughRule)
+            return _fineRule.find((item) => item.value == cellValue)?.label;
+          }
+        },
+        {
+          prop: 'createUserName',
+          label: '创建人',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'createTime',
+          label: '创建时间',
+          align: 'center',
+          showOverflowTooltip: true
+        }
+      ]
+    };
+  },
+  created() {},
+
+  methods: {
+    /* 表格数据源 */
+    datasource({ page, limit, where, order }) {
+      return pageSegment({
+        ...where,
+        pageNum: page,
+        size: limit,
+        businessCodeCategoryId: this.parentData?.id
+      });
+    },
+    /* 刷新表格 */
+    reload(where) {
+      this.$nextTick(() => {
+        this.$refs.table.reload({ pageNum: 1, where: where });
+      });
+    },
+
+    /* 显示编辑 */
+    openEdit(type, row = '') {
+      this.$refs.codeSegmentEditRef.open(type, this.selection[0]);
+    },
+
+    /* 删除 */
+    remove() {
+      removeSegment(this.selection.map((item) => item.id))
+        .then((msg) => {
+          this.$message.success('操作成功');
+          this.$emit('done', this.parentData);
+        })
+        .catch((e) => {
+          // this.$message.error(e.message);
+        });
+    },
+    done() {
+      this.$emit('done', this.parentData);
+    }
+  }
+};
+</script>
+  

+ 239 - 0
src/views/codeManagement/businessCode/codeValueList.vue

@@ -0,0 +1,239 @@
+<template>
+  <el-tabs type="border-card">
+    <el-tab-pane label="属性">
+      <el-form ref="form" disabled label-width="82px">
+        <el-row :gutter="15">
+          <el-col :span="13">
+            <el-form-item label="名称" prop="name">
+              <el-input v-model="form.name"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="13">
+            <el-form-item label="描述" prop="remark">
+              <el-input v-model="form.remark" type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="13">
+            <el-form-item label="长度" prop="length">
+              <el-input v-model="form.length"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="13">
+            <el-form-item label="间隔符" prop="delimiter">
+              <el-input v-model="form.delimiter"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="13">
+            <el-form-item label="粗规则" prop="roughRuleName">
+              <el-input v-model="form.roughRuleName"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="13">
+            <el-form-item label="细规则" prop="fineRuleName">
+              <el-input v-model="form.fineRuleName"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="13">
+            <el-form-item label="创建人" prop="createUserName">
+              <el-input v-model="form.createUserName"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="13">
+            <el-form-item label="创建时间" prop="createTime">
+              <el-input v-model="form.createTime"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="13">
+            <el-form-item label="修改人" prop="updateUserName">
+              <el-input v-model="form.updateUserName"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="13">
+            <el-form-item label="修改时间" prop="updateTime">
+              <el-input v-model="form.updateTime"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </el-tab-pane>
+    <el-tab-pane label="码值" >
+      <ele-pro-table
+        ref="table"
+        :columns="columns"
+        :datasource="tableList"
+        height="calc(100vh - 335px)"
+        full-height="calc(100vh - 116px)"
+        tool-class="ele-toolbar-form"
+        cache-key="systemOrgUserTable"
+        :needPage="false"
+      >
+        <template v-slot:action="scoped">
+          <el-popconfirm
+            class="ele-action"
+            title="确定要删除此码值吗?"
+            @confirm="remove(scoped.$index)"
+          >
+            <template v-slot:reference>
+              <el-button type="danger"> 删除 </el-button>
+            </template>
+          </el-popconfirm>
+        </template>
+        <template v-slot:value="{ row }">
+          <el-input v-model="row.value" @change.native="valueChange(row)">
+            <template slot="append" v-if="!isReg(row)">
+              <img title="码值不符合规则" src="../../../assets/error.png" />
+            </template>
+          </el-input>
+        </template>
+        <template v-slot:remark="{ row }">
+          <el-input v-model="row.remark" @change="valueChange(row)"></el-input>
+        </template>
+        <template v-slot:toolbar v-if="form.roughRule!=4">
+          <el-button type="primary" @click.native="openEdit('add')">
+            增加
+          </el-button>
+        </template>
+      </ele-pro-table>
+    </el-tab-pane>
+  </el-tabs>
+  <!-- 数据表格 -->
+</template>
+   
+  <script>
+import { roughRule, fineRule } from '@/enum/dict.js';
+import { saveSegment } from '@/api/businessCode';
+
+export default {
+  props: {
+    // 上级
+    parentData: {
+      type: Object,
+      default: () => {}
+    }
+  },
+
+  data() {
+    return {
+      form: {
+        roughRuleName: '',
+        fineRuleName: '',
+        name: '', //码段名称
+        businessCodeCategoryId: '', //分类id
+        length: '', //长度
+        delimiter: '', //间隔符
+        roughRule: '', //粗规则
+        fineRule: '', //细规则
+        value: [],
+        remark: '' //描述
+      },
+      tableList: [],
+      // 表格列配置
+      columns: []
+    };
+  },
+  created() {},
+  // watch: {
+  //   parentData(){
+  //     this.init()
+  //   }
+  // },
+  methods: {
+    reload() {
+      this.form = JSON.parse(JSON.stringify(this.parentData));
+      this.tableList = this.form.value;
+      this.form['roughRuleName'] = roughRule.find(
+        (item) => item.value == this.form.roughRule
+      )?.label;
+      let _fineRule = fineRule.filter(
+        (item) => item.pid == this.form.roughRule
+      );
+      this.form['fineRuleName'] = _fineRule.find(
+        (item) => item.value == this.form.fineRule
+      )?.label;
+      this.setColumns();
+    },
+    setColumns() {
+      this.columns = [
+        {
+          width: 45,
+          type: 'selection',
+          columnKey: 'selection',
+          align: 'center'
+        },
+        {
+          label:
+            '编码值' +
+            '(规则:' +
+            this.form.fineRuleName +
+            ',长度:' +
+            (this.form.length||'') +
+            ')',
+          prop: 'value',
+          width: 240,
+          slot: 'value',
+          showOverflowTooltip: true,
+          fixed: 'left'
+        },
+        {
+          prop: 'remark',
+          slot: 'remark',
+          label: '描述',
+          showOverflowTooltip: true
+        },
+        {
+          columnKey: 'action',
+          label: '操作',
+          width: 200,
+          align: 'center',
+          resizable: false,
+          slot: 'action',
+          showOverflowTooltip: true,
+          fixed: 'right'
+        }
+      ];
+    },
+    valueChange(row) {
+      console.log(this.isReg(row), 'this.isReg(row)');
+      if (this.isReg(row)) {
+        this.save();
+      }
+    },
+    isReg(row) {
+      let _fineRule = fineRule.filter(
+        (item) => item.pid == this.form.roughRule
+      );
+      let reg = _fineRule.find((item) => item.value == this.form.fineRule)?.reg;
+      let regexp = '/^' + reg + '{' + this.form.length + '}$/';
+      return RegExp(eval(regexp)).test(row.value);
+    },
+    /* 显示编辑 */
+    openEdit() {
+      this.tableList.push({
+        value: '',
+        remark: ''
+      });
+    },
+    /* 保存编辑 */
+    save() {
+      this.form.value = this.tableList;
+      saveSegment(this.form)
+        .then((msg) => {
+          this.$message.success('操作成功');
+          this.$emit('done', this.form);
+        })
+        .catch((e) => {
+          this.loading = false;
+        });
+    },
+    /* 删除 */
+    remove(index) {
+      this.tableList.splice(index, 1);
+      this.save()
+    },
+    done() {
+      this.$emit('done', this.parentData);
+    }
+  }
+};
+</script>
+  

+ 169 - 0
src/views/codeManagement/businessCode/components/codeEdit.vue

@@ -0,0 +1,169 @@
+<!-- 用户编辑弹窗 -->
+<template>
+  <ele-modal
+    width="50%"
+    :visible.sync="showEditFlag"
+    :close-on-click-modal="false"
+    custom-class="ele-dialog-form"
+    append-to-body
+    @close="cancel"
+    :title="title + '编码'"
+  >
+    <el-form ref="form" :model="form" :rules="rules" label-width="82px">
+      <el-row :gutter="15">
+        <el-col :span="12">
+          <el-form-item label="名称" prop="name">
+            <el-input v-model="form.name" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="描述" prop="remark">
+            <el-input
+              v-model="form.remark"
+              type="textarea"
+              placeholder="请输入"
+            ></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="使用对象" prop="useObjList">
+            <tree ref="treeRef"></tree>
+          </el-form-item>
+        </el-col>
+        <!-- <el-col :span="24">
+          <el-form-item label="创建人" prop="remark">
+            <el-input
+              v-model="form.remark"
+              type="textarea"
+              placeholder="请输入"
+            ></el-input>
+          </el-form-item>
+        </el-col> -->
+      </el-row>
+    </el-form>
+    <template v-slot:footer>
+      <el-button @click="cancel">取消</el-button>
+      <el-button type="primary" :loading="loading" @click="save">
+        确认
+      </el-button>
+    </template>
+  </ele-modal>
+</template>
+  
+  <script>
+const defaultForm = {
+  name: '', //名称
+  parentId: '', //父id
+  sort: '',
+  status: '', //状态
+  type: 2, //类型
+  useObjList: [], //使用对象信息集合
+  remark: '' //备注
+};
+import { save } from '@/api/businessCode';
+import tree from './tree.vue';
+export default {
+  data() {
+    return {
+      // 表单数据
+      form: { ...defaultForm },
+      // 表单验证规则
+      rules: {},
+      // 提交状态
+      loading: false,
+      showEditFlag: false,
+      title: '',
+      type: '',
+      rules: {
+        name: [
+          {
+            required: true,
+            message: '请输入',
+            trigger: 'blur'
+          }
+        ]
+      }
+    };
+  },
+  props: {
+    parentId: ''
+  },
+  components: {
+    tree
+  },
+  created() {},
+  methods: {
+    async open(type, row) {
+      this.title = type === 'edit' ? '编辑' : '新增';
+      this.showEditFlag = true;
+      this.type = type;
+      if (type == 'add') {
+        this.form.parentId = this.parentId;
+      } else {
+        this.form = JSON.parse(JSON.stringify(row));
+      }
+      console.log(this.form, 'row');
+
+      this.$nextTick(() => {
+        this.$refs.treeRef.init(this.form.useObjList || []);
+      });
+    },
+
+    /* 保存编辑 */
+    save() {
+      this.$refs.form.validate(async (valid) => {
+        if (!valid) {
+          return false;
+        }
+
+        if (this.type != 'edit') {
+          delete this.form.id;
+        }
+        this.form.useObjList = this.$refs.treeRef.getList();
+        this.loading = true;
+        save(this.form)
+          .then((msg) => {
+            this.loading = false;
+            this.cancel();
+            this.$emit('done');
+          })
+          .catch((e) => {
+            this.loading = false;
+          });
+      });
+    },
+
+    cancel() {
+      this.form = { ...defaultForm };
+      this.$refs.form.clearValidate();
+      this.showEditFlag = false;
+    }
+  }
+};
+</script>
+  <style scoped lang="scss">
+.aaa {
+  width: 100%;
+
+  ::v-deep .upload-demo {
+    width: 100%;
+
+    .el-upload--text {
+      width: 100%;
+
+      button {
+        width: 100%;
+        background: #ffffff;
+        border: 1px solid #dbdbdb;
+        border-radius: 5px;
+      }
+    }
+
+    .el-upload-list {
+      transform: translate(10px, -39px);
+      position: absolute;
+    }
+  }
+}
+</style>
+  

+ 255 - 0
src/views/codeManagement/businessCode/components/codeSegmentEdit.vue

@@ -0,0 +1,255 @@
+<!-- 用户编辑弹窗 -->
+<template>
+  <ele-modal
+    width="500px"
+    :visible.sync="showEditFlag"
+    :close-on-click-modal="false"
+    custom-class="ele-dialog-form"
+    append-to-body
+    @close="cancel"
+    :title="title + '编码码段'"
+  >
+    <el-form ref="form" :model="form" :rules="rules" label-width="82px">
+      <el-row :gutter="15">
+        <el-col :span="24">
+          <el-form-item label="名称" prop="name">
+            <el-input v-model="form.name" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+
+        <el-col :span="24">
+          <el-form-item label="描述" prop="remark">
+            <el-input
+              v-model="form.remark"
+              type="textarea"
+              placeholder="请输入"
+            ></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item
+            :rules="{
+              required: form.roughRule == 4 ? false : true,
+              trigger: ['blur'],
+              message: '请输入'
+            }"
+            label="长度"
+            prop="length"
+          >
+            <el-input
+              v-model="form.length"
+              type="number"
+              min="0"
+              max="12"
+              :disabled="form.roughRule == 4"
+            ></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="间隔符" prop="delimiter">
+            <DictSelection
+              dictName="编码间隔符"
+              v-model="form.delimiter"
+            ></DictSelection>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="粗规则" prop="roughRule">
+            <el-select
+              v-model="form.roughRule"
+              placeholder="请选择"
+              @change="roughRuleChange"
+              style="width: 100%"
+            >
+              <el-option
+                v-for="item in roughRule"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="细规则" prop="fineRule">
+            <el-select
+              v-model="form.fineRule"
+              placeholder="请选择"
+              style="width: 100%"
+            >
+              <el-option
+                v-for="item in fineRule"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <template v-slot:footer>
+      <el-button @click="cancel">取消</el-button>
+      <el-button type="primary" :loading="loading" @click="save">
+        确认
+      </el-button>
+    </template>
+  </ele-modal>
+</template>
+  
+  <script>
+import { saveSegment } from '@/api/businessCode';
+import { roughRule, fineRule } from '@/enum/dict.js';
+
+export default {
+  components: {},
+  props: {
+    // 上级id
+    businessCodeCategoryId: [Number, String]
+  },
+  data() {
+    const defaultForm = {
+      name: '', //码段名称
+      businessCodeCategoryId: '', //分类id
+      length: '', //长度
+      delimiter: '', //间隔符
+      roughRule: '', //粗规则
+      fineRule: '', //细规则
+      value: [],
+      remark: '' //描述
+    };
+    return {
+      roughRule,
+      fineRule: [],
+      defaultForm,
+      // 表单数据
+      form: { ...defaultForm },
+      // 表单验证规则
+      rules: {},
+      // 提交状态
+      loading: false,
+      showEditFlag: false,
+      title: '',
+      type: '',
+      rules: {
+        name: [
+          {
+            required: true,
+            message: '请输入',
+            trigger: 'blur'
+          }
+        ],
+        // delimiter: [
+        //   {
+        //     required: true,
+        //     message: '请选择',
+        //     trigger: 'blur'
+        //   }
+        // ],
+        roughRule: [
+          {
+            required: true,
+            message: '请选择',
+            trigger: 'blur'
+          }
+        ],
+        fineRule: [
+          {
+            required: true,
+            message: '请选择',
+            trigger: 'blur'
+          }
+        ]
+      }
+    };
+  },
+  computed: {
+    // 是否开启响应式布局
+    styleResponsive() {
+      return this.$store.state.theme.styleResponsive;
+    }
+  },
+  created() {},
+  methods: {
+    async open(type, row) {
+      this.title = type === 'edit' ? '编辑' : '新增';
+      this.showEditFlag = true;
+      this.type = type;
+      if (type == 'add') {
+        this.form.businessCodeCategoryId = this.businessCodeCategoryId;
+      } else {
+        this.form = JSON.parse(JSON.stringify(row));
+        this.fineRule = fineRule.filter(
+          (item) => item.pid == this.form.roughRule
+        );
+      }
+    },
+    roughRuleChange(val) {
+      if (val == 4) {
+        this.form.length = '';
+      }
+      this.fineRule = fineRule.filter((item) => item.pid == val);
+      this.form.fineRule = '';
+    },
+    /* 保存编辑 */
+    save() {
+      this.$refs.form.validate(async (valid) => {
+        if (!valid) {
+          return false;
+        }
+
+        const data = {
+          ...this.form
+        };
+        if (this.type != 'edit') {
+          delete data.id;
+        }
+        this.loading = true;
+        saveSegment(data)
+          .then((msg) => {
+            this.loading = false;
+            this.cancel();
+            this.$emit('done');
+          })
+          .catch((e) => {
+            this.loading = false;
+          });
+      });
+    },
+
+    cancel() {
+      this.form = { ...this.defaultForm };
+      this.$refs.form.clearValidate();
+      this.showEditFlag = false;
+    }
+  }
+};
+</script>
+  <style scoped lang="scss">
+.aaa {
+  width: 100%;
+
+  ::v-deep .upload-demo {
+    width: 100%;
+
+    .el-upload--text {
+      width: 100%;
+
+      button {
+        width: 100%;
+        background: #ffffff;
+        border: 1px solid #dbdbdb;
+        border-radius: 5px;
+      }
+    }
+
+    .el-upload-list {
+      transform: translate(10px, -39px);
+      position: absolute;
+    }
+  }
+}
+</style>
+  

+ 183 - 0
src/views/codeManagement/businessCode/components/tree.vue

@@ -0,0 +1,183 @@
+<template>
+  <div class="tree-wrapper">
+    <!-- <ele-modal
+      width="800px"
+      :visible.sync="showEditFlag"
+      :close-on-click-modal="false"
+      custom-class="ele-dialog-form"
+      append-to-body
+      @close="cancel"
+      title="使用对象"
+    > -->
+    <!-- <el-tree
+        :data="treeList"
+        :props="defaultProps"
+        v-loading="treeLoading"
+        :node-key="nodeKey"
+        show-checkbox
+        ref="tree"
+        :expand-on-click-node="false"
+        @check-change="handleNodeClick"
+        v-bind="$attrs"
+        :check-strictly="true"
+        :default-expand-all="defaultExpandAll"
+      >
+      </el-tree> -->
+    <tree-transfer
+      :from_data="treeList"
+      :to_data="selection"
+      :defaultProps="defaultProps"
+      height="540px"
+      node_key="id"
+      pid="parentId"
+      @add-btn="add"
+      @remove-btn="remove"
+      :title="['对象', '已选对象']"
+    >
+    </tree-transfer>
+    <!-- <template v-slot:footer>
+        <el-button @click="cancel">取消</el-button>
+        <el-button type="primary" @click="save"> 确认 </el-button>
+      </template>
+    </ele-modal> -->
+  </div>
+</template>
+  
+  <script>
+import { getTreeByPid } from '@/api/classifyManage';
+import { getDocTreeListAPI } from '@/api/businessCode';
+import treeTransfer from 'el-tree-transfer'; // 引入
+export default {
+  data() {
+    return {
+      defaultProps: { children: 'children', label: 'name' },
+      treeList: [],
+      treeLoading: false,
+      selection: []
+    };
+  },
+  components: {
+    treeTransfer
+  },
+
+  methods: {
+    init(selection) {
+      this.selection = selection;
+      this.getTreeData();
+    },
+    // 监听穿梭框组件添加
+    add(fromData, toData, obj) {
+      // 树形穿梭框模式transfer时,返回参数为左侧树移动后数据、右侧树移动后数据、移动的{keys,nodes,halfKeys,halfNodes}对象
+      // 通讯录模式addressList时,返回参数为右侧收件人列表、右侧抄送人列表、右侧密送人列表
+      console.log('fromData:', fromData);
+      console.log('toData:', toData);
+      console.log('obj:', obj);
+    },
+    // 监听穿梭框组件移除
+    remove(fromData, toData, obj) {
+      // 树形穿梭框模式transfer时,返回参数为左侧树移动后数据、右侧树移动后数据、移动的{keys,nodes,halfKeys,halfNodes}对象
+      // 通讯录模式addressList时,返回参数为右侧收件人列表、右侧抄送人列表、右侧密送人列表
+      console.log('fromData:', fromData);
+      console.log('toData:', toData);
+      console.log('obj:', obj);
+    },
+    // 获取树结构数据
+    async getTreeData() {
+      try {
+        this.treeLoading = true;
+        const res = await getTreeByPid(0);
+        let res1 = await getDocTreeListAPI({ type: '0' });
+        this.treeLoading = false;
+        let treeList = [];
+        if (res?.code === '0') {
+          this.filterDoc(res1);
+          treeList = [
+            ...res.data
+              .map((item) => {
+                item.parentId = 0;
+                return item;
+              })
+              .filter((item) => ['9', '1'].includes(item.id)),
+            ...res1
+          ];
+          let rightIds = this.getRightDataIds(this.selection, []);
+          this.treeList = this.filterLeftData(treeList, rightIds, []);
+        }
+      } catch (error) {}
+      this.treeLoading = false;
+    },
+    getRightDataIds(list, rightIds) {
+      for (let rightItem of list) {
+        rightIds.push(rightItem.id);
+        if (rightItem.children && rightItem.children.length) {
+          this.getRightDataIds(rightItem.children, rightIds);
+        }
+      }
+      return rightIds;
+    },
+    filterDoc(data) {
+      data.forEach((item) => {
+        item['children'] = item.sonDirectoryList;
+        delete item.sonDirectoryList
+        if (item.parentId == 0) {
+          item.parentId = 0;
+          item.name = '文档';
+        }
+        if (item['children'].length > 0) {
+          this.filterDoc(item['children']);
+        }
+      });
+    },
+    filterLeftData(list, rightIds, newList) {
+      // console.log(rightIds)
+      // list.forEach(leftItem=>{
+      //   if(rightIds.includes(leftItem.id)){
+      //     leftItem
+      //     newList.push(leftItem)
+      //   }
+      // })
+      for (let leftItem of list) {
+        if (rightIds.includes(leftItem.id)) {
+          if (leftItem.children && leftItem.children.length) {
+            let insetBool = false;
+            for (let child of leftItem.children) {
+              if (!rightIds.includes(child.id)) insetBool = true;
+            }
+            if (insetBool) {
+              let jsonItem = JSON.parse(JSON.stringify(leftItem));
+              jsonItem.children = [];
+              newList.push(jsonItem);
+              this.filterLeftData(
+                leftItem.children,
+                rightIds,
+                jsonItem.children
+              );
+            }
+          }
+        } else {
+          let jsonItem = JSON.parse(JSON.stringify(leftItem));
+          newList.push(jsonItem);
+        }
+      }
+      return newList;
+    },
+    getList() {
+      return this.selection;
+    }
+  }
+};
+</script>
+  
+  <style lang="scss" scoped>
+.tree-wrapper {
+  width: 100%;
+  height: 100%;
+  overflow: auto;
+
+  :deep(.el-tree) {
+    display: inline-block;
+    min-width: 100%;
+  }
+}
+</style>
+  

+ 162 - 0
src/views/codeManagement/businessCode/components/typeEdit.vue

@@ -0,0 +1,162 @@
+<!-- 用户编辑弹窗 -->
+<template>
+  <ele-modal
+    width="500px"
+    :visible.sync="showEditFlag"
+    :close-on-click-modal="false"
+    custom-class="ele-dialog-form"
+    append-to-body
+    @close="cancel"
+    :title="title + '分类'"
+  >
+    <el-form ref="form" :model="form" :rules="rules" label-width="82px">
+      <el-row :gutter="15">
+        <el-col :span="24">
+          <el-form-item label="名称" prop="name">
+            <el-input v-model="form.name" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="描述" prop="remark">
+            <el-input
+              v-model="form.remark"
+              type="textarea"
+              placeholder="请输入"
+            ></el-input>
+          </el-form-item>
+        </el-col>
+        <!-- <el-col :span="24">
+          <el-form-item label="创建时间" prop="remark">
+            <el-input
+              v-model="form.remark"
+              type="textarea"
+              placeholder="请输入"
+            ></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="创建人" prop="remark">
+            <el-input
+              v-model="form.remark"
+              type="textarea"
+              placeholder="请输入"
+            ></el-input>
+          </el-form-item>
+        </el-col> -->
+      </el-row>
+    </el-form>
+    <template v-slot:footer>
+      <el-button @click="cancel">取消</el-button>
+      <el-button type="primary" :loading="loading" @click="save">
+        确认
+      </el-button>
+    </template>
+  </ele-modal>
+</template>
+  
+  <script>
+const defaultForm = {
+  name: '', //名称
+  parentId: '', //父id
+  sort: '',
+  status: '', //状态
+  type: 1, //类型
+  remark: '' //备注
+};
+import { save } from '@/api/businessCode';
+export default {
+  data() {
+    return {
+      // 表单数据
+      form: { ...defaultForm },
+      // 表单验证规则
+      rules: {},
+      // 提交状态
+      loading: false,
+      showEditFlag: false,
+      title: '',
+      type: '',
+      rules: {
+        name: [
+          {
+            required: true,
+            message: '请输入',
+            trigger: 'blur'
+          }
+        ]
+      }
+    };
+  },
+  props: {
+    parentId: ''
+  },
+  created() {},
+  methods: {
+    async open(type, row) {
+      this.title = type === 'edit' ? '编辑' : '新增';
+      this.showEditFlag = true;
+      this.type = type;
+      if (type == 'add') {
+        this.form.parentId = this.parentId;
+      } else {
+        this.form = row;
+      }
+    },
+
+    /* 保存编辑 */
+    save() {
+      this.$refs.form.validate(async (valid) => {
+        if (!valid) {
+          return false;
+        }
+
+        if (this.type != 'edit') {
+          delete this.form.id;
+        }
+        this.loading = true;
+        save(this.form)
+          .then((msg) => {
+            this.loading = false;
+            this.cancel();
+            this.$emit('done');
+          })
+          .catch((e) => {
+            this.loading = false;
+          });
+      });
+    },
+
+    cancel() {
+      this.form = { ...defaultForm };
+      this.$refs.form.clearValidate();
+      this.showEditFlag = false;
+    }
+  }
+};
+</script>
+  <style scoped lang="scss">
+.aaa {
+  width: 100%;
+
+  ::v-deep .upload-demo {
+    width: 100%;
+
+    .el-upload--text {
+      width: 100%;
+
+      button {
+        width: 100%;
+        background: #ffffff;
+        border: 1px solid #dbdbdb;
+        border-radius: 5px;
+      }
+    }
+
+    .el-upload-list {
+      transform: translate(10px, -39px);
+      position: absolute;
+    }
+  }
+}
+</style>
+  

+ 249 - 0
src/views/codeManagement/businessCode/index.vue

@@ -0,0 +1,249 @@
+<template>
+  <div class="ele-body">
+    <el-card shadow="never" v-loading="loading">
+      <ele-split-layout
+        width="210px"
+        allow-collapse
+        :right-style="{ overflow: 'hidden' }"
+      >
+        <div>
+          <!-- 操作按钮 -->
+          <ele-toolbar class="ele-toolbar-actions">
+            <div style="margin: 5px 0">
+              <!-- <el-button
+                  size="small"
+                  type="primary"
+                  icon="el-icon-plus"
+                  class="ele-btn-icon"
+                  @click="openEdit()"
+                >
+                  添加
+                </el-button>
+                <el-button
+                  size="small"
+                  type="warning"
+                  icon="el-icon-edit"
+                  class="ele-btn-icon"
+                  :disabled="!current"
+                  @click="openEdit(current)"
+                >
+                  修改
+                </el-button>
+                <el-button
+                  size="small"
+                  type="danger"
+                  icon="el-icon-delete"
+                  class="ele-btn-icon"
+                  :disabled="!current"
+                  @click="remove"
+                >
+                  删除
+                </el-button> -->
+            </div>
+          </ele-toolbar>
+          <div class="ele-border-lighter sys-organization-list">
+            <el-tree
+              ref="tree"
+              :data="data"
+              highlight-current
+              node-key="id"
+              :props="{ label: 'name', children: 'sonDirectoryList' }"
+              :expand-on-click-node="false"
+              :default-expanded-keys="['0','1']"
+              @node-click="onNodeClick"
+            >
+              <span class="custom-tree-node" slot-scope="{ node, data }">
+                <!-- {{ data.type }} -->
+                <img src="../../../assets/code1.png" v-if="data.type == 1" />
+                <img src="../../../assets/code2.png" v-if="data.type == 2" />
+                <img src="../../../assets/code3.png" v-if="data.type == 3" />
+                <span>{{ node.label }}</span>
+              </span>
+            </el-tree>
+          </div>
+        </div>
+        <template v-slot:content>
+          <codeList
+            :parentData="current"
+            ref="tableRef1"
+            v-if="current.type == 1"
+            @done="done"
+          ></codeList>
+          <codeSegmentList
+            :parentData="current"
+            ref="tableRef2"
+            v-if="current.type == 2"
+            @done="done"
+          ></codeSegmentList>
+          <codeValueList
+            :parentData="current"
+            v-if="current.type == 3"
+            @done="done"
+            ref="tableRef3"
+          ></codeValueList>
+        </template>
+      </ele-split-layout>
+    </el-card>
+    <!-- 编辑弹窗 -->
+    <!-- <folder-edit @done="query" ref="editRef" :fileType="fileType" /> -->
+  </div>
+</template>
+  
+  <script>
+//   import fileTableList from '@/views/doc/components/file-table-list.vue';
+import codeList from './codeList.vue';
+import codeSegmentList from './codeSegmentList.vue';
+import codeValueList from './codeValueList.vue';
+import { selectTreeList } from '@/api/businessCode';
+//   import { mapGetters } from 'vuex';
+
+export default {
+  components: { codeList, codeSegmentList, codeValueList },
+
+  data() {
+    return {
+      rightData: {},
+      // 加载状态
+      loading: true,
+      // 列表数据
+      data: [],
+      institutionList: [],
+      // 选中数据
+      current: {},
+      // 是否显示表单弹窗
+      showFolderEditFlag: false,
+      // 编辑回显数据
+      editData: null,
+      // 上级id
+      parentId: null
+    };
+  },
+  computed: {
+    // ...mapGetters(['user'])
+  },
+  created() {
+    this.query();
+  },
+  methods: {
+    /* 查询 */
+    async query(row) {
+      this.loading = true;
+      this.data = await selectTreeList();
+      this.setTree(this.data);
+      this.$nextTick(() => {
+        if (row) {
+          this.$refs.tree.setCurrentKey(row.id);
+          this.onNodeClick(row);
+        } else {
+          this.$refs.tree.setCurrentKey(this.data[0].id);
+          this.onNodeClick(this.data[0]);
+        }
+      });
+      this.loading = false;
+    },
+    setTree(data) {
+      data.forEach((item) => {
+        if (item.codeManageVOList && item.codeManageVOList.length > 0) {
+          item.sonDirectoryList = item.codeManageVOList;
+          item.codeManageVOList.forEach((val) => {
+            val['type'] = 3;
+          });
+        }
+        if (item.sonDirectoryList && item.sonDirectoryList.length > 0) {
+          this.setTree(item.sonDirectoryList);
+        }
+      });
+    },
+    /* 选择数据 */
+    onNodeClick(row) {
+      if (row) {
+        this.current = row;
+        this.$nextTick(() => {
+          if (this.current.type == 1) {
+            this.$refs.tableRef1.reload();
+          }
+          if (this.current.type == 2 && this.$refs.tableRef2) {
+            this.$refs.tableRef2.reload();
+          }
+          if (this.current.type == 3 && this.$refs.tableRef3) {
+            this.$refs.tableRef3.reload();
+          }
+        });
+      } else {
+        this.current = null;
+      }
+    },
+    done(row) {
+      this.query(row);
+    },
+    /* 显示编辑 */
+    openEdit(type) {
+      if (type == 'del') {
+        this.remove();
+        return;
+      }
+      this.$refs.editRef.open(
+        type,
+        JSON.parse(JSON.stringify(this.current)),
+        this.data
+      );
+    },
+    /* 删除 */
+    remove() {
+      this.$confirm('确定要删除选中文件夹吗?', '提示', {
+        type: 'warning'
+      })
+        .then(() => {
+          const loading = this.$loading({ lock: true });
+          directoryDeleteAPI([this.current.id])
+            .then((msg) => {
+              loading.close();
+              this.$message.success('操作成功');
+              this.query();
+            })
+            .catch((e) => {
+              loading.close();
+            });
+        })
+        .catch(() => {});
+    }
+  }
+};
+</script>
+  
+  <style lang="scss" scoped>
+.sys-organization-list {
+  height: calc(100vh - 180px);
+  box-sizing: border-box;
+  border-width: 1px;
+  border-style: solid;
+  overflow: auto;
+}
+.sys-organization-list :deep(.el-tree-node__content) {
+  height: 40px;
+
+  & > .el-tree-node__expand-icon {
+    margin-left: 10px;
+  }
+}
+.custom-tree-node {
+  display: flex;
+  align-items: center;
+  img {
+    width: 20px;
+    height: 20px;
+    margin-right: 2px;
+  }
+}
+:deep(.el-popover) {
+  min-width: 50px;
+}
+:deep(.ele-split-panel-side .ele-table-tool-default) {
+  display: none;
+}
+</style>
+<style>
+.el-input.is-disabled .el-input__inner {
+  color: #606266;
+}
+</style>

+ 1 - 1
vue.config.js

@@ -33,7 +33,7 @@ module.exports = {
       '/api': {
         // target: 'http://192.168.1.124:50001',
         // target: 'http://192.168.1.147:18086',
-        target: 'http://192.168.1.125:18086',
+        target: 'http://192.168.1.107:18086',
         // target: 'http://192.168.1.116:18086',
         changeOrigin: true, // 只有这个值为true的情况下 才表示开启跨域
         pathRewrite: {