Bläddra i källkod

:zap: 拆分系统字典和业务字典,字典管理升级为左右表形态

smallchill 6 år sedan
förälder
incheckning
0d6031d9c0

+ 1 - 1
package.json

@@ -33,7 +33,7 @@
     "@vue/cli-plugin-eslint": "^3.1.5",
     "@vue/cli-service": "^3.1.4",
     "chai": "^4.1.2",
-    "node-sass": "^4.9.0",
+    "node-sass": "^4.10.0",
     "sass-loader": "^7.0.1",
     "vue-template-compiler": "^2.5.17",
     "webpack-bundle-analyzer": "^3.0.3"

+ 1 - 1
src/api/system/dict.js

@@ -32,7 +32,7 @@ export const getChildList = (current, size, parentId, params) => {
       ...params,
       current,
       size,
-      parentId,
+      parentId_equal: parentId,
     }
   })
 }

+ 89 - 0
src/api/system/dictbiz.js

@@ -0,0 +1,89 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/blade-system/dict-biz/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getParentList = (current, size, params) => {
+  return request({
+    url: '/api/blade-system/dict-biz/parent-list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getChildList = (current, size, parentId, params) => {
+  return request({
+    url: '/api/blade-system/dict-biz/child-list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+      parentId_equal: parentId,
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/blade-system/dict-biz/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/blade-system/dict-biz/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/blade-system/dict-biz/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+
+export const getDict = (id) => {
+  return request({
+    url: '/api/blade-system/dict-biz/detail',
+    method: 'get',
+    params: {
+      id,
+    }
+  })
+}
+export const getDictTree = () => {
+  return request({
+    url: '/api/blade-system/dict-biz/tree?code=DICT',
+    method: 'get'
+  })
+}
+
+export const getDictionary = (params) => {
+  return request({
+    url: '/api/blade-system/dict-biz/dictionary',
+    method: 'get',
+    params,
+  })
+}

+ 208 - 0
src/const/system/dict.js

@@ -0,0 +1,208 @@
+export const optionParent = {
+  height: 'auto',
+  calcHeight: 365,
+  tip: false,
+  tree: true,
+  border: true,
+  index: true,
+  selection: true,
+  viewBtn: true,
+  searchShow: false,
+  menuWidth: 150,
+  dialogWidth: 880,
+  dialogHeight: 320,
+  column: [
+    {
+      label: "字典编号",
+      prop: "code",
+      search: true,
+      span: 24,
+      rules: [
+        {
+          required: true,
+          message: "请输入字典编号",
+          trigger: "blur"
+        }
+      ]
+    },
+    {
+      label: "字典名称",
+      prop: "dictValue",
+      search: true,
+      align: "center",
+      rules: [
+        {
+          required: true,
+          message: "请输入字典名称",
+          trigger: "blur"
+        }
+      ]
+    },
+    {
+      label: "字典排序",
+      prop: "sort",
+      type: "number",
+      align: "right",
+      width: 80,
+      rules: [
+        {
+          required: true,
+          message: "请输入字典排序",
+          trigger: "blur"
+        }
+      ]
+    },
+    {
+      label: "是否封存",
+      prop: "isSealed",
+      type: "select",
+      align: "center",
+      width: 80,
+      dicData: [
+        {
+          label: "否",
+          value: 0
+        },
+        {
+          label: "是",
+          value: 1
+        }
+      ],
+      valueDefault: 0,
+      slot: true,
+      rules: [
+        {
+          required: true,
+          message: "请选择是否封存",
+          trigger: "blur"
+        }
+      ]
+    },
+    {
+      label: "字典备注",
+      prop: "remark",
+      hide: true
+    }
+  ]
+};
+
+export const optionChild = {
+  height: 'auto',
+  calcHeight: 365,
+  tip: false,
+  tree: true,
+  border: true,
+  index: true,
+  selection: true,
+  viewBtn: true,
+  searchShow: false,
+  menuWidth: 150,
+  dialogWidth: 880,
+  dialogHeight: 320,
+  column: [
+    {
+      label: "字典编号",
+      prop: "code",
+      addDisabled: true,
+      editDisabled: true,
+      search: true,
+      span: 24,
+      rules: [
+        {
+          required: true,
+          message: "请输入字典编号",
+          trigger: "blur"
+        }
+      ]
+    },
+    {
+      label: "字典名称",
+      prop: "dictValue",
+      search: true,
+      align: "center",
+      rules: [
+        {
+          required: true,
+          message: "请输入字典名称",
+          trigger: "blur"
+        }
+      ]
+    },
+    {
+      label: "上级字典",
+      prop: "parentId",
+      type: "tree",
+      dicData: [],
+      hide: true,
+      props: {
+        label: "title"
+      },
+      addDisabled: true,
+      editDisabled: true,
+      rules: [
+        {
+          required: false,
+          message: "请选择上级字典",
+          trigger: "click"
+        }
+      ]
+    },
+    {
+      label: "字典键值",
+      prop: "dictKey",
+      width: 80,
+      rules: [
+        {
+          required: true,
+          message: "请输入字典键值",
+          trigger: "blur"
+        }
+      ]
+    },
+    {
+      label: "字典排序",
+      prop: "sort",
+      type: "number",
+      align: "right",
+      width: 80,
+      rules: [
+        {
+          required: true,
+          message: "请输入字典排序",
+          trigger: "blur"
+        }
+      ]
+    },
+    {
+      label: "是否封存",
+      prop: "isSealed",
+      type: "select",
+      align: "center",
+      width: 80,
+      dicData: [
+        {
+          label: "否",
+          value: 0
+        },
+        {
+          label: "是",
+          value: 1
+        }
+      ],
+      valueDefault: 0,
+      slot: true,
+      rules: [
+        {
+          required: true,
+          message: "请选择是否封存",
+          trigger: "blur"
+        }
+      ]
+    },
+    {
+      label: "字典备注",
+      prop: "remark",
+      hide: true
+    }
+  ]
+};

+ 208 - 0
src/const/system/dictbiz.js

@@ -0,0 +1,208 @@
+export const optionParent = {
+  height: 'auto',
+  calcHeight: 365,
+  tip: false,
+  tree: true,
+  border: true,
+  index: true,
+  selection: true,
+  viewBtn: true,
+  searchShow: false,
+  menuWidth: 150,
+  dialogWidth: 880,
+  dialogHeight: 320,
+  column: [
+    {
+      label: "字典编号",
+      prop: "code",
+      search: true,
+      span: 24,
+      rules: [
+        {
+          required: true,
+          message: "请输入字典编号",
+          trigger: "blur"
+        }
+      ]
+    },
+    {
+      label: "字典名称",
+      prop: "dictValue",
+      search: true,
+      align: "center",
+      rules: [
+        {
+          required: true,
+          message: "请输入字典名称",
+          trigger: "blur"
+        }
+      ]
+    },
+    {
+      label: "字典排序",
+      prop: "sort",
+      type: "number",
+      align: "right",
+      width: 80,
+      rules: [
+        {
+          required: true,
+          message: "请输入字典排序",
+          trigger: "blur"
+        }
+      ]
+    },
+    {
+      label: "是否封存",
+      prop: "isSealed",
+      type: "select",
+      align: "center",
+      width: 80,
+      dicData: [
+        {
+          label: "否",
+          value: 0
+        },
+        {
+          label: "是",
+          value: 1
+        }
+      ],
+      valueDefault: 0,
+      slot: true,
+      rules: [
+        {
+          required: true,
+          message: "请选择是否封存",
+          trigger: "blur"
+        }
+      ]
+    },
+    {
+      label: "字典备注",
+      prop: "remark",
+      hide: true
+    }
+  ]
+};
+
+export const optionChild = {
+  height: 'auto',
+  calcHeight: 365,
+  tip: false,
+  tree: true,
+  border: true,
+  index: true,
+  selection: true,
+  viewBtn: true,
+  searchShow: false,
+  menuWidth: 150,
+  dialogWidth: 880,
+  dialogHeight: 320,
+  column: [
+    {
+      label: "字典编号",
+      prop: "code",
+      addDisabled: true,
+      editDisabled: true,
+      search: true,
+      span: 24,
+      rules: [
+        {
+          required: true,
+          message: "请输入字典编号",
+          trigger: "blur"
+        }
+      ]
+    },
+    {
+      label: "字典名称",
+      prop: "dictValue",
+      search: true,
+      align: "center",
+      rules: [
+        {
+          required: true,
+          message: "请输入字典名称",
+          trigger: "blur"
+        }
+      ]
+    },
+    {
+      label: "上级字典",
+      prop: "parentId",
+      type: "tree",
+      dicData: [],
+      hide: true,
+      props: {
+        label: "title"
+      },
+      addDisabled: true,
+      editDisabled: true,
+      rules: [
+        {
+          required: false,
+          message: "请选择上级字典",
+          trigger: "click"
+        }
+      ]
+    },
+    {
+      label: "字典键值",
+      prop: "dictKey",
+      width: 80,
+      rules: [
+        {
+          required: true,
+          message: "请输入字典键值",
+          trigger: "blur"
+        }
+      ]
+    },
+    {
+      label: "字典排序",
+      prop: "sort",
+      type: "number",
+      align: "right",
+      width: 80,
+      rules: [
+        {
+          required: true,
+          message: "请输入字典排序",
+          trigger: "blur"
+        }
+      ]
+    },
+    {
+      label: "是否封存",
+      prop: "isSealed",
+      type: "select",
+      align: "center",
+      width: 80,
+      dicData: [
+        {
+          label: "否",
+          value: 0
+        },
+        {
+          label: "是",
+          value: 1
+        }
+      ],
+      valueDefault: 0,
+      slot: true,
+      rules: [
+        {
+          required: true,
+          message: "请选择是否封存",
+          trigger: "blur"
+        }
+      ]
+    },
+    {
+      label: "字典备注",
+      prop: "remark",
+      hide: true
+    }
+  ]
+};

+ 1 - 1
src/page/index/top/top-lock.vue

@@ -13,7 +13,7 @@
                       prop="passwd"
                       :rules="[{ required: true, message: '锁屏密码不能为空'}]">
           <el-input v-model="form.passwd"
-                    placeholder="请输入锁屏密码"></el-input>
+                    placeholder="请输入锁屏密码" />
         </el-form-item>
       </el-form>
       <span slot="footer"

+ 1 - 1
src/views/flow/follow.vue

@@ -29,7 +29,7 @@
                label-width="80px">
         <el-form-item label="删除理由">
           <el-input v-model="deleteReason"
-                    placeholder="请输入删除理由"></el-input>
+                    placeholder="请输入删除理由" />
         </el-form-item>
       </el-form>
       <span slot="footer"

+ 1 - 1
src/views/monitor/log/api.vue

@@ -123,7 +123,7 @@
       },
       beforeOpen(done, type) {
         if (["edit", "view"].includes(type)) {
-          getApiLogs(this.form.strId).then(res => {
+          getApiLogs(this.form.id).then(res => {
             this.form = res.data.data;
           });
         }

+ 2 - 2
src/views/monitor/log/error.vue

@@ -56,7 +56,7 @@
               label: "服务host",
               prop: "serverHost",
               search: true,
-              width:'120'
+              width:'150'
             },
             {
               label: "服务ip",
@@ -129,7 +129,7 @@
       },
       beforeOpen(done, type) {
         if (["edit", "view"].includes(type)) {
-          getErrorLogs(this.form.strId).then(res => {
+          getErrorLogs(this.form.id).then(res => {
             this.form = res.data.data;
           });
         }

+ 1 - 1
src/views/monitor/log/usual.vue

@@ -121,7 +121,7 @@
       },
       beforeOpen(done, type) {
         if (["edit", "view"].includes(type)) {
-          getUsualLogs(this.form.strId).then(res => {
+          getUsualLogs(this.form.id).then(res => {
             this.form = res.data.data;
           });
         }

+ 35 - 1
src/views/system/dept.vue

@@ -7,6 +7,7 @@
                v-model="form"
                :permission="permissionList"
                :before-open="beforeOpen"
+               :before-close="beforeClose"
                @row-del="rowDel"
                @row-update="rowUpdate"
                @row-save="rowSave"
@@ -26,6 +27,15 @@
                    @click="handleDelete">删 除
         </el-button>
       </template>
+      <template slot-scope="scope" slot="menu">
+        <el-button
+          type="text"
+          icon="el-icon-circle-plus-outline"
+          size="small"
+          @click.stop="handleAdd(scope.row,scope.index)"
+        >新增子项
+        </el-button>
+      </template>
       <template slot-scope="{row}"
                 slot="deptCategory">
         <el-tag>{{row.deptCategoryName}}</el-tag>
@@ -65,6 +75,7 @@
           index: true,
           selection: true,
           viewBtn: true,
+          menuWidth: 300,
           column: [
             {
               label: "机构名称",
@@ -130,7 +141,7 @@
                 label: "dictValue",
                 value: "dictKey"
               },
-              width: 180,
+              width: 120,
               prop: "deptCategory",
               slot: true,
               rules: [{
@@ -143,6 +154,8 @@
               label: "排序",
               prop: "sort",
               type: "number",
+              align: "right",
+              width: 80,
               rules: [{
                 required: true,
                 message: "请输入排序",
@@ -183,6 +196,16 @@
       }
     },
     methods: {
+      handleAdd(row) {
+        this.$refs.crud.value.parentId = row.id;
+        this.$refs.crud.option.column.filter(item => {
+          if (item.prop === "parentId") {
+            item.valueDefault = row.id;
+            item.addDisabled = true;
+          }
+        });
+        this.$refs.crud.rowAdd();
+      },
       rowSave(row, loading, done) {
         add(row).then(() => {
           loading();
@@ -272,6 +295,17 @@
         }
         done();
       },
+      beforeClose(done) {
+        this.$refs.crud.value.parentId = "";
+        this.$refs.crud.value.addDisabled = false;
+        this.$refs.crud.option.column.filter(item => {
+          if (item.prop === "parentId") {
+            item.valueDefault = "";
+            item.addDisabled = false;
+          }
+        });
+        done();
+      },
       currentChange(currentPage) {
         this.page.currentPage = currentPage;
       },

+ 282 - 209
src/views/system/dict.vue

@@ -1,185 +1,142 @@
 <template>
-  <basic-container>
-    <avue-crud
-      :option="option"
-      :table-loading="loading"
-      :data="data"
-      ref="crud"
-      v-model="form"
-      :permission="permissionList"
-      :before-open="beforeOpen"
-      :before-close="beforeClose"
-      @row-del="rowDel"
-      @row-update="rowUpdate"
-      @row-save="rowSave"
-      @search-change="searchChange"
-      @search-reset="searchReset"
-      @selection-change="selectionChange"
-      @current-change="currentChange"
-      @size-change="sizeChange"
-      @refresh-change="refreshChange"
-      @on-load="onLoad"
-    >
-      <template slot="menuLeft">
-        <el-button
-          type="danger"
-          size="small"
-          icon="el-icon-delete"
-          v-if="permission.dict_delete"
-          plain
-          @click="handleDelete"
-        >删 除
-        </el-button>
-      </template>
-      <template slot-scope="{row}" slot="isSealed">
-        <el-tag>{{row.isSealed===0?'否':'是'}}</el-tag>
-      </template>
-      <template slot-scope="scope" slot="menu">
-        <el-button
-          type="text"
-          icon="el-icon-check"
-          size="small"
-          @click.stop="handleAdd(scope.row,scope.index)"
-        >新增子项
-        </el-button>
-      </template>
-    </avue-crud>
-  </basic-container>
+  <div>
+    <el-row>
+      <el-col :span="11">
+        <basic-container>
+          <el-card class="box-card">
+            <div slot="header" class="clearfix">
+              <span>字典列表</span>
+            </div>
+            <div class="clearfix">
+              <avue-crud
+                :option="optionParent"
+                :table-loading="loading"
+                :data="dataParent"
+                :page="pageParent"
+                ref="crud"
+                v-model="formParent"
+                :permission="permissionList"
+                :before-open="beforeOpen"
+                @row-del="rowDel"
+                @row-update="rowUpdate"
+                @row-save="rowSave"
+                @row-click="handleRowClick"
+                @search-change="searchChange"
+                @search-reset="searchReset"
+                @selection-change="selectionChange"
+                @current-change="currentChange"
+                @size-change="sizeChange"
+                @refresh-change="refreshChange"
+                @on-load="onLoadParent"
+              >
+                <template slot="menuLeft">
+                  <el-button
+                    type="danger"
+                    size="small"
+                    icon="el-icon-delete"
+                    v-if="permission.dict_delete"
+                    plain
+                    @click="handleDelete"
+                  >删 除
+                  </el-button>
+                </template>
+                <template slot-scope="{row}" slot="isSealed">
+                  <el-tag>{{row.isSealed===0?'否':'是'}}</el-tag>
+                </template>
+              </avue-crud>
+            </div>
+          </el-card>
+        </basic-container>
+      </el-col>
+      <el-col :span="13">
+        <basic-container>
+          <el-card class="box-card">
+            <div slot="header" class="clearfix">
+              <span>[{{dictValue}}] 字典详情</span>
+            </div>
+            <div class="clearfix">
+              <avue-crud
+                :option="optionChild"
+                :table-loading="loading"
+                :data="dataChild"
+                :page="pageChild"
+                ref="crudChild"
+                v-model="formChild"
+                :permission="permissionList"
+                :before-open="beforeOpenChild"
+                @row-del="rowDelChild"
+                @row-update="rowUpdateChild"
+                @row-save="rowSaveChild"
+                @search-change="searchChangeChild"
+                @search-reset="searchResetChild"
+                @selection-change="selectionChangeChild"
+                @current-change="currentChangeChild"
+                @size-change="sizeChangeChild"
+                @refresh-change="refreshChangeChild"
+                @on-load="onLoadChild"
+              >
+                <template slot="menuLeft">
+                  <el-button
+                    type="danger"
+                    size="small"
+                    icon="el-icon-delete"
+                    v-if="permission.dict_delete"
+                    plain
+                    @click="handleDelete"
+                  >删 除
+                  </el-button>
+                </template>
+                <template slot-scope="{row}" slot="isSealed">
+                  <el-tag>{{row.isSealed===0?'否':'是'}}</el-tag>
+                </template>
+              </avue-crud>
+            </div>
+          </el-card>
+        </basic-container>
+      </el-col>
+    </el-row>
+  </div>
 </template>
 
 <script>
   import {
-    getList,
+    getParentList,
+    getChildList,
     remove,
     update,
     add,
     getDict,
     getDictTree
   } from "@/api/system/dict";
+  import {optionParent, optionChild} from "@/const/system/dict";
   import {mapGetters} from "vuex";
 
   export default {
     data() {
       return {
-        form: {},
+        dictValue: '暂无',
+        parentId: -1,
+        formParent: {},
+        formChild: {},
         selectionList: [],
         query: {},
         loading: true,
-        page: {
+        pageParent: {
           pageSize: 10,
+          pageSizes: [10, 30, 50, 100, 200],
           currentPage: 1,
           total: 0
         },
-        option: {
-          tip: false,
-          tree: true,
-          border: true,
-          index: true,
-          selection: true,
-          viewBtn: true,
-          menuWidth: 300,
-          dialogWidth: 880,
-          dialogHeight: 320,
-          column: [
-            {
-              label: "字典编号",
-              prop: "code",
-              search: true,
-              span: 24,
-              rules: [
-                {
-                  required: true,
-                  message: "请输入字典编号",
-                  trigger: "blur"
-                }
-              ]
-            },
-            {
-              label: "字典名称",
-              prop: "dictValue",
-              search: true,
-              align: "center",
-              rules: [
-                {
-                  required: true,
-                  message: "请输入字典名称",
-                  trigger: "blur"
-                }
-              ]
-            },
-            {
-              label: "上级字典",
-              prop: "parentId",
-              type: "tree",
-              dicData: [],
-              hide: true,
-              props: {
-                label: "title"
-              },
-              rules: [
-                {
-                  required: false,
-                  message: "请选择上级字典",
-                  trigger: "click"
-                }
-              ]
-            },
-            {
-              label: "字典键值",
-              prop: "dictKey",
-              type: "number",
-              rules: [
-                {
-                  required: true,
-                  message: "请输入字典键值",
-                  trigger: "blur"
-                }
-              ]
-            },
-            {
-              label: "字典排序",
-              prop: "sort",
-              type: "number",
-              rules: [
-                {
-                  required: true,
-                  message: "请输入字典排序",
-                  trigger: "blur"
-                }
-              ]
-            },
-            {
-              label: "是否封存",
-              prop: "isSealed",
-              type: "select",
-              dicData: [
-                {
-                  label: "否",
-                  value: 0
-                },
-                {
-                  label: "是",
-                  value: 1
-                }
-              ],
-              slot: true,
-              rules: [
-                {
-                  required: true,
-                  message: "请选择是否封存",
-                  trigger: "blur"
-                }
-              ]
-            },
-            {
-              label: "字典备注",
-              prop: "remark",
-              search: true,
-              hide: true
-            }
-          ]
+        pageChild: {
+          pageSize: 10,
+          pageSizes: [10, 30, 50, 100, 200],
+          currentPage: 1,
+          total: 0
         },
-        data: []
+        dataParent: [],
+        dataChild: [],
+        optionParent: optionParent,
+        optionChild: optionChild,
       };
     },
     computed: {
@@ -187,9 +144,9 @@
       permissionList() {
         return {
           addBtn: this.vaildData(this.permission.dict_add, false),
-          viewBtn: this.vaildData(this.permission.dict_view, false),
           delBtn: this.vaildData(this.permission.dict_delete, false),
-          editBtn: this.vaildData(this.permission.dict_edit, false)
+          editBtn: this.vaildData(this.permission.dict_edit, false),
+          viewBtn: false,
         };
       },
       ids() {
@@ -201,26 +158,15 @@
       }
     },
     methods: {
-      handleAdd(row) {
-        this.$refs.crud.value.code = row.code;
-        this.$refs.crud.value.parentId = row.id;
-        this.$refs.crud.option.column.filter(item => {
-          if (item.prop === "code") {
-            item.valueDefault = row.code;
-            item.addDisabled = true;
-          }
-          if (item.prop === "parentId") {
-            item.valueDefault = row.id;
-            item.addDisabled = true;
-          }
-        });
-        this.$refs.crud.rowAdd();
-      },
       rowSave(row, loading, done) {
-        add(row).then(
+        const form = {
+          ...row,
+          dictKey: -1,
+        }
+        add(form).then(
           () => {
             loading();
-            this.onLoad(this.page);
+            this.onLoadParent(this.pageParent);
             this.$message({
               type: "success",
               message: "操作成功!"
@@ -236,7 +182,7 @@
         update(row).then(
           () => {
             loading();
-            this.onLoad(this.page);
+            this.onLoadParent(this.pageParent);
             this.$message({
               type: "success",
               message: "操作成功!"
@@ -258,21 +204,36 @@
             return remove(row.id);
           })
           .then(() => {
-            this.onLoad(this.page);
+            this.onLoadParent(this.pageParent);
             this.$message({
               type: "success",
               message: "操作成功!"
             });
           });
       },
+      handleRowClick(row) {
+        this.parentId = row.id;
+        this.dictValue = row.dictValue;
+        this.$refs.crudChild.value.code = row.code;
+        this.$refs.crudChild.value.parentId = row.id;
+        this.$refs.crudChild.option.column.filter(item => {
+          if (item.prop === "code") {
+            item.valueDefault = row.code;
+          }
+          if (item.prop === "parentId") {
+            item.valueDefault = row.id;
+          }
+        });
+        this.onLoadChild(this.pageChild);
+      },
       searchReset() {
         this.query = {};
-        this.onLoad(this.page);
+        this.onLoadParent(this.pageParent);
       },
       searchChange(params) {
         this.query = params;
-        this.page.currentPage = 1;
-        this.onLoad(this.page, params);
+        this.pageParent.currentPage = 1;
+        this.onLoadParent(this.pageParent, params);
       },
       selectionChange(list) {
         this.selectionList = list;
@@ -295,7 +256,7 @@
             return remove(this.ids);
           })
           .then(() => {
-            this.onLoad(this.page);
+            this.onLoadParent(this.pageParent);
             this.$message({
               type: "success",
               message: "操作成功!"
@@ -305,51 +266,156 @@
       },
       beforeOpen(done, type) {
         if (["edit", "view"].includes(type)) {
-          getDict(this.form.id).then(res => {
-            this.form = res.data.data;
+          getDict(this.formParent.id).then(res => {
+            this.formParent = res.data.data;
           });
         }
         done();
       },
-      beforeClose(done) {
-        this.$refs.crud.value.code = "";
-        this.$refs.crud.value.parentId = "";
-        this.$refs.crud.value.addDisabled = false;
-        this.$refs.crud.option.column.filter(item => {
-          if (item.prop === "code") {
-            item.valueDefault = "";
-            item.addDisabled = false;
+      currentChange(currentPage) {
+        this.pageParent.currentPage = currentPage;
+      },
+      sizeChange(pageSize) {
+        this.pageParent.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoadParent(this.pageParent, this.query);
+      },
+      rowSaveChild(row, loading, done) {
+        add(row).then(
+          () => {
+            loading();
+            this.onLoadChild(this.pageChild);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          },
+          error => {
+            done();
+            console.log(error);
           }
-          if (item.prop === "parentId") {
-            item.valueDefault = "";
-            item.addDisabled = false;
+        );
+      },
+      rowUpdateChild(row, index, loading, done) {
+        update(row).then(
+          () => {
+            loading();
+            this.onLoadChild(this.pageChild);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          },
+          error => {
+            done();
+            console.log(error);
           }
-        });
+        );
+      },
+      rowDelChild(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoadChild(this.pageChild);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      searchResetChild() {
+        this.query = {};
+        this.onLoadChild(this.pageChild);
+      },
+      searchChangeChild(params) {
+        this.query = params;
+        this.pageChild.currentPage = 1;
+        this.onLoadChild(this.pageChild, params);
+      },
+      selectionChangeChild(list) {
+        this.selectionList = list;
+      },
+      selectionClearChild() {
+        this.selectionList = [];
+        this.$refs.crudChild.toggleSelection();
+      },
+      handleDeleteChild() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoadChild(this.pageChild);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crudChild.toggleSelection();
+          });
+      },
+      beforeOpenChild(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDict(this.formChild.id).then(res => {
+            this.formChild = res.data.data;
+          });
+        }
         done();
       },
-      currentChange(currentPage) {
-        this.page.currentPage = currentPage;
+      currentChangeChild(currentPage) {
+        this.pageChild.currentPage = currentPage;
       },
-      sizeChange(pageSize) {
-        this.page.pageSize = pageSize;
+      sizeChangeChild(pageSize) {
+        this.pageChild.pageSize = pageSize;
       },
-      refreshChange() {
-        this.onLoad(this.page, this.query);
+      refreshChangeChild() {
+        this.onLoadChild(this.pageChild, this.query);
+      },
+      onLoadParent(page, params = {}) {
+        this.loading = true;
+        getParentList(
+          page.currentPage,
+          page.pageSize,
+          Object.assign(params, this.query)
+        ).then(res => {
+          const data = res.data.data;
+          this.pageParent.total = data.total;
+          this.dataParent = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
       },
-      onLoad(page, params = {}) {
+      onLoadChild(page, params = {}) {
         this.loading = true;
-        getList(
+        getChildList(
           page.currentPage,
           page.pageSize,
+          this.parentId,
           Object.assign(params, this.query)
         ).then(res => {
-          this.data = res.data.data;
+          const data = res.data.data;
+          this.pageChild.total = data.total;
+          this.dataChild = data.records;
+          this.loading = false;
           getDictTree().then(res => {
             const data = res.data.data;
-            const index = this.$refs.crud.findColumnIndex("parentId");
-            this.option.column[index].dicData = data;
+            const index = this.$refs.crudChild.findColumnIndex("parentId");
+            this.optionChild.column[index].dicData = data;
           });
-          this.loading = false;
           this.selectionClear();
         });
       }
@@ -358,4 +424,11 @@
 </script>
 
 <style>
+  .el-card__header {
+    padding: 2px 18px !important;
+  }
+
+  .el-card__body {
+    padding: 10px !important;
+  }
 </style>

+ 432 - 0
src/views/system/dictbiz.vue

@@ -0,0 +1,432 @@
+<template>
+  <div>
+    <el-row>
+      <el-col :span="11">
+        <basic-container>
+          <el-card class="box-card">
+            <div slot="header" class="clearfix">
+              <span>业务字典列表</span>
+            </div>
+            <div class="clearfix">
+              <avue-crud
+                :option="optionParent"
+                :table-loading="loading"
+                :data="dataParent"
+                :page="pageParent"
+                ref="crud"
+                v-model="formParent"
+                :permission="permissionList"
+                :before-open="beforeOpen"
+                @row-del="rowDel"
+                @row-update="rowUpdate"
+                @row-save="rowSave"
+                @row-click="handleRowClick"
+                @search-change="searchChange"
+                @search-reset="searchReset"
+                @selection-change="selectionChange"
+                @current-change="currentChange"
+                @size-change="sizeChange"
+                @refresh-change="refreshChange"
+                @on-load="onLoadParent"
+              >
+                <template slot="menuLeft">
+                  <el-button
+                    type="danger"
+                    size="small"
+                    icon="el-icon-delete"
+                    v-if="permission.dict_delete"
+                    plain
+                    @click="handleDelete"
+                  >删 除
+                  </el-button>
+                </template>
+                <template slot-scope="{row}" slot="isSealed">
+                  <el-tag>{{row.isSealed===0?'否':'是'}}</el-tag>
+                </template>
+              </avue-crud>
+            </div>
+          </el-card>
+        </basic-container>
+      </el-col>
+      <el-col :span="13">
+        <basic-container>
+          <el-card class="box-card">
+            <div slot="header" class="clearfix">
+              <span>业务字典详情</span>
+            </div>
+            <div class="clearfix">
+              <avue-crud
+                :option="optionChild"
+                :table-loading="loading"
+                :data="dataChild"
+                :page="pageChild"
+                ref="crudChild"
+                v-model="formChild"
+                :permission="permissionList"
+                :before-open="beforeOpenChild"
+                @row-del="rowDelChild"
+                @row-update="rowUpdateChild"
+                @row-save="rowSaveChild"
+                @search-change="searchChangeChild"
+                @search-reset="searchResetChild"
+                @selection-change="selectionChangeChild"
+                @current-change="currentChangeChild"
+                @size-change="sizeChangeChild"
+                @refresh-change="refreshChangeChild"
+                @on-load="onLoadChild"
+              >
+                <template slot="menuLeft">
+                  <el-button
+                    type="danger"
+                    size="small"
+                    icon="el-icon-delete"
+                    v-if="permission.dict_delete"
+                    plain
+                    @click="handleDelete"
+                  >删 除
+                  </el-button>
+                </template>
+                <template slot-scope="{row}" slot="isSealed">
+                  <el-tag>{{row.isSealed===0?'否':'是'}}</el-tag>
+                </template>
+              </avue-crud>
+            </div>
+          </el-card>
+        </basic-container>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+  import {
+    getParentList,
+    getChildList,
+    remove,
+    update,
+    add,
+    getDict,
+    getDictTree
+  } from "@/api/system/dictbiz";
+  import {optionParent, optionChild} from "@/const/system/dictbiz";
+  import {mapGetters} from "vuex";
+
+  export default {
+    data() {
+      return {
+        parentId: -1,
+        formParent: {},
+        formChild: {},
+        selectionList: [],
+        query: {},
+        loading: true,
+        pageParent: {
+          pageSize: 10,
+          pageSizes: [10, 30, 50, 100, 200],
+          currentPage: 1,
+          total: 0
+        },
+        pageChild: {
+          pageSize: 10,
+          pageSizes: [10, 30, 50, 100, 200],
+          currentPage: 1,
+          total: 0
+        },
+        dataParent: [],
+        dataChild: [],
+        optionParent: optionParent,
+        optionChild: optionChild,
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.dict_add, false),
+          delBtn: this.vaildData(this.permission.dict_delete, false),
+          editBtn: this.vaildData(this.permission.dict_edit, false),
+          viewBtn: false,
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      rowSave(row, loading, done) {
+        const form = {
+          ...row,
+          dictKey: -1,
+        }
+        add(form).then(
+          () => {
+            loading();
+            this.onLoadParent(this.pageParent);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          },
+          error => {
+            done();
+            console.log(error);
+          }
+        );
+      },
+      rowUpdate(row, index, loading, done) {
+        update(row).then(
+          () => {
+            loading();
+            this.onLoadParent(this.pageParent);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          },
+          error => {
+            done();
+            console.log(error);
+          }
+        );
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoadParent(this.pageParent);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleRowClick(row) {
+        this.parentId = row.id;
+        this.$refs.crudChild.value.code = row.code;
+        this.$refs.crudChild.value.parentId = row.id;
+        this.$refs.crudChild.option.column.filter(item => {
+          if (item.prop === "code") {
+            item.valueDefault = row.code;
+          }
+          if (item.prop === "parentId") {
+            item.valueDefault = row.id;
+          }
+        });
+        this.onLoadChild(this.pageChild);
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoadParent(this.pageParent);
+      },
+      searchChange(params) {
+        this.query = params;
+        this.pageParent.currentPage = 1;
+        this.onLoadParent(this.pageParent, params);
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoadParent(this.pageParent);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDict(this.formParent.id).then(res => {
+            this.formParent = res.data.data;
+          });
+        }
+        done();
+      },
+      currentChange(currentPage) {
+        this.pageParent.currentPage = currentPage;
+      },
+      sizeChange(pageSize) {
+        this.pageParent.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoadParent(this.pageParent, this.query);
+      },
+      rowSaveChild(row, loading, done) {
+        add(row).then(
+          () => {
+            loading();
+            this.onLoadChild(this.pageChild);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          },
+          error => {
+            done();
+            console.log(error);
+          }
+        );
+      },
+      rowUpdateChild(row, index, loading, done) {
+        update(row).then(
+          () => {
+            loading();
+            this.onLoadChild(this.pageChild);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          },
+          error => {
+            done();
+            console.log(error);
+          }
+        );
+      },
+      rowDelChild(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoadChild(this.pageChild);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      searchResetChild() {
+        this.query = {};
+        this.onLoadChild(this.pageChild);
+      },
+      searchChangeChild(params) {
+        this.query = params;
+        this.pageChild.currentPage = 1;
+        this.onLoadChild(this.pageChild, params);
+      },
+      selectionChangeChild(list) {
+        this.selectionList = list;
+      },
+      selectionClearChild() {
+        this.selectionList = [];
+        this.$refs.crudChild.toggleSelection();
+      },
+      handleDeleteChild() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoadChild(this.pageChild);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crudChild.toggleSelection();
+          });
+      },
+      beforeOpenChild(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDict(this.formChild.id).then(res => {
+            this.formChild = res.data.data;
+          });
+        }
+        done();
+      },
+      currentChangeChild(currentPage) {
+        this.pageChild.currentPage = currentPage;
+      },
+      sizeChangeChild(pageSize) {
+        this.pageChild.pageSize = pageSize;
+      },
+      refreshChangeChild() {
+        this.onLoadChild(this.pageChild, this.query);
+      },
+      onLoadParent(page, params = {}) {
+        this.loading = true;
+        getParentList(
+          page.currentPage,
+          page.pageSize,
+          Object.assign(params, this.query)
+        ).then(res => {
+          const data = res.data.data;
+          this.pageParent.total = data.total;
+          this.dataParent = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      },
+      onLoadChild(page, params = {}) {
+        this.loading = true;
+        getChildList(
+          page.currentPage,
+          page.pageSize,
+          this.parentId,
+          Object.assign(params, this.query)
+        ).then(res => {
+          const data = res.data.data;
+          this.pageChild.total = data.total;
+          this.dataChild = data.records;
+          this.loading = false;
+          getDictTree().then(res => {
+            const data = res.data.data;
+            const index = this.$refs.crudChild.findColumnIndex("parentId");
+            this.optionChild.column[index].dicData = data;
+          });
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+  .el-card__header {
+    padding: 2px 18px !important;
+  }
+
+  .el-card__body {
+    padding: 10px !important;
+  }
+</style>

+ 1 - 1
src/views/util/cache.vue

@@ -5,7 +5,7 @@
     <br /> <br />
     <el-tag>同时滚动下拉,返回时还会保持滚动条所在的位置</el-tag>
     <br /> <br />
-    <el-input v-model="value" placeholder="input here"></el-input>
+    <el-input v-model="value" placeholder="input here" />
 
     <div style="height:1000px;"></div>
   </basic-container>

+ 361 - 0
src/views/util/demo/dict-classic.vue

@@ -0,0 +1,361 @@
+<template>
+  <basic-container>
+    <avue-crud
+      :option="option"
+      :table-loading="loading"
+      :data="data"
+      ref="crud"
+      v-model="form"
+      :permission="permissionList"
+      :before-open="beforeOpen"
+      :before-close="beforeClose"
+      @row-del="rowDel"
+      @row-update="rowUpdate"
+      @row-save="rowSave"
+      @search-change="searchChange"
+      @search-reset="searchReset"
+      @selection-change="selectionChange"
+      @current-change="currentChange"
+      @size-change="sizeChange"
+      @refresh-change="refreshChange"
+      @on-load="onLoad"
+    >
+      <template slot="menuLeft">
+        <el-button
+          type="danger"
+          size="small"
+          icon="el-icon-delete"
+          v-if="permission.dict_delete"
+          plain
+          @click="handleDelete"
+        >删 除
+        </el-button>
+      </template>
+      <template slot-scope="{row}" slot="isSealed">
+        <el-tag>{{row.isSealed===0?'否':'是'}}</el-tag>
+      </template>
+      <template slot-scope="scope" slot="menu">
+        <el-button
+          type="text"
+          icon="el-icon-check"
+          size="small"
+          @click.stop="handleAdd(scope.row,scope.index)"
+        >新增子项
+        </el-button>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {
+    getList,
+    remove,
+    update,
+    add,
+    getDict,
+    getDictTree
+  } from "@/api/system/dict";
+  import {mapGetters} from "vuex";
+
+  export default {
+    data() {
+      return {
+        form: {},
+        selectionList: [],
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        option: {
+          tip: false,
+          tree: true,
+          border: true,
+          index: true,
+          selection: true,
+          viewBtn: true,
+          menuWidth: 300,
+          dialogWidth: 880,
+          dialogHeight: 320,
+          column: [
+            {
+              label: "字典编号",
+              prop: "code",
+              search: true,
+              span: 24,
+              rules: [
+                {
+                  required: true,
+                  message: "请输入字典编号",
+                  trigger: "blur"
+                }
+              ]
+            },
+            {
+              label: "字典名称",
+              prop: "dictValue",
+              search: true,
+              align: "center",
+              rules: [
+                {
+                  required: true,
+                  message: "请输入字典名称",
+                  trigger: "blur"
+                }
+              ]
+            },
+            {
+              label: "上级字典",
+              prop: "parentId",
+              type: "tree",
+              dicData: [],
+              hide: true,
+              props: {
+                label: "title"
+              },
+              rules: [
+                {
+                  required: false,
+                  message: "请选择上级字典",
+                  trigger: "click"
+                }
+              ]
+            },
+            {
+              label: "字典键值",
+              prop: "dictKey",
+              type: "number",
+              rules: [
+                {
+                  required: true,
+                  message: "请输入字典键值",
+                  trigger: "blur"
+                }
+              ]
+            },
+            {
+              label: "字典排序",
+              prop: "sort",
+              type: "number",
+              rules: [
+                {
+                  required: true,
+                  message: "请输入字典排序",
+                  trigger: "blur"
+                }
+              ]
+            },
+            {
+              label: "是否封存",
+              prop: "isSealed",
+              type: "select",
+              dicData: [
+                {
+                  label: "否",
+                  value: 0
+                },
+                {
+                  label: "是",
+                  value: 1
+                }
+              ],
+              slot: true,
+              rules: [
+                {
+                  required: true,
+                  message: "请选择是否封存",
+                  trigger: "blur"
+                }
+              ]
+            },
+            {
+              label: "字典备注",
+              prop: "remark",
+              search: true,
+              hide: true
+            }
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.dict_add, false),
+          viewBtn: this.vaildData(this.permission.dict_view, false),
+          delBtn: this.vaildData(this.permission.dict_delete, false),
+          editBtn: this.vaildData(this.permission.dict_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      handleAdd(row) {
+        this.$refs.crud.value.code = row.code;
+        this.$refs.crud.value.parentId = row.id;
+        this.$refs.crud.option.column.filter(item => {
+          if (item.prop === "code") {
+            item.valueDefault = row.code;
+            item.addDisabled = true;
+          }
+          if (item.prop === "parentId") {
+            item.valueDefault = row.id;
+            item.addDisabled = true;
+          }
+        });
+        this.$refs.crud.rowAdd();
+      },
+      rowSave(row, loading, done) {
+        add(row).then(
+          () => {
+            loading();
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          },
+          error => {
+            done();
+            console.log(error);
+          }
+        );
+      },
+      rowUpdate(row, index, loading, done) {
+        update(row).then(
+          () => {
+            loading();
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          },
+          error => {
+            done();
+            console.log(error);
+          }
+        );
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDict(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      beforeClose(done) {
+        this.$refs.crud.value.code = "";
+        this.$refs.crud.value.parentId = "";
+        this.$refs.crud.value.addDisabled = false;
+        this.$refs.crud.option.column.filter(item => {
+          if (item.prop === "code") {
+            item.valueDefault = "";
+            item.addDisabled = false;
+          }
+          if (item.prop === "parentId") {
+            item.valueDefault = "";
+            item.addDisabled = false;
+          }
+        });
+        done();
+      },
+      currentChange(currentPage) {
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize) {
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        getList(
+          page.currentPage,
+          page.pageSize,
+          Object.assign(params, this.query)
+        ).then(res => {
+          this.data = res.data.data;
+          getDictTree().then(res => {
+            const data = res.data.data;
+            const index = this.$refs.crud.findColumnIndex("parentId");
+            this.option.column[index].dicData = data;
+          });
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 1 - 1
src/views/util/table.vue

@@ -3,7 +3,7 @@
     <h3>表格例子</h3>
     <avue-crud :option="option"
                :page="page"
-               :data="data"></avue-crud>
+               :data="data" />
   </basic-container>
 </template>
 

+ 4 - 4
src/views/work/process/leave/detail.vue

@@ -11,22 +11,22 @@
           <span>审批信息</span>
         </div>
         <el-form-item label="申请人">
-          <el-input :disabled="true" v-model="form.flow.assigneeName"></el-input>
+          <el-input :disabled="true" v-model="form.flow.assigneeName" />
         </el-form-item>
         <el-row>
           <el-col :span="12">
             <el-form-item label="开始时间">
-              <el-input :disabled="true" v-model="form.startTime"></el-input>
+              <el-input :disabled="true" v-model="form.startTime" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="结束时间">
-              <el-input :disabled="true" v-model="form.endTime"></el-input>
+              <el-input :disabled="true" v-model="form.endTime" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-form-item label="请假理由">
-          <el-input :disabled="true" type="textarea" v-model="form.reason"></el-input>
+          <el-input :disabled="true" type="textarea" v-model="form.reason" />
         </el-form-item>
       </el-card>
       <el-card shadow="hover">

+ 5 - 5
src/views/work/process/leave/handle.vue

@@ -13,25 +13,25 @@
           <span>审批信息</span>
         </div>
         <el-form-item label="申请人">
-          <el-input :disabled="true" v-model="form.flow.assigneeName"></el-input>
+          <el-input :disabled="true" v-model="form.flow.assigneeName" />
         </el-form-item>
         <el-row>
           <el-col :span="12">
             <el-form-item label="开始时间">
-              <el-input :disabled="true" v-model="form.startTime"></el-input>
+              <el-input :disabled="true" v-model="form.startTime" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="结束时间">
-              <el-input :disabled="true" v-model="form.endTime"></el-input>
+              <el-input :disabled="true" v-model="form.endTime" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-form-item label="请假理由">
-          <el-input :disabled="true" type="textarea" v-model="form.reason"></el-input>
+          <el-input :disabled="true" type="textarea" v-model="form.reason" />
         </el-form-item>
         <el-form-item label="批复意见">
-          <el-input type="textarea" v-model="form.comment"></el-input>
+          <el-input type="textarea" v-model="form.comment" />
         </el-form-item>
       </el-card>
       <el-card shadow="hover">

+ 5 - 5
yarn.lock

@@ -5521,10 +5521,10 @@ node-releases@^1.1.25:
   dependencies:
     semver "^5.3.0"
 
-node-sass@^4.9.0:
-  version "4.12.0"
-  resolved "https://registry.npm.taobao.org/node-sass/download/node-sass-4.12.0.tgz#0914f531932380114a30cc5fa4fa63233a25f017"
-  integrity sha1-CRT1MZMjgBFKMMxfpPpjIzol8Bc=
+node-sass@^4.10.0:
+  version "4.13.0"
+  resolved "https://registry.npm.taobao.org/node-sass/download/node-sass-4.13.0.tgz?cache=0&sync_timestamp=1571899943857&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-sass%2Fdownload%2Fnode-sass-4.13.0.tgz#b647288babdd6a1cb726de4545516b31f90da066"
+  integrity sha1-tkcoi6vdahy3Jt5FRVFrMfkNoGY=
   dependencies:
     async-foreach "^0.1.3"
     chalk "^1.1.1"
@@ -5533,7 +5533,7 @@ node-sass@^4.9.0:
     get-stdin "^4.0.1"
     glob "^7.0.3"
     in-publish "^2.0.0"
-    lodash "^4.17.11"
+    lodash "^4.17.15"
     meow "^3.7.0"
     mkdirp "^0.5.1"
     nan "^2.13.2"