Browse Source

feature(系统管理): 参数配置

ZZH-wl 2 years ago
parent
commit
79f2df367a

+ 19 - 23
src/api/system/config.js

@@ -1,25 +1,21 @@
-import request from '@/utils/request'
+import micro_request from '@/utils/micro_request'
 
-export function getList(params) {
-  return request({
-    url: '/config/getList',
-    method: 'get',
-    params,
-  })
-}
-
-export function doEdit(data) {
-  return request({
-    url: '/config/doEdit',
-    method: 'post',
-    data,
-  })
-}
-
-export function doDelete(data) {
-  return request({
-    url: '/config/doDelete',
-    method: 'post',
-    data,
-  })
+const basePath = process.env.VUE_APP_AdminPath
+export default {
+  // 获取列表
+  getList(query) {
+    return micro_request.postRequest(basePath, 'Config', 'GetList', query)
+  },
+  getEntityById(query) {
+    return micro_request.postRequest(basePath, 'Config', 'GetEntityById', query)
+  },
+  doAdd(query) {
+    return micro_request.postRequest(basePath, 'Config', 'Create', query)
+  },
+  doEdit(query) {
+    return micro_request.postRequest(basePath, 'Config', 'UpdateById', query)
+  },
+  doDelete(query) {
+    return micro_request.postRequest(basePath, 'Config', 'DeleteByIds', query)
+  },
 }

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

@@ -34,8 +34,7 @@ const mutations = {
     function handleRoutes(routes) {
       return routes.map((route) => {
         if (route.name === options.name) Object.assign(route.meta, options.meta)
-        if (route.children && route.children.length)
-          route.children = handleRoutes(route.children)
+        if (route.children && route.children.length) route.children = handleRoutes(route.children)
         return route
       })
     }
@@ -75,7 +74,7 @@ const actions = {
     // 设置菜单所需路由
     commit('setRoutes', JSON.parse(JSON.stringify(accessRoutes)))
     // 根据可访问路由重置Vue Router
-    console.log(accessRoutes)
+    // console.log(accessRoutes)
 
     await resetRouter(accessRoutes)
   },

+ 20 - 2
src/utils/index.js

@@ -197,7 +197,7 @@ export function thirteenBitTimestamp(time) {
  * @param length
  * @returns {string}
  */
-export function uuid(length = 32) {
+export function getUUID(length = 32) {
   const num = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
   let str = ''
   for (let i = 0; i < length; i++) {
@@ -278,9 +278,27 @@ export function formatPrice(price, currency = 'CNY') {
 
 // 回显数据字典
 export function selectDictLabel(datas, value) {
+  if (!datas) {
+    return value
+  }
+  var actions = []
+  Object.keys(datas).map((key) => {
+    if (datas[key].key === '' + value) {
+      actions.push(datas[key].value)
+      return false
+    }
+  })
+  return actions.join('')
+}
+
+// 获取字典默认值
+export function getDictDefaultValue(datas) {
+  if (!datas) {
+    return ''
+  }
   var actions = []
   Object.keys(datas).map((key) => {
-    if (datas[key].key == '' + value) {
+    if (datas[key].isDefault === 10) {
       actions.push(datas[key].value)
       return false
     }

+ 40 - 7
src/views/system/config/components/ConfigEdit.vue

@@ -1,8 +1,22 @@
 <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="title">
-        <el-input v-model="form.title" />
+      <el-form-item label="参数名称" prop="configName">
+        <el-input v-model="form.configName" placeholder="请输入参数名称" />
+      </el-form-item>
+      <el-form-item label="参数键名" prop="configKey">
+        <el-input v-model="form.configKey" placeholder="请输入参数键名" />
+      </el-form-item>
+      <el-form-item label="参数键值" prop="configValue">
+        <el-input v-model="form.configValue" placeholder="请输入参数键值" />
+      </el-form-item>
+      <el-form-item label="系统内置" prop="configType">
+        <el-radio-group v-model="form.configType">
+          <el-radio v-for="dict in typeOptions" :key="dict.key" :label="dict.key">{{ dict.value }}</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>
     <div slot="footer" class="dialog-footer">
@@ -13,24 +27,32 @@
 </template>
 
 <script>
-  import { doEdit } from '@/api/system/config'
+  import configApi from '@/api/system/config'
 
   export default {
     name: 'ConfigEdit',
     data() {
       return {
         form: {
-          title: '',
+          configType: '20',
         },
         rules: {
-          title: [{ required: true, trigger: 'blur', message: '请输入标题' }],
+          configName: [{ required: true, message: '参数名称不能为空', trigger: 'blur' }],
+          configKey: [{ required: true, message: '参数键名不能为空', trigger: 'blur' }],
+          configValue: [{ required: true, message: '参数键值不能为空', trigger: 'blur' }],
         },
         title: '',
         dialogFormVisible: false,
+        typeOptions: [],
       }
     },
     created() {},
     methods: {
+      getBaseInfo() {
+        this.getDicts('sys_yes_no').then((response) => {
+          this.typeOptions = response.data.values || []
+        })
+      },
       showEdit(row) {
         if (!row) {
           this.title = '添加'
@@ -39,6 +61,12 @@
           this.form = Object.assign({}, row)
         }
         this.dialogFormVisible = true
+        if (this.$parent.typeOptions) {
+          this.typeOptions = this.$parent.typeOptions
+        }
+        if (!this.typeOptions) {
+          this.getBaseInfo()
+        }
       },
       close() {
         this.$refs['form'].resetFields()
@@ -48,8 +76,13 @@
       save() {
         this.$refs['form'].validate(async (valid) => {
           if (valid) {
-            const { msg } = await doEdit(this.form)
-            this.$baseMessage(msg, 'success')
+            let data
+            if (this.form.id) {
+              data = await configApi.doEdit(this.form)
+            } else {
+              data = await configApi.doAdd(this.form)
+            }
+            this.$baseMessage(data.msg, 'success')
             this.$emit('fetch-data')
             this.close()
           } else {

+ 69 - 57
src/views/system/config/index.vue

@@ -1,32 +1,48 @@
 <template>
   <div class="config-container">
     <vab-query-form>
+      <vab-query-form-top-panel>
+        <el-form ref="queryForm" :inline="true" :model="queryForm" @submit.native.prevent>
+          <el-form-item label="参数名称" prop="configName">
+            <el-input
+              v-model="queryForm.configName"
+              clearable
+              placeholder="请输入参数名称"
+              size="small"
+              @keyup.enter.native="queryData" />
+          </el-form-item>
+          <el-form-item label="参数键名" prop="configKey">
+            <el-input
+              v-model="queryForm.configKey"
+              clearable
+              placeholder="请输入参数键名"
+              size="small"
+              @keyup.enter.native="queryData" />
+          </el-form-item>
+          <el-form-item label="系统内置" prop="configType">
+            <el-select v-model="queryForm.configType" clearable placeholder="系统内置" size="small">
+              <el-option v-for="dict in typeOptions.values" :key="dict.key" :label="dict.value" :value="dict.key" />
+            </el-select>
+          </el-form-item>
+
+          <el-form-item>
+            <el-button icon="el-icon-search" type="primary" @click="queryData">查询</el-button>
+            <el-button icon="el-icon-refresh" type="primary" @click="resetQuery">重置</el-button>
+          </el-form-item>
+        </el-form>
+      </vab-query-form-top-panel>
       <vab-query-form-left-panel :span="12">
         <el-button icon="el-icon-plus" type="primary" @click="handleEdit">添加</el-button>
-        <el-button icon="el-icon-delete" type="danger" @click="handleDelete">批量删除</el-button>
+        <el-button icon="el-icon-delete" type="danger" @click="handleDelete">删除</el-button>
       </vab-query-form-left-panel>
       <vab-query-form-right-panel :span="12">
-        <el-popover popper-class="custom-table-checkbox" trigger="hover">
-          <el-checkbox-group v-model="checkList">
-            <vab-draggable v-bind="dragOptions" :list="columns">
-              <div v-for="(item, index) in columns" :key="item + index">
-                <vab-icon icon="drag-drop-line" />
-                <el-checkbox :disabled="item.disableCheck === true" :label="item.label" />
-              </div>
-            </vab-draggable>
-          </el-checkbox-group>
-          <template #reference>
-            <el-button icon="el-icon-setting" style="margin: 0 0 10px 0 !important" type="primary">
-              可拖拽列设置
-            </el-button>
-          </template>
-        </el-popover>
+        <table-tool :check-list.sync="checkList" :columns="columns" />
       </vab-query-form-right-panel>
     </vab-query-form>
 
     <el-table
+      :key="uuid"
       v-loading="listLoading"
-      border
       :data="list"
       :height="$baseTableHeight(1)"
       @selection-change="setSelectRows">
@@ -35,6 +51,7 @@
         v-for="(item, index) in finallyColumns"
         :key="index"
         align="center"
+        :formatter="item.formatter"
         :label="item.label"
         :prop="item.prop"
         :sortable="item.sortable"
@@ -60,63 +77,49 @@
 </template>
 
 <script>
-  import { getList, doDelete } from '@/api/system/config'
+  import configApi from '@/api/system/config'
   import Edit from './components/ConfigEdit'
-  import VabDraggable from 'vuedraggable'
+  import TableTool from '@/components/table/TableTool'
+  import { getUUID } from '@/utils'
 
   export default {
     name: 'Config',
-    components: { Edit, VabDraggable },
+    components: { Edit, TableTool },
     data() {
       return {
+        uuid: '',
         checkList: [],
         columns: [
           {
             prop: 'id',
             label: '参数主键',
-            type: 'int',
             width: 'auto',
           },
           {
-            prop: 'config_name',
+            prop: 'configName',
             label: '参数名称',
-            type: 'varchar',
             width: 'auto',
+            disableCheck: true,
           },
           {
-            prop: 'config_key',
+            prop: 'configKey',
             label: '参数键名',
-            type: 'varchar',
             width: 'auto',
           },
           {
-            prop: 'config_value',
+            prop: 'configValue',
             label: '参数键值',
-            type: 'varchar',
             width: 'auto',
           },
           {
-            prop: 'config_type',
+            prop: 'configType',
             label: '系统内置',
-            type: 'varchar',
             width: 'auto',
+            formatter: this.typeFormat,
           },
           {
             prop: 'remark',
             label: '备注',
-            type: 'text',
-            width: 'auto',
-          },
-          {
-            prop: 'created_name',
-            label: '创建人',
-            type: 'varchar',
-            width: 'auto',
-          },
-          {
-            prop: 'created_time',
-            label: '创建时间',
-            type: 'datetime',
             width: 'auto',
           },
         ],
@@ -128,28 +131,32 @@
         queryForm: {
           pageNum: 1,
           pageSize: 10,
-          title: '',
+          configName: '',
+          configKey: '',
+          configType: '',
         },
+        typeOptions: [],
       }
     },
     computed: {
-      dragOptions() {
-        return {
-          animation: 600,
-          group: 'description',
-        }
-      },
       finallyColumns() {
         return this.columns.filter((item) => this.checkList.includes(item.label))
       },
     },
     created() {
-      for (const elem of this.columns) {
-        this.checkList.push(elem.label)
-      }
-      // this.fetchData()
+      this.getDicts('sys_yes_no').then((response) => {
+        this.typeOptions = response.data.values || []
+        this.uuid = getUUID()
+      })
+    },
+    mounted() {
+      this.fetchData()
     },
     methods: {
+      // 参数系统内置字典翻译
+      typeFormat(row) {
+        return this.selectDictLabel(this.typeOptions, row.configType)
+      },
       setSelectRows(val) {
         this.selectRows = val
       },
@@ -163,15 +170,15 @@
       handleDelete(row) {
         if (row.id) {
           this.$baseConfirm('你确定要删除当前项吗', null, async () => {
-            const { msg } = await doDelete({ ids: row.id })
+            const { msg } = await configApi.doDelete({ ids: [row.id] })
             this.$baseMessage(msg, 'success')
             await this.fetchData()
           })
         } else {
           if (this.selectRows.length > 0) {
-            const ids = this.selectRows.map((item) => item.id).join()
+            const ids = this.selectRows.map((item) => item.id)
             this.$baseConfirm('你确定要删除选中项吗', null, async () => {
-              const { msg } = await doDelete({ ids })
+              const { msg } = await configApi.doDelete({ ids })
               this.$baseMessage(msg, 'success')
               await this.fetchData()
             })
@@ -193,9 +200,14 @@
         this.queryForm.pageNum = 1
         this.fetchData()
       },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm('queryForm')
+        this.fetchData()
+      },
       async fetchData() {
         this.listLoading = true
-        const { data } = await getList(this.queryForm)
+        const { data } = await configApi.getList(this.queryForm)
         const { list, total } = data
         this.list = list
         this.total = total

+ 8 - 1
src/views/system/loginLog/index.vue

@@ -2,7 +2,7 @@
   <div class="login-log-container">
     <vab-query-form>
       <vab-query-form-top-panel>
-        <el-form :inline="true" :model="queryForm" @submit.native.prevent>
+        <el-form ref="queryForm" :inline="true" :model="queryForm" @submit.native.prevent>
           <el-form-item prop="ipaddr">
             <el-input
               v-model="queryForm.ipaddr"
@@ -37,6 +37,8 @@
 
           <el-form-item>
             <el-button icon="el-icon-search" type="primary" @click="queryData">查询</el-button>
+            <el-button icon="el-icon-refresh" type="primary" @click="resetQuery">重置</el-button>
+
             <!--            <el-button type="text" @click="handleFold">-->
             <!--              <span v-if="fold">展开</span>-->
             <!--              <span v-else>合并</span>-->
@@ -215,6 +217,11 @@
         this.queryForm.pageNum = 1
         this.fetchData()
       },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm('queryForm')
+        this.fetchData()
+      },
       async fetchData() {
         this.listLoading = true
         const { data } = await loginLogApi.getList(this.queryForm)