Sfoglia il codice sorgente

publish 🚀 1.2.2版本发布

1. admin 角色权限调整默认全部权限
1. 优化内容分类管理
1. 系统登录日志和操作日志代码优化
1. 性能指标、健康检查、default log配置生效
1. 日志全部改为go-admin-core库日志,去除对其他项目的依赖
1. 去除pkg/auth对tools依赖,减少循环引用可能性
1. 增加链路追踪,熟悉的朋友可以将go-admin作为微服务的网关使用😄
1. 代码优化
1. 部分已知bug修复
wenjianzhang 5 anni fa
parent
commit
5770da42d4

+ 8 - 7
src/api/syscategory.js

@@ -3,16 +3,16 @@ import request from '@/utils/request'
 // 查询SysCategory列表
 export function listSysCategory(query) {
   return request({
-    url: '/api/v1/syscategoryList',
+    url: '/api/v1/syscategory',
     method: 'get',
     params: query
   })
 }
 
 // 查询SysCategory详细
-export function getSysCategory(id) {
+export function getSysCategory(ID) {
   return request({
-    url: '/api/v1/syscategory/' + id,
+    url: '/api/v1/syscategory/' + ID,
     method: 'get'
   })
 }
@@ -29,17 +29,18 @@ export function addSysCategory(data) {
 // 修改SysCategory
 export function updateSysCategory(data) {
   return request({
-    url: '/api/v1/syscategory',
+    url: '/api/v1/syscategory/' + data.ID,
     method: 'put',
     data: data
   })
 }
 
 // 删除SysCategory
-export function delSysCategory(id) {
+export function delSysCategory(data) {
   return request({
-    url: '/api/v1/syscategory/' + id,
-    method: 'delete'
+    url: '/api/v1/syscategory/',
+    method: 'delete',
+    data: data
   })
 }
 

+ 0 - 35
src/api/system/loginlog.js

@@ -1,35 +0,0 @@
-import request from '@/utils/request'
-
-// 查询登录日志列表
-export function list(query) {
-  return request({
-    url: '/api/v1/loginloglist',
-    method: 'get',
-    params: query
-  })
-}
-
-// 删除登录日志
-export function delLogininfor(infoId) {
-  return request({
-    url: '/api/v1/loginlog/' + infoId,
-    method: 'delete'
-  })
-}
-
-// 清空登录日志
-export function cleanLogininfor() {
-  return request({
-    url: '/api/v1/loginlog/clean',
-    method: 'delete'
-  })
-}
-
-// 导出登录日志
-export function exportLogininfor(query) {
-  return request({
-    url: '/api/v1/loginlog/export',
-    method: 'get',
-    params: query
-  })
-}

+ 0 - 35
src/api/system/operlog.js

@@ -1,35 +0,0 @@
-import request from '@/utils/request'
-
-// 查询操作日志列表
-export function list(query) {
-  return request({
-    url: '/api/v1/operloglist',
-    method: 'get',
-    params: query
-  })
-}
-
-// 删除操作日志
-export function delOperlog(operId) {
-  return request({
-    url: '/api/v1/operlog/' + operId,
-    method: 'delete'
-  })
-}
-
-// 清空操作日志
-export function cleanOperlog() {
-  return request({
-    url: '/api/v1/operlog/clean',
-    method: 'delete'
-  })
-}
-
-// 导出操作日志
-export function exportOperlog(query) {
-  return request({
-    url: '/api/v1/operlog/export',
-    method: 'get',
-    params: query
-  })
-}

+ 28 - 0
src/api/system/sys-login-log.js

@@ -0,0 +1,28 @@
+import request from '@/utils/request'
+
+// 查询SysLoginlog列表
+export function listSysLoginlog(query) {
+  return request({
+    url: '/api/v1/sys-login-log',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询SysLoginlog详细
+export function getSysLoginlog(ID) {
+  return request({
+    url: '/api/v1/sys-login-log/' + ID,
+    method: 'get'
+  })
+}
+
+// 删除SysLoginlog
+export function delSysLoginlog(data) {
+  return request({
+    url: '/api/v1/sys-login-log',
+    method: 'delete',
+    data: data
+  })
+}
+

+ 28 - 0
src/api/system/sys-opera-log.js

@@ -0,0 +1,28 @@
+import request from '@/utils/request'
+
+// 清空操作日志
+export function cleanOperlog() {
+  return request({
+    url: '/api/v1/operlog/clean',
+    method: 'delete'
+  })
+}
+
+// 查询SysOperlog列表
+export function listSysOperlog(query) {
+  return request({
+    url: '/api/v1/sys-opera-log',
+    method: 'get',
+    params: query
+  })
+}
+
+// 删除SysOperlog
+export function delSysOperlog(data) {
+  return request({
+    url: '/api/v1/sys-opera-log',
+    method: 'delete',
+    data: data
+  })
+}
+

+ 5 - 8
src/components/FileManage/Left.vue

@@ -19,10 +19,7 @@
             <span>
               <i
                 v-show="node.childNodes.length > 0"
-                class="icon"
-                :class="
-                  node.expanded ? 'el-icon-folder-opened' : 'el-icon-folder'
-                "
+                :class="node.expanded ? 'el-icon-folder-opened icon' : 'el-icon-folder icon'"
               />
               <span v-if="rename.status && rename.node.id === data.id">
                 <input
@@ -56,7 +53,7 @@
         @mouseleave="handleTagsLeave(0)"
       >
         <i class="el-icon-folder-add" />
-        <span> 创建目录</span>
+        <span>创建目录</span>
       </div>
       <el-divider />
       <div
@@ -66,7 +63,7 @@
         @mouseleave="handleTagsLeave(1)"
       >
         <i class="el-icon-upload2" />
-        <span> 上传</span>
+        <span>上传</span>
       </div>
       <el-divider />
       <div
@@ -76,7 +73,7 @@
         @mouseleave="handleTagsLeave(2)"
       >
         <i class="el-icon-edit" />
-        <span> 重命名</span>
+        <span>重命名</span>
       </div>
       <el-divider />
       <div
@@ -86,7 +83,7 @@
         @mouseleave="handleTagsLeave(3)"
       >
         <i class="el-icon-folder-delete" />
-        <span> 删除</span>
+        <span>删除</span>
       </div>
     </div>
     <upload-dialog

+ 3 - 0
src/components/richtext.vue

@@ -21,6 +21,9 @@
 <script>
 // 引入富文本编辑器
 import { quillEditor } from 'vue-quill-editor'
+import 'quill/dist/quill.core.css'
+import 'quill/dist/quill.snow.css'
+import 'quill/dist/quill.bubble.css'
 export default {
   name: 'Richtext',
   components: {

+ 211 - 120
src/views/loginlog/index.vue

@@ -1,43 +1,38 @@
+
 <template>
   <BasicLayout>
     <template #wrapper>
       <el-card class="box-card">
         <el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
-          <el-form-item label="登录地址" prop="ipaddr">
-            <el-input
-              v-model="queryParams.ipaddr"
-              placeholder="请输入登录地址"
-              clearable
-              style="width: 240px;"
-              size="small"
-              @keyup.enter.native="handleQuery"
-            />
+          <el-form-item label="用户名" prop="username"><el-input
+            v-model="queryParams.username"
+            placeholder="请输入用户名"
+            clearable
+            size="small"
+            @keyup.enter.native="handleQuery"
+          />
           </el-form-item>
-          <el-form-item label="用户名称" prop="userName">
-            <el-input
-              v-model="queryParams.userName"
-              placeholder="请输入用户名称"
-              clearable
-              style="width: 240px;"
-              size="small"
-              @keyup.enter.native="handleQuery"
+          <el-form-item label="状态" prop="status"><el-select
+            v-model="queryParams.status"
+            placeholder="系统登录日志状态"
+            clearable
+            size="small"
+          >
+            <el-option
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictLabel"
+              :value="dict.dictValue"
             />
+          </el-select>
           </el-form-item>
-          <el-form-item label="状态" prop="status">
-            <el-select
-              v-model="queryParams.status"
-              placeholder="登录状态"
-              clearable
-              size="small"
-              style="width: 240px"
-            >
-              <el-option
-                v-for="dict in statusOptions"
-                :key="dict.dictValue"
-                :label="dict.dictLabel"
-                :value="dict.dictValue"
-              />
-            </el-select>
+          <el-form-item label="ip地址" prop="ipaddr"><el-input
+            v-model="queryParams.ipaddr"
+            placeholder="请输入ip地址"
+            clearable
+            size="small"
+            @keyup.enter.native="handleQuery"
+          />
           </el-form-item>
 
           <el-form-item>
@@ -49,49 +44,88 @@
         <el-row :gutter="10" class="mb8">
           <el-col :span="1.5">
             <el-button
-              v-permisaction="['system:sysloginlog:remove']"
+              v-permisaction="['admin:sysloginlog:remove']"
               type="danger"
               icon="el-icon-delete"
               size="mini"
               :disabled="multiple"
               @click="handleDelete"
-            >删除</el-button>
-          </el-col>
-          <el-col :span="1.5">
-            <el-button
-              v-permisaction="['system:sysloginlog:remove']"
-              type="danger"
-              icon="el-icon-delete"
-              size="mini"
-              @click="handleClean"
-            >清空</el-button>
-          </el-col>
-          <el-col :span="1.5">
-            <el-button
-              v-permisaction="['system:sysloginlog:export']"
-              type="warning"
-              icon="el-icon-download"
-              size="mini"
-              @click="handleExport"
-            >导出</el-button>
+            >删除
+            </el-button>
           </el-col>
         </el-row>
 
-        <el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange">
+        <el-table v-loading="loading" :data="sysloginlogList" @selection-change="handleSelectionChange">
           <el-table-column type="selection" width="55" align="center" />
-          <el-table-column label="编号" width="70" align="center" prop="infoId" />
-          <el-table-column label="用户名称" width="85" align="center" prop="username" />
-          <el-table-column label="登录地址" align="center" prop="ipaddr" width="130" :show-overflow-tooltip="true" />
-          <el-table-column label="登录地点" align="center" prop="loginLocation" />
-          <el-table-column label="浏览器" align="center" prop="browser" />
-          <el-table-column label="操作系统" align="center" prop="os" />
-          <el-table-column label="登录状态" width="80" align="center" prop="status" :formatter="statusFormat" />
-          <el-table-column label="操作信息" width="90" align="center" prop="msg" />
-          <el-table-column label="登录日期" align="center" prop="loginTime" width="180">
+          <el-table-column
+            label="用户名"
+            align="center"
+            prop="username"
+            :show-overflow-tooltip="true"
+          />
+          <el-table-column
+            label="状态"
+            align="center"
+            prop="status"
+            :formatter="statusFormat"
+            width="100"
+          >
+            <template slot-scope="scope">
+              {{ statusFormat(scope.row) }}
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="ip地址"
+            align="center"
+            prop="ipaddr"
+            :show-overflow-tooltip="true"
+          />
+          <el-table-column
+            label="归属地"
+            align="center"
+            prop="loginLocation"
+            :show-overflow-tooltip="true"
+          />
+          <el-table-column
+            label="浏览器"
+            align="center"
+            prop="browser"
+            :show-overflow-tooltip="true"
+          />
+          <el-table-column
+            label="系统"
+            align="center"
+            prop="os"
+            :show-overflow-tooltip="true"
+          />
+          <el-table-column
+            label="固件"
+            align="center"
+            prop="platform"
+            :show-overflow-tooltip="true"
+          />
+          <el-table-column
+            label="登录时间"
+            align="center"
+            prop="loginTime"
+            width="180"
+          >
             <template slot-scope="scope">
               <span>{{ parseTime(scope.row.loginTime) }}</span>
             </template>
           </el-table-column>
+          <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+            <template slot-scope="scope">
+              <el-button
+                v-permisaction="['admin:sysloginlog:remove']"
+                size="mini"
+                type="text"
+                icon="el-icon-delete"
+                @click="handleDelete(scope.row)"
+              >删除
+              </el-button>
+            </template>
+          </el-table-column>
         </el-table>
 
         <pagination
@@ -107,34 +141,51 @@
 </template>
 
 <script>
-import { list, delLogininfor, cleanLogininfor } from '@/api/system/loginlog'
-import { formatJson } from '@/utils'
+import { delSysLoginlog, getSysLoginlog, listSysLoginlog } from '@/api/system/sys-login-log'
 
 export default {
-  name: 'Logininfor',
+  name: 'SysLoginlog',
+  components: {
+  },
   data() {
     return {
       // 遮罩层
       loading: true,
       // 选中数组
       ids: [],
+      // 非单个禁用
+      single: true,
       // 非多个禁用
       multiple: true,
       // 总条数
       total: 0,
-      // 表格数据
-      list: [],
-      // 状态数据字典
+      // 弹出层标题
+      title: '',
+      // 是否显示弹出层
+      open: false,
+      isEdit: false,
+      fileOpen: false,
+      fileIndex: undefined,
+      // 类型数据字典
+      typeOptions: [],
+      sysloginlogList: [],
       statusOptions: [],
-      // 日期范围
-      dateRange: [],
+      // 关系表类型
+
       // 查询参数
       queryParams: {
         pageIndex: 1,
         pageSize: 10,
+        username: undefined,
+        status: undefined,
         ipaddr: undefined,
-        userName: undefined,
-        status: undefined
+        loginLocation: undefined
+      },
+      // 表单参数
+      form: {
+      },
+      // 表单校验
+      rules: {
       }
     }
   },
@@ -145,20 +196,49 @@ export default {
     })
   },
   methods: {
-    /** 查询登录日志列表 */
+    /** 查询参数列表 */
     getList() {
       this.loading = true
-      list(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
-        this.list = response.data.list
+      listSysLoginlog(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+        this.sysloginlogList = response.data.list
         this.total = response.data.count
         this.loading = false
       }
       )
     },
-    // 登录状态字典翻译
-    statusFormat(row, column) {
+    // 取消按钮
+    cancel() {
+      this.open = false
+      this.reset()
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        ID: undefined,
+        username: undefined,
+        status: undefined,
+        ipaddr: undefined,
+        loginLocation: undefined,
+        browser: undefined,
+        os: undefined,
+        platform: undefined,
+        loginTime: undefined,
+        remark: undefined,
+        msg: undefined
+      }
+      this.resetForm('form')
+    },
+    getImgList: function() {
+      this.form[this.fileIndex] = this.$refs['fileChoose'].resultList[0].fullUrl
+    },
+    fileClose: function() {
+      this.fileOpen = false
+    },
+    statusFormat(row) {
       return this.selectDictLabel(this.statusOptions, row.status)
     },
+    // 关系
+    // 文件
     /** 搜索按钮操作 */
     handleQuery() {
       this.queryParams.pageIndex = 1
@@ -170,64 +250,75 @@ export default {
       this.resetForm('queryForm')
       this.handleQuery()
     },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset()
+      this.open = true
+      this.title = '添加系统登录日志'
+      this.isEdit = false
+    },
     // 多选框选中数据
     handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.infoId)
+      this.ids = selection.map(item => item.ID)
+      this.single = selection.length !== 1
       this.multiple = !selection.length
     },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset()
+      const ID =
+                row.ID || this.ids
+      getSysLoginlog(ID).then(response => {
+        this.form = response.data
+        this.open = true
+        this.title = '修改系统登录日志'
+        this.isEdit = true
+      })
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs['form'].validate(valid => {
+        if (valid) {
+          if (this.form.ID !== undefined) {
+            updateSysLoginlog(this.form).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess('修改成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          } else {
+            addSysLoginlog(this.form).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess('新增成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          }
+        }
+      })
+    },
     /** 删除按钮操作 */
     handleDelete(row) {
-      const infoIds = row.infoId || this.ids
-      this.$confirm('是否确认删除访问编号为"' + infoIds + '"的数据项?', '警告', {
+      var Ids = (row.ID && [row.ID]) || this.ids
+
+      this.$confirm('是否确认删除编号为"' + Ids + '"的数据项?', '警告', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning'
       }).then(function() {
-        return delLogininfor(infoIds)
+        return delSysLoginlog({ 'ids': Ids })
       }).then(() => {
         this.getList()
         this.msgSuccess('删除成功')
-      }).catch(function() {})
-    },
-    /** 清空按钮操作 */
-    handleClean() {
-      this.$confirm('是否确认清空所有登录日志数据项?', '警告', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(function() {
-        return cleanLogininfor()
-      }).then(() => {
-        this.getList()
-        this.msgSuccess('清空成功')
-      }).catch(function() {})
-    },
-    /** 导出按钮操作 */
-    handleExport() {
-      // const queryParams = this.queryParams
-      this.$confirm('是否确认导出所有操作日志数据项?', '警告', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        this.downloadLoading = true
-        import('@/vendor/Export2Excel').then(excel => {
-          const tHeader = ['编号', '用户名称', '登陆地址', '登陆地点', '浏览器', '操作系统', '登陆状态', '操作信息', '登陆日期']
-          const filterVal = ['infoId', 'username', 'ipaddr', 'loginLocation', 'browser', 'os', 'status', 'msg', 'loginTime']
-          const list = this.list
-          const data = formatJson(filterVal, list)
-          excel.export_json_to_excel({
-            header: tHeader,
-            data,
-            filename: '登陆日志',
-            autoWidth: true, // Optional
-            bookType: 'xlsx' // Optional
-          })
-          this.downloadLoading = false
-        })
+      }).catch(function() {
       })
     }
   }
 }
 </script>
-

+ 12 - 31
src/views/operlog/index.vue

@@ -13,16 +13,6 @@
               @keyup.enter.native="handleQuery"
             />
           </el-form-item>
-          <el-form-item label="操作人员" prop="operName">
-            <el-input
-              v-model="queryParams.operName"
-              placeholder="请输入操作人员"
-              clearable
-              style="width: 240px;"
-              size="small"
-              @keyup.enter.native="handleQuery"
-            />
-          </el-form-item>
           <el-form-item label="类型" prop="businessType">
             <el-select
               v-model="queryParams.businessType"
@@ -72,15 +62,6 @@
               @click="handleDelete"
             >删除</el-button>
           </el-col>
-          <el-col :span="1.5">
-            <el-button
-              v-permisaction="['system:sysoperlog:remove']"
-              type="danger"
-              icon="el-icon-delete"
-              size="mini"
-              @click="handleClean"
-            >清空</el-button>
-          </el-col>
           <el-col :span="1.5">
             <el-button
               v-permisaction="['system:sysoperlog:export']"
@@ -94,14 +75,14 @@
 
         <el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange">
           <el-table-column type="selection" width="55" align="center" />
-          <el-table-column label="日志编号" width="80" align="center" prop="operId" />
-          <el-table-column label="系统模块" align="center" prop="title" />
-          <el-table-column label="操作类型" width="80" align="center" prop="businessType" :formatter="typeFormat" />
-          <el-table-column label="请求方式" width="80" align="center" prop="requestMethod" />
-          <el-table-column label="操作人员" align="center" prop="operName" />
+          <el-table-column label="日志编号" width="80" align="center" prop="ID" />
+          <el-table-column label="系统模块" align="center" prop="title" :show-overflow-tooltip="true" />
+          <el-table-column label="操作类型" width="80" align="center" prop="businessType" :formatter="typeFormat" :show-overflow-tooltip="true" />
+          <el-table-column label="请求方式" width="80" align="center" prop="requestMethod" :show-overflow-tooltip="true" />
+          <el-table-column label="操作人员" align="center" prop="operName" :show-overflow-tooltip="true" />
           <el-table-column label="主机" align="center" prop="operIp" width="130" :show-overflow-tooltip="true" />
-          <el-table-column label="操作地点" align="center" prop="operLocation" />
-          <el-table-column label="操作状态" align="center" prop="status" :formatter="statusFormat" />
+          <el-table-column label="操作地点" align="center" prop="operLocation" :show-overflow-tooltip="true" />
+          <el-table-column label="操作状态" align="center" prop="status" :formatter="statusFormat" :show-overflow-tooltip="true" />
           <el-table-column label="操作日期" align="center" prop="operTime" width="180">
             <template slot-scope="scope">
               <span>{{ parseTime(scope.row.operTime) }}</span>
@@ -178,7 +159,7 @@
 </template>
 
 <script>
-import { list, delOperlog, cleanOperlog } from '@/api/system/operlog'
+import { listSysOperlog, delSysOperlog, cleanOperlog } from '@/api/system/sys-opera-log'
 import { formatJson } from '@/utils'
 
 export default {
@@ -229,7 +210,7 @@ export default {
     /** 查询登录日志 */
     getList() {
       this.loading = true
-      list(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+      listSysOperlog(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
         this.list = response.data.list
         this.total = response.data.count
         this.loading = false
@@ -267,13 +248,13 @@ export default {
     },
     /** 删除按钮操作 */
     handleDelete(row) {
-      const operIds = row.operId || this.ids
+      const operIds = row.ID || this.ids
       this.$confirm('是否确认删除日志编号为"' + operIds + '"的数据项?', '警告', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning'
       }).then(function() {
-        return delOperlog(operIds)
+        return delSysOperlog(operIds)
       }).then(() => {
         this.getList()
         this.msgSuccess('删除成功')
@@ -303,7 +284,7 @@ export default {
         this.downloadLoading = true
         import('@/vendor/Export2Excel').then(excel => {
           const tHeader = ['日志编号', '系统模块', '操作类型', '请求方式', '操作人员', '主机', '操作地点', '操作状态', '操作url', '操作日期']
-          const filterVal = ['operId', 'title', 'businessType', 'method', 'operName', 'operIp', 'operLocation', 'status', 'operUrl', 'operTime']
+          const filterVal = ['ID', 'title', 'businessType', 'method', 'operName', 'operIp', 'operLocation', 'status', 'operUrl', 'operTime']
           const list = this.list
           const data = formatJson(filterVal, list)
           excel.export_json_to_excel({

+ 15 - 8
src/views/role/index.vue

@@ -136,6 +136,7 @@
                 @click="handleDataScope(scope.row)"
               >数据权限</el-button>
               <el-button
+                v-if="scope.row.roleKey!=='admin'"
                 v-permisaction="['system:sysrole:remove']"
                 size="mini"
                 type="text"
@@ -181,7 +182,7 @@
                 :data="menuOptions"
                 show-checkbox
                 node-key="id"
-                empty-text="加载中,请稍后"
+                :empty-text="menuOptionsAlert"
                 :props="defaultProps"
               />
             </el-form-item>
@@ -299,6 +300,7 @@ export default {
       menuOptions: [],
       // 部门列表
       deptOptions: [],
+      menuOptionsAlert: '加载中,请稍后',
       // 查询参数
       queryParams: {
         pageIndex: 1,
@@ -376,13 +378,18 @@ export default {
       return checkedKeys
     },
     /** 根据角色ID查询菜单树结构 */
-    getRoleMenuTreeselect(roleId) {
-      roleMenuTreeselect(roleId).then(response => {
-        this.menuOptions = response.menus
-        this.$nextTick(() => {
-          this.$refs.menu.setCheckedKeys(response.checkedKeys)
+    getRoleMenuTreeselect(row) {
+      if (row.roleKey === 'admin') {
+        this.menuOptionsAlert = '系统超级管理员无需此操作'
+        this.menuOptions = []
+      } else {
+        roleMenuTreeselect(row.roleId).then(response => {
+          this.menuOptions = response.menus
+          this.$nextTick(() => {
+            this.$refs.menu.setCheckedKeys(response.checkedKeys)
+          })
         })
-      })
+      }
     },
     /** 根据角色ID查询部门树结构 */
     getRoleDeptTreeselect(roleId) {
@@ -469,7 +476,7 @@ export default {
         this.open = true
         this.title = '修改角色'
         this.isEdit = true
-        this.getRoleMenuTreeselect(roleId)
+        this.getRoleMenuTreeselect(row)
       })
     },
     /** 分配数据权限操作 */

+ 65 - 57
src/views/syscategory/index.vue

@@ -4,19 +4,18 @@
     <template #wrapper>
       <el-card class="box-card">
         <el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
-          <el-form-item label="名称" prop="name">
-            <el-input
-              v-model="queryParams.name"
-              placeholder="请输入名称"
-              clearable
-              size="small"
-              @keyup.enter.native="handleQuery"
-            />
+          <el-form-item label="名称" prop="name"><el-input
+            v-model="queryParams.name"
+            placeholder="请输入名称"
+            clearable
+            size="small"
+            @keyup.enter.native="handleQuery"
+          />
           </el-form-item>
           <el-form-item label="状态" prop="status">
             <el-select
               v-model="queryParams.status"
-              placeholder="分类状态"
+              placeholder="分类管理状态"
               clearable
               size="small"
             >
@@ -38,7 +37,7 @@
         <el-row :gutter="10" class="mb8">
           <el-col :span="1.5">
             <el-button
-              v-permisaction="['syscategory:syscategory:add']"
+              v-permisaction="['admin:cms:add']"
               type="primary"
               icon="el-icon-plus"
               size="mini"
@@ -48,7 +47,7 @@
           </el-col>
           <el-col :span="1.5">
             <el-button
-              v-permisaction="['syscategory:syscategory:edit']"
+              v-permisaction="['admin:cms:edit']"
               type="success"
               icon="el-icon-edit"
               size="mini"
@@ -59,7 +58,7 @@
           </el-col>
           <el-col :span="1.5">
             <el-button
-              v-permisaction="['syscategory:syscategory:remove']"
+              v-permisaction="['admin:cms:remove']"
               type="danger"
               icon="el-icon-delete"
               size="mini"
@@ -70,7 +69,7 @@
           </el-col>
         </el-row>
 
-        <el-table v-loading="loading" :data="syscategoryList" @selection-change="handleSelectionChange">
+        <el-table v-loading="loading" :data="cmsList" @selection-change="handleSelectionChange">
           <el-table-column type="selection" width="55" align="center" /><el-table-column
             label="名称"
             align="center"
@@ -91,16 +90,20 @@
             <template slot-scope="scope">
               {{ statusFormat(scope.row) }}
             </template>
-          </el-table-column><el-table-column
+          </el-table-column>
+          <el-table-column
             label="创建时间"
             align="center"
-            prop="createdAt"
-            :show-overflow-tooltip="true"
-          />
+            prop="CreatedAt"
+          >
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.CreatedAt) }}</span>
+            </template>
+          </el-table-column>
           <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
             <template slot-scope="scope">
               <el-button
-                v-permisaction="['syscategory:syscategory:edit']"
+                v-permisaction="['admin:cms:edit']"
                 size="mini"
                 type="text"
                 icon="el-icon-edit"
@@ -108,7 +111,7 @@
               >修改
               </el-button>
               <el-button
-                v-permisaction="['syscategory:syscategory:remove']"
+                v-permisaction="['admin:cms:remove']"
                 size="mini"
                 type="text"
                 icon="el-icon-delete"
@@ -137,10 +140,10 @@
                 placeholder="名称"
               />
             </el-form-item>
-            <el-form-item label="图" prop="img">
+            <el-form-item label="图" prop="img">
               <el-input
                 v-model="form.img"
-                placeholder="图"
+                placeholder="图"
               />
             </el-form-item>
             <el-form-item label="排序" prop="sort">
@@ -150,17 +153,13 @@
               />
             </el-form-item>
             <el-form-item label="状态" prop="status">
-              <el-select
-                v-model="form.status"
-                placeholder="请选择"
-              >
-                <el-option
+              <el-radio-group v-model="form.status">
+                <el-radio
                   v-for="dict in statusOptions"
                   :key="dict.dictValue"
-                  :label="dict.dictLabel"
-                  :value="dict.dictValue"
-                />
-              </el-select>
+                  :label="dict.dictValue"
+                >{{ dict.dictLabel }}</el-radio>
+              </el-radio-group>
             </el-form-item>
             <el-form-item label="备注" prop="remark">
               <el-input
@@ -174,6 +173,7 @@
             <el-button @click="cancel">取 消</el-button>
           </div>
         </el-dialog>
+        <FileChoose ref="fileChoose" :dialog-form-visible="fileOpen" @confirm="getImgList" @close="fileClose" />
       </el-card>
     </template>
   </BasicLayout>
@@ -181,9 +181,13 @@
 
 <script>
 import { addSysCategory, delSysCategory, getSysCategory, listSysCategory, updateSysCategory } from '@/api/syscategory'
+import FileChoose from '@/components/FileChoose'
 
 export default {
-  name: 'Config',
+  name: 'SysCategory',
+  components: {
+    FileChoose
+  },
   data() {
     return {
       // 遮罩层
@@ -201,38 +205,35 @@ export default {
       // 是否显示弹出层
       open: false,
       isEdit: false,
+      fileOpen: false,
+      fileIndex: undefined,
       // 类型数据字典
       typeOptions: [],
-      syscategoryList: [],
+      cmsList: [],
       statusOptions: [],
+      // 关系表类型
+
       // 查询参数
       queryParams: {
         pageIndex: 1,
         pageSize: 10,
-        name:
-            undefined,
-        status:
-            undefined
+        name: undefined,
+        status: undefined
 
       },
       // 表单参数
       form: {
       },
       // 表单校验
-      rules: { name:
-                [
-                  { required: true, message: '名称不能为空', trigger: 'blur' }
-                ],
-      status:
-                [
-                  { required: true, message: '状态不能为空', trigger: 'blur' }
-                ]
+      rules: {
+        name: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
+        status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
       }
     }
   },
   created() {
     this.getList()
-    this.getDicts('sys_category').then(response => {
+    this.getDicts('sys_common_status').then(response => {
       this.statusOptions = response.data
     })
   },
@@ -241,7 +242,7 @@ export default {
     getList() {
       this.loading = true
       listSysCategory(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
-        this.syscategoryList = response.data.list
+        this.cmsList = response.data.list
         this.total = response.data.count
         this.loading = false
       }
@@ -256,7 +257,7 @@ export default {
     reset() {
       this.form = {
 
-        id: undefined,
+        ID: undefined,
         name: undefined,
         img: undefined,
         sort: undefined,
@@ -265,10 +266,17 @@ export default {
       }
       this.resetForm('form')
     },
+    getImgList: function() {
+      this.form[this.fileIndex] = this.$refs['fileChoose'].resultList[0].fullUrl
+    },
+    fileClose: function() {
+      this.fileOpen = false
+    },
     statusFormat(row) {
       return this.selectDictLabel(this.statusOptions, row.status)
     },
-
+    // 关系
+    // 文件
     /** 搜索按钮操作 */
     handleQuery() {
       this.queryParams.pageIndex = 1
@@ -284,24 +292,23 @@ export default {
     handleAdd() {
       this.reset()
       this.open = true
-      this.title = '添加分类'
+      this.title = '添加分类管理'
       this.isEdit = false
     },
     // 多选框选中数据
     handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
+      this.ids = selection.map(item => item.ID)
       this.single = selection.length !== 1
       this.multiple = !selection.length
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
       this.reset()
-      const id =
-                row.id || this.ids
-      getSysCategory(id).then(response => {
+      const ID = row.ID || this.ids
+      getSysCategory(ID).then(response => {
         this.form = response.data
         this.open = true
-        this.title = '修改分类'
+        this.title = '修改分类管理'
         this.isEdit = true
       })
     },
@@ -309,7 +316,7 @@ export default {
     submitForm: function() {
       this.$refs['form'].validate(valid => {
         if (valid) {
-          if (this.form.id !== undefined) {
+          if (this.form.ID !== undefined) {
             updateSysCategory(this.form).then(response => {
               if (response.code === 200) {
                 this.msgSuccess('修改成功')
@@ -335,13 +342,14 @@ export default {
     },
     /** 删除按钮操作 */
     handleDelete(row) {
-      const Ids = row.id || this.ids
+      var Ids = (row.ID && [row.ID]) || this.ids
+
       this.$confirm('是否确认删除编号为"' + Ids + '"的数据项?', '警告', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning'
       }).then(function() {
-        return delSysCategory(Ids)
+        return delSysCategory({ 'ids': Ids })
       }).then(() => {
         this.getList()
         this.msgSuccess('删除成功')

+ 1 - 2
src/views/syscontent/index.vue

@@ -227,7 +227,7 @@ import { listSysCategory } from '@/api/syscategory'
 import FileChoose from '@/components/FileChoose'
 import RictText from '@/components/richtext'
 export default {
-  name: 'Config',
+  name: 'SysContent',
   components: {
     FileChoose,
     RictText
@@ -278,7 +278,6 @@ export default {
   created() {
     this.getList()
     this.getSysCategoryItems()
-
     this.getDicts('sys_content_status').then(response => {
       this.statusOptions = response.data
     })

+ 0 - 2
src/views/tools/gen/basicInfoForm.vue

@@ -11,7 +11,6 @@
           <el-input v-model="info.tableComment" placeholder="请输入" />
         </el-form-item>
       </el-col>
-
       <el-col :span="12">
         <el-form-item label="实体类名称" prop="className">
           <el-input v-model="info.className" placeholder="请输入" />
@@ -30,7 +29,6 @@
               <i class="el-icon-question" />
             </el-tooltip>
           </span>
-
           <el-radio-group v-model="info.isLogicalDelete">
             <el-radio label="1">是</el-radio>
             <el-radio label="0">否</el-radio>

+ 47 - 11
src/views/tools/gen/editTable.vue

@@ -51,17 +51,17 @@
               <el-checkbox v-model="scope.row.isInsert" true-label="1" false-label="0" />
             </template>
           </el-table-column>
-          <el-table-column label="编辑" width="50">
+          <el-table-column label="编辑" width="70" :render-header="renderHeadeUpdate" :cell-style="{'text-align':'center'}">
             <template slot-scope="scope">
               <el-checkbox v-model="scope.row.isEdit" true-label="1" false-label="0" />
             </template>
           </el-table-column>
-          <el-table-column label="列表" width="50">
+          <el-table-column label="列表" width="70" :render-header="renderHeadeList" :cell-style="{'text-align':'center'}">
             <template slot-scope="scope">
               <el-checkbox v-model="scope.row.isList" true-label="1" false-label="0" />
             </template>
           </el-table-column>
-          <el-table-column label="查询" width="50">
+          <el-table-column label="查询" width="70" :render-header="renderHeadeSearch" :cell-style="{'text-align':'center'}">
             <template slot-scope="scope">
               <el-checkbox v-model="scope.row.isQuery" true-label="1" false-label="0" />
             </template>
@@ -234,11 +234,54 @@ export default {
     }
   },
   methods: {
+    renderHeadeUpdate(h, { column, $index }) {
+      // h 是一个渲染函数       column 是一个对象表示当前列      $index 第几列
+      return h('div', [
+        h('span', column.label + '  ', { align: 'center', marginTop: '0px' }),
+        h(
+          'el-popover',
+          { props: { placement: 'top-start', width: '270', trigger: 'hover' }},
+          [
+            h('p', '是否在表单编辑时能够编辑,打√表示需要', { class: 'text-align: center; margin: 0' }),
+            // 生成 i 标签 ,添加icon 设置 样式,slot 必填
+            h('i', { class: 'el-icon-question', style: 'color:#ccc,padding-top:5px', slot: 'reference' })
+          ]
+        )
+      ])
+    },
+    renderHeadeList(h, { column, $index }) {
+      // h 是一个渲染函数       column 是一个对象表示当前列      $index 第几列
+      return h('div', [
+        h('span', column.label + '  ', { align: 'center', marginTop: '0px' }),
+        h(
+          'el-popover',
+          { props: { placement: 'top-start', width: '260', trigger: 'hover' }},
+          [
+            h('p', '是否在列表中展示,打√表示需要展示', { class: 'text-align: center; margin: 0' }),
+            h('i', { class: 'el-icon-question', style: 'color:#ccc,padding-top:5px', slot: 'reference' })
+          ]
+        )
+      ])
+    },
+    renderHeadeSearch(h, { column, $index }) {
+      return h('div', [
+        h('span', column.label + '  ', { align: 'center', marginTop: '0px' }),
+        h(
+          'el-popover',
+          { props: { placement: 'top-start', width: '270', trigger: 'hover' }},
+          [
+            h('p', '是都当做搜索条件,打√表示做为搜索条件', { class: 'text-align: center; margin: 0' }),
+            h('i', { class: 'el-icon-question', style: 'color:#ccc,padding-top:5px', slot: 'reference' })
+          ]
+        )
+      ])
+    },
     handleChangeConfig(row, index) {
       console.log(row)
       console.log(index)
       this.tableTree.filter(function(item) {
-        if (item.className === row.fkTableNameClass) {
+        debugger
+        if (item.tableName === row.fkTableName) {
           row.fkCol = item.columns
           // row.fkCol.unshift({ columnId: 0, columnName: '请选择' })
         }
@@ -289,13 +332,6 @@ export default {
         }
       })
     },
-    // getTableColList(tableId) {
-    //   this.getItems(getGenTable, { tableId: tableId }).then(res => {
-    //     this.dictOptions = this.setItems(res, 'columnName', 'columnComment')
-    //   })
-
-    //   console.log(this.tableList)
-    // },
     getFormPromise(form) {
       return new Promise(resolve => {
         form.validate(res => {