Browse Source

feature:基础模块开发
1.菜单管理
2.用户管理
3.字典管理

ZZH-wl 3 years ago
parent
commit
ce2deb34c4

+ 0 - 0
src/api/department.js → src/api/dept.js


+ 50 - 0
src/api/dict.js

@@ -0,0 +1,50 @@
+import micro_request from '@/utils/micro_request'
+
+const basePath = process.env.VUE_APP_AdminPath
+export default {
+  // 字典类型
+  getDictTypeList(query) {
+    return micro_request.postRequest(basePath, 'Dict', 'GetDictTypeList', query)
+  },
+  getDictTypeEntity(query) {
+    return micro_request.postRequest(
+      basePath,
+      'Dict',
+      'GetDictTypeEntity',
+      query
+    )
+  },
+  createDictType(query) {
+    return micro_request.postRequest(basePath, 'Dict', 'CreateDictType', query)
+  },
+  updateDictType(query) {
+    return micro_request.postRequest(basePath, 'Dict', 'UpdateDictType', query)
+  },
+  deleteDictTypeByIds(query) {
+    return micro_request.postRequest(
+      basePath,
+      'Dict',
+      'DeleteDictTypeByIds',
+      query
+    )
+  },
+
+  // 字典明细
+  getDictDataList(query) {
+    return micro_request.postRequest(basePath, 'Dict', 'GetDictDataList', query)
+  },
+  createDictData(query) {
+    return micro_request.postRequest(basePath, 'Dict', 'CreateDictData', query)
+  },
+  updateDictData(query) {
+    return micro_request.postRequest(basePath, 'Dict', 'UpdateDictData', query)
+  },
+  deleteDictDataByIds(query) {
+    return micro_request.postRequest(
+      basePath,
+      'Dict',
+      'DeleteDictDataByIds',
+      query
+    )
+  },
+}

+ 1 - 1
src/api/menu.js

@@ -10,7 +10,7 @@ export default {
     return micro_request.postRequest(basePath, 'Menu', 'GetMenuTree', query)
   },
   doAdd(query) {
-    return micro_request.postRequest(basePath, 'Menu', 'Add', query)
+    return micro_request.postRequest(basePath, 'Menu', 'Create', query)
   },
   doEdit(query) {
     return micro_request.postRequest(basePath, 'Menu', 'UpdateById', query)

+ 1 - 1
src/api/user.js

@@ -13,7 +13,7 @@ export default {
     return micro_request.postRequest(basePath, 'User', 'UpdateById', query)
   },
   doDelete(query) {
-    return micro_request.postRequest(basePath, 'User', 'DeleteUserByIds', query)
+    return micro_request.postRequest(basePath, 'User', 'DeleteByIds', query)
   },
 }
 

+ 2 - 0
src/store/modules/routes.js

@@ -81,6 +81,8 @@ const actions = {
     // 设置菜单所需路由
     commit('setRoutes', JSON.parse(JSON.stringify(accessRoutes)))
     // 根据可访问路由重置Vue Router
+    console.log(accessRoutes)
+
     await resetRouter(accessRoutes)
   },
   /**

+ 1 - 1
src/utils/micro_request.js

@@ -4,7 +4,7 @@ import store from '@/store'
 import { getToken } from '@/utils/auth'
 import errorCode from '@/utils/errorCode'
 
-axios.defaults.headers['Content-Type'] = 'application/jsoncharset=utf-8'
+axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
 
 const service = axios.create({
   // axios中请求配置有baseURL选项,表示请求URL公共部分

+ 5 - 0
src/vab/components/VabColumnBar/index.vue

@@ -85,6 +85,11 @@
         )
       },
       handleActiveMenu() {
+        console.log(this.extra.first)
+        console.log(this.routes)
+        console.log(
+          this.routes.find((route) => route.name === this.extra.first)
+        )
         return this.routes.find((route) => route.name === this.extra.first)
       },
       handlePartialRoutes() {

+ 1 - 0
src/vab/components/VabHeader/index.vue

@@ -81,6 +81,7 @@
         handler(val) {
           const matched = handleMatched(this.routes, val)
           this.activeMenu = matched[matched.length - 1].path
+          console.log(matched, this.activeMenu)
         },
       },
     },

+ 4 - 0
src/vab/components/VabSideBar/index.vue

@@ -74,6 +74,8 @@
         const activeMenu = this.routes.find(
           (route) => route.name === this.extra.first
         )
+        console.log(activeMenu)
+
         return activeMenu ? activeMenu.children : []
       },
     },
@@ -81,6 +83,7 @@
       $route: {
         handler(route) {
           this.activeMenu = handleActivePath(route)
+          console.log(this.activeMenu)
         },
         immediate: true,
       },
@@ -89,6 +92,7 @@
           const matched = handleMatched(this.routes, val)
           this.extra.first = matched[0].name
           this.activeMenu = matched[matched.length - 1].path
+          console.log(this.extra.first, this.activeMenu)
         },
       },
     },

+ 1 - 1
src/views/system/dept/components/DeptEdit.vue

@@ -38,7 +38,7 @@
 </template>
 
 <script>
-  import { doEdit, getList } from '@/api/department'
+  import { doEdit, getList } from '@/api/dept'
 
   export default {
     name: 'DeptEdit',

+ 2 - 2
src/views/system/dept/index.vue

@@ -79,11 +79,11 @@
 </template>
 
 <script>
-  import { doDelete, getList } from '@/api/department'
+  import { doDelete, getList } from '@/api/dept'
   import Edit from './components/DeptEdit'
 
   export default {
-    name: 'DepartmentManagement',
+    name: 'Dept',
     components: { Edit },
     data() {
       return {

+ 145 - 0
src/views/system/dict/components/DataEdit.vue

@@ -0,0 +1,145 @@
+<template>
+  <el-dialog
+    :title="title"
+    :visible.sync="dialogFormVisible"
+    width="500px"
+    @close="close">
+    <el-form ref="form" label-width="80px" :model="form" :rules="rules">
+      <el-form-item label="字典类型">
+        <el-input v-model="form.dictType" :disabled="true" />
+      </el-form-item>
+      <el-form-item label="数据标签" prop="dictLabel">
+        <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+      </el-form-item>
+      <el-form-item label="数据键值" prop="dictValue">
+        <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+      </el-form-item>
+      <el-form-item label="样式属性" prop="cssClass">
+        <el-input v-model="form.cssClass" placeholder="请输入样式属性" />
+      </el-form-item>
+      <el-form-item label="显示排序" prop="dictSort">
+        <el-input-number
+          v-model="form.dictSort"
+          controls-position="right"
+          :min="0" />
+      </el-form-item>
+      <el-form-item label="回显样式" prop="listClass">
+        <el-select v-model="form.listClass">
+          <el-option
+            v-for="item in listClassOptions"
+            :key="item.value"
+            :label="item.label + '(' + item.value + ')'"
+            :value="item.value" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-radio-group v-model="form.status">
+          <el-radio-group v-model="form.status">
+            <el-radio label="10">正常</el-radio>
+            <el-radio label="20">停用</el-radio>
+          </el-radio-group>
+          <!--          <el-radio-->
+          <!--            v-for="dict in dict.type.sys_normal_disable"-->
+          <!--            :key="dict.value"-->
+          <!--            :label="dict.value"-->
+          <!--          >{{dict.label}}</el-radio>-->
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="备注" prop="remark">
+        <el-input
+          v-model="form.remark"
+          placeholder="请输入内容"
+          type="textarea" />
+      </el-form-item>
+    </el-form>
+    <template #footer>
+      <el-button @click="close">取 消</el-button>
+      <el-button type="primary" @click="save">确 定</el-button>
+    </template>
+  </el-dialog>
+</template>
+
+<script>
+  import dictApi from '@/api/dict'
+
+  export default {
+    name: 'DataEdit',
+    data() {
+      return {
+        form: {},
+        rules: {
+          dictLabel: [
+            { required: true, message: '数据标签不能为空', trigger: 'blur' },
+          ],
+          dictValue: [
+            { required: true, message: '数据键值不能为空', trigger: 'blur' },
+          ],
+          dictSort: [
+            { required: true, message: '数据顺序不能为空', trigger: 'blur' },
+          ],
+        },
+        title: '',
+        dialogFormVisible: false,
+        // 数据标签回显样式
+        listClassOptions: [
+          {
+            value: 'default',
+            label: '默认',
+          },
+          {
+            value: 'primary',
+            label: '主要',
+          },
+          {
+            value: 'success',
+            label: '成功',
+          },
+          {
+            value: 'info',
+            label: '信息',
+          },
+          {
+            value: 'warning',
+            label: '警告',
+          },
+          {
+            value: 'danger',
+            label: '危险',
+          },
+        ],
+      }
+    },
+    methods: {
+      showEdit(row) {
+        if (!row.dictCode) {
+          this.title = '添加'
+          this.form = Object.assign({}, row)
+        } else {
+          this.title = '编辑'
+          this.form = Object.assign({}, row)
+        }
+        this.dialogFormVisible = true
+      },
+      close() {
+        this.$refs['form'].resetFields()
+        this.form = this.$options.data().form
+        this.dialogFormVisible = false
+      },
+      save() {
+        this.$refs['form'].validate(async (valid) => {
+          if (valid) {
+            if (this.form.dictCode) {
+              const { msg } = await dictApi.updateDictData(this.form)
+              this.$baseMessage(msg, 'success', 'vab-hey-message-success')
+            } else {
+              const { msg } = await dictApi.createDictData(this.form)
+              this.$baseMessage(msg, 'success', 'vab-hey-message-success')
+            }
+            this.$emit('fetch-data')
+            this.close()
+          }
+        })
+      },
+    },
+  }
+</script>

+ 93 - 0
src/views/system/dict/components/TypeEdit.vue

@@ -0,0 +1,93 @@
+<template>
+  <el-dialog
+    :title="title"
+    :visible.sync="dialogFormVisible"
+    width="500px"
+    @close="close">
+    <el-form ref="form" label-width="80px" :model="form" :rules="rules">
+      <el-form-item label="字典名称" prop="dictName">
+        <el-input v-model="form.dictName" placeholder="请输入字典名称" />
+      </el-form-item>
+      <el-form-item label="字典类型" prop="dictType">
+        <el-input v-model="form.dictType" placeholder="请输入字典类型" />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-radio-group v-model="form.status">
+          <el-radio-group v-model="form.status">
+            <el-radio label="10">正常</el-radio>
+            <el-radio label="20">停用</el-radio>
+          </el-radio-group>
+          <!--          <el-radio-->
+          <!--            v-for="dict in dict.type.sys_normal_disable"-->
+          <!--            :key="dict.value"-->
+          <!--            :label="dict.value"-->
+          <!--          >{{dict.label}}</el-radio>-->
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="备注" prop="remark">
+        <el-input
+          v-model="form.remark"
+          placeholder="请输入内容"
+          type="textarea" />
+      </el-form-item>
+    </el-form>
+    <template #footer>
+      <el-button @click="close">取 消</el-button>
+      <el-button type="primary" @click="save">确 定</el-button>
+    </template>
+  </el-dialog>
+</template>
+
+<script>
+  import dictApi from '@/api/dict'
+
+  export default {
+    name: 'TypeEdit',
+    data() {
+      return {
+        form: {},
+        rules: {
+          dictName: [
+            { required: true, message: '字典名称不能为空', trigger: 'blur' },
+          ],
+          dictType: [
+            { required: true, message: '字典类型不能为空', trigger: 'blur' },
+          ],
+        },
+        title: '',
+        dialogFormVisible: false,
+      }
+    },
+    methods: {
+      showEdit(row) {
+        if (!row) {
+          this.title = '添加'
+        } else {
+          this.title = '编辑'
+          this.form = Object.assign({}, row)
+        }
+        this.dialogFormVisible = true
+      },
+      close() {
+        this.$refs['form'].resetFields()
+        this.form = this.$options.data().form
+        this.dialogFormVisible = false
+      },
+      save() {
+        this.$refs['form'].validate(async (valid) => {
+          if (valid) {
+            if (this.form.id) {
+              const { msg } = await dictApi.updateDictType(this.form)
+              this.$baseMessage(msg, 'success', 'vab-hey-message-success')
+            } else {
+              const { msg } = await dictApi.createDictType(this.form)
+              this.$baseMessage(msg, 'success', 'vab-hey-message-success')
+            }
+            this.$emit('fetch-data')
+            this.close()
+          }
+        })
+      },
+    },
+  }
+</script>

+ 213 - 0
src/views/system/dict/dataList.vue

@@ -0,0 +1,213 @@
+<template>
+  <div class="user-management-container">
+    <vab-query-form>
+      <vab-query-form-left-panel :span="5">
+        <el-button
+          icon="el-icon-plus"
+          type="primary"
+          @click="handleEdit($event)">
+          添加
+        </el-button>
+        <el-button
+          icon="el-icon-delete"
+          type="danger"
+          @click="handleDelete($event)">
+          批量删除
+        </el-button>
+      </vab-query-form-left-panel>
+      <vab-query-form-right-panel :span="19">
+        <el-form :inline="true" :model="queryForm" @submit.native.prevent>
+          <el-form-item label="字典名称" prop="dictName">
+            <el-input
+              v-model.trim="queryForm.dictName"
+              clearable
+              placeholder="请输入字典名称" />
+          </el-form-item>
+          <el-form-item label="字典标签" prop="dictLabel">
+            <el-input
+              v-model.trim="queryForm.dictLabel"
+              clearable
+              placeholder="请输入字典标签" />
+          </el-form-item>
+          <el-form-item label="状态" prop="status">
+            <el-select
+              v-model="queryForm.status"
+              clearable
+              placeholder="数据状态">
+              <el-option label="正常" value="10" />
+              <el-option label="停用" value="20" />
+            </el-select>
+          </el-form-item>
+          <el-form-item>
+            <el-button icon="el-icon-search" type="primary" @click="queryData">
+              查询
+            </el-button>
+          </el-form-item>
+        </el-form>
+      </vab-query-form-right-panel>
+    </vab-query-form>
+
+    <el-table
+      v-loading="listLoading"
+      border
+      :data="list"
+      :height="height"
+      @selection-change="setSelectRows">
+      <el-table-column align="center" type="selection" />
+      <el-table-column align="center" label="字典编码" prop="dictCode" />
+      <el-table-column align="center" label="字典标签" prop="dictLabel">
+        <template slot-scope="scope">
+          <span
+            v-if="
+              scope.row.listClass == '' || scope.row.listClass == 'default'
+            ">
+            {{ scope.row.dictLabel }}
+          </span>
+          <el-tag
+            v-else
+            :type="scope.row.listClass == 'primary' ? '' : scope.row.listClass">
+            {{ scope.row.dictLabel }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" label="字典键值" prop="dictValue" />
+      <el-table-column align="center" label="字典排序" prop="dictSort" />
+      <el-table-column align="center" label="状态" prop="status">
+        <template #default="{ row }">
+          {{ row.status === '10' ? '正常' : '停用' }}
+        </template>
+      </el-table-column>
+      <el-table-column
+        align="center"
+        label="备注"
+        prop="remark"
+        show-overflow-tooltip />
+      <el-table-column align="center" label="创建时间" prop="createdTime">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.createdTime) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        align="center"
+        label="操作"
+        show-overflow-tooltip
+        width="85">
+        <template #default="{ row }">
+          <el-button type="text" @click="handleEdit(row)">编辑</el-button>
+          <el-button type="text" @click="handleDelete(row)">删除</el-button>
+        </template>
+      </el-table-column>
+      <template #empty>
+        <el-image
+          class="vab-data-empty"
+          :src="require('@/assets/empty_images/data_empty.png')" />
+      </template>
+    </el-table>
+    <el-pagination
+      background
+      :current-page="queryForm.pageNo"
+      :layout="layout"
+      :page-size="queryForm.pageSize"
+      :total="total"
+      @current-change="handleCurrentChange"
+      @size-change="handleSizeChange" />
+    <edit ref="edit" @fetch-data="fetchData" />
+  </div>
+</template>
+
+<script>
+  import dictApi from '@/api/dict'
+  import Edit from './components/DataEdit'
+
+  export default {
+    name: 'DataList',
+    components: { Edit },
+    data() {
+      return {
+        list: [],
+        listLoading: true,
+        layout: 'total, sizes, prev, pager, next, jumper',
+        total: 0,
+        selectRows: '',
+        queryForm: {
+          pageNo: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: undefined,
+          status: undefined,
+        },
+      }
+    },
+    computed: {
+      height() {
+        return this.$baseTableHeight(1)
+      },
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId
+      this.getDictTypeInfo(dictId)
+    },
+    methods: {
+      async getDictTypeInfo(dictId) {
+        const { data: data } = await dictApi.getDictTypeEntity({
+          id: Number(dictId),
+        })
+        this.queryForm.dictType = data.dictType
+        this.fetchData()
+      },
+      setSelectRows(val) {
+        this.selectRows = val
+      },
+      handleEdit(row) {
+        if (row.dictCode) {
+          this.$refs['edit'].showEdit(row)
+        } else {
+          this.$refs['edit'].showEdit({ dictType: this.queryForm.dictType })
+        }
+      },
+      handleDelete(row) {
+        if (row.dictCode) {
+          this.$baseConfirm('你确定要删除当前项吗', null, async () => {
+            const { msg } = await dictApi.deleteDictDataByIds({
+              ids: [row.dictCode],
+            })
+            this.$baseMessage(msg, 'success', 'vab-hey-message-success')
+            await this.fetchData()
+          })
+        } else {
+          if (this.selectRows.length > 0) {
+            const ids = this.selectRows.map((item) => item.dictCode)
+            this.$baseConfirm('你确定要删除选中项吗', null, async () => {
+              const { msg } = await dictApi.deleteDictDataByIds({ ids })
+              this.$baseMessage(msg, 'success', 'vab-hey-message-success')
+              await this.fetchData()
+            })
+          } else {
+            this.$baseMessage('未选中任何行', 'error', 'vab-hey-message-error')
+          }
+        }
+      },
+      handleSizeChange(val) {
+        this.queryForm.pageSize = val
+        this.fetchData()
+      },
+      handleCurrentChange(val) {
+        this.queryForm.pageNo = val
+        this.fetchData()
+      },
+      queryData() {
+        this.queryForm.pageNo = 1
+        this.fetchData()
+      },
+      async fetchData() {
+        this.listLoading = true
+        const {
+          data: { list, total },
+        } = await dictApi.getDictDataList(this.queryForm)
+        this.list = list
+        this.total = total
+        this.listLoading = false
+      },
+    },
+  }
+</script>

+ 207 - 0
src/views/system/dict/index.vue

@@ -0,0 +1,207 @@
+<template>
+  <div class="user-management-container">
+    <vab-query-form>
+      <vab-query-form-left-panel :span="5">
+        <el-button
+          icon="el-icon-plus"
+          type="primary"
+          @click="handleEdit($event)">
+          添加
+        </el-button>
+        <el-button
+          icon="el-icon-delete"
+          type="danger"
+          @click="handleDelete($event)">
+          批量删除
+        </el-button>
+      </vab-query-form-left-panel>
+      <vab-query-form-right-panel :span="19">
+        <el-form :inline="true" :model="queryForm" @submit.native.prevent>
+          <el-form-item label="字典名称" prop="dictName">
+            <el-input
+              v-model.trim="queryForm.dictName"
+              clearable
+              placeholder="请输入字典名称" />
+          </el-form-item>
+          <el-form-item label="字典类型" prop="dictType">
+            <el-input
+              v-model.trim="queryForm.dictType"
+              clearable
+              placeholder="请输入字典类型" />
+          </el-form-item>
+          <el-form-item label="字典状态" prop="status">
+            <el-select
+              v-model="queryForm.status"
+              clearable
+              placeholder="字典状态">
+              <el-option label="正常" value="10" />
+              <el-option label="停用" value="20" />
+            </el-select>
+          </el-form-item>
+          <el-form-item>
+            <el-button icon="el-icon-search" type="primary" @click="queryData">
+              查询
+            </el-button>
+          </el-form-item>
+        </el-form>
+      </vab-query-form-right-panel>
+    </vab-query-form>
+
+    <el-table
+      v-loading="listLoading"
+      border
+      :data="list"
+      :height="height"
+      @selection-change="setSelectRows">
+      <el-table-column align="center" show-overflow-tooltip type="selection" />
+      <el-table-column
+        align="center"
+        label="id"
+        prop="id"
+        show-overflow-tooltip />
+      <el-table-column
+        align="center"
+        label="字典名称"
+        prop="dictName"
+        show-overflow-tooltip />
+      <el-table-column
+        align="center"
+        label="字典类型"
+        :show-overflow-tooltip="true">
+        <template slot-scope="scope">
+          <router-link
+            class="link-type"
+            :to="'/system/dict-data/' + scope.row.id">
+            <span>{{ scope.row.dictType }}</span>
+          </router-link>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" label="状态" prop="status">
+        <template #default="{ row }">
+          {{ row.status === '10' ? '正常' : '停用' }}
+        </template>
+      </el-table-column>
+      <el-table-column
+        align="center"
+        label="备注"
+        prop="remark"
+        show-overflow-tooltip />
+      <el-table-column align="center" label="创建时间" prop="createdTime">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.createdTime) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        align="center"
+        label="操作"
+        show-overflow-tooltip
+        width="85">
+        <template #default="{ row }">
+          <el-button type="text" @click="handleEdit(row)">编辑</el-button>
+          <el-button type="text" @click="handleDelete(row)">删除</el-button>
+        </template>
+      </el-table-column>
+      <template #empty>
+        <el-image
+          class="vab-data-empty"
+          :src="require('@/assets/empty_images/data_empty.png')" />
+      </template>
+    </el-table>
+    <el-pagination
+      background
+      :current-page="queryForm.pageNo"
+      :layout="layout"
+      :page-size="queryForm.pageSize"
+      :total="total"
+      @current-change="handleCurrentChange"
+      @size-change="handleSizeChange" />
+    <edit ref="edit" @fetch-data="fetchData" />
+  </div>
+</template>
+
+<script>
+  import dictApi from '@/api/dict'
+  import Edit from './components/TypeEdit'
+
+  export default {
+    name: 'Dict',
+    components: { Edit },
+    data() {
+      return {
+        list: [],
+        listLoading: true,
+        layout: 'total, sizes, prev, pager, next, jumper',
+        total: 0,
+        selectRows: '',
+        queryForm: {
+          pageNo: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: undefined,
+          status: undefined,
+        },
+      }
+    },
+    computed: {
+      height() {
+        return this.$baseTableHeight(1)
+      },
+    },
+    created() {
+      this.fetchData()
+    },
+    methods: {
+      setSelectRows(val) {
+        this.selectRows = val
+      },
+      handleEdit(row) {
+        if (row.id) {
+          this.$refs['edit'].showEdit(row)
+        } else {
+          this.$refs['edit'].showEdit()
+        }
+      },
+      handleDelete(row) {
+        if (row.id) {
+          this.$baseConfirm('你确定要删除当前项吗', null, async () => {
+            const { msg } = await dictApi.deleteDictTypeByIds({ ids: [row.id] })
+            this.$baseMessage(msg, 'success', 'vab-hey-message-success')
+            await this.fetchData()
+          })
+        } else {
+          if (this.selectRows.length > 0) {
+            const ids = this.selectRows.map((item) => item.id).join()
+            this.$baseConfirm('你确定要删除选中项吗', null, async () => {
+              const { msg } = await dictApi.deleteDictTypeByIds({ ids })
+              this.$baseMessage(msg, 'success', 'vab-hey-message-success')
+              await this.fetchData()
+            })
+          } else {
+            this.$baseMessage('未选中任何行', 'error', 'vab-hey-message-error')
+          }
+        }
+      },
+      handleSizeChange(val) {
+        this.queryForm.pageSize = val
+        this.fetchData()
+      },
+      handleCurrentChange(val) {
+        this.queryForm.pageNo = val
+        this.fetchData()
+      },
+      queryData() {
+        this.queryForm.pageNo = 1
+        this.fetchData()
+      },
+      async fetchData() {
+        this.listLoading = true
+        const {
+          data: { list, total },
+        } = await dictApi.getDictTypeList(this.queryForm)
+        this.list = list
+        this.total = total
+        this.listLoading = false
+      },
+    },
+  }
+</script>

+ 14 - 0
src/views/system/menu/components/MenuEdit.vue

@@ -128,6 +128,20 @@
             </span>
           </el-form-item>
         </el-col>
+        <el-col v-if="form.menuType == 'C'" :span="12">
+          <el-form-item prop="query">
+            <el-input
+              v-model="form.activeMenu"
+              maxlength="255"
+              placeholder="请输入高亮路由" />
+            <span slot="label">
+              <el-tooltip content="访问路由的高亮路由显示" placement="top">
+                <i class="el-icon-question"></i>
+              </el-tooltip>
+              高亮路由
+            </span>
+          </el-form-item>
+        </el-col>
         <el-col v-if="form.menuType == 'C'" :span="12">
           <el-form-item prop="isCache">
             <span slot="label">

+ 22 - 21
src/views/system/menu/index.vue

@@ -1,17 +1,18 @@
 <template>
   <div class="menu-management-container">
     <el-row :gutter="20">
-      <el-col :lg="4" :md="8" :sm="24" :xl="4" :xs="24">
-        <el-card class="menu-left" shadow="hover">
-          <el-tree
-            :data="data"
-            :default-expanded-keys="['root']"
-            node-key="id"
-            :props="defaultProps"
-            @node-click="handleNodeClick" />
-        </el-card>
-      </el-col>
-      <el-col :lg="20" :md="16" :sm="24" :xl="20" :xs="24">
+      <!--      <el-col :lg="4" :md="8" :sm="24" :xl="4" :xs="24">-->
+      <!--        <el-card class="menu-left" shadow="hover">-->
+      <!--          <el-tree-->
+      <!--            :data="data"-->
+      <!--            :default-expanded-keys="['root']"-->
+      <!--            node-key="id"-->
+      <!--            :props="defaultProps"-->
+      <!--            @node-click="handleNodeClick" />-->
+      <!--        </el-card>-->
+      <!--      </el-col>-->
+      <!--      <el-col :lg="20" :md="16" :sm="24" :xl="20" :xs="24">-->
+      <el-col>
         <el-card shadow="hover">
           <vab-query-form>
             <vab-query-form-top-panel :span="12">
@@ -35,7 +36,7 @@
               label="菜单名称"
               prop="menuName"
               show-overflow-tooltip />
-            <el-table-column label="路径" prop="path" show-overflow-tooltip />
+            <!--            <el-table-column label="路径" prop="path" show-overflow-tooltip />-->
             <el-table-column
               label="组件路径"
               prop="component"
@@ -45,7 +46,11 @@
               prop="perms"
               show-overflow-tooltip />
             <el-table-column label="排序" prop="sort" width="60" />
-            <el-table-column label="图标" show-overflow-tooltip>
+            <el-table-column
+              label="图标"
+              prop="icon"
+              show-overflow-tooltip
+              width="60">
               <template #default="{ row }">
                 <vab-icon v-if="row.icon" :icon="row.icon" />
               </template>
@@ -112,14 +117,10 @@
               fixed="right"
               label="操作"
               show-overflow-tooltip
-              width="185">
+              width="85">
               <template #default="{ row }">
-                <el-button type="primary" @click="handleEdit(row)">
-                  <vab-icon icon="edit-2-line" />
-                  编辑
-                </el-button>
-                <el-button type="danger" @click="handleDelete(row)">
-                  <vab-icon icon="delete-bin-6-line" />
+                <el-button type="text" @click="handleEdit(row)">编辑</el-button>
+                <el-button type="text" @click="handleDelete(row)">
                   删除
                 </el-button>
               </template>
@@ -142,7 +143,7 @@
   import Edit from './components/MenuEdit'
 
   export default {
-    name: 'MenuManagement',
+    name: 'Menu',
     components: { Edit },
     data() {
       return {

+ 1 - 1
src/views/system/role/index.vue

@@ -100,7 +100,7 @@
   import Edit from './components/RoleEdit'
 
   export default {
-    name: 'RoleManagement',
+    name: 'Role',
     components: { Edit },
     data() {
       return {

+ 19 - 13
src/views/system/log.vue → src/views/system/systemLog/index.vue

@@ -6,12 +6,14 @@
           :inline="true"
           label-width="60px"
           :model="queryForm"
-          @submit.native.prevent>
+          @submit.native.prevent
+        >
           <el-form-item label="账号">
             <el-input
               v-model.trim="queryForm.account"
               clearable
-              placeholder="请输入账号" />
+              placeholder="请输入账号"
+            />
           </el-form-item>
           <el-form-item label="周期">
             <el-date-picker
@@ -20,7 +22,8 @@
               format="yyyy-MM-dd"
               start-placeholder="开始日期"
               type="daterange"
-              value-format="yyyy-MM-dd" />
+              value-format="yyyy-MM-dd"
+            />
           </el-form-item>
           <el-form-item>
             <el-button icon="el-icon-search" type="primary" @click="queryData">
@@ -31,26 +34,26 @@
       </vab-query-form-top-panel>
     </vab-query-form>
 
-    <el-table
-      v-loading="listLoading"
-      :data="list"
-      :height="$baseTableHeight(1)">
+    <el-table v-loading="listLoading" :data="list">
       <el-table-column
         align="center"
         label="日志类型"
         prop="type"
         show-overflow-tooltip
-        width="230px" />
+        width="230px"
+      />
       <el-table-column
         align="center"
         label="账号"
         prop="account"
-        show-overflow-tooltip />
+        show-overflow-tooltip
+      />
       <el-table-column
         align="center"
         label="执行结果"
         prop="executeResult"
-        show-overflow-tooltip>
+        show-overflow-tooltip
+      >
         <template #default="{ row }">
           <span v-if="row.executeResult === '登录成功'">
             <span class="vab-dot vab-dot-success"><span></span></span>
@@ -67,11 +70,13 @@
         align="center"
         label="访问时间"
         prop="datetime"
-        show-overflow-tooltip />
+        show-overflow-tooltip
+      />
       <template #empty>
         <el-image
           class="vab-data-empty"
-          :src="require('@/assets/empty_images/data_empty.png')" />
+          :src="require('@/assets/empty_images/data_empty.png')"
+        />
       </template>
     </el-table>
     <el-pagination
@@ -81,7 +86,8 @@
       :page-size="queryForm.pageSize"
       :total="total"
       @current-change="handleCurrentChange"
-      @size-change="handleSizeChange" />
+      @size-change="handleSizeChange"
+    />
   </div>
 </template>
 

+ 6 - 6
src/views/system/user/components/UserEdit.vue

@@ -20,12 +20,12 @@
       <el-form-item label="邮箱" prop="email">
         <el-input v-model.trim="form.email" />
       </el-form-item>
-      <el-form-item label="角色" prop="roles">
-        <el-checkbox-group v-model="form.roles">
-          <el-checkbox label="admin" />
-          <el-checkbox label="editor" />
-        </el-checkbox-group>
-      </el-form-item>
+      <!--      <el-form-item label="角色" prop="roles">-->
+      <!--        <el-checkbox-group v-model="form.roles">-->
+      <!--          <el-checkbox label="admin" />-->
+      <!--          <el-checkbox label="editor" />-->
+      <!--        </el-checkbox-group>-->
+      <!--      </el-form-item>-->
     </el-form>
     <template #footer>
       <el-button @click="close">取 消</el-button>

+ 1 - 1
src/views/system/user/index.vue

@@ -120,7 +120,7 @@
   import Edit from './components/UserEdit'
 
   export default {
-    name: 'UserManagement',
+    name: 'User',
     components: { Edit },
     data() {
       return {