瀏覽代碼

Merge branch 'master' of http://39.105.126.192:3000/DR3_web/ioc-admin-ui.git

wandequan 2 年之前
父節點
當前提交
2f50369d9e

+ 168 - 1
package-lock.json

@@ -12,6 +12,7 @@
         "core-js": "^3.8.3",
         "dayjs": "^1.11.7",
         "element-ui": "^2.15.13",
+        "file-saver": "^2.0.5",
         "js-cookie": "^3.0.1",
         "qs": "^6.11.1",
         "unplugin-vue-components": "^0.24.1",
@@ -19,7 +20,8 @@
         "vcrontab": "^0.3.5",
         "vue": "^2.7.14",
         "vue-router": "^3.5.1",
-        "vuex": "^3.6.2"
+        "vuex": "^3.6.2",
+        "xlsx": "^0.18.5"
       },
       "devDependencies": {
         "@iconify-json/ant-design": "^1.1.5",
@@ -3253,6 +3255,14 @@
         "node": ">= 10.0.0"
       }
     },
+    "node_modules/adler-32": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmmirror.com/adler-32/-/adler-32-1.3.1.tgz",
+      "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==",
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/ajv": {
       "version": "6.12.6",
       "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz",
@@ -3946,6 +3956,18 @@
         "node": ">=4"
       }
     },
+    "node_modules/cfb": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmmirror.com/cfb/-/cfb-1.2.2.tgz",
+      "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==",
+      "dependencies": {
+        "adler-32": "~1.3.0",
+        "crc-32": "~1.2.0"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/chalk": {
       "version": "2.4.2",
       "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz",
@@ -4264,6 +4286,14 @@
         "node": ">=6"
       }
     },
+    "node_modules/codepage": {
+      "version": "1.15.0",
+      "resolved": "https://registry.npmmirror.com/codepage/-/codepage-1.15.0.tgz",
+      "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==",
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/collection-visit": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
@@ -4549,6 +4579,17 @@
         "node": ">=10"
       }
     },
+    "node_modules/crc-32": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz",
+      "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
+      "bin": {
+        "crc32": "bin/crc32.njs"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/cross-spawn": {
       "version": "6.0.5",
       "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz",
@@ -5767,6 +5808,11 @@
         "node": ">=4"
       }
     },
+    "node_modules/file-saver": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz",
+      "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
+    },
     "node_modules/fill-range": {
       "version": "7.0.1",
       "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz",
@@ -5882,6 +5928,14 @@
         "node": ">= 0.6"
       }
     },
+    "node_modules/frac": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz",
+      "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==",
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/fraction.js": {
       "version": "4.2.0",
       "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.2.0.tgz",
@@ -10417,6 +10471,17 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/ssf": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npmmirror.com/ssf/-/ssf-0.11.2.tgz",
+      "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
+      "dependencies": {
+        "frac": "~1.1.2"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/ssri": {
       "version": "8.0.1",
       "resolved": "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz",
@@ -12261,6 +12326,22 @@
       "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
       "dev": true
     },
+    "node_modules/wmf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/wmf/-/wmf-1.0.2.tgz",
+      "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==",
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/word": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmmirror.com/word/-/word-0.3.0.tgz",
+      "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==",
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/wrap-ansi": {
       "version": "7.0.0",
       "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -12332,6 +12413,26 @@
         }
       }
     },
+    "node_modules/xlsx": {
+      "version": "0.18.5",
+      "resolved": "https://registry.npmmirror.com/xlsx/-/xlsx-0.18.5.tgz",
+      "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==",
+      "dependencies": {
+        "adler-32": "~1.3.0",
+        "cfb": "~1.2.1",
+        "codepage": "~1.15.0",
+        "crc-32": "~1.2.1",
+        "ssf": "~0.11.2",
+        "wmf": "~1.0.1",
+        "word": "~0.3.0"
+      },
+      "bin": {
+        "xlsx": "bin/xlsx.njs"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/y18n": {
       "version": "5.0.8",
       "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz",
@@ -14850,6 +14951,11 @@
       "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==",
       "dev": true
     },
+    "adler-32": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmmirror.com/adler-32/-/adler-32-1.3.1.tgz",
+      "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A=="
+    },
     "ajv": {
       "version": "6.12.6",
       "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz",
@@ -15422,6 +15528,15 @@
       "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==",
       "dev": true
     },
+    "cfb": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmmirror.com/cfb/-/cfb-1.2.2.tgz",
+      "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==",
+      "requires": {
+        "adler-32": "~1.3.0",
+        "crc-32": "~1.2.0"
+      }
+    },
     "chalk": {
       "version": "2.4.2",
       "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz",
@@ -15672,6 +15787,11 @@
         "shallow-clone": "^3.0.0"
       }
     },
+    "codepage": {
+      "version": "1.15.0",
+      "resolved": "https://registry.npmmirror.com/codepage/-/codepage-1.15.0.tgz",
+      "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA=="
+    },
     "collection-visit": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
@@ -15912,6 +16032,11 @@
         "yaml": "^1.10.0"
       }
     },
+    "crc-32": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz",
+      "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="
+    },
     "cross-spawn": {
       "version": "6.0.5",
       "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz",
@@ -16886,6 +17011,11 @@
         "escape-string-regexp": "^1.0.5"
       }
     },
+    "file-saver": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz",
+      "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
+    },
     "fill-range": {
       "version": "7.0.1",
       "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz",
@@ -16974,6 +17104,11 @@
       "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
       "dev": true
     },
+    "frac": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz",
+      "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
+    },
     "fraction.js": {
       "version": "4.2.0",
       "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.2.0.tgz",
@@ -20531,6 +20666,14 @@
         }
       }
     },
+    "ssf": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npmmirror.com/ssf/-/ssf-0.11.2.tgz",
+      "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
+      "requires": {
+        "frac": "~1.1.2"
+      }
+    },
     "ssri": {
       "version": "8.0.1",
       "resolved": "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz",
@@ -21980,6 +22123,16 @@
       "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
       "dev": true
     },
+    "wmf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/wmf/-/wmf-1.0.2.tgz",
+      "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw=="
+    },
+    "word": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmmirror.com/word/-/word-0.3.0.tgz",
+      "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA=="
+    },
     "wrap-ansi": {
       "version": "7.0.0",
       "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -22030,6 +22183,20 @@
       "dev": true,
       "requires": {}
     },
+    "xlsx": {
+      "version": "0.18.5",
+      "resolved": "https://registry.npmmirror.com/xlsx/-/xlsx-0.18.5.tgz",
+      "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==",
+      "requires": {
+        "adler-32": "~1.3.0",
+        "cfb": "~1.2.1",
+        "codepage": "~1.15.0",
+        "crc-32": "~1.2.1",
+        "ssf": "~0.11.2",
+        "wmf": "~1.0.1",
+        "word": "~0.3.0"
+      }
+    },
     "y18n": {
       "version": "5.0.8",
       "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz",

+ 3 - 1
package.json

@@ -11,6 +11,7 @@
     "core-js": "^3.8.3",
     "dayjs": "^1.11.7",
     "element-ui": "^2.15.13",
+    "file-saver": "^2.0.5",
     "js-cookie": "^3.0.1",
     "qs": "^6.11.1",
     "unplugin-vue-components": "^0.24.1",
@@ -18,7 +19,8 @@
     "vcrontab": "^0.3.5",
     "vue": "^2.7.14",
     "vue-router": "^3.5.1",
-    "vuex": "^3.6.2"
+    "vuex": "^3.6.2",
+    "xlsx": "^0.18.5"
   },
   "devDependencies": {
     "@iconify-json/ant-design": "^1.1.5",

+ 7 - 1
src/api/role/role.js

@@ -63,7 +63,12 @@ const removeMember = (params) => {
 
 // 批量移除成员
 const batchRemoveMember = (params) => {
-  return delform('/role/member', params)
+  return del('/role/batch_delete_role', params)
+}
+
+// 批量修改用户角色
+const batchUpdUserRole = (param) => {
+  return put('/users/batch_modify_user_role', param);
 }
 
 // 获取权限信息
@@ -81,5 +86,6 @@ export {
     removeMember,
     batchRemoveMember,
     updateRoleInfo,
+    batchUpdUserRole,
 
 }

+ 11 - 1
src/api/security/logMonitor.js

@@ -25,4 +25,14 @@ const getLogList = (
   );
 };
 
-export { getLogList };
+
+
+/**
+ * 导出日志列表
+ * @returns 
+ */
+const exportLogList = () =>{
+  return get(`/log/log_export`)
+}
+
+export { getLogList,exportLogList };

+ 31 - 26
src/views/permissionManagement/decisiongroup/permissionDetail.vue

@@ -13,11 +13,11 @@
                     <el-tab-pane label="移动端" name="mobile"></el-tab-pane>
                 </el-tabs>
                 <el-collapse v-model="activeNames" @change="handleChange">
-                    <el-collapse-item name="1">
+                    <el-collapse-item name="1" v-show="showPc">
                         <template slot="title">
                             <i :class="isActive('1') !== -1 ? 'el-icon-caret-bottom' : 'el-icon-caret-right'"></i>前端
                         </template>
-                        <el-row align="left" :gutter="8" style="text-align: left;box-sizing: border-box;padding: 0 30px;height: 200px;overflow-y: auto">
+                        <el-row align="left" :gutter="8" style="text-align: left;box-sizing: border-box;padding: 0 30px;height: 160px;overflow-y: auto">
                             <el-col :span="8" v-for="(item,index) in frontPermissions" :key="item.id">
                                 <el-tree :ref="'tree'" :default-checked-keys="checkedKeys" :data="[item]" :props="defaultProps" show-checkbox node-key="id"
                                          @node-click="handleNodeClick">
@@ -25,28 +25,17 @@
                             </el-col>
                         </el-row>
                     </el-collapse-item>
-                    <el-collapse-item name="2">
+                    <el-collapse-item name="2" v-show="showPc">
                         <template slot="title">
                             <i :class="isActive('2') !== -1 ? 'el-icon-caret-bottom' : 'el-icon-caret-right'"></i>后端
                         </template>
-                        <div style="display: flex; margin-left: 20px;">
-                            <div>
-                                <!--<el-tree :data="data7" :props="defaultProps" show-checkbox node-key="id"-->
-                                <!--    @node-click="handleNodeClick">-->
-                                <!--</el-tree>-->
-                                <!--<el-tree :data="data8" :props="defaultProps" show-checkbox node-key="id"-->
-                                <!--    @node-click="handleNodeClick">-->
-                                <!--</el-tree>-->
-                            </div>
-                            <div style="margin-left: 137px;">
-                                <!--<el-tree :data="data9" :props="defaultProps" show-checkbox node-key="id"-->
-                                <!--    @node-click="handleNodeClick">-->
-                                <!--</el-tree>-->
-                                <!--<el-tree :data="data10" :props="defaultProps" show-checkbox node-key="id"-->
-                                <!--    @node-click="handleNodeClick">-->
-                                <!--</el-tree>-->
-                            </div>
-                        </div>
+                        <el-row align="left" :gutter="8" style="text-align: left;box-sizing: border-box;padding: 0 30px;height: 160px;overflow-y: auto">
+                            <el-col :span="8" v-for="(item,index) in adminPermissions" :key="item.id">
+                                <el-tree :ref="'tree'" :default-checked-keys="checkedKeys" :data="[item]" :props="defaultProps" show-checkbox node-key="id"
+                                         @node-click="handleNodeClick">
+                                </el-tree>
+                            </el-col>
+                        </el-row>
                     </el-collapse-item>
                 </el-collapse>
             </div>
@@ -75,12 +64,14 @@ export default {
             activeName: 'pc',
             activeNames: ['1', '2'],
             frontPermissions: [],
-
+            adminPermissions: [],
 
             defaultProps: {
                 children: 'children',
                 label: 'name'
-            }
+            },
+
+            showPc: true,
         }
     },
     watch: {
@@ -100,8 +91,9 @@ export default {
         })
     },
     methods: {
-        handleClick() {
-            //
+        handleClick(tab, event) {
+            let name = tab.name;
+            this.showPc = name=='pc'
         },
         isActive(data) {
             return this.activeNames.indexOf(data);
@@ -120,9 +112,22 @@ export default {
             })
         },
         getPermissions() {
+            this.frontPermissions = [];
+            this.adminPermissions = [];
             getPermissionList().then(res=>{
                 let data = res.data;
-                this.frontPermissions = data.data
+                if (data.code==0) {
+                    data.data.forEach(item=>{
+                        if (item.menu_type=='A') {
+                            this.adminPermissions.push(item)
+                        } else if (item.menu_type=='C') {
+                            this.frontPermissions.push(item)
+                        }
+                    })
+                } else {
+                    this.$message.error(data.message)
+                }
+
             })
         },
         getRoleInfo() {

+ 27 - 2
src/views/permissionManagement/decisiongroup/rolemembersList.vue

@@ -47,7 +47,12 @@
                 :before-close="handleClose"
                 center
         >
-            <RoleUserAdd/>
+            <RoleUserAdd ref="roleAdd"/>
+            <template>
+                <div style="text-align: right;height: 40px">
+                    <el-button type="primary" style="height: 24px;padding: 0 20px" @click="confirmAdd">确定</el-button>
+                </div>
+            </template>
         </el-dialog>
     </div>
 </template>
@@ -56,7 +61,7 @@
 import checkbox from '@/components/Checkbox/index'
 import page from '@/components/pagination/index'
 import RoleUserAdd from "@/views/permissionManagement/messageDialog/roleUserAdd.vue";
-import {batchRemoveMember, getRoleMember, removeMember} from "@/api/role/role";
+import {batchRemoveMember, batchUpdUserRole, getRoleMember, removeMember} from "@/api/role/role";
 
 export default {
     components: {checkbox, page, RoleUserAdd,},
@@ -124,6 +129,25 @@ export default {
         handleClick() {
             //
         },
+        confirmAdd() {
+            if (this.$refs.roleAdd.userIds && this.$refs.roleAdd.userIds.length<1) {
+                this.$message.warning('请选择用户后操作')
+                return;
+            }
+            let params = {
+                users_id: '['+this.$refs.roleAdd.userIds.join(',')+']',
+                role_id: this.item.id
+            }
+            batchUpdUserRole(params).then(res=>{
+                let data = res.data;
+                if (data.code==0) {
+                    this.roleAddMemberVisible = false;
+                    this.$message.success('添加成功')
+                } else {
+                    this.$message.error(data.message)
+                }
+            })
+        },
         getTableData(page) {
             getRoleMember(this.item.id).then(res => {
                 let data = res.data;
@@ -148,6 +172,7 @@ export default {
                 ids.push(item.id)
             })
             let params = {
+                role_ids: '[' + this.item.id + ']',
                 users_id: '[' + ids.join(',') + ']'
             }
             let app = this;

+ 10 - 1
src/views/permissionManagement/messageDialog/roleUserAdd.vue

@@ -12,7 +12,7 @@
           </el-tree>
       </div>
       <div class="right">
-          <el-table :data="tableData">
+          <el-table :data="tableData" @selection-change="handleSelectChange">
               <el-table-column type="selection" width="50"></el-table-column>
               <el-table-column prop="user_name" label="用户名"></el-table-column>
               <el-table-column prop="phone" label="手机号"></el-table-column>
@@ -32,6 +32,7 @@ export default {
         return {
             filterText: '',
             tableData: [],
+            userIds: [],
             data: [{
                 id:2,
                 label: '北京电信规划设计院',
@@ -70,6 +71,14 @@ export default {
                     this.$message.error(data.message);
                 }
             })
+        },
+        handleSelectChange(val) {
+            this.userIds = [];
+            if (val) {
+                val.forEach(item=>{
+                    this.userIds.push(item.id)
+                })
+            }
         }
     }
 }

+ 45 - 10
src/views/securityManagement/logMonitor.vue

@@ -68,6 +68,7 @@
         <el-button class="new_button" @click="exportEvent">导出</el-button>
       </div>
       <el-table
+        id="tableId"
         ref="multipleTable"
         :data="tableData"
         tooltip-effect="dark"
@@ -113,7 +114,9 @@
 
 <script>
 import page from "@/components/pagination/index";
-import { getLogList } from "@/api/security/logMonitor";
+import FileSaver from "file-saver";
+import * as XLSX from "xlsx";
+import { getLogList, exportLogList } from "@/api/security/logMonitor";
 export default {
   components: { page },
   data() {
@@ -246,14 +249,14 @@ export default {
     },
     getTableData(page) {
       this.tableData = [];
-      let startTime =""
-      let endTime = ""
-      if(this.form.timeVal===""){
-        startTime=""
-        endTime=""
-      }else if(this.form.timeVal.length>0){
-        startTime = this.form.timeVal[0]
-        endTime=this.form.timeVal[1]
+      let startTime = "";
+      let endTime = "";
+      if (this.form.timeVal === "") {
+        startTime = "";
+        endTime = "";
+      } else if (this.form.timeVal.length > 0) {
+        startTime = this.form.timeVal[0];
+        endTime = this.form.timeVal[1];
       }
       getLogList(
         page,
@@ -266,7 +269,7 @@ export default {
         endTime
       ).then((res) => {
         if (res.data.code === 0 && res.data.data.length > 0) {
-          this.paginationData.total = res.data.total
+          this.paginationData.total = res.data.total;
           this.tableData = res.data.data.map((v) => {
             return {
               logID: v.id,
@@ -312,6 +315,38 @@ export default {
     },
     exportEvent() {
       console.log("导出事件");
+      //转换成excel时,使用原始的格式
+      var xlsxParam = { raw: true };
+      let fix = document.querySelector(".el-table__fixed");
+      let wb;
+      //判断有无fixed定位,如果有的话去掉,后面再加上,不然数据会重复
+      if (fix) {
+        wb = XLSX.utils.table_to_book(
+          document.querySelector("#tableId").removeChild(fix),
+          xlsxParam
+        );
+        document.querySelector("#tableId").appendChild(fix);
+      } else {
+        wb = XLSX.utils.table_to_book(
+          document.querySelector("#tableId"),
+          xlsxParam
+        );
+      }
+      var wbout = XLSX.write(wb, {
+        bookType: "xlsx",
+        bookSST: true,
+        type: "array",
+      });
+
+      try {
+        FileSaver.saveAs(
+          new Blob([wbout], { type: "application/octet-stream" }),
+          "日志.xlsx"
+        );
+      } catch (e) {
+        if (typeof console !== "undefined") console.log(e, wbout);
+      }
+      return wbout;
     },
     batchDelete() {},
     batchActivate() {},

+ 3 - 3
src/views/securityManagement/systemMonitor/periodicTask.vue

@@ -45,7 +45,7 @@
     </div>
     <div class="content">
       <div class="content-inner">
-        <el-button class="blue-btn" @click="addEvent">新增</el-button>
+        <!-- <el-button class="blue-btn" @click="addEvent">新增</el-button> -->
         <!-- <el-button class="blue-btn" @click="modifyEvent">修改</el-button> -->
         <el-button class="delete-btn" @click="batchDelete">批量删除</el-button>
       </div>
@@ -78,12 +78,12 @@
         </el-table-column>
         <el-table-column prop="operation" label="操作">
           <template slot-scope="scope">
-            <el-button
+            <!-- <el-button
               v-show="scope.row.taskID == null ? false : true"
               size="mini"
               type="text"
               >查看</el-button
-            >
+            > -->
             <el-button
               v-show="scope.row.taskID == null ? false : true"
               size="mini"

+ 25 - 4
src/views/servicesManagement/allServices.vue

@@ -1,11 +1,17 @@
 <template>
-  <div class="content">
-    <el-input
+  <div
+    class="content"
+    v-loading="loading"
+    element-loading-text="拼命加载中"
+    element-loading-spinner="el-icon-loading"
+    element-loading-background="rgba(0, 0, 0, 0.8)"
+  >
+    <!-- <el-input
       class="search"
       v-model="input"
       placeholder="请输入"
       suffix-icon="el-icon-search"
-    ></el-input>
+    ></el-input> -->
     <el-table
       ref="multipleTable"
       border
@@ -64,12 +70,13 @@
                 ? 'info'
                 : 'danger'
             "
+            @click="changeStatus(scope.row)"
           >
             {{
               scope.row.status == "1"
                 ? "安装"
                 : scope.row.status == "2"
-                ? "未配置"
+                ? "已安装"
                 : "卸载"
             }}
           </el-button>
@@ -83,6 +90,7 @@
 </template>
 
 <script>
+import publicFunc from "@/utils/publicFunc";
 import checkbox from "@/components/Checkbox/index";
 import page from "@/components/pagination/index";
 import { getServiceList } from "@/api/service/service";
@@ -94,6 +102,7 @@ export default {
       show: true,
       form: {},
       tableData: [],
+      loading: false,
       // tableData: [
       //   {
       //     photo:
@@ -139,6 +148,17 @@ export default {
     this.initData();
   },
   methods: {
+    changeStatus(data) {
+      console.log(data);
+      if (data.status === "1") {
+        this.loading = true
+        setTimeout(()=>{
+          this.tableData.find((item) => item.id === data.id).status = "2";
+          this.loading = false
+        },3000)
+        
+      }
+    },
     handleSelectionChange() {
       //
     },
@@ -151,6 +171,7 @@ export default {
         if (res.data.code === 0) {
           res.data.data.forEach((v) => {
             this.tableData.push({
+              id: publicFunc.buildGuid("service"),
               updatetime: "2023-01-01 00:00",
               name: v.name,
               introduction: v.introduction,

+ 20 - 2
src/views/userManagement/groupManagement/forms/corporationdetailEdit.vue

@@ -3,8 +3,17 @@
         <departmentNew ref="departmentNew"></departmentNew>
         <p class="info">企业详情</p>
         <div class="company-banner" style="height: 100px;overflow-y: hidden;position: relative">
-            <el-image style="height: 100px" :src="require('@/assets/background/banner.png')"></el-image>
-            <el-button type="primary" class="company-alter">更换</el-button>
+            <el-image style="height: 100px" :src="companyImage"></el-image>
+
+            <el-button type="primary" class="company-alter">
+                <el-upload
+                    style=""
+                    ref="upload"
+                    action=""
+                    :show-file-list="false"
+                    :on-change="handleUploadChange"
+                    :auto-upload="false">更换</el-upload>
+            </el-button>
         </div>
         <el-form :model="form" label-position="right" label-width="200px">
             <el-form-item label="公司全称:">
@@ -74,6 +83,7 @@ export default {
     data() {
         return {
             province,
+            companyImage: require('@/assets/background/banner.png'),
             show: false,
             disabled: true,
             registered_address: {
@@ -164,6 +174,14 @@ export default {
         addDepartment() {
             this.$refs.departmentNew.dialogVisible = true;
         },
+        handleUploadChange(file, fileList) {
+            let reader = new FileReader();
+            reader.readAsDataURL(file.raw);
+            let app = this;
+            reader.onload = function (e) {
+                app.companyImage = this.result;
+            }
+        },
         getCompanyInfo() {
             getCompanyInfo(this.item.id).then(res => {
                 let data = res.data;

+ 4 - 1
src/views/userManagement/groupManagement/index.vue

@@ -15,7 +15,7 @@
             </el-tree>
             <el-button class="addDepartment" @click="addDepartment" style="color: #fff; background: #3da0d6">
                 <i class="el-icon-s-order" style="padding-right: 4px"></i>
-                新建企业/部门
+                新建企业
             </el-button>
         </div>
         <div class="right-pane">
@@ -187,6 +187,9 @@ export default {
             .el-image {
                 vertical-align: middle;
             }
+            /deep/ .el-image__inner {
+                vertical-align: baseline;
+            }
 
             /deep/.el-tree-node__content {
                 align-items: center;

+ 5 - 5
src/views/userManagement/groupManagement/messageDialog/corporationAdd.vue

@@ -4,10 +4,10 @@
                    append-to-body>
             <el-divider></el-divider>
 
-            <el-radio-group v-model="addType" style="margin: 20px 200px">
-                <el-radio label="1">企业</el-radio>
-                <el-radio label="2">部门</el-radio>
-            </el-radio-group>
+            <!--<el-radio-group v-model="addType" style="margin: 20px 200px">-->
+            <!--    <el-radio label="1">企业</el-radio>-->
+            <!--    <el-radio label="2">部门</el-radio>-->
+            <!--</el-radio-group>-->
 
             <el-form v-if="show.company" :model="companyForm" :rules="formRules" label-position="right" label-width="200px">
                 <el-form-item label="公司全称:" prop="company_name">
@@ -18,7 +18,7 @@
                 </el-form-item>
                 <el-form-item label="上级公司:">
                     <el-select v-model="companyForm.parentCorporation" placeholder="请选择上级公司">
-                        <el-option v-for="item in superiorOptions" :value="item.value" :key="item.value"
+                        <el-option v-for="item in companyList" :value="item.value" :key="item.value"
                                    :label="item.label"></el-option>
                     </el-select>
                 </el-form-item>

+ 3 - 0
src/views/userManagement/groupManagement/tables/corporationOverview.vue

@@ -98,7 +98,10 @@ export default {
             getCompanyList('', this.paginationData.currentPage, this.paginationData.pageSize).then(res=>{
                 let data = res.data;
                 if (data.code == '0') {
+                    this.paginationData.total = data.total
                     this.tableData = data.data
+                } else {
+                    this.$message.error(data.message);
                 }
             })
         },

+ 14 - 14
vue.config.js

@@ -18,20 +18,20 @@ module.exports = defineConfig({
   devServer: {
     port: 8080,
     proxy: {
-      // '/api':{
-      //     target:'http://121.43.55.7:5000',
-      //     changeOrigin:true,
-      //     pathRewrite:{
-      //       '^/api':''
-      //     }
-      // }
-      '/api': {
-        target: 'http://192.168.3.32:5000',
-        changeOrigin: true,
-        pathRewrite: {
-          '^/api': ''
-        }
-      }
+       '/api':{
+           target:'http://121.43.55.7:5000',
+           changeOrigin:true,
+           pathRewrite:{
+             '^/api':''
+           }
+       }
+      //'/api': {
+      //  target: 'http://192.168.3.32:5000',
+      //  changeOrigin: true,
+      //  pathRewrite: {
+      //    '^/api': ''
+      //  }
+      //}
     }
   }
 })