Преглед на файлове

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

# Conflicts:
#	src/views/systemManagement/infoConfiguration/dialog/historyPeople.vue
wandequan преди 2 години
родител
ревизия
ea8203329d
променени са 36 файла, в които са добавени 4313 реда и са изтрити 1189 реда
  1. 38 0
      package-lock.json
  2. 2 0
      package.json
  3. 60 0
      src/api/company/company.js
  4. 2 0
      src/api/data/basicInfo.js
  5. 72 1
      src/api/role/role.js
  6. 24 0
      src/api/security/systemMonitor.js
  7. 8 0
      src/api/service/service.js
  8. 10 1
      src/api/user/user.js
  9. BIN
      src/assets/background/banner.png
  10. 2030 0
      src/data/province.json
  11. 165 68
      src/layout/Navbar.vue
  12. 1 1
      src/main.js
  13. 1 1
      src/router/index.js
  14. 9 7
      src/store/modules/user.js
  15. 10 0
      src/style/global.css
  16. 1 1
      src/utils/request.js
  17. 90 36
      src/views/dataManagement/basicInfo/accessedSystem.vue
  18. 27 2
      src/views/dataManagement/basicInfo/buildingInfo.vue
  19. 38 50
      src/views/dataManagement/basicInfo/corporationInfo.vue
  20. 5 5
      src/views/dataManagement/basicInfo/index.vue
  21. 21 8
      src/views/permissionManagement/decisiongroup/index.vue
  22. 92 149
      src/views/permissionManagement/decisiongroup/permissionDetail.vue
  23. 197 116
      src/views/permissionManagement/decisiongroup/rolemembersList.vue
  24. 211 94
      src/views/permissionManagement/index.vue
  25. 77 0
      src/views/permissionManagement/messageDialog/roleAdd.vue
  26. 151 0
      src/views/permissionManagement/messageDialog/roleUserAdd.vue
  27. 125 105
      src/views/permissionManagement/roleOverview.vue
  28. 63 119
      src/views/securityManagement/messageDialog/alterTask.vue
  29. 89 31
      src/views/securityManagement/systemMonitor/periodicTask.vue
  30. 191 91
      src/views/userManagement/groupManagement/forms/corporationdetailEdit.vue
  31. 95 91
      src/views/userManagement/groupManagement/forms/departmentdetailEdit.vue
  32. 94 39
      src/views/userManagement/groupManagement/index.vue
  33. 235 124
      src/views/userManagement/groupManagement/messageDialog/corporationAdd.vue
  34. 26 0
      src/views/userManagement/groupManagement/messageDialog/uploadBanner.vue
  35. 38 20
      src/views/userManagement/groupManagement/tables/corporationOverview.vue
  36. 15 29
      src/views/userManagement/personManagement/tables/userTableData.vue

+ 38 - 0
package-lock.json

@@ -15,6 +15,8 @@
         "js-cookie": "^3.0.1",
         "qs": "^6.11.1",
         "unplugin-vue-components": "^0.24.1",
+        "vab-cron": "^1.0.6",
+        "vcrontab": "^0.3.5",
         "vue": "^2.7.14",
         "vue-router": "^3.5.1",
         "vuex": "^3.6.2"
@@ -11593,6 +11595,15 @@
         "uuid": "dist/bin/uuid"
       }
     },
+    "node_modules/vab-cron": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/vab-cron/-/vab-cron-1.0.6.tgz",
+      "integrity": "sha512-qF50g1D6BSJT/WRLP/8yqR6+yT/wnyLJtCOIIbdoReyExZgsagK+xUXv1LJGIZwViAY+FtfXIKWk2GpBNERByg==",
+      "dependencies": {
+        "element-ui": "^2.4.11",
+        "vue": "^2.5.17"
+      }
+    },
     "node_modules/validate-npm-package-license": {
       "version": "3.0.4",
       "resolved": "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
@@ -11612,6 +11623,15 @@
         "node": ">= 0.8"
       }
     },
+    "node_modules/vcrontab": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmmirror.com/vcrontab/-/vcrontab-0.3.5.tgz",
+      "integrity": "sha512-RMNrDFhsO68BEtdUwtKgtPAvaQIlXmAJ9MrqFLgWBedhlolLclm3kBwlQx4lpN8DlnascCkVcBiGDr+XXQqTpQ==",
+      "dependencies": {
+        "element-ui": "^2.4.11",
+        "vue": "^2.5.17"
+      }
+    },
     "node_modules/vue": {
       "version": "2.7.14",
       "resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.14.tgz",
@@ -21421,6 +21441,15 @@
       "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
       "dev": true
     },
+    "vab-cron": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/vab-cron/-/vab-cron-1.0.6.tgz",
+      "integrity": "sha512-qF50g1D6BSJT/WRLP/8yqR6+yT/wnyLJtCOIIbdoReyExZgsagK+xUXv1LJGIZwViAY+FtfXIKWk2GpBNERByg==",
+      "requires": {
+        "element-ui": "^2.4.11",
+        "vue": "^2.5.17"
+      }
+    },
     "validate-npm-package-license": {
       "version": "3.0.4",
       "resolved": "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
@@ -21437,6 +21466,15 @@
       "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
       "dev": true
     },
+    "vcrontab": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmmirror.com/vcrontab/-/vcrontab-0.3.5.tgz",
+      "integrity": "sha512-RMNrDFhsO68BEtdUwtKgtPAvaQIlXmAJ9MrqFLgWBedhlolLclm3kBwlQx4lpN8DlnascCkVcBiGDr+XXQqTpQ==",
+      "requires": {
+        "element-ui": "^2.4.11",
+        "vue": "^2.5.17"
+      }
+    },
     "vue": {
       "version": "2.7.14",
       "resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.14.tgz",

+ 2 - 0
package.json

@@ -14,6 +14,8 @@
     "js-cookie": "^3.0.1",
     "qs": "^6.11.1",
     "unplugin-vue-components": "^0.24.1",
+    "vab-cron": "^1.0.6",
+    "vcrontab": "^0.3.5",
     "vue": "^2.7.14",
     "vue-router": "^3.5.1",
     "vuex": "^3.6.2"

+ 60 - 0
src/api/company/company.js

@@ -0,0 +1,60 @@
+import {get, post, put, del, getFile, postFile} from "@/utils/requestMethod";
+
+/** 获取公司列表 */
+const getCompanyList = (name, page, page_size) => {
+    return get(
+        `/organization/company_list?name=${name}&page=${page}&page_size=${page_size}`
+    );
+}
+
+/** 获取公司详情 */
+const getCompanyInfo = (id) => {
+    return get(
+        `/organization/company?company_id=${id}`
+    );
+}
+
+//修改公司详情
+const updateCompanyInfo = (param) => {
+  return put('/organization/company', param);
+}
+
+// 增加公司
+const addCompany = (param) => {
+  return post('/organization/company', param)
+}
+
+// 删除公司
+const delCompanyInfo = (id) => {
+  return del('/organization/company', {
+      company_id: id,
+      company_name: id
+  })
+}
+
+// 增加部门
+const addDept = (param) => {
+    return post('/organization/department', param)
+}
+
+// 修改部门详情
+const updateDept = (param) => {
+    return put('/organization/department', param)
+}
+
+// 删除部门
+const delDept = (param) => {
+    return del('/organization/department', param)
+}
+
+export {
+    getCompanyList,
+    getCompanyInfo,
+    updateCompanyInfo,
+    delCompanyInfo,
+    addCompany,
+    addDept,
+    updateDept,
+    delDept,
+
+}

+ 2 - 0
src/api/data/basicInfo.js

@@ -97,6 +97,7 @@ const getUnderlyingSystem = () => {
  */
 const addUnderlyingSystem = (picture) => {
   let params = new FormData();
+  picture && picture !== "" && params.append("picture", picture);
   return post(`/data/underlying_system`, params);
 };
 
@@ -105,4 +106,5 @@ export {
   getCompanyBasicInfo,
   editCompanyBasicInfo,
   getBuildingList,
+  getUnderlyingSystem,
 };

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

@@ -1,4 +1,4 @@
-import { get, post, put, del } from "@/utils/requestMethod";
+import {get, post, put, del, postform, delform} from "@/utils/requestMethod";
 
 const getRoleList = (
     page,
@@ -9,6 +9,77 @@ const getRoleList = (
     );
 }
 
+// 添加角色
+const addRoleApi = (roleName, roleDesc) => {
+  return postform('role/role', {
+      role_name: roleName,
+      role_describe: roleDesc
+  })
+}
+
+// 获取角色详情
+const getRoleApi = (id) => {
+  return get('/role/role', {
+      role_id: id,
+  })
+}
+
+// 编辑角色
+const updateRoleInfo = (id, name, desc, permission) => {
+  return put('/role/role', {
+      role_id: id,
+      role_name: name,
+      role_describe: desc,
+      role_permission: permission,
+  })
+}
+
+// 删除角色
+const deleteRole = (id) => {
+  return del('/role/role',{
+      role_id: id,
+      role_name: '123'
+  })
+}
+
+// 批量删除角色
+const batchDeleteRole = (ids) => {
+    return del('/role/role',{
+        roleIds: ids
+    })
+}
+
+// 获取角色成员
+const getRoleMember = (id) => {
+  return get('/role/member', {
+      role_id: id
+  })
+}
+
+// 移除成员
+const removeMember = (params) => {
+    return put('/role/member', params)
+}
+
+// 批量移除成员
+const batchRemoveMember = (params) => {
+  return delform('/role/member', params)
+}
+
+// 获取权限信息
+const getPermissionList = () => {
+  return get('/permission/permission', {});
+}
+
 export {
     getRoleList,
+    addRoleApi,
+    getRoleApi,
+    getRoleMember,
+    getPermissionList,
+    deleteRole,
+    removeMember,
+    batchRemoveMember,
+    updateRoleInfo,
+
 }

+ 24 - 0
src/api/security/systemMonitor.js

@@ -0,0 +1,24 @@
+import { get, post } from "@/utils/requestMethod";
+
+/**
+ * 获取定时任务列表
+ * @param {*} page
+ * @param {*} page_size
+ * @param {*} name
+ * @param {*} group
+ * @param {*} status
+ * @returns
+ */
+const getTaskList = (
+  page,
+  page_size = 10,
+  name = "",
+  group = "",
+  status = 0
+) => {
+  return get(
+    `/system_monitoring/job_list?page=${page}&page_size=${page_size}&group=${group}&name=${name}&status=${status}`
+  );
+};
+
+export { getTaskList };

+ 8 - 0
src/api/service/service.js

@@ -0,0 +1,8 @@
+import { get, post, put } from "@/utils/requestMethod";
+
+/**
+ * 获取服务列表
+ */
+const getServiceList = () => {
+  return get(`/server/server_list`);
+};

+ 10 - 1
src/api/user/user.js

@@ -77,6 +77,14 @@ const updateUserInfo = (options) => {
     params.append('nationality', options.nationality);
     return put(`/users/user`, params);
 }
+// 修改用户密码
+const updPwd = (id, username, password) => {
+  return put('/users/user', {
+      id: id,
+      username: username ,
+      password: password
+  })
+}
 //修改用户状态等
 const alterUserStatus = () => {
     return put(`/users/user_status`);
@@ -94,5 +102,6 @@ export {
     delUserByBatched,
     updateUserInfo,
     alterUserStatus,
-    alterUserStatusByBatched
+    alterUserStatusByBatched,
+    updPwd,
 }

BIN
src/assets/background/banner.png


+ 2030 - 0
src/data/province.json

@@ -0,0 +1,2030 @@
+[
+	{
+		"children":[
+			{
+				"label":"东城区",
+				"value":"东城区"
+			},
+			{
+				"label":"西城区",
+				"value":"西城区"
+			},
+			{
+				"label":"朝阳区",
+				"value":"朝阳区"
+			},
+			{
+				"label":"丰台区",
+				"value":"丰台区"
+			},
+			{
+				"label":"石景山区",
+				"value":"石景山区"
+			},
+			{
+				"label":"海淀区",
+				"value":"海淀区"
+			},
+			{
+				"label":"门头沟区",
+				"value":"门头沟区"
+			},
+			{
+				"label":"房山区",
+				"value":"房山区"
+			},
+			{
+				"label":"通州区",
+				"value":"通州区"
+			},
+			{
+				"label":"顺义区",
+				"value":"顺义区"
+			},
+			{
+				"label":"昌平区",
+				"value":"昌平区"
+			},
+			{
+				"label":"大兴区",
+				"value":"大兴区"
+			},
+			{
+				"label":"怀柔区",
+				"value":"怀柔区"
+			},
+			{
+				"label":"平谷区",
+				"value":"平谷区"
+			},
+			{
+				"label":"密云区",
+				"value":"密云区"
+			},
+			{
+				"label":"延庆区",
+				"value":"延庆区"
+			}
+		],
+		"label":"北京市",
+		"value":"北京市"
+	},
+	{
+		"children":[
+			{
+				"label":"和平区",
+				"value":"和平区"
+			},
+			{
+				"label":"河东区",
+				"value":"河东区"
+			},
+			{
+				"label":"河西区",
+				"value":"河西区"
+			},
+			{
+				"label":"南开区",
+				"value":"南开区"
+			},
+			{
+				"label":"河北区",
+				"value":"河北区"
+			},
+			{
+				"label":"红桥区",
+				"value":"红桥区"
+			},
+			{
+				"label":"东丽区",
+				"value":"东丽区"
+			},
+			{
+				"label":"西青区",
+				"value":"西青区"
+			},
+			{
+				"label":"津南区",
+				"value":"津南区"
+			},
+			{
+				"label":"北辰区",
+				"value":"北辰区"
+			},
+			{
+				"label":"武清区",
+				"value":"武清区"
+			},
+			{
+				"label":"宝坻区",
+				"value":"宝坻区"
+			},
+			{
+				"label":"滨海新区",
+				"value":"滨海新区"
+			},
+			{
+				"label":"宁河区",
+				"value":"宁河区"
+			},
+			{
+				"label":"静海区",
+				"value":"静海区"
+			},
+			{
+				"label":"蓟州区",
+				"value":"蓟州区"
+			}
+		],
+		"label":"天津市",
+		"value":"天津市"
+	},
+	{
+		"children":[
+			{
+				"label":"石家庄市",
+				"value":"石家庄市"
+			},
+			{
+				"label":"唐山市",
+				"value":"唐山市"
+			},
+			{
+				"label":"秦皇岛市",
+				"value":"秦皇岛市"
+			},
+			{
+				"label":"邯郸市",
+				"value":"邯郸市"
+			},
+			{
+				"label":"邢台市",
+				"value":"邢台市"
+			},
+			{
+				"label":"保定市",
+				"value":"保定市"
+			},
+			{
+				"label":"张家口市",
+				"value":"张家口市"
+			},
+			{
+				"label":"承德市",
+				"value":"承德市"
+			},
+			{
+				"label":"沧州市",
+				"value":"沧州市"
+			},
+			{
+				"label":"廊坊市",
+				"value":"廊坊市"
+			},
+			{
+				"label":"衡水市",
+				"value":"衡水市"
+			}
+		],
+		"label":"河北省",
+		"value":"河北省"
+	},
+	{
+		"children":[
+			{
+				"label":"太原市",
+				"value":"太原市"
+			},
+			{
+				"label":"大同市",
+				"value":"大同市"
+			},
+			{
+				"label":"阳泉市",
+				"value":"阳泉市"
+			},
+			{
+				"label":"长治市",
+				"value":"长治市"
+			},
+			{
+				"label":"晋城市",
+				"value":"晋城市"
+			},
+			{
+				"label":"朔州市",
+				"value":"朔州市"
+			},
+			{
+				"label":"晋中市",
+				"value":"晋中市"
+			},
+			{
+				"label":"运城市",
+				"value":"运城市"
+			},
+			{
+				"label":"忻州市",
+				"value":"忻州市"
+			},
+			{
+				"label":"临汾市",
+				"value":"临汾市"
+			},
+			{
+				"label":"吕梁市",
+				"value":"吕梁市"
+			}
+		],
+		"label":"山西省",
+		"value":"山西省"
+	},
+	{
+		"children":[
+			{
+				"label":"呼和浩特市",
+				"value":"呼和浩特市"
+			},
+			{
+				"label":"包头市",
+				"value":"包头市"
+			},
+			{
+				"label":"乌海市",
+				"value":"乌海市"
+			},
+			{
+				"label":"赤峰市",
+				"value":"赤峰市"
+			},
+			{
+				"label":"通辽市",
+				"value":"通辽市"
+			},
+			{
+				"label":"鄂尔多斯市",
+				"value":"鄂尔多斯市"
+			},
+			{
+				"label":"呼伦贝尔市",
+				"value":"呼伦贝尔市"
+			},
+			{
+				"label":"巴彦淖尔市",
+				"value":"巴彦淖尔市"
+			},
+			{
+				"label":"乌兰察布市",
+				"value":"乌兰察布市"
+			},
+			{
+				"label":"兴安盟",
+				"value":"兴安盟"
+			},
+			{
+				"label":"锡林郭勒盟",
+				"value":"锡林郭勒盟"
+			},
+			{
+				"label":"阿拉善盟",
+				"value":"阿拉善盟"
+			}
+		],
+		"label":"内蒙古自治区",
+		"value":"内蒙古自治区"
+	},
+	{
+		"children":[
+			{
+				"label":"沈阳市",
+				"value":"沈阳市"
+			},
+			{
+				"label":"大连市",
+				"value":"大连市"
+			},
+			{
+				"label":"鞍山市",
+				"value":"鞍山市"
+			},
+			{
+				"label":"抚顺市",
+				"value":"抚顺市"
+			},
+			{
+				"label":"本溪市",
+				"value":"本溪市"
+			},
+			{
+				"label":"丹东市",
+				"value":"丹东市"
+			},
+			{
+				"label":"锦州市",
+				"value":"锦州市"
+			},
+			{
+				"label":"营口市",
+				"value":"营口市"
+			},
+			{
+				"label":"阜新市",
+				"value":"阜新市"
+			},
+			{
+				"label":"辽阳市",
+				"value":"辽阳市"
+			},
+			{
+				"label":"盘锦市",
+				"value":"盘锦市"
+			},
+			{
+				"label":"铁岭市",
+				"value":"铁岭市"
+			},
+			{
+				"label":"朝阳市",
+				"value":"朝阳市"
+			},
+			{
+				"label":"葫芦岛市",
+				"value":"葫芦岛市"
+			}
+		],
+		"label":"辽宁省",
+		"value":"辽宁省"
+	},
+	{
+		"children":[
+			{
+				"label":"长春市",
+				"value":"长春市"
+			},
+			{
+				"label":"吉林市",
+				"value":"吉林市"
+			},
+			{
+				"label":"四平市",
+				"value":"四平市"
+			},
+			{
+				"label":"辽源市",
+				"value":"辽源市"
+			},
+			{
+				"label":"通化市",
+				"value":"通化市"
+			},
+			{
+				"label":"白山市",
+				"value":"白山市"
+			},
+			{
+				"label":"松原市",
+				"value":"松原市"
+			},
+			{
+				"label":"白城市",
+				"value":"白城市"
+			},
+			{
+				"label":"延边朝鲜族自治州",
+				"value":"延边朝鲜族自治州"
+			}
+		],
+		"label":"吉林省",
+		"value":"吉林省"
+	},
+	{
+		"children":[
+			{
+				"label":"哈尔滨市",
+				"value":"哈尔滨市"
+			},
+			{
+				"label":"齐齐哈尔市",
+				"value":"齐齐哈尔市"
+			},
+			{
+				"label":"鸡西市",
+				"value":"鸡西市"
+			},
+			{
+				"label":"鹤岗市",
+				"value":"鹤岗市"
+			},
+			{
+				"label":"双鸭山市",
+				"value":"双鸭山市"
+			},
+			{
+				"label":"大庆市",
+				"value":"大庆市"
+			},
+			{
+				"label":"伊春市",
+				"value":"伊春市"
+			},
+			{
+				"label":"佳木斯市",
+				"value":"佳木斯市"
+			},
+			{
+				"label":"七台河市",
+				"value":"七台河市"
+			},
+			{
+				"label":"牡丹江市",
+				"value":"牡丹江市"
+			},
+			{
+				"label":"黑河市",
+				"value":"黑河市"
+			},
+			{
+				"label":"绥化市",
+				"value":"绥化市"
+			},
+			{
+				"label":"大兴安岭地区",
+				"value":"大兴安岭地区"
+			}
+		],
+		"label":"黑龙江省",
+		"value":"黑龙江省"
+	},
+	{
+		"children":[
+			{
+				"label":"黄浦区",
+				"value":"黄浦区"
+			},
+			{
+				"label":"徐汇区",
+				"value":"徐汇区"
+			},
+			{
+				"label":"长宁区",
+				"value":"长宁区"
+			},
+			{
+				"label":"静安区",
+				"value":"静安区"
+			},
+			{
+				"label":"普陀区",
+				"value":"普陀区"
+			},
+			{
+				"label":"虹口区",
+				"value":"虹口区"
+			},
+			{
+				"label":"杨浦区",
+				"value":"杨浦区"
+			},
+			{
+				"label":"闵行区",
+				"value":"闵行区"
+			},
+			{
+				"label":"宝山区",
+				"value":"宝山区"
+			},
+			{
+				"label":"嘉定区",
+				"value":"嘉定区"
+			},
+			{
+				"label":"浦东新区",
+				"value":"浦东新区"
+			},
+			{
+				"label":"金山区",
+				"value":"金山区"
+			},
+			{
+				"label":"松江区",
+				"value":"松江区"
+			},
+			{
+				"label":"青浦区",
+				"value":"青浦区"
+			},
+			{
+				"label":"奉贤区",
+				"value":"奉贤区"
+			},
+			{
+				"label":"崇明区",
+				"value":"崇明区"
+			}
+		],
+		"label":"上海市",
+		"value":"上海市"
+	},
+	{
+		"children":[
+			{
+				"label":"南京市",
+				"value":"南京市"
+			},
+			{
+				"label":"无锡市",
+				"value":"无锡市"
+			},
+			{
+				"label":"徐州市",
+				"value":"徐州市"
+			},
+			{
+				"label":"常州市",
+				"value":"常州市"
+			},
+			{
+				"label":"苏州市",
+				"value":"苏州市"
+			},
+			{
+				"label":"南通市",
+				"value":"南通市"
+			},
+			{
+				"label":"连云港市",
+				"value":"连云港市"
+			},
+			{
+				"label":"淮安市",
+				"value":"淮安市"
+			},
+			{
+				"label":"盐城市",
+				"value":"盐城市"
+			},
+			{
+				"label":"扬州市",
+				"value":"扬州市"
+			},
+			{
+				"label":"镇江市",
+				"value":"镇江市"
+			},
+			{
+				"label":"泰州市",
+				"value":"泰州市"
+			},
+			{
+				"label":"宿迁市",
+				"value":"宿迁市"
+			}
+		],
+		"label":"江苏省",
+		"value":"江苏省"
+	},
+	{
+		"children":[
+			{
+				"label":"杭州市",
+				"value":"杭州市"
+			},
+			{
+				"label":"宁波市",
+				"value":"宁波市"
+			},
+			{
+				"label":"温州市",
+				"value":"温州市"
+			},
+			{
+				"label":"嘉兴市",
+				"value":"嘉兴市"
+			},
+			{
+				"label":"湖州市",
+				"value":"湖州市"
+			},
+			{
+				"label":"绍兴市",
+				"value":"绍兴市"
+			},
+			{
+				"label":"金华市",
+				"value":"金华市"
+			},
+			{
+				"label":"衢州市",
+				"value":"衢州市"
+			},
+			{
+				"label":"舟山市",
+				"value":"舟山市"
+			},
+			{
+				"label":"台州市",
+				"value":"台州市"
+			},
+			{
+				"label":"丽水市",
+				"value":"丽水市"
+			}
+		],
+		"label":"浙江省",
+		"value":"浙江省"
+	},
+	{
+		"children":[
+			{
+				"label":"合肥市",
+				"value":"合肥市"
+			},
+			{
+				"label":"芜湖市",
+				"value":"芜湖市"
+			},
+			{
+				"label":"蚌埠市",
+				"value":"蚌埠市"
+			},
+			{
+				"label":"淮南市",
+				"value":"淮南市"
+			},
+			{
+				"label":"马鞍山市",
+				"value":"马鞍山市"
+			},
+			{
+				"label":"淮北市",
+				"value":"淮北市"
+			},
+			{
+				"label":"铜陵市",
+				"value":"铜陵市"
+			},
+			{
+				"label":"安庆市",
+				"value":"安庆市"
+			},
+			{
+				"label":"黄山市",
+				"value":"黄山市"
+			},
+			{
+				"label":"滁州市",
+				"value":"滁州市"
+			},
+			{
+				"label":"阜阳市",
+				"value":"阜阳市"
+			},
+			{
+				"label":"宿州市",
+				"value":"宿州市"
+			},
+			{
+				"label":"六安市",
+				"value":"六安市"
+			},
+			{
+				"label":"亳州市",
+				"value":"亳州市"
+			},
+			{
+				"label":"池州市",
+				"value":"池州市"
+			},
+			{
+				"label":"宣城市",
+				"value":"宣城市"
+			}
+		],
+		"label":"安徽省",
+		"value":"安徽省"
+	},
+	{
+		"children":[
+			{
+				"label":"福州市",
+				"value":"福州市"
+			},
+			{
+				"label":"厦门市",
+				"value":"厦门市"
+			},
+			{
+				"label":"莆田市",
+				"value":"莆田市"
+			},
+			{
+				"label":"三明市",
+				"value":"三明市"
+			},
+			{
+				"label":"泉州市",
+				"value":"泉州市"
+			},
+			{
+				"label":"漳州市",
+				"value":"漳州市"
+			},
+			{
+				"label":"南平市",
+				"value":"南平市"
+			},
+			{
+				"label":"龙岩市",
+				"value":"龙岩市"
+			},
+			{
+				"label":"宁德市",
+				"value":"宁德市"
+			}
+		],
+		"label":"福建省",
+		"value":"福建省"
+	},
+	{
+		"children":[
+			{
+				"label":"南昌市",
+				"value":"南昌市"
+			},
+			{
+				"label":"景德镇市",
+				"value":"景德镇市"
+			},
+			{
+				"label":"萍乡市",
+				"value":"萍乡市"
+			},
+			{
+				"label":"九江市",
+				"value":"九江市"
+			},
+			{
+				"label":"新余市",
+				"value":"新余市"
+			},
+			{
+				"label":"鹰潭市",
+				"value":"鹰潭市"
+			},
+			{
+				"label":"赣州市",
+				"value":"赣州市"
+			},
+			{
+				"label":"吉安市",
+				"value":"吉安市"
+			},
+			{
+				"label":"宜春市",
+				"value":"宜春市"
+			},
+			{
+				"label":"抚州市",
+				"value":"抚州市"
+			},
+			{
+				"label":"上饶市",
+				"value":"上饶市"
+			}
+		],
+		"label":"江西省",
+		"value":"江西省"
+	},
+	{
+		"children":[
+			{
+				"label":"济南市",
+				"value":"济南市"
+			},
+			{
+				"label":"青岛市",
+				"value":"青岛市"
+			},
+			{
+				"label":"淄博市",
+				"value":"淄博市"
+			},
+			{
+				"label":"枣庄市",
+				"value":"枣庄市"
+			},
+			{
+				"label":"东营市",
+				"value":"东营市"
+			},
+			{
+				"label":"烟台市",
+				"value":"烟台市"
+			},
+			{
+				"label":"潍坊市",
+				"value":"潍坊市"
+			},
+			{
+				"label":"济宁市",
+				"value":"济宁市"
+			},
+			{
+				"label":"泰安市",
+				"value":"泰安市"
+			},
+			{
+				"label":"威海市",
+				"value":"威海市"
+			},
+			{
+				"label":"日照市",
+				"value":"日照市"
+			},
+			{
+				"label":"临沂市",
+				"value":"临沂市"
+			},
+			{
+				"label":"德州市",
+				"value":"德州市"
+			},
+			{
+				"label":"聊城市",
+				"value":"聊城市"
+			},
+			{
+				"label":"滨州市",
+				"value":"滨州市"
+			},
+			{
+				"label":"菏泽市",
+				"value":"菏泽市"
+			}
+		],
+		"label":"山东省",
+		"value":"山东省"
+	},
+	{
+		"children":[
+			{
+				"label":"郑州市",
+				"value":"郑州市"
+			},
+			{
+				"label":"开封市",
+				"value":"开封市"
+			},
+			{
+				"label":"洛阳市",
+				"value":"洛阳市"
+			},
+			{
+				"label":"平顶山市",
+				"value":"平顶山市"
+			},
+			{
+				"label":"安阳市",
+				"value":"安阳市"
+			},
+			{
+				"label":"鹤壁市",
+				"value":"鹤壁市"
+			},
+			{
+				"label":"新乡市",
+				"value":"新乡市"
+			},
+			{
+				"label":"焦作市",
+				"value":"焦作市"
+			},
+			{
+				"label":"濮阳市",
+				"value":"濮阳市"
+			},
+			{
+				"label":"许昌市",
+				"value":"许昌市"
+			},
+			{
+				"label":"漯河市",
+				"value":"漯河市"
+			},
+			{
+				"label":"三门峡市",
+				"value":"三门峡市"
+			},
+			{
+				"label":"南阳市",
+				"value":"南阳市"
+			},
+			{
+				"label":"商丘市",
+				"value":"商丘市"
+			},
+			{
+				"label":"信阳市",
+				"value":"信阳市"
+			},
+			{
+				"label":"周口市",
+				"value":"周口市"
+			},
+			{
+				"label":"驻马店市",
+				"value":"驻马店市"
+			},
+			{
+				"label":"省直辖县级行政区划",
+				"value":"省直辖县级行政区划"
+			}
+		],
+		"label":"河南省",
+		"value":"河南省"
+	},
+	{
+		"children":[
+			{
+				"label":"武汉市",
+				"value":"武汉市"
+			},
+			{
+				"label":"黄石市",
+				"value":"黄石市"
+			},
+			{
+				"label":"十堰市",
+				"value":"十堰市"
+			},
+			{
+				"label":"宜昌市",
+				"value":"宜昌市"
+			},
+			{
+				"label":"襄阳市",
+				"value":"襄阳市"
+			},
+			{
+				"label":"鄂州市",
+				"value":"鄂州市"
+			},
+			{
+				"label":"荆门市",
+				"value":"荆门市"
+			},
+			{
+				"label":"孝感市",
+				"value":"孝感市"
+			},
+			{
+				"label":"荆州市",
+				"value":"荆州市"
+			},
+			{
+				"label":"黄冈市",
+				"value":"黄冈市"
+			},
+			{
+				"label":"咸宁市",
+				"value":"咸宁市"
+			},
+			{
+				"label":"随州市",
+				"value":"随州市"
+			},
+			{
+				"label":"恩施土家族苗族自治州",
+				"value":"恩施土家族苗族自治州"
+			},
+			{
+				"label":"省直辖县级行政区划",
+				"value":"省直辖县级行政区划"
+			}
+		],
+		"label":"湖北省",
+		"value":"湖北省"
+	},
+	{
+		"children":[
+			{
+				"label":"长沙市",
+				"value":"长沙市"
+			},
+			{
+				"label":"株洲市",
+				"value":"株洲市"
+			},
+			{
+				"label":"湘潭市",
+				"value":"湘潭市"
+			},
+			{
+				"label":"衡阳市",
+				"value":"衡阳市"
+			},
+			{
+				"label":"邵阳市",
+				"value":"邵阳市"
+			},
+			{
+				"label":"岳阳市",
+				"value":"岳阳市"
+			},
+			{
+				"label":"常德市",
+				"value":"常德市"
+			},
+			{
+				"label":"张家界市",
+				"value":"张家界市"
+			},
+			{
+				"label":"益阳市",
+				"value":"益阳市"
+			},
+			{
+				"label":"郴州市",
+				"value":"郴州市"
+			},
+			{
+				"label":"永州市",
+				"value":"永州市"
+			},
+			{
+				"label":"怀化市",
+				"value":"怀化市"
+			},
+			{
+				"label":"娄底市",
+				"value":"娄底市"
+			},
+			{
+				"label":"湘西土家族苗族自治州",
+				"value":"湘西土家族苗族自治州"
+			}
+		],
+		"label":"湖南省",
+		"value":"湖南省"
+	},
+	{
+		"children":[
+			{
+				"label":"广州市",
+				"value":"广州市"
+			},
+			{
+				"label":"韶关市",
+				"value":"韶关市"
+			},
+			{
+				"label":"深圳市",
+				"value":"深圳市"
+			},
+			{
+				"label":"珠海市",
+				"value":"珠海市"
+			},
+			{
+				"label":"汕头市",
+				"value":"汕头市"
+			},
+			{
+				"label":"佛山市",
+				"value":"佛山市"
+			},
+			{
+				"label":"江门市",
+				"value":"江门市"
+			},
+			{
+				"label":"湛江市",
+				"value":"湛江市"
+			},
+			{
+				"label":"茂名市",
+				"value":"茂名市"
+			},
+			{
+				"label":"肇庆市",
+				"value":"肇庆市"
+			},
+			{
+				"label":"惠州市",
+				"value":"惠州市"
+			},
+			{
+				"label":"梅州市",
+				"value":"梅州市"
+			},
+			{
+				"label":"汕尾市",
+				"value":"汕尾市"
+			},
+			{
+				"label":"河源市",
+				"value":"河源市"
+			},
+			{
+				"label":"阳江市",
+				"value":"阳江市"
+			},
+			{
+				"label":"清远市",
+				"value":"清远市"
+			},
+			{
+				"label":"东莞市",
+				"value":"东莞市"
+			},
+			{
+				"label":"中山市",
+				"value":"中山市"
+			},
+			{
+				"label":"潮州市",
+				"value":"潮州市"
+			},
+			{
+				"label":"揭阳市",
+				"value":"揭阳市"
+			},
+			{
+				"label":"云浮市",
+				"value":"云浮市"
+			}
+		],
+		"label":"广东省",
+		"value":"广东省"
+	},
+	{
+		"children":[
+			{
+				"label":"南宁市",
+				"value":"南宁市"
+			},
+			{
+				"label":"柳州市",
+				"value":"柳州市"
+			},
+			{
+				"label":"桂林市",
+				"value":"桂林市"
+			},
+			{
+				"label":"梧州市",
+				"value":"梧州市"
+			},
+			{
+				"label":"北海市",
+				"value":"北海市"
+			},
+			{
+				"label":"防城港市",
+				"value":"防城港市"
+			},
+			{
+				"label":"钦州市",
+				"value":"钦州市"
+			},
+			{
+				"label":"贵港市",
+				"value":"贵港市"
+			},
+			{
+				"label":"玉林市",
+				"value":"玉林市"
+			},
+			{
+				"label":"百色市",
+				"value":"百色市"
+			},
+			{
+				"label":"贺州市",
+				"value":"贺州市"
+			},
+			{
+				"label":"河池市",
+				"value":"河池市"
+			},
+			{
+				"label":"来宾市",
+				"value":"来宾市"
+			},
+			{
+				"label":"崇左市",
+				"value":"崇左市"
+			}
+		],
+		"label":"广西壮族自治区",
+		"value":"广西壮族自治区"
+	},
+	{
+		"children":[
+			{
+				"label":"海口市",
+				"value":"海口市"
+			},
+			{
+				"label":"三亚市",
+				"value":"三亚市"
+			},
+			{
+				"label":"三沙市",
+				"value":"三沙市"
+			},
+			{
+				"label":"儋州市",
+				"value":"儋州市"
+			},
+			{
+				"label":"省直辖县级行政区划",
+				"value":"省直辖县级行政区划"
+			}
+		],
+		"label":"海南省",
+		"value":"海南省"
+	},
+	{
+		"children":[
+			{
+				"label":"万州区",
+				"value":"万州区"
+			},
+			{
+				"label":"涪陵区",
+				"value":"涪陵区"
+			},
+			{
+				"label":"渝中区",
+				"value":"渝中区"
+			},
+			{
+				"label":"大渡口区",
+				"value":"大渡口区"
+			},
+			{
+				"label":"江北区",
+				"value":"江北区"
+			},
+			{
+				"label":"沙坪坝区",
+				"value":"沙坪坝区"
+			},
+			{
+				"label":"九龙坡区",
+				"value":"九龙坡区"
+			},
+			{
+				"label":"南岸区",
+				"value":"南岸区"
+			},
+			{
+				"label":"北碚区",
+				"value":"北碚区"
+			},
+			{
+				"label":"綦江区",
+				"value":"綦江区"
+			},
+			{
+				"label":"大足区",
+				"value":"大足区"
+			},
+			{
+				"label":"渝北区",
+				"value":"渝北区"
+			},
+			{
+				"label":"巴南区",
+				"value":"巴南区"
+			},
+			{
+				"label":"黔江区",
+				"value":"黔江区"
+			},
+			{
+				"label":"长寿区",
+				"value":"长寿区"
+			},
+			{
+				"label":"江津区",
+				"value":"江津区"
+			},
+			{
+				"label":"合川区",
+				"value":"合川区"
+			},
+			{
+				"label":"永川区",
+				"value":"永川区"
+			},
+			{
+				"label":"南川区",
+				"value":"南川区"
+			},
+			{
+				"label":"璧山区",
+				"value":"璧山区"
+			},
+			{
+				"label":"铜梁区",
+				"value":"铜梁区"
+			},
+			{
+				"label":"潼南区",
+				"value":"潼南区"
+			},
+			{
+				"label":"荣昌区",
+				"value":"荣昌区"
+			},
+			{
+				"label":"开州区",
+				"value":"开州区"
+			},
+			{
+				"label":"梁平区",
+				"value":"梁平区"
+			},
+			{
+				"label":"武隆区",
+				"value":"武隆区"
+			},
+			{
+				"label":"城口县",
+				"value":"城口县"
+			},
+			{
+				"label":"丰都县",
+				"value":"丰都县"
+			},
+			{
+				"label":"垫江县",
+				"value":"垫江县"
+			},
+			{
+				"label":"忠县",
+				"value":"忠县"
+			},
+			{
+				"label":"云阳县",
+				"value":"云阳县"
+			},
+			{
+				"label":"奉节县",
+				"value":"奉节县"
+			},
+			{
+				"label":"巫山县",
+				"value":"巫山县"
+			},
+			{
+				"label":"巫溪县",
+				"value":"巫溪县"
+			},
+			{
+				"label":"石柱土家族自治县",
+				"value":"石柱土家族自治县"
+			},
+			{
+				"label":"秀山土家族苗族自治县",
+				"value":"秀山土家族苗族自治县"
+			},
+			{
+				"label":"酉阳土家族苗族自治县",
+				"value":"酉阳土家族苗族自治县"
+			},
+			{
+				"label":"彭水苗族土家族自治县",
+				"value":"彭水苗族土家族自治县"
+			}
+		],
+		"label":"重庆市",
+		"value":"重庆市"
+	},
+	{
+		"children":[
+			{
+				"label":"成都市",
+				"value":"成都市"
+			},
+			{
+				"label":"自贡市",
+				"value":"自贡市"
+			},
+			{
+				"label":"攀枝花市",
+				"value":"攀枝花市"
+			},
+			{
+				"label":"泸州市",
+				"value":"泸州市"
+			},
+			{
+				"label":"德阳市",
+				"value":"德阳市"
+			},
+			{
+				"label":"绵阳市",
+				"value":"绵阳市"
+			},
+			{
+				"label":"广元市",
+				"value":"广元市"
+			},
+			{
+				"label":"遂宁市",
+				"value":"遂宁市"
+			},
+			{
+				"label":"内江市",
+				"value":"内江市"
+			},
+			{
+				"label":"乐山市",
+				"value":"乐山市"
+			},
+			{
+				"label":"南充市",
+				"value":"南充市"
+			},
+			{
+				"label":"眉山市",
+				"value":"眉山市"
+			},
+			{
+				"label":"宜宾市",
+				"value":"宜宾市"
+			},
+			{
+				"label":"广安市",
+				"value":"广安市"
+			},
+			{
+				"label":"达州市",
+				"value":"达州市"
+			},
+			{
+				"label":"雅安市",
+				"value":"雅安市"
+			},
+			{
+				"label":"巴中市",
+				"value":"巴中市"
+			},
+			{
+				"label":"资阳市",
+				"value":"资阳市"
+			},
+			{
+				"label":"阿坝藏族羌族自治州",
+				"value":"阿坝藏族羌族自治州"
+			},
+			{
+				"label":"甘孜藏族自治州",
+				"value":"甘孜藏族自治州"
+			},
+			{
+				"label":"凉山彝族自治州",
+				"value":"凉山彝族自治州"
+			}
+		],
+		"label":"四川省",
+		"value":"四川省"
+	},
+	{
+		"children":[
+			{
+				"label":"贵阳市",
+				"value":"贵阳市"
+			},
+			{
+				"label":"六盘水市",
+				"value":"六盘水市"
+			},
+			{
+				"label":"遵义市",
+				"value":"遵义市"
+			},
+			{
+				"label":"安顺市",
+				"value":"安顺市"
+			},
+			{
+				"label":"毕节市",
+				"value":"毕节市"
+			},
+			{
+				"label":"铜仁市",
+				"value":"铜仁市"
+			},
+			{
+				"label":"黔西南布依族苗族自治州",
+				"value":"黔西南布依族苗族自治州"
+			},
+			{
+				"label":"黔东南苗族侗族自治州",
+				"value":"黔东南苗族侗族自治州"
+			},
+			{
+				"label":"黔南布依族苗族自治州",
+				"value":"黔南布依族苗族自治州"
+			}
+		],
+		"label":"贵州省",
+		"value":"贵州省"
+	},
+	{
+		"children":[
+			{
+				"label":"昆明市",
+				"value":"昆明市"
+			},
+			{
+				"label":"曲靖市",
+				"value":"曲靖市"
+			},
+			{
+				"label":"玉溪市",
+				"value":"玉溪市"
+			},
+			{
+				"label":"保山市",
+				"value":"保山市"
+			},
+			{
+				"label":"昭通市",
+				"value":"昭通市"
+			},
+			{
+				"label":"丽江市",
+				"value":"丽江市"
+			},
+			{
+				"label":"普洱市",
+				"value":"普洱市"
+			},
+			{
+				"label":"临沧市",
+				"value":"临沧市"
+			},
+			{
+				"label":"楚雄彝族自治州",
+				"value":"楚雄彝族自治州"
+			},
+			{
+				"label":"红河哈尼族彝族自治州",
+				"value":"红河哈尼族彝族自治州"
+			},
+			{
+				"label":"文山壮族苗族自治州",
+				"value":"文山壮族苗族自治州"
+			},
+			{
+				"label":"西双版纳傣族自治州",
+				"value":"西双版纳傣族自治州"
+			},
+			{
+				"label":"大理白族自治州",
+				"value":"大理白族自治州"
+			},
+			{
+				"label":"德宏傣族景颇族自治州",
+				"value":"德宏傣族景颇族自治州"
+			},
+			{
+				"label":"怒江傈僳族自治州",
+				"value":"怒江傈僳族自治州"
+			},
+			{
+				"label":"迪庆藏族自治州",
+				"value":"迪庆藏族自治州"
+			}
+		],
+		"label":"云南省",
+		"value":"云南省"
+	},
+	{
+		"children":[
+			{
+				"label":"拉萨市",
+				"value":"拉萨市"
+			},
+			{
+				"label":"日喀则市",
+				"value":"日喀则市"
+			},
+			{
+				"label":"昌都市",
+				"value":"昌都市"
+			},
+			{
+				"label":"林芝市",
+				"value":"林芝市"
+			},
+			{
+				"label":"山南市",
+				"value":"山南市"
+			},
+			{
+				"label":"那曲市",
+				"value":"那曲市"
+			},
+			{
+				"label":"阿里地区",
+				"value":"阿里地区"
+			}
+		],
+		"label":"西藏自治区",
+		"value":"西藏自治区"
+	},
+	{
+		"children":[
+			{
+				"label":"西安市",
+				"value":"西安市"
+			},
+			{
+				"label":"铜川市",
+				"value":"铜川市"
+			},
+			{
+				"label":"宝鸡市",
+				"value":"宝鸡市"
+			},
+			{
+				"label":"咸阳市",
+				"value":"咸阳市"
+			},
+			{
+				"label":"渭南市",
+				"value":"渭南市"
+			},
+			{
+				"label":"延安市",
+				"value":"延安市"
+			},
+			{
+				"label":"汉中市",
+				"value":"汉中市"
+			},
+			{
+				"label":"榆林市",
+				"value":"榆林市"
+			},
+			{
+				"label":"安康市",
+				"value":"安康市"
+			},
+			{
+				"label":"商洛市",
+				"value":"商洛市"
+			}
+		],
+		"label":"陕西省",
+		"value":"陕西省"
+	},
+	{
+		"children":[
+			{
+				"label":"兰州市",
+				"value":"兰州市"
+			},
+			{
+				"label":"嘉峪关市",
+				"value":"嘉峪关市"
+			},
+			{
+				"label":"金昌市",
+				"value":"金昌市"
+			},
+			{
+				"label":"白银市",
+				"value":"白银市"
+			},
+			{
+				"label":"天水市",
+				"value":"天水市"
+			},
+			{
+				"label":"武威市",
+				"value":"武威市"
+			},
+			{
+				"label":"张掖市",
+				"value":"张掖市"
+			},
+			{
+				"label":"平凉市",
+				"value":"平凉市"
+			},
+			{
+				"label":"酒泉市",
+				"value":"酒泉市"
+			},
+			{
+				"label":"庆阳市",
+				"value":"庆阳市"
+			},
+			{
+				"label":"定西市",
+				"value":"定西市"
+			},
+			{
+				"label":"陇南市",
+				"value":"陇南市"
+			},
+			{
+				"label":"临夏回族自治州",
+				"value":"临夏回族自治州"
+			},
+			{
+				"label":"甘南藏族自治州",
+				"value":"甘南藏族自治州"
+			}
+		],
+		"label":"甘肃省",
+		"value":"甘肃省"
+	},
+	{
+		"children":[
+			{
+				"label":"西宁市",
+				"value":"西宁市"
+			},
+			{
+				"label":"海东市",
+				"value":"海东市"
+			},
+			{
+				"label":"海北藏族自治州",
+				"value":"海北藏族自治州"
+			},
+			{
+				"label":"黄南藏族自治州",
+				"value":"黄南藏族自治州"
+			},
+			{
+				"label":"海南藏族自治州",
+				"value":"海南藏族自治州"
+			},
+			{
+				"label":"果洛藏族自治州",
+				"value":"果洛藏族自治州"
+			},
+			{
+				"label":"玉树藏族自治州",
+				"value":"玉树藏族自治州"
+			},
+			{
+				"label":"海西蒙古族藏族自治州",
+				"value":"海西蒙古族藏族自治州"
+			}
+		],
+		"label":"青海省",
+		"value":"青海省"
+	},
+	{
+		"children":[
+			{
+				"label":"银川市",
+				"value":"银川市"
+			},
+			{
+				"label":"石嘴山市",
+				"value":"石嘴山市"
+			},
+			{
+				"label":"吴忠市",
+				"value":"吴忠市"
+			},
+			{
+				"label":"固原市",
+				"value":"固原市"
+			},
+			{
+				"label":"中卫市",
+				"value":"中卫市"
+			}
+		],
+		"label":"宁夏回族自治区",
+		"value":"宁夏回族自治区"
+	},
+	{
+		"children":[
+			{
+				"label":"乌鲁木齐市",
+				"value":"乌鲁木齐市"
+			},
+			{
+				"label":"克拉玛依市",
+				"value":"克拉玛依市"
+			},
+			{
+				"label":"吐鲁番市",
+				"value":"吐鲁番市"
+			},
+			{
+				"label":"哈密市",
+				"value":"哈密市"
+			},
+			{
+				"label":"昌吉回族自治州",
+				"value":"昌吉回族自治州"
+			},
+			{
+				"label":"博尔塔拉蒙古自治州",
+				"value":"博尔塔拉蒙古自治州"
+			},
+			{
+				"label":"巴音郭楞蒙古自治州",
+				"value":"巴音郭楞蒙古自治州"
+			},
+			{
+				"label":"阿克苏地区",
+				"value":"阿克苏地区"
+			},
+			{
+				"label":"克孜勒苏柯尔克孜自治州",
+				"value":"克孜勒苏柯尔克孜自治州"
+			},
+			{
+				"label":"喀什地区",
+				"value":"喀什地区"
+			},
+			{
+				"label":"和田地区",
+				"value":"和田地区"
+			},
+			{
+				"label":"伊犁哈萨克自治州",
+				"value":"伊犁哈萨克自治州"
+			},
+			{
+				"label":"塔城地区",
+				"value":"塔城地区"
+			},
+			{
+				"label":"阿勒泰地区",
+				"value":"阿勒泰地区"
+			},
+			{
+				"label":"自治区直辖县级行政区划",
+				"value":"自治区直辖县级行政区划"
+			}
+		],
+		"label":"新疆维吾尔自治区",
+		"value":"新疆维吾尔自治区"
+	},
+	{
+		"children":[
+			{
+				"label":"台北市",
+				"value":"台北市"
+			},
+			{
+				"label":"高雄市",
+				"value":"高雄市"
+			},
+			{
+				"label":"基隆市",
+				"value":"基隆市"
+			},
+			{
+				"label":"台中市",
+				"value":"台中市"
+			},
+			{
+				"label":"台南市",
+				"value":"台南市"
+			},
+			{
+				"label":"新竹市",
+				"value":"新竹市"
+			},
+			{
+				"label":"嘉义市",
+				"value":"嘉义市"
+			}
+		],
+		"label":"台湾省",
+		"value":"台湾省"
+	},
+	{
+		"children":[
+			{
+				"label":"中西區",
+				"value":"中西區"
+			},
+			{
+				"label":"灣仔區",
+				"value":"灣仔區"
+			},
+			{
+				"label":"東區",
+				"value":"東區"
+			},
+			{
+				"label":"南區",
+				"value":"南區"
+			},
+			{
+				"label":"油尖旺區",
+				"value":"油尖旺區"
+			},
+			{
+				"label":"深水埗區",
+				"value":"深水埗區"
+			},
+			{
+				"label":"九龍城區",
+				"value":"九龍城區"
+			},
+			{
+				"label":"黃大仙區",
+				"value":"黃大仙區"
+			},
+			{
+				"label":"觀塘區",
+				"value":"觀塘區"
+			},
+			{
+				"label":"荃灣區",
+				"value":"荃灣區"
+			},
+			{
+				"label":"屯門區",
+				"value":"屯門區"
+			},
+			{
+				"label":"元朗區",
+				"value":"元朗區"
+			},
+			{
+				"label":"北區",
+				"value":"北區"
+			},
+			{
+				"label":"大埔區",
+				"value":"大埔區"
+			},
+			{
+				"label":"西貢區",
+				"value":"西貢區"
+			},
+			{
+				"label":"沙田區",
+				"value":"沙田區"
+			},
+			{
+				"label":"葵青區",
+				"value":"葵青區"
+			},
+			{
+				"label":"離島區",
+				"value":"離島區"
+			}
+		],
+		"label":"香港特别行政区",
+		"value":"香港特别行政区"
+	},
+	{
+		"children":[
+			{
+				"label":"花地瑪堂區",
+				"value":"花地瑪堂區"
+			},
+			{
+				"label":"花王堂區",
+				"value":"花王堂區"
+			},
+			{
+				"label":"望德堂區",
+				"value":"望德堂區"
+			},
+			{
+				"label":"大堂區",
+				"value":"大堂區"
+			},
+			{
+				"label":"風順堂區",
+				"value":"風順堂區"
+			},
+			{
+				"label":"嘉模堂區",
+				"value":"嘉模堂區"
+			},
+			{
+				"label":"路氹填海區",
+				"value":"路氹填海區"
+			},
+			{
+				"label":"聖方濟各堂區",
+				"value":"聖方濟各堂區"
+			}
+		],
+		"label":"澳门特别行政区",
+		"value":"澳门特别行政区"
+	}
+]

+ 165 - 68
src/layout/Navbar.vue

@@ -1,104 +1,197 @@
 <template>
-  <div style="height: 100%">
-    <div v-show="isLogin" class="left-menu">
+    <div style="height: 100%">
+        <div v-show="isLogin" class="left-menu">
 
-      <div style="background-color: #0053cb;width: 60px;height: 60px;display: inline-block">
+            <div style="background-color: #0053cb;width: 60px;height: 60px;display: inline-block">
         <span class="c-icon collapse-btn" @click="toggleSideBar">
           <i-ant-design-unordered-list-outlined/>
         </span>
-      </div>
+            </div>
 
-      <div class="title">
-        <el-avatar class="title-logo" shape="square" :size="32" :src="logo"></el-avatar>
-        <span class="title-content">智慧运营管理中心</span>
-      </div>
+            <div class="title">
+                <el-avatar class="title-logo" shape="square" :size="32" :src="logo"></el-avatar>
+                <span class="title-content">智慧运营管理中心</span>
+            </div>
 
-      <el-select class="select-btn" v-model="value" >
-        <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
-        </el-option>
-      </el-select>
+            <el-select class="select-btn" v-model="value">
+                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
+                </el-option>
+            </el-select>
 
-    </div>
-    <div v-show="isLogin" class="right-menu">
-      <div class="header-btn">
+        </div>
+        <div v-show="isLogin" class="right-menu">
+            <div class="header-btn">
         <span class="c-icon" style="margin: 10px 4px;padding: 6px 10px 0">
-          <i-ant-design-desktop-outlined />
+          <i-ant-design-desktop-outlined/>
         </span>
-        <span class="c-icon" style="margin: 10px 4px;padding: 6px 10px 0">
-          <i-ant-design-mobile-outlined />
+                <span class="c-icon" style="margin: 10px 4px;padding: 6px 10px 0">
+          <i-ant-design-mobile-outlined/>
         </span>
-        <span class="c-icon" style="margin: 10px 4px;padding: 6px 10px 0">
-          <i-ant-design-question-circle-outlined />
+                <span class="c-icon" style="margin: 10px 4px;padding: 6px 10px 0">
+          <i-ant-design-question-circle-outlined/>
         </span>
 
 
-        <el-avatar :size="30" style="vertical-align: top;margin: 15px 0 0 15px;background-color: #fde3cf;color: #f56a00">
+                <el-avatar :size="30"
+                           style="vertical-align: top;margin: 15px 0 0 15px;background-color: #fde3cf;color: #f56a00">
           <span style="font-size: 20px;display: inline-block;margin-top: 3px">
-              <i-ant-design-user-outlined  />
+              <i-ant-design-user-outlined/>
             </span>
-        </el-avatar>
+                </el-avatar>
 
 
-        <el-dropdown class="userinfo" >
+                <el-dropdown class="userinfo" @command="handleCommand">
           <span class="el-dropdown-link">
             <span style="vertical-align: middle;font-size: 20px;margin-right: 4px">
-              <i-ant-design-user-outlined  />
+              <i-ant-design-user-outlined/>
             </span>
-            user001
+            {{ $store.state.user.userInfo.user_name }}
           </span>
-          <el-dropdown-menu slot="dropdown" >
-            <el-dropdown-item>修改密码</el-dropdown-item>
-            <el-dropdown-item>退出登录</el-dropdown-item>
-          </el-dropdown-menu>
-        </el-dropdown>
+                    <el-dropdown-menu slot="dropdown">
+                        <el-dropdown-item command="updPwd">修改密码</el-dropdown-item>
+                        <el-dropdown-item command="logout">退出登录</el-dropdown-item>
+                    </el-dropdown-menu>
+                </el-dropdown>
 
-      </div>
+            </div>
+        </div>
+
+
+        <el-dialog v-if="showUpdPwd" width="500px" :visible="true" title="修改密码">
+            <el-form ref="updPwdForm" :model="updPwdForm" :rules="updPwdFormRules" label-position="right" label-width="90px">
+                <el-form-item  label="原密码:" prop="oldPwd">
+                    <el-input v-model="updPwdForm.oldPwd" type="password" show-password/>
+                </el-form-item>
+                <el-form-item label="新密码:" prop="password">
+                    <el-input v-model="updPwdForm.password" type="password" show-password/>
+                </el-form-item>
+                <el-form-item label="确认密码:" prop="confirmPwd">
+                    <el-input v-model="updPwdForm.confirmPwd" type="password" show-password/>
+                </el-form-item>
+            </el-form>
+            <template #footer>
+                <div style="width: 100%;text-align: center">
+                    <el-button style="width: 80px;height: 30px;padding: 0" @click="showUpdPwd=false">取消</el-button>
+                    <el-button type="primary" style="width: 80px;height: 30px;padding: 0" @click="updPwd">确定</el-button>
+                </div>
+            </template>
+        </el-dialog>
     </div>
-  </div>
 </template>
 
 <script>
 import hamburger from '@/components/Hamburger/index'
 import logo from '@/assets/background/logo.png'
+import {updPwd} from "@/api/user/user";
 
 export default {
-  components: {hamburger},
-  props: {
-    leftVisible: Boolean,
-    //isLogin: Boolean,
-  },
-  data() {
-    return {
-      logo,
-      value: '1',
-      options: [
-        {
-          label: '主语国际3号楼',
-          value: '1'
+    components: {hamburger},
+    props: {
+        leftVisible: Boolean,
+        //isLogin: Boolean,
+    },
+    data() {
+        let validatePass = (rule, value, callback) => {
+            if (value === '') {
+                callback(new Error('请输入密码'));
+            } else {
+                if (this.updPwdForm.confirmPwd !== '') {
+                    this.$refs.updPwdForm.validateField('confirmPwd');
+                }
+                callback();
+            }
+        };
+        let validatePass2 = (rule, value, callback) => {
+            if (value === '') {
+                callback(new Error('请再次输入密码'));
+            } else if (value !== this.updPwdForm.password) {
+                callback(new Error('两次输入密码不一致!'));
+            } else {
+                callback();
+            }
+        };
+        return {
+            logo,
+            showUpdPwd: false,
+            value: '1',
+            options: [
+                {
+                    label: '主语国际3号楼',
+                    value: '1'
+                }
+            ],
+            updPwdForm: {
+                oldPwd: '',
+                password: '',
+                confirmPwd: '',
+            },
+            updPwdFormRules: {
+                oldPwd: [
+                    { required: true, message: '请输入旧密码', trigger: 'change' }
+                ],
+                password: [
+                    { validator: validatePass, required: true, trigger: 'change' }
+                ],
+                confirmPwd: [
+                    { validator: validatePass2, required: true, trigger: 'change' }
+                ],
+            },
+            isLogin: true,
+            opened: false,
+            name: "test",
+            circleUrl: "https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png",
+            isCollapse: false,
+            tips: {
+                labtap: require('@/assets/tips/diannao@3x.png'),
+                phone: require('@/assets/tips/shouji-4@3x.png'),
+                help: require('@/assets/tips/help@3x.png'),
+                notification: require('@/assets/tips/tongzhi@3x.png')
+            }
+        }
+    },
+    mounted() {
+        this.$emit('collapseControl', this.isCollapse);
+    },
+    methods: {
+        toggleSideBar() {
+            this.isCollapse = !this.isCollapse;
+            this.$emit('collapseControl', this.isCollapse);
+        },
+        handleCommand(command) {
+            if (command == 'logout') {
+                this.logout()
+            } else if (command == 'updPwd') {
+                this.showUpdPwd = true;
+                this.updPwdForm = {
+                    oldPwd: '',
+                    password: '',
+                    confirmPwd: '',
+                }
+            }
+        },
+        updPwd() {
+          this.$refs.updPwdForm.validate(valid=>{
+              if (valid) {
+                  let user = this.$store.state.user.userInfo
+                  updPwd(user.id, user.user_name, this.updPwdForm.password).then(res=>{
+                      let data = res.data;
+                      if (data.code==0) {
+                          this.$message.success('修改成功');
+                      } else {
+                          this.$message.error(data.message);
+                      }
+                  })
+              }
+          })
+        },
+        logout() {
+            this.$store.state.token = '';
+            localStorage.removeItem('Authorization');
+            localStorage.removeItem('UserInfo');
+            localStorage.clear();
+            this.$router.push('/login')
         }
-      ],
-      isLogin: true,
-      opened: false,
-      name: "test",
-      circleUrl: "https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png",
-      isCollapse: false,
-      tips: {
-        labtap: require('@/assets/tips/diannao@3x.png'),
-        phone: require('@/assets/tips/shouji-4@3x.png'),
-        help: require('@/assets/tips/help@3x.png'),
-        notification: require('@/assets/tips/tongzhi@3x.png')
-      }
-    }
-  },
-  mounted() {
-    this.$emit('collapseControl', this.isCollapse);
-  },
-  methods: {
-    toggleSideBar() {
-      this.isCollapse = !this.isCollapse;
-      this.$emit('collapseControl', this.isCollapse);
     }
-  }
 }
 </script>
 
@@ -129,12 +222,14 @@ export default {
     line-height: 60px;
     color: white;
     margin-left: 15px;
+
     .title-logo {
       vertical-align: top;
       margin-top: 15px;
       margin-right: 18px;
       background-color: transparent;
     }
+
     .title-content {
       font-size: 22px;
       letter-spacing: 8px;
@@ -170,6 +265,7 @@ export default {
 
   .header-btn {
   }
+
   .userinfo {
     cursor: default;
     color: white;
@@ -181,6 +277,7 @@ export default {
     padding: 6px 15px;
     margin-left: 5px;
     border-radius: 20px;
+
     &:hover {
       background: #3c9cd3;
     }

+ 1 - 1
src/main.js

@@ -5,7 +5,7 @@ import store from "./store";
 import axios from "axios";
 
 Vue.config.productionTip = false;
-
+import "./style/global.css"
 import ElementUI from "element-ui";
 import "./style/element-variables.scss";
 import locale from "element-ui/lib/locale/lang/zh-CN";

+ 1 - 1
src/router/index.js

@@ -6,7 +6,7 @@ Vue.use(VueRouter);
 const routes = [
   {
     path: "/",
-    redirect: "/login",
+    redirect: "/home",
   },
   {
     path: '/login',

+ 9 - 7
src/store/modules/user.js

@@ -4,19 +4,18 @@ const user = {
     namespaced: true,
     state: {
         token: getToken(),
-        name: '',
-        avatar: '',
+        userInfo: {
+            id: '',
+            username : '',
+        },
         role: []
     },
     mutations: {
         SET_TOKEN: (state, token) => {
             state.token = token;
         },
-        SET_NAME: (state, name) => {
-            state.name = name;
-        },
-        SET_AVATAR: (state, avatar) => {
-            state.avatar = avatar;
+        SET_USER_INFO: (state, info) => {
+            state.userInfo = info;
         },
         SET_ROLES: (state, roles) => {
             state.roles = roles;
@@ -30,7 +29,10 @@ const user = {
                 login({ username: username.trim(), password: password }).then(res => {
                     const { data } = res;
                     commit('SET_TOKEN', data.data);
+                    commit('SET_USER_INFO', data.message);
                     localStorage.setItem('Authorization',data.data);
+                    console.log(data.message)
+                    localStorage.setItem('UserInfo',data.message);
                     resolve(data);
                 }).catch(error => {
                     console.log('登陆失败');

+ 10 - 0
src/style/global.css

@@ -0,0 +1,10 @@
+/* el-loading样式 */
+/* 修改动画的大小  给文字加粗效果 */
+.el-loading-spinner {
+  font-size: 40px;
+  font-weight: bold;
+}
+/* 修改文字的大小 */
+.el-loading-mask .el-loading-spinner .el-loading-text {
+  font-size: 18px;
+}

+ 1 - 1
src/utils/request.js

@@ -6,7 +6,7 @@ import { MessageBox, Message } from 'element-ui'
 // 创建axios实例
 const service = axios.create({
   baseURL: '/api',
-  timeout: 6000 // 请求超时
+  timeout: 8000000 // 请求超时
 })
 
 // 请求拦截

+ 90 - 36
src/views/dataManagement/basicInfo/accessedSystem.vue

@@ -3,54 +3,95 @@
     <div class="info-outer">
       <div class="info">底层接入系统</div>
     </div>
-    <div class="center">
-      <el-upload action="#" list-type="picture-card" :auto-upload="false">
-        <i slot="default" class="el-icon-plus"></i>
-        <div slot="file" slot-scope="{ file }">
-          <img class="el-upload-list__item-thumbnail" :src="file.url" alt="" />
-          <span class="el-upload-list__item-actions">
-            <span
-              class="el-upload-list__item-preview"
-              @click="handlePictureCardPreview(file)"
-            >
-              <i class="el-icon-zoom-in"></i>
-            </span>
-            <span
-              v-if="!disabled"
-              class="el-upload-list__item-delete"
-              @click="handleDownload(file)"
-            >
-              <i class="el-icon-download"></i>
-            </span>
-            <span
-              v-if="!disabled"
-              class="el-upload-list__item-delete"
-              @click="handleRemove(file)"
-            >
-              <i class="el-icon-delete"></i>
-            </span>
-          </span>
-        </div>
-      </el-upload>
-      <el-dialog :visible.sync="dialogVisible">
-        <img width="100%" :src="dialogImageUrl" alt="" />
-      </el-dialog>
+    <div
+      class="center"
+      v-loading="loading"
+      element-loading-text="拼命加载中"
+      element-loading-spinner="el-icon-loading"
+      element-loading-background="rgba(0, 0, 0, 0.8)"
+    >
+      <div class="img-box" v-for="item in imgArr" :key="item.id">
+        <img :src="item.picture" width="300" height="180" />
+      </div>
+      <div class="img-box">
+        <el-upload
+          class="upload-demo"
+          :limit="1"
+          action=""
+          :http-request="uploadSectionFile"
+          :on-preview="handlePreview"
+          :on-remove="handleRemove"
+          :file-list="fileList"
+          :before-upload="beforeAvatarUpload"
+          list-type="picture"
+        >
+          <el-button size="small" type="primary">点击上传</el-button>
+          <div slot="tip" class="el-upload__tip">
+            仅支持上传单张jpg或者png格式的图片,且不超过500kb
+          </div>
+        </el-upload>
+      </div>
     </div>
   </div>
 </template>
 
 <script>
+import { getUnderlyingSystem, addUnderlyingSystem } from "@/api/data/basicInfo";
 export default {
   data() {
     return {
+      fileList: [],
       dialogImageUrl: "",
       dialogVisible: false,
       disabled: false,
+      imgArr: [],
+      loading: false,
     };
   },
+  mounted() {
+    this.getUnderlyingSystemData();
+  },
   methods: {
-    handleRemove(file) {
-      console.log(file);
+    getUnderlyingSystemData() {
+      this.loading = true;
+      getUnderlyingSystem()
+        .then((res) => {
+          if (res.data.code === 0 && res.data.data.length > 0) {
+            this.loading = false;
+            this.imgArr = [];
+            res.data.data.forEach((v) => {
+              this.imgArr.push({
+                id: v.id,
+                picture: v.picture,
+              });
+            });
+          }
+        })
+        .catch((err) => {
+          this.loading = false;
+        });
+    },
+    beforeAvatarUpload(response, file, fileList) {
+      // console.log(response);
+      return true;
+    },
+    // 上传图片成功后 -- 重新刷新当前页面
+    uploadSectionFile(params) {
+      let picture = params.file;
+      addUnderlyingSystem(picture).then((res) => {
+        if (res.data.code === 0) {
+          this.getUnderlyingSystemData();
+          this.fileList = [];
+        }
+      });
+    },
+    handleRemove(file, fileList) {
+      // console.log(file, fileList);
+      // let removeUrl = file.respone.data.url;
+      // this.allImageUrl = this.allImageUrl.filter((item) => item != removeUrl);
+    },
+    handlePreview(file) {
+      // console.log(file);
     },
     handlePictureCardPreview(file) {
       this.dialogImageUrl = file.url;
@@ -83,12 +124,25 @@ export default {
     width: 98%;
     margin: 0 auto;
     height: calc(100% - 80px);
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: flex-start;
+    overflow-y: auto;
+
+    .img-box {
+      width: 300px;
+      height: 180px;
+      padding: 10px;
+      border: 1px solid rgb(128, 128, 128, 0.5);
+      border-radius: 5px;
+      margin-right: 20px;
+    }
     /deep/.el-upload--picture-card {
       width: 300px;
       height: 200px;
       border: 1px solid #c0ccda;
-    //   margin-right: 1000px;
-    //   margin-top: 20px;
+      //   margin-right: 1000px;
+      //   margin-top: 20px;
     }
 
     /deep/.el-upload--picture-card i {

+ 27 - 2
src/views/dataManagement/basicInfo/buildingInfo.vue

@@ -13,6 +13,8 @@
       <el-table-column prop="buildingName" label="楼宇名称"> </el-table-column>
       <el-table-column prop="contact_person" label="联系人"> </el-table-column>
       <el-table-column prop="contact_phone" label="联系方式"> </el-table-column>
+      <el-table-column prop="floor" label="楼层"> </el-table-column>
+      <el-table-column prop="date" label="日期"> </el-table-column>
       <el-table-column prop="operation" label="操作">
         <template slot-scope="scope">
           <el-button
@@ -39,14 +41,15 @@
         </template>
       </el-table-column>
     </el-table>
-    <div class="bottom">
+    <!-- <div class="bottom">
       <page :paginationData="paginationData"></page>
-    </div>
+    </div> -->
   </div>
 </template>
 
 <script>
 import page from "@/components/pagination/index";
+import { getBuildingList } from "@/api/data/basicInfo";
 export default {
   components: { page },
   data() {
@@ -83,10 +86,32 @@ export default {
       },
     };
   },
+  mounted() {
+    this.getBuildingData();
+  },
   methods: {
     getTableData(val) {},
     handleSizeChange(val) {},
     handleSelectionChange() {},
+    getBuildingData() {
+      this.tableData = [];
+      getBuildingList().then((res) => {
+        if (res.data.code === 0) {
+          let data = res.data.data;
+          this.tableData = data.map((v) => {
+            return {
+              buildingName: v.name,
+              contact_person: v.contact_person,
+              contact_phone: v.contact_information,
+              date: v.date,
+              floor: v.floor,
+              area: v.area,
+              trem: v.trem,
+            };
+          });
+        }
+      });
+    },
   },
 };
 </script>

+ 38 - 50
src/views/dataManagement/basicInfo/corporationInfo.vue

@@ -52,47 +52,33 @@
         <el-input v-model="form.contact_num"></el-input>
       </el-form-item>
       <el-form-item style="width: 500px" label="上传图片:">
+        <div
+          style="
+            width: 200px;
+            height: 150px;
+            border: 1px solid rgba(0, 0, 0, 0.5);
+            border-radius: 4px;
+            margin-right: 30px;
+          "
+        >
+          <img :src="displayImg" width="200" height="150" />
+        </div>
         <el-upload
+          class="upload-demo"
+          :limit="1"
           action=""
           :http-request="uploadSectionFile"
-          list-type="picture-card"
-          :before-upload="beforeAvatarUpload"
+          :on-preview="handlePreview"
+          :on-remove="handleRemove"
           :file-list="fileList"
+          :before-upload="beforeAvatarUpload"
+          list-type="picture"
         >
-          <i slot="default" class="el-icon-plus"></i>
-          <div slot="file" slot-scope="{ file }">
-            <img
-              class="el-upload-list__item-thumbnail"
-              :src="file.url"
-              alt=""
-            />
-            <span class="el-upload-list__item-actions">
-              <span
-                class="el-upload-list__item-preview"
-                @click="handlePictureCardPreview(file)"
-              >
-                <i class="el-icon-zoom-in"></i>
-              </span>
-              <span
-                v-if="!disabled"
-                class="el-upload-list__item-delete"
-                @click="handleDownload(file)"
-              >
-                <i class="el-icon-download"></i>
-              </span>
-              <span
-                v-if="!disabled"
-                class="el-upload-list__item-delete"
-                @click="handleRemove(file)"
-              >
-                <i class="el-icon-delete"></i>
-              </span>
-            </span>
+          <el-button size="small" type="primary">点击上传</el-button>
+          <div slot="tip" class="el-upload__tip">
+            仅支持上传单张jpg或者png格式的图片,且不超过500kb
           </div>
         </el-upload>
-        <el-dialog :visible.sync="dialogVisible">
-          <img width="100%" :src="dialogImageUrl" alt="" />
-        </el-dialog>
       </el-form-item>
     </el-form>
     <div class="bottom">
@@ -112,7 +98,7 @@ export default {
   data() {
     return {
       fileList: [],
-      currentFile: "",
+      displayImg: "",
       dynamicTags: [
         {
           id: 1,
@@ -140,7 +126,7 @@ export default {
         profile: "",
         contact_person: "",
         contact_num: "",
-        pictureList: [],
+        picture: "",
       },
       action: "", //上传地址
       inputValue: "",
@@ -165,17 +151,20 @@ export default {
           this.form.profile = obj.introduction;
           this.form.contact_num = obj.contact_information;
           this.form.contact_person = obj.contact_person;
+          this.displayImg = obj.pictures[0];
         }
       });
     },
-    handleRemove(file) {
-      console.log(file);
-      console.log(this.fileList);
+    handleRemove(file, fileList) {
+      // console.log(file, fileList);
       // let removeUrl = file.respone.data.url;
       // this.allImageUrl = this.allImageUrl.filter((item) => item != removeUrl);
     },
+    handlePreview(file) {
+      // console.log(file);
+    },
     handleDownload(file) {
-      console.log(file);
+      // console.log(file);
     },
     handlePictureCardPreview(file) {
       this.dialogImageUrl = file.url;
@@ -199,20 +188,19 @@ export default {
     },
     showInput() {
       this.inputVisible = true;
-      this.$nextTick((_) => {
+      setTimeout(() => {
         this.$refs.saveTagInput.$refs.input.focus();
-      });
+      }, 500);
+      // this.$nextTick((_) => {
+      //   this.$refs.saveTagInput.$refs.input.focus();
+      // });
     },
     beforeAvatarUpload(response, file, fileList) {
-      console.log(response);
+      // console.log(response);
       return true;
     },
     uploadSectionFile(params) {
-      debugger;
-      console.log(params);
-      let picture = params.file;
-      this.currentFile = params.file;
-      this.form.pictureList.push(picture);
+      this.form.picture = params.file;
     },
     resetEvent() {
       this.displayCompanyInfo();
@@ -224,13 +212,13 @@ export default {
         introduction: this.form.profile,
         contact_person: this.form.contact_person,
         contact_information: this.form.contact_num,
-        picture: this.form.pictureList,
+        picture: this.form.picture,
       };
-      debugger;
       editCompanyBasicInfo(options).then((res) => {
         if (res.data.code === 0) {
           setTimeout(() => {
             this.displayCompanyInfo();
+            this.fileList = [];
           }, 500);
         }
       });

+ 5 - 5
src/views/dataManagement/basicInfo/index.vue

@@ -5,16 +5,16 @@
       <el-button @click="Show2()">楼宇基本信息</el-button>
       <el-button @click="Show3()">底层系统信息</el-button>
     </div>
-    <corporation-info v-if="show1" class="content"></corporation-info>
-    <building-info v-if="show2" class="content"></building-info>
+    <CorporationInfo v-if="show1" class="content"></CorporationInfo>
+    <buildingInfo v-if="show2" class="content"></buildingInfo>
     <accessedSystem v-if="show3" class="content"></accessedSystem>
   </div>
 </template>
 
 <script>
-import CorporationInfo from "./corporationInfo";
-import buildingInfo from "./buildingInfo";
-import accessedSystem from "./accessedSystem";
+import CorporationInfo from "@/views/dataManagement/basicInfo/corporationInfo.vue";
+import buildingInfo from "@/views/dataManagement/basicInfo/buildingInfo.vue";
+import accessedSystem from "@/views/dataManagement/basicInfo/accessedSystem.vue";
 export default {
   components: { CorporationInfo, buildingInfo, accessedSystem },
   data() {

+ 21 - 8
src/views/permissionManagement/decisiongroup/index.vue

@@ -1,27 +1,40 @@
 <template>
     <div style="position: relative; height: 100%;">
         <div class="header">
-            <el-button ref="buttonFocus" class="roleDetail" @click="Show1()">权限详情</el-button>
-            <el-button class="roleMember" @click="Show2()">成员列表</el-button>
+            <Tags :tags.sync="tags" />
         </div>
-        <rolemembers-list v-if="memberShow"></rolemembers-list>
-        <permission-detail v-if="detailShow"></permission-detail>
+        <rolemembers-list :item="item" v-if="tags[1].show"></rolemembers-list>
+        <permission-detail :item="item" v-if="tags[0].show"></permission-detail>
     </div>
 </template>
 
 <script>
+import Tags from "@/components/tags/index.vue";
 import PermissionDetail from './permissionDetail';
 import RolemembersList from './rolemembersList';
 export default {
-    components: { RolemembersList, PermissionDetail },
+    props: {
+        item: Object,
+    },
+    components: { Tags, RolemembersList, PermissionDetail },
     data() {
         return {
-            memberShow:false,
-            detailShow:true
+            tags: [
+                {
+                    label: '权限详情',
+                    value: '0',
+                    show: true,
+                },
+                {
+                    label: '成员列表',
+                    value: '1',
+                    show: false,
+                }
+            ],
         }
     },
     mounted(){
-        this.$refs.buttonFocus.$el.focus();
+
     },
     methods:{
         Show1(){

+ 92 - 149
src/views/permissionManagement/decisiongroup/permissionDetail.vue

@@ -1,11 +1,11 @@
 <template>
     <div>
-        <el-form :model="form" label-position="left" label-width="80px" :disabled="disabled">
+        <el-form :model="form" label-position="left" label-width="80px" >
             <el-form-item :model="form.roleName" label="角色名称:">
-                <el-input style="width: 50%;" placeholder="决策组-1" type="text"></el-input>
+                <el-input :value="form.role_name" style="width: 50%;" type="text"></el-input>
             </el-form-item>
             <el-form-item :model="form.roleDesc" label="角色描述:">
-                <el-input type="textarea" placeholder="请输入" v-model="textarea" maxlength="200" show-word-limit></el-input>
+                <el-input type="textarea"  :value="form.role_describe" maxlength="200" show-word-limit></el-input>
             </el-form-item>
             <div class="permissionType">
                 <el-tabs v-model="activeName" @tab-click="handleClick">
@@ -17,31 +17,13 @@
                         <template slot="title">
                             <i :class="isActive('1') !== -1 ? 'el-icon-caret-bottom' : 'el-icon-caret-right'"></i>前端
                         </template>
-                        <div style="display: flex; margin-left: 20px;">
-                            <div>
-                                <el-tree :data="data1" :props="defaultProps" show-checkbox node-key="id"
-                                    @node-click="handleNodeClick">
-                                </el-tree>
-                                <el-tree :data="data2" :props="defaultProps" show-checkbox node-key="id"
-                                    @node-click="handleNodeClick">
-                                </el-tree>
-
-                                <el-tree :data="data3" :props="defaultProps" show-checkbox node-key="id"
-                                    @node-click="handleNodeClick">
-                                </el-tree>
-                            </div>
-                            <div style="margin-left: 200px">
-                                <el-tree :data="data4" :props="defaultProps" show-checkbox node-key="id"
-                                    @node-click="handleNodeClick">
+                        <el-row align="left" :gutter="8" style="text-align: left;box-sizing: border-box;padding: 0 30px;height: 200px;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">
                                 </el-tree>
-                                <el-tree :data="data5" :props="defaultProps" show-checkbox node-key="id"
-                                    @node-click="handleNodeClick">
-                                </el-tree>
-                                <el-tree :data="data6" :props="defaultProps" show-checkbox node-key="id"
-                                    @node-click="handleNodeClick">
-                                </el-tree>
-                            </div>
-                        </div>
+                            </el-col>
+                        </el-row>
                     </el-collapse-item>
                     <el-collapse-item name="2">
                         <template slot="title">
@@ -49,20 +31,20 @@
                         </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>
+                                <!--<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>
+                                <!--<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-collapse-item>
@@ -76,132 +58,47 @@
     </div>
 </template>
 <script>
+import {getPermissionList, getRoleApi, updateRoleInfo} from "@/api/role/role";
+
 export default {
+    props: {
+      item: Object,
+    },
     data() {
         return {
             disabled: true,
             form: {
 
             },
+            checkedKeys: [],
             textarea: '',
             activeName: 'pc',
             activeNames: ['1', '2'],
-            data1: [{
-                label: '智能看板-[数据查看][数据导出]',
-                children: [{
-                    label: '数据查看',
-                }, {
-                    label: '数据导出',
-                }],
-            }],
-            data2: [{
-                label: '智慧办公-[数据查看][数据导出]',
-                children: [{
-                    label: '数据查看',
-                }, {
-                    label: '数据导出',
-                }],
-            }],
-            data3: [{
-                label: '智慧安防-[数据查看][数据导出][设备交互]',
-                children: [{
-                    label: '数据查看',
-                }, {
-                    label: '数据导出',
-                },
-                {
-                    label: '设备交互',
-                }],
-            }],
-            data4: [{
-                label: '智享生活-[数据查看][数据导出]',
-                children: [{
-                    label: '数据查看',
-                }, {
-                    label: '数据导出',
-                }],
-            }],
-            data5: [{
-                label: '数智双碳-[数据查看][数据导出]',
-                children: [{
-                    label: '数据查看',
-                }, {
-                    label: '数据导出',
-                }],
-            }],
-            data6: [{
-                label: '智慧场景-[数据查看][数据导出][策略配置][设备交互]',
-                children: [{
-                    label: '数据查看',
-                }, {
-                    label: '数据导出',
-                },
-                {
-                    label: '策略配置',
-                }, {
-                    label: '设备交互',
-                }],
-            }],
-            data7: [{
-                label: '人员管理-[信息查看][人员添加][人员更新][人员删除]',
-                children: [{
-                    label: '信息查看',
-                }, {
-                    label: '人员添加',
-                },
-                {
-                    label: '人员更新',
-                }, {
-                    label: '人员删除',
-                }],
-            }],
-            data8: [{
-                label: '角色管理-[信息查看][角色添加][角色更新][角色删除]',
-                children: [{
-                    label: '信息查看',
-                }, {
-                    label: '角色添加',
-                },
-                {
-                    label: '角色更新',
-                }, {
-                    label: '角色删除',
-                }],
-            }],
-            data9: [{
-                label: '组织管理-[信息查看][人员添加][人员更新][人员删除]',
-                children: [{
-                    label: '信息查看',
-                }, {
-                    label: '人员添加',
-                },
-                {
-                    label: '人员更新',
-                }, {
-                    label: '人员删除',
-                }],
-            }],
-            data10: [{
-                label: '权限管理-[信息查看][权限添加][权限更新][权限删除]',
-                children: [{
-                    label: '信息查看',
-                }, {
-                    label: '权限添加',
-                },
-                {
-                    label: '权限更新',
-                }, {
-                    label: '权限删除',
-                }],
-            }],
+            frontPermissions: [],
 
 
             defaultProps: {
                 children: 'children',
-                label: 'label'
+                label: 'name'
+            }
+        }
+    },
+    watch: {
+        item: {
+            deep: true,
+            handler: function (val) {
+                this.form = JSON.parse(JSON.stringify(val))
+                this.getRoleInfo();
             }
         }
     },
+    mounted() {
+        this.form = JSON.parse(JSON.stringify(this.item))
+        this.$nextTick(()=>{
+            this.getPermissions();
+            this.getRoleInfo();
+        })
+    },
     methods: {
         handleClick() {
             //
@@ -216,7 +113,52 @@ export default {
             //
         },
         edit() {
-            this.disabled = false;
+            this.$confirm('确定要更新角色信息吗?', '提示', {
+                type: 'warning'
+            }).then(()=>{
+                this.updateRoleInfo()
+            })
+        },
+        getPermissions() {
+            getPermissionList().then(res=>{
+                let data = res.data;
+                this.frontPermissions = data.data
+            })
+        },
+        getRoleInfo() {
+            getRoleApi(this.item.id).then(res=>{
+                let data = res.data.data;
+                if (data && data.length>0) {
+                    this.checkedKeys = data[0].role_permission;
+                }
+                if (this.checkedKeys && this.checkedKeys.length>0) {
+                    let trees = this.$refs.tree;
+                    if (trees) {
+                        for (let i = 0; i < trees.length; i++) {
+                            trees[i].setCheckedKeys(this.checkedKeys)
+                        }
+                    }
+                }
+            })
+        },
+        updateRoleInfo() {
+            let num = this.frontPermissions.length
+            let trees = this.$refs.tree;
+            let ids = [];
+            for (let i = 0; i < trees.length; i++) {
+                ids = ids.concat(trees[i].getCheckedKeys())
+            }
+            this.form.role_permission = '['+ids.join(',')+']'
+            updateRoleInfo(this.item.id, this.form.role_name, this.form.role_describe, this.form.role_permission).then(res=>{
+                let data = res.data;
+                if (data.code==0) {
+                    this.$message.success('更新成功');
+                } else {
+                    this.$message.error(data.message);
+                }
+            }).catch(err=>{
+                this.$message.error(err.message);
+            })
         }
     }
 }
@@ -294,6 +236,7 @@ export default {
     }
 
     .el-tree {
+        display: inline-block;
         margin: 5px;
         background-color: #FAFAFA;
     }

+ 197 - 116
src/views/permissionManagement/decisiongroup/rolemembersList.vue

@@ -1,45 +1,80 @@
 <template>
     <div>
-        <el-button class="delete" type="text">批量删除</el-button>
-        <el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" :header-cell-style="{ textAlign: 'center' }"
-            :cell-style="{ textAlign: 'center' }" style="width: 98%" @selection-change="handleSelectionChange">
+        <div class="opr-btn">
+            <el-button type="info" @click="batchRemoveMember">批量移除</el-button>
+            <el-button style="float: right" type="primary" @click="roleAddMemberVisible=true">添加人员</el-button>
+        </div>
+        <el-table ref="multipleTable" height="600px" :data="tableData" tooltip-effect="dark"
+                  :header-cell-style="{ textAlign: 'center' }"
+                  :cell-style="{ textAlign: 'center' }" style="width: 98%;" @selection-change="handleSelectionChange">
             <el-table-column type="selection" width="50">
             </el-table-column>
-            <el-table-column prop="rolename" label="角色名">
+            <el-table-column prop="user_name" label="用户名">
             </el-table-column>
-            <el-table-column prop="phone_unm" label="手机号">
+            <el-table-column prop="phone" label="手机号">
             </el-table-column>
-            <el-table-column prop="e_mail" label="邮箱">
+            <el-table-column prop="email" label="邮箱">
             </el-table-column>
-            <el-table-column prop="working_address" label="单位">
+            <el-table-column prop="company" label="单位">
+                <template slot-scope="scope">
+                    <span v-if="scope.row.company != 'undefined'">{{ scope.row.company }}</span>
+                </template>
             </el-table-column>
-            <el-table-column prop="registed_time" label="注册时间">
+            <el-table-column prop="register_time" label="注册时间" width="200">
             </el-table-column>
-            <el-table-column prop="status" label="状态">
+            <el-table-column prop="account_status" label="状态">
                 <template slot-scope="scope">
-                    <el-tag :color="scope.row.status == true ? '#06f77e' : '#757776'"></el-tag>
+                    <el-tag :color="scope.row.account_status == 0 ? '#06f77e' : '#757776'"></el-tag>
                 </template>
             </el-table-column>
             <el-table-column prop="operation" label="操作">
                 <template slot-scope="scope">
                     <el-button size="mini" type="text" style="color: #2ea8e6"
-                        v-show="scope.row.rolename == null ? false : true" @click="deleteUser(scope.row)">删除</el-button>
+                               @click="removeMember(scope.row)">移除
+                    </el-button>
                 </template>
             </el-table-column>
         </el-table>
         <div class="bottom">
             <page class="page" :paginationData="paginationData"></page>
         </div>
+
+        <el-dialog
+                title="添加人员"
+                v-if="roleAddMemberVisible"
+                :visible.sync="roleAddMemberVisible"
+                width="1000px"
+                :before-close="handleClose"
+                center
+        >
+            <RoleUserAdd/>
+        </el-dialog>
     </div>
 </template>
 
 <script>
 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";
+
 export default {
-    components: { checkbox, page },
+    components: {checkbox, page, RoleUserAdd,},
+    props: {
+        item: Object,
+    },
+    watch: {
+        item: {
+            handler: function (val) {
+                this.multipleSelection = [];
+                this.getTableData(1);
+            },
+            deep: true,
+        }
+    },
     data() {
         return {
+            roleAddMemberVisible: false,
             currentPageSize: 10,
             currentPage: 1,
             paginationData: {
@@ -55,146 +90,192 @@ export default {
                     this.handleSizeChange(val);
                 },
             },
-            tableData: [{
-                rolename: 'admin',
-                phone_num: '12345678901',
-                e_mail: 'admin@xxxxx.com',
-                working_address: '北京电信规划设计院',
-                registed_time: '2022-01-01 18:00',
-                status: true
-            }, {
-                rolename: 'admin',
-                phone_num: '12345678901',
-                e_mail: 'admin@xxxxx.com',
-                working_address: '北京电信规划设计院',
-                registed_time: '2022-01-01 18:00',
-                status: false
-            }, {
-                rolename: 'admin',
-                phone_num: '12345678901',
-                e_mail: 'admin@xxxxx.com',
-                working_address: '北京电信规划设计院',
-                registed_time: '2022-01-01 18:00',
-                status: true
-            }, {
-                rolename: 'admin',
-                phone_num: '12345678901',
-                e_mail: 'admin@xxxxx.com',
-                working_address: '北京电信规划设计院',
-                registed_time: '2022-01-01 18:00',
-                status: false
-            }],
+            tableData: [],
             multipleSelection: [],
             show: true
         }
     },
+    mounted() {
+        this.getTableData(1)
+    },
     methods: {
+        removeMember(row) {
+            let app = this;
+            let param = {
+                user_id: row.id,
+            }
+            this.$confirm('确定要移除吗?', '提示', {
+                type: "warning"
+            }).then(()=>{
+                removeMember(param).then(res=>{
+                    let data = res.data;
+                    if (data.code == 0) {
+                        app.getTableData(1)
+                        app.$message.success('操作成功')
+                    } else {
+                        app.$message.error(data.message)
+                    }
+                })
+            })
+        },
         cancleChecked() {
             //
         },
         handleClick() {
             //
         },
-        getTableData(page){
+        getTableData(page) {
+            getRoleMember(this.item.id).then(res => {
+                let data = res.data;
+                if (data.code == 0) {
+                    this.paginationData.currentPage = 1;
+                    this.paginationData.total = data.total
+                    data.data.forEach(i=>{
+                        let d = new Date(i.register_time);
+                        i.register_time = this.$dayjs(d).format("YYYY-MM-DD HH:mm:ss")
+                    })
+                    this.tableData = data.data;
+                } else {
+                    this.$message.error(data.message)
+                }
+            }).catch(err => {
+                this.$message.error(err.message)
+            })
+        },
+        batchRemoveMember() {
+            let ids = [];
+            this.multipleSelection.forEach(item => {
+                ids.push(item.id)
+            })
+            let params = {
+                users_id: '[' + ids.join(',') + ']'
+            }
+            let app = this;
+            this.$confirm('确定要批量移除吗?','提示', {type: "warning"}).then(()=>{
+                batchRemoveMember(params).then(res=>{
+                    let data = res.data;
+                    if (data.code==0) {
+                        app.getTableData(1);
+                        app.$message.success('操作成功')
+                    } else {
+                        app.$message.error(data.message)
+                    }
+                }).catch(err=>{
+                    app.$message.error(err.message)
+                })
+            })
 
         },
-        handleSizeChange(){
+        handleSizeChange() {
             //
         },
-        handleSelectionChange(){
-            
+        handleSelectionChange(val) {
+            this.multipleSelection = val
         }
     }
 }
 </script>
 <style lang="less" scoped>
 .info {
-    text-align: left;
-    padding: 20px;
-    font-size: 25px;
+  text-align: left;
+  padding: 20px;
+  font-size: 25px;
 }
 
 .el-tag {
-    width: 12px;
-    height: 12px;
-    border-radius: 100px;
-    padding: 0;
+  width: 12px;
+  height: 12px;
+  border-radius: 100px;
+  padding: 0;
+}
+
+.opr-btn {
+  padding-left: 15px;
+  text-align: left;
+
+  .el-button {
+    height: 24px;
+    letter-spacing: 1px;
+    margin-right: 15px;
+  }
 }
 
 .el-table {
-    position: relative;
-    left: 0;
-    top:20px;
-    margin-left: 1%;
-    border: 1px solid #f0f2f2;
-    font-size: 0.95rem;
-    font-family: PingFang SC;
-    font-weight: 500;
-    color: #b2b2b2;
-    background: rgba(255, 255, 255, 0.8);
+  position: relative;
+  left: 0;
+  top: 20px;
+  margin-left: 1%;
+  border: 1px solid #f0f2f2;
+  font-size: 14px;
+  font-family: PingFang SC;
+  font-weight: 500;
+  color: #b2b2b2;
+  background: rgba(255, 255, 255, 0.8);
 
-    /deep/th {
-        background: #f7fbff;
-    }
+  /deep/ th {
+    background: #f7fbff;
+  }
 
-    /deep/.el-checkbox {
-        color: #b2b2b2;
+  /deep/ .el-checkbox {
+    color: #b2b2b2;
 
-        .el-checkbox__input.is-checked+.el-checkbox__label {
-            color: #2ea8e6;
-        }
+    .el-checkbox__input.is-checked + .el-checkbox__label {
+      color: #2ea8e6;
+    }
 
-        .el-checkbox__input.is-checked .el-checkbox__inner::after {
-            width: 70%;
-            height: 70%;
-            background: #2ea8e6;
-            border-radius: 0;
-            transform: rotate(0deg) scaleY(1);
-            position: static;
-            // border: 1px solid #8DD9FF;
-        }
+    .el-checkbox__input.is-checked .el-checkbox__inner::after {
+      width: 70%;
+      height: 70%;
+      background: #2ea8e6;
+      border-radius: 0;
+      transform: rotate(0deg) scaleY(1);
+      position: static;
+      // border: 1px solid #8DD9FF;
+    }
 
-        .el-checkbox__inner {
-            border: 1px solid #8dd9ff;
-            background: rgba(0, 170, 255, 0);
-            display: flex;
-            align-items: center;
-            justify-content: center;
-            position: static;
+    .el-checkbox__inner {
+      border: 1px solid #8dd9ff;
+      background: rgba(0, 170, 255, 0);
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      position: static;
 
-            &::after {
-                transition: 0ms;
-            }
-        }
+      &::after {
+        transition: 0ms;
+      }
+    }
 
-        .el-checkbox__label {
-            padding-left: 0;
-            font-size: 15px;
-            position: absolute;
-            top: 1px;
-            left: 25px;
-        }
+    .el-checkbox__label {
+      padding-left: 0;
+      font-size: 15px;
+      position: absolute;
+      top: 1px;
+      left: 25px;
     }
+  }
 }
-.delete{
-    padding: 3px;
-    width: 80px;
-    height: 30px;
-    float: left;
-    left: 50px;
-    position: relative;
-    color: #fff;
-    border-radius: 4px;
-    right: 10px;
-    background-color: #b3b3b3;
+
+.delete {
+  padding: 3px;
+  width: 80px;
+  height: 30px;
+  float: left;
+  left: 50px;
+  position: relative;
+  color: #fff;
+  border-radius: 4px;
+  right: 10px;
+  background-color: #b3b3b3;
 }
+
 .bottom {
-    position: absolute;
-    left: 20px;
-    right: 16px;
-    bottom: 20px;
-    height: 50px;
-    line-height: 20px;
-    background-color: #ffffff;
-    text-align: center;
+  position: absolute;
+  left: 20px;
+  right: 16px;
+  bottom: 20px;
+  height: 50px;
+  line-height: 20px;
+  background-color: #ffffff;
+  text-align: center;
 }</style>

+ 211 - 94
src/views/permissionManagement/index.vue

@@ -1,62 +1,62 @@
 <template>
     <div class="container">
         <div class="left-pane">
-            <el-input placeholder="请输入关键字" suffix-icon="el-icon-search" v-model="filterText"></el-input>
-            <el-tree ref="tree" :data="data" :props="defaultProps" node-key="id" :filter-node-method="filterNode"
-                @node-click="handleNodeClick">
+            <el-input class="left-pane-input" placeholder="请输入关键字" suffix-icon="el-icon-search"
+                      v-model="filterText"></el-input>
+            <el-tree highlight-current
+                     ref="tree" :data="data" :props="defaultProps" node-key="id" :filter-node-method="filterNode"
+                     @node-click="handleNodeClick">
                 <span slot-scope="{node,data}">
-                    <el-image :src="data.url"></el-image>
-                    <span style="padding-left: 10px; vertical-align: text-bottom;">{{ node.label }}</span>
+                    <el-image :src="require('@/assets/tree/role/user-group@3x.png')"></el-image>
+                    <span style="padding-left: 10px; vertical-align: text-bottom;">{{ data.role_name }}</span>
                     <span class="operate_btns">
                         <dropdown :events="subMenuEvents" :data="{ node, data }"
-                            @itemClick="dropDownClick"></dropdown>
+                                  @itemClick="dropDownClick"></dropdown>
                     </span>
                 </span>
             </el-tree>
-            <el-button @click="addRole" style="color: #fff; background: #3da0d6"><i
-                    class="el-icon-s-order"></i>添加角色</el-button>
+            <el-button class="left-pane-btn" @click="addRoleVisible = true" style="color: #fff; background: #3da0d6"><i
+                    class="el-icon-s-order" style="padding-right: 6px"></i>添加角色
+            </el-button>
         </div>
         <div class="right-pane">
-            <overView v-if="viewShow"></overView>
-            <roleDetail v-if="roleShow"></roleDetail>
+            <overView ref="overview" v-if="viewShow" @view="handleNodeClick"></overView>
+            <roleDetail :item="currentRole" v-if="roleShow"></roleDetail>
         </div>
+
+        <el-dialog title="新建角色"
+                   v-if="addRoleVisible"
+                   :visible.sync="addRoleVisible"
+                   width="500px" center style="display: flex;height:600px">
+            <RoleAdd :updateList="updateRoleList"></RoleAdd>
+        </el-dialog>
+
+
     </div>
 </template>
 <script>
 import overView from './roleOverview';
 import dropdown from '@/components/Dropdown/index';
 import roleDetail from './decisiongroup/index';
+import RoleAdd from "@/views/permissionManagement/messageDialog/roleAdd.vue";
+import {getRoleList} from "@/api/role/role"
+
 export default {
-    components: { overView, dropdown, roleDetail },
+    components: {overView, dropdown, roleDetail, RoleAdd},
     data() {
         return {
+            currentRole: {},
             filterText: '',
             viewShow: true,
-            roleShow:false,
-            data: [{
-                id: 1,
-                label: '决策组-1',
-                url: require('@/assets/tree/role/user-group@3x.png'),
-            }, {
-                id: 2,
-                label: '决策组-2',
-                url: require('@/assets/tree/role/user-group@3x.png')
-            },
-            {
-                id: 3,
-                label: '管理员组',
-                url: require('@/assets/tree/role/user-group@3x.png')
-            }, {
-                id: 4,
-                label: '普通用户组',
-                url: require('@/assets/tree/role/user-group@3x.png')
-            }],
+            roleShow: false,
+            addRoleVisible: false,
+            data: [],
             subMenuEvents: [
-                { label: '新建', funcName: 'addNode' },
-                { label: '上移', funcName: 'moveUp' },
-                { label: '下移', funcName: 'moveDown' },
-                { label: '编辑', funcName: 'editNode' },
-                { label: '删除', funcName: 'removeNode' }
+                //{label: '新建', funcName: 'addNode'},
+                {label: '上移', funcName: 'moveUp'},
+                {label: '下移', funcName: 'moveDown'},
+                //{label: '编辑', funcName: 'editNode'},
+                //{label: '删除', funcName: 'removeNode'}
             ],
             defaultProps: {
                 children: 'children',
@@ -65,18 +65,34 @@ export default {
             currentNode: {}
         }
     },
-    
+
     watch: {
         filterText(val) {
             this.$refs.tree.filter(val);
         }
     },
+    mounted() {
+        this.getRoleList()
+    },
     methods: {
+        getRoleList() {
+            getRoleList(1, 999).then(res => {
+                let data = res.data;
+                if (data.code == 0) {
+                    this.data = data.data
+                }
+            })
+        },
         handleNodeClick(data) {
+            this.currentRole = data;
             this.roleShow = true;
             this.viewShow = false;
 
         },
+        updateRoleList() {
+            this.$refs.overview.getTableData(1);
+            this.addRoleVisible = false
+        },
         filterNode(value, data) {
             if (!value) return true;
             return data.label.indexOf(value) !== -1;
@@ -89,75 +105,176 @@ export default {
         },
         dropDownClick(funcName, data) {
             this.currentNode = data;
-        }
+            if (funcName=='moveUp') {
+                this.moveUp(data)
+            } else if (funcName=='moveDown') {
+                this.moveDown(data)
+            }
+        },
+        moveUp(data) {
+            if (this.data && this.data.length>1) {} else return;
+            let app = this;
+            let index = -1;
+            let id = data.data.id;
+            for (let i = 0; i < app.data.length; i++) {
+                let obj = app.data[i];
+                if (obj.id==id) {
+                    index = i;
+                    break;
+                }
+            }
+            if (index>0) {
+                let obj = app.data[index];
+                let obj2 = app.data[index-1];
+                app.$set(app.data, index, obj2)
+                app.$set(app.data, index-1, obj)
+                app.data = JSON.parse(JSON.stringify(app.data));
+                this.roleShow = false;
+                this.viewShow = true;
+            }
+
+        },
+        moveDown(data) {
+            if (this.data && this.data.length>1) {} else return;
+            let app = this;
+            let index = -1;
+            let id = data.data.id;
+            for (let i = 0; i < app.data.length; i++) {
+                let obj = app.data[i];
+                if (obj.id==id) {
+                    index = i;
+                    break;
+                }
+            }
+            if (index<app.data.length-1) {
+                let obj = app.data[index];
+                let obj2 = app.data[index+1];
+                app.$set(app.data, index, obj2)
+                app.$set(app.data, index+1, obj)
+                app.data = JSON.parse(JSON.stringify(app.data));
+                this.roleShow = false;
+                this.viewShow = true;
+            }
+        },
     }
 }
 </script>
 
 <style lang="less" scoped>
 .container {
-    position: relative;
-    display: flex;
-    height: 100%;
-    line-height: 20px;
-    background-color: rgba(255, 255, 255, 1);
-    color: rgba(16, 16, 16, 1);
-    font-size: 14px;
-    text-align: center;
-    box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.15);
-
-    .left-pane {
-        width: 300px;
-        padding: 15px;
-        height: calc(100% - 30px);
-
-        .el-tree {
-            margin-top: 10px;
-            height: calc(98% - 30px);
-            background-color: #FAFAFA;
-
-            /deep/.el-tree-node__content {
-                align-items: center;
-                height: 30px;
-                cursor: pointer;
-                font-size: 16px;
-                position: relative;
-                color: #999999;
-                padding-top: 10px;
-                padding-left: 30px !important;
-                .operate_btns {
-                    position: absolute;
-                    right: 20px;
-                    display: none;
-                }
+  position: relative;
+  display: flex;
+  height: 100%;
+  line-height: 20px;
+  background-color: rgba(255, 255, 255, 1);
+  color: rgba(16, 16, 16, 1);
+  font-size: 14px;
+  text-align: center;
+  box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.15);
 
-                &:hover,
-                :focus-within {
-                    background-color: #f7fbff;
+  .left-pane {
+    width: 300px;
+    padding: 15px;
+    height: calc(100% - 30px);
 
-                    .operate_btns {
-                        display: inline;
-                    }
-                }
-            }
-            /deep/.el-tree-node__children{
-                .el-tree-node__content{
-                    padding-left: 60px !important;
-                }
-            }
-        }
+    .el-button {
+      height: 30px;
+      text-align: center;
+      font-size: 14px;
+      padding: 8px 12px;
     }
-    .right-pane{
-        width: calc(100% - 330px);
+
+    .left-pane-input {
+      /deep/ .el-input__inner {
+        height: 30px !important;
+        line-height: 30px;
+        //border-right: none;
+      }
+
+      /deep/ .el-input__suffix {
+        border: none;
+        background-color: transparent;
+        padding: 0;
+      }
+
+      /deep/ .el-input__icon {
+        line-height: 30px !important;
+      }
     }
 
-    .el-button {
-        position: absolute;
-        left: 40px;
-        bottom: 15px;
-        width: 250px;
-        text-align: center;
-        font-size: 16px;
+    .el-tree {
+      margin-top: 10px;
+      height: calc(98% - 30px);
+      background-color: #FAFAFA;
+
+      .el-image {
+        vertical-align: middle;
+      }
+
+      /deep/ .el-tree-node__content {
+        align-items: center;
+        height: 30px;
+        cursor: pointer;
+        font-size: 14px;
+        position: relative;
+        color: #999999;
+        padding-top: 10px;
+        padding-left: 30px !important;
+
+        .operate_btns {
+          position: absolute;
+          right: 20px;
+          display: none;
+        }
+
+        &:hover,
+        :focus-within {
+          background-color: #f7fbff;
+
+          .operate_btns {
+            display: inline;
+          }
+        }
+      }
+
+      /deep/ .el-tree-node__children {
+        .el-tree-node__content {
+          padding-left: 60px !important;
+        }
+      }
     }
+  }
+
+  /deep/ .el-dialog__header {
+    text-align: left;
+    padding: 20px 20px 10px;
+
+  }
+
+  /deep/ .el-dialog__title {
+    font-size: 16px !important;
+  }
+
+  /deep/ .el-dialog__body {
+    padding: 0 20px !important;
+  }
+
+  /deep/ .el-divider--horizontal {
+    padding: 0;
+    margin: 0px 0 20px !important;
+  }
+
+  .right-pane {
+    width: calc(100% - 330px);
+  }
+
+  .el-button {
+    position: absolute;
+    left: 40px;
+    bottom: 15px;
+    width: 250px;
+    text-align: center;
+    font-size: 16px;
+  }
 }
 </style>

+ 77 - 0
src/views/permissionManagement/messageDialog/roleAdd.vue

@@ -0,0 +1,77 @@
+<template>
+    <div class="roleAdd">
+        <el-divider/>
+        <el-form ref="roleAddForm" :model="form" :rules="formRules" label-position="right" label-width="100px">
+            <el-form-item label="角色名称:" prop="roleName">
+                <el-input v-model="form.roleName" placeholder="请输入角色名称"/>
+            </el-form-item>
+            <el-form-item label="角色描述:">
+                <el-input type="textarea"
+                          :rows="8"
+                          placeholder="请输入角色描述" v-model="form.roleDesc"/>
+            </el-form-item>
+            <el-form-item>
+                <el-button>重置</el-button>
+                <el-button type="primary" @click="addRole">新建</el-button>
+            </el-form-item>
+        </el-form>
+    </div>
+</template>
+
+<script>
+import {addRoleApi} from "@/api/role/role";
+
+export default {
+    data() {
+        return {
+            form: {
+                roleName: '',
+                roleDesc: '',
+            },
+            formRules: {
+                roleName: [
+                    {required: true, message: '请输入角色名称', trigger: 'blur'}
+                ]
+            }
+        }
+    },
+    props: {
+        updateList: Function
+    },
+    mounted() {
+    },
+    methods: {
+        addRole() {
+            let app = this;
+            this.$refs.roleAddForm.validate(valid => {
+                if (valid) {
+                    addRoleApi(app.form.roleName, app.form.roleDesc).then(res => {
+                        let data = res.data;
+                        if (data.code == 0) {
+                            app.$message.success('添加成功');
+                            app.updateList();
+                        } else {
+                            app.$message.error(data.message)
+                        }
+                    }).catch(err => {
+                        app.$message.error(err.message)
+                    })
+
+                }
+            })
+
+        }
+    }
+}
+</script>
+
+<style lang="less" scoped>
+.roleAdd {
+  /deep/ .el-button {
+    width: 120px;
+    letter-spacing: 5px;
+    height: 30px;
+    padding: 6px;
+  }
+}
+</style>

+ 151 - 0
src/views/permissionManagement/messageDialog/roleUserAdd.vue

@@ -0,0 +1,151 @@
+<template>
+  <div class="roleAddMember">
+      <div class="left">
+          <el-input class="left-pane-input" placeholder="请输入关键字" suffix-icon="el-icon-search" v-model="filterText"></el-input>
+          <el-tree ref="tree" :data="data" :props="defaultProps" node-key="id" :highlight-current="true"
+                   :filter-node-method="filterNode" @node-click="handleNodeClick">
+                <span slot-scope="{node,data}">
+                    <el-image :src="data.url"></el-image>
+                    <span style="padding-left: 10px; vertical-align: text-bottom;">{{ node.label }}</span>
+
+                </span>
+          </el-tree>
+      </div>
+      <div class="right">
+          <el-table :data="tableData">
+              <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>
+              <el-table-column prop="email" label="邮箱"></el-table-column>
+              <el-table-column prop="company" label="单位"></el-table-column>
+          </el-table>
+      </div>
+  </div>
+</template>
+
+<script>
+import dropdown from "@/components/Dropdown/index.vue";
+import {getUserList} from "@/api/user/user";
+export default {
+    components: {dropdown},
+    data() {
+        return {
+            filterText: '',
+            tableData: [],
+            data: [{
+                id:2,
+                label: '北京电信规划设计院',
+                url: require('@/assets/tree/group/company@3x.png'),
+                type: 'company',
+                children: [{
+                    id:3,
+                    url: require('@/assets/tree/group/affiliate@3x.png'),
+                    label: '天津办事处',
+                    type: 'dept',
+                }]
+            }],
+            defaultProps: {
+                children: 'children',
+                label: 'label'
+            },
+            currentNode: {}
+
+        }
+    },
+    methods: {
+        filterNode(value, data) {
+            if (!value) return true;
+            return data.label.indexOf(value) !== -1;
+        },
+        handleNodeClick(data) {
+            this.currentNode = data;
+            this.getUsers()
+        },
+        getUsers() {
+            getUserList(0,1,999,this.currentNode.label).then(res=>{
+                let data = res.data;
+                if (data.code == 0) {
+                    this.tableData = data.data
+                } else {
+                    this.$message.error(data.message);
+                }
+            })
+        }
+    }
+}
+</script>
+
+<style lang="less" scoped>
+.roleAddMember {
+  width: 100%;
+  height: 550px;
+  overflow-y: auto;
+  padding-top: 6px;
+
+  .left {
+    display: inline-block;
+    box-sizing: border-box;
+    vertical-align: top;
+    width: 25%;
+    .left-pane-input {
+      /deep/ .el-input__inner {
+        height: 30px !important;
+        line-height: 30px;
+        //border-right: none;
+      }
+      /deep/ .el-input__suffix {
+        border: none;
+        background-color: transparent;
+        padding: 0;
+      }
+      /deep/ .el-input__icon {
+        line-height: 30px !important;
+      }
+    }
+
+    .el-tree {
+      margin-top: 10px;
+      height: calc(98% - 30px);
+      background-color: #FAFAFA;
+
+      .el-image {
+        vertical-align: middle;
+      }
+
+      /deep/.el-tree-node__content {
+        align-items: center;
+        height: 30px;
+        cursor: pointer;
+        font-size: 14px;
+        position: relative;
+        color: #999999;
+        padding-top: 10px;
+        .operate_btns {
+          position: absolute;
+          right: 20px;
+          display: none;
+        }
+
+        &:hover,
+        :focus-within {
+          background-color: #f7fbff;
+
+          .operate_btns {
+            display: inline;
+          }
+        }
+      }
+    }
+
+  }
+  .right {
+    display: inline-block;
+    vertical-align: top;
+    padding: 0 12px;
+    box-sizing: border-box;
+    width: 75%;
+  }
+
+
+}
+</style>

+ 125 - 105
src/views/permissionManagement/roleOverview.vue

@@ -3,13 +3,15 @@
         <div class="header">
             <p class="info">角色总览</p>
         </div>
-        <el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" :header-cell-style="{ textAlign: 'center' }"
-            :cell-style="{ textAlign: 'center' }" height="400" style="width: 98%" @selection-change="handleSelectionChange">
+        <el-table ref="multipleTable" :data="tableData" tooltip-effect="dark"
+                  :header-cell-style="{ textAlign: 'center' }"
+                  :cell-style="{ textAlign: 'center' }" height="400" style="width: 98%"
+                  @selection-change="handleSelectionChange">
             <el-table-column type="selection" width="50">
             </el-table-column>
-            <el-table-column prop="rolename" label="角色名称">
+            <el-table-column prop="role_name" label="角色名称">
             </el-table-column>
-            <el-table-column prop="role_desc" label="角色描述">
+            <el-table-column prop="role_describe" label="角色描述">
             </el-table-column>
             <el-table-column prop="role_members" label="角色成员">
             </el-table-column>
@@ -17,25 +19,31 @@
             </el-table-column>
             <el-table-column prop="operation" label="操作">
                 <template slot-scope="scope">
-                    <el-button size="mini" type="text" style="color: #2ea8e6" @click="roleDetail(scope.row)">查看</el-button>
-                    <el-button size="mini" type="text" style="color: #2ea8e6" @click="roleEdit(scope.row)">编辑</el-button>
-                    <el-button size="mini" type="text" style="color: #2ea8e6" @click="deleteRole(scope.row)">删除</el-button>
+                    <el-button size="mini" type="text" style="color: #2ea8e6" @click="roleDetail(scope.row)">查看
+                    </el-button>
+                    <el-button size="mini" type="text" style="color: #2ea8e6" @click="roleEdit(scope.row)">编辑
+                    </el-button>
+                    <el-button size="mini" type="text" style="color: #2ea8e6" @click="deleteRole(scope.row)">删除
+                    </el-button>
                 </template>
             </el-table-column>
         </el-table>
         <div class="bottom">
             <page class="page" :paginationData="paginationData"></page>
         </div>
+
     </div>
 </template>
 
 <script>
 import page from '@/components/pagination/index';
-import { getRoleList } from '@/api/role/role';
+import {deleteRole, getRoleList} from '@/api/role/role';
+
 export default {
-    components: { page },
+    components: {page},
     data() {
         return {
+            addRoleVisible: false,
             filterText: '',
             defaultProps: {
                 children: 'children',
@@ -89,15 +97,7 @@ export default {
             ).then((res) => {
                 if (res.data.code === 0 && res.data.data.length > 0) {
                     this.paginationData.total = res.data.total;
-                    console.log(res);
-                    this.tableData = res.data.data.map((e) => {
-                        return {
-                            rolename: e.rolename,
-                            role_desc: e.description,
-                            role_members: e.members,
-                            associated_ORN: e.org,
-                        }
-                    })
+                    this.tableData = res.data.data;
                 }
             })
         },
@@ -108,118 +108,138 @@ export default {
         batchDelete() {
 
         },
-        deleteRole() {
-
+        deleteRole(data) {
+            let app = this;
+            this.$confirm('是否删除角色:' + data.role_name + ' ?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                deleteRole(data.id).then(res => {
+                    if (res.data.code == 0) {
+                        app.getTableData(1);
+                        app.$message.success('删除成功')
+                    } else {
+                        app.$message.error(res.data.message);
+                    }
+                }).catch(err => {
+                    app.$message.error(err.message);
+                })
+            })
         },
-        roleEdit() {
-
+        roleEdit(row) {
+            this.$emit('view', row)
         },
-        roleDetail() {
-
+        roleDetail(row) {
+            this.$emit('view', row)
+        },
+        handleAddRoleClose() {
+            this.addRoleVisible = false;
         }
     }
 }
 </script>
 <style lang="less" scoped>
 .header {
-    display: flex;
+  display: flex;
 
-    .info {
-        padding: 20px 20px 20px 40px;
-        font-size: 25px;
-    }
+  .info {
+    padding: 20px 20px 20px 40px;
+    font-size: 16px;
+  }
 }
+
 .el-table {
-    position: relative;
-    top: 10px;
-    margin-left: 1%;    
-    border: 1px solid #f0f2f2;
-    font-size: 0.95rem;
-    font-family: PingFang SC;
-    font-weight: 500;
+  position: relative;
+  top: 10px;
+  margin-left: 1%;
+  border: 1px solid #f0f2f2;
+  font-size: 14px;
+  font-family: PingFang SC, serif;
+  font-weight: 500;
+  color: #b2b2b2;
+  background: rgba(255, 255, 255, 0.8);
+
+  /deep/ th {
+    background: #f7fbff;
+  }
+
+  /deep/ .el-checkbox {
     color: #b2b2b2;
-    background: rgba(255, 255, 255, 0.8);
 
-    /deep/th {
-        background: #f7fbff;
+    .el-checkbox__input.is-checked + .el-checkbox__label {
+      color: #2ea8e6;
     }
 
-    /deep/.el-checkbox {
-        color: #b2b2b2;
-
-        .el-checkbox__input.is-checked+.el-checkbox__label {
-            color: #2ea8e6;
-        }
-
-        .el-checkbox__input.is-checked .el-checkbox__inner::after {
-            width: 70%;
-            height: 70%;
-            background: #2ea8e6;
-            border-radius: 0;
-            transform: rotate(0deg) scaleY(1);
-            position: static;
-            // border: 1px solid #8DD9FF;
-        }
+    .el-checkbox__input.is-checked .el-checkbox__inner::after {
+      width: 70%;
+      height: 70%;
+      background: #2ea8e6;
+      border-radius: 0;
+      transform: rotate(0deg) scaleY(1);
+      position: static;
+      // border: 1px solid #8DD9FF;
+    }
 
-        .el-checkbox__inner {
-            border: 1px solid #8dd9ff;
-            background: rgba(0, 170, 255, 0);
-            display: flex;
-            align-items: center;
-            justify-content: center;
-            position: static;
-
-            &::after {
-                transition: 0ms;
-            }
-        }
+    .el-checkbox__inner {
+      border: 1px solid #8dd9ff;
+      background: rgba(0, 170, 255, 0);
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      position: static;
+
+      &::after {
+        transition: 0ms;
+      }
+    }
 
-        .el-checkbox__label {
-            padding-left: 0;
-            font-size: 15px;
-            position: absolute;
-            top: 1px;
-            left: 25px;
-        }
+    .el-checkbox__label {
+      padding-left: 0;
+      font-size: 15px;
+      position: absolute;
+      top: 1px;
+      left: 25px;
     }
+  }
 }
 
 .bottom {
+  position: absolute;
+  left: 330px;
+  right: 16px;
+  bottom: 20px;
+  height: 50px;
+  line-height: 20px;
+  background-color: rgba(255, 255, 255, 1);
+  text-align: center;
+
+  .checkbox {
     position: absolute;
-    left: 330px;
-    right: 16px;
-    bottom: 20px;
-    height: 50px;
-    line-height: 20px;
-    background-color: rgba(255, 255, 255, 1);
-    text-align: center;
-
-    .checkbox {
-        position: absolute;
-        left: 30px;
-        top: 15px;
-        font-size: 14px;
-    }
+    left: 30px;
+    top: 15px;
+    font-size: 14px;
+  }
 
-    .check-cancel {
-        position: absolute;
-        // line-height: 20px;
-        font-size: 14px;
-        text-align: center;
-        left: 140px;
-        top: 10px;
-    }
+  .check-cancel {
+    position: absolute;
+    // line-height: 20px;
+    font-size: 14px;
+    text-align: center;
+    left: 140px;
+    top: 10px;
+  }
 
-    .bottom_button {
-        position: absolute;
-        left: 200px;
-        margin-top: 15px;
+  .bottom_button {
+    position: absolute;
+    left: 200px;
+    margin-top: 15px;
 
-        .delete {
-            font-size: 14px;
-            text-align: center;
-            padding: 1px;
-        }
+    .delete {
+      font-size: 14px;
+      text-align: center;
+      padding: 1px;
     }
+  }
 }
 </style>

+ 63 - 119
src/views/securityManagement/messageDialog/alterTask.vue

@@ -5,20 +5,16 @@
       class="dialog"
       title="修改任务内容"
       :visible.sync="dialogVisible"
-      width="470px"
+      width="480px"
+      height="400px"
+      left
     >
       <el-divider></el-divider>
-      <el-form
-        ref="form"
-        :model="form"
-        label-position="left"
-        label-width="75px"
-      >
-        <el-form-item label="任务名称:" prop="name">
+      <el-form ref="form" label-position="left" label-width="75px">
+        <el-form-item label="任务名称:">
           <el-input v-model="form.name"></el-input>
         </el-form-item>
-        <el-form-item label="任务组名:" prop="groupName">
-          <!-- <el-input v-model="form.groupName"></el-input> -->
+        <el-form-item label="任务组名:">
           <el-select v-model="form.groupName" placeholder="请输入任务组名">
             <el-option
               v-for="item in taskGroupOptions"
@@ -28,7 +24,7 @@
             ></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="调用方法:" prop="method">
+        <el-form-item label="调用方法:">
           <div style="display: flex">
             <el-tooltip effect="light" content="提示信息" placement="top-start">
               <i class="el-icon-question" style="padding: 13px 5px 0 0"></i>
@@ -36,11 +32,7 @@
             <el-input class="method" v-model="form.method"></el-input>
           </div>
         </el-form-item>
-        <el-form-item
-          label-width="90px"
-          label="cron表达式:"
-          prop="cron_expression"
-        >
+        <el-form-item label-width="100px" label="cron表达式:">
           <el-input
             class="cron_xepression"
             v-model="form.cron_expression"
@@ -49,12 +41,14 @@
         <el-button
           type="text"
           style="margin: 0px 0 0 330px; color: #2ea8e6"
-          @click="innerVisible = true"
+          @click="showDialog"
           >生成表达式</el-button
         >
       </el-form>
       <div slot="footer">
-        <el-button @click="resetForm('form')">重置</el-button>
+        <el-button style="background: #2ea8e6" @click="resetForm('form')"
+          >重置</el-button
+        >
         <el-button
           style="background: #2ea8e6"
           type="primary"
@@ -66,86 +60,17 @@
         v-dialog-drag
         class="innerDialog"
         title="cron 表达式生成器"
-        :visible.sync="innerVisible"
-        width="600px"
+        :visible.sync="showCron"
+        width="30%"
         append-to-body
       >
         <el-divider></el-divider>
-        <div style="width: 95%; margin: 20px 0 0 2.5%">
-          <el-tabs v-model="activeName" type="border-card">
-            <el-tab-pane label="秒"></el-tab-pane>
-            <el-tab-pane label="分钟" name="min">
-              <el-form ref="innerForm1" :model="innerForm1">
-                <el-form-item>
-                  <el-radio-group v-model="radio">
-                    <el-radio :label="1">秒,允许的通配符[,...*/]</el-radio>
-                    <el-radio :label="2">
-                      周期从
-                      <span slot="num1"
-                        ><el-input-number
-                          v-model="num1"
-                          :min="1"
-                          :max="59"
-                        ></el-input-number
-                      ></span>
-                      <span>至</span>
-                      <span slot="num2"
-                        ><el-input-number
-                          v-model="num2"
-                          :min="1"
-                          :max="59"
-                        ></el-input-number
-                      ></span>
-                      <span>秒</span>
-                    </el-radio>
-                    <el-radio :label="3">
-                      从
-                      <span slot="num1"
-                        ><el-input-number
-                          v-model="num1"
-                          :min="1"
-                          :max="59"
-                        ></el-input-number
-                      ></span>
-                      <span>秒开始,每</span>
-                      <span slot="num2"
-                        ><el-input-number
-                          v-model="num2"
-                          :min="1"
-                          :max="59"
-                        ></el-input-number
-                      ></span>
-                      <span>秒执行一次</span>
-                    </el-radio>
-                    <el-radio :label="4">
-                      指定
-                      <span>
-                        <el-select placeholder="请选择">
-                          <el-option> </el-option>
-                        </el-select>
-                      </span>
-                    </el-radio>
-                  </el-radio-group>
-                </el-form-item>
-              </el-form>
-            </el-tab-pane>
-            <el-tab-pane label="小时"></el-tab-pane>
-            <el-tab-pane label="日"></el-tab-pane>
-            <el-tab-pane label="周"></el-tab-pane>
-            <el-tab-pane label="月"></el-tab-pane>
-            <el-tab-pane label="年"></el-tab-pane>
-          </el-tabs>
-        </div>
-        <el-form ref="innerForm2" :model="innerForm2"> </el-form>
-        <div>
-          <el-scrollbar style="height: 100%">
-            <el-form ref="innerForm3" :model="innerForm3"> </el-form>
-          </el-scrollbar>
-        </div>
-        <div slot="footer">
-          <el-button @click="resetForm('form')">重置</el-button>
-          <el-button @click="innerVisible = false">取消</el-button>
-          <el-button type="primary" @click="submitForm('form')">确认</el-button>
+        <div style="width: 100%; height: 100%; overflow-y: auto">
+          <vabCron
+            @hide="showCron = false"
+            @fill="crontabFill"
+            :expression="expression"
+          ></vabCron>
         </div>
       </el-dialog>
     </el-dialog>
@@ -153,61 +78,83 @@
 </template>
 
 <script>
+import vabCron from "vab-cron";
 export default {
+  components: { vabCron },
   data() {
     return {
+      expression: "",
       dialogVisible: false,
-      innerVisible: false,
+      showCron: false,
       activeName: "min",
       radio: 2,
       num1: 1,
       num2: 1,
       form: {
+        taskID: "",
         name: "",
         groupName: "",
         method: "",
         cron_expression: "",
+        assignValue: "",
+        minitesValue: 1,
       },
       innerForm1: {},
       innerForm2: {},
       innerForm3: {},
+      minitesOptions: [],
+      secondsOptions: [],
+      hoursOptions: [],
       taskGroupOptions: [
         {
-          value: "0",
+          value: "",
           label: "全部",
         },
         {
-          value: "1",
+          value: 1,
           label: "系统",
         },
-        {
-          value: "2",
-          label: "默认",
-        },
       ],
     };
   },
+  mounted() {
+    this.initData();
+  },
   methods: {
+    crontabFill(value) {
+      this.form.cron_expression = value;
+      this.showCron = false;
+    },
+    showDialog() {
+      this.expression = this.form.cron_expression;
+      this.showCron = true;
+    },
+    initData() {
+      this.minitesOptions = [];
+      for (let i = 1; i < 60; i++) {
+        this.minitesOptions.push({
+          value: i,
+          label: i < 10 ? "0" + i : i,
+        });
+      }
+    },
     handleNodeClick() {},
     cronExpression() {
       this.$refs.cron_expression.dialogVisible = true;
     },
-    resetForm(formName) {
-      this.$refs[formName].resetFields();
+    resetForm() {
+      this.form.cron_expression = "";
+      this.form.groupName = "";
     },
-    submitForm(formName) {
-      this.$refs[formName].validate((valid) => {
-        if (valid) {
-          //
-        }
-      });
+    submitForm() {
+      this.$emit("submitForm", this.form);
     },
   },
 };
 </script>
 <style lang="less" scoped>
 /deep/.el-dialog {
-  height: 500px !important;
+  // height: 480px !important;
 }
 
 .el-radio {
@@ -251,17 +198,15 @@ export default {
 
     .cron_xepression {
       /deep/.el-input__inner {
-        width: 285px !important;
+        width: 275px !important;
       }
     }
   }
 }
 
-/deep/.el-dialog {
-  height: 30vh;
-}
-
 /deep/.el-dialog__header {
+  padding-bottom: 0;
+  color: #333333;
   text-align: left;
 }
 
@@ -286,7 +231,6 @@ export default {
 }
 
 /deep/.el-dialog__footer {
-  margin-top: 60px;
   text-align: center;
 }
 
@@ -297,12 +241,12 @@ export default {
   margin: 30px;
   padding: 5px;
   &:nth-child(1) {
-    background: #b3b3b3;
+    background: #2ea8e6;
     color: #fff;
   }
   &:nth-child(2) {
     color: #fff;
-    background: #b3b3b3;
+    background: #2ea8e6;
   }
   &:nth-child(3) {
     background: #2ea8e6;

+ 89 - 31
src/views/securityManagement/systemMonitor/periodicTask.vue

@@ -46,7 +46,7 @@
     <div class="content">
       <div class="content-inner">
         <el-button class="blue-btn" @click="addEvent">新增</el-button>
-        <el-button class="blue-btn" @click="batchActivate">批量激活</el-button>
+        <!-- <el-button class="blue-btn" @click="modifyEvent">修改</el-button> -->
         <el-button class="delete-btn" @click="batchDelete">批量删除</el-button>
       </div>
       <el-table
@@ -64,7 +64,7 @@
         <el-table-column prop="taskName" label="任务名称"> </el-table-column>
         <el-table-column prop="taskGroupName" label="任务组名">
         </el-table-column>
-        <el-table-column prop="taskString" label="使用目标字符串">
+        <el-table-column prop="taskDescription" label="任务描述">
         </el-table-column>
         <el-table-column prop="cron" label="cron 执行表达式"> </el-table-column>
         <el-table-column prop="status" label="状态">
@@ -88,7 +88,7 @@
               v-show="scope.row.taskID == null ? false : true"
               size="mini"
               type="text"
-              @click="alterTask"
+              @click="alterTaskEvent(scope.row)"
               >编辑</el-button
             >
             <el-button
@@ -105,7 +105,7 @@
     <div class="bottom">
       <page class="page" :paginationData="paginationData"></page>
     </div>
-    <alterTask ref="altertask"></alterTask>
+    <alterTask ref="altertask" @submitForm="submitForm"></alterTask>
   </div>
 </template>
 
@@ -114,6 +114,7 @@ import checkbox from "@/components/Checkbox/index";
 import page from "@/components/pagination/index";
 import alterTask from "../messageDialog/alterTask";
 import publicFunc from "@/utils/publicFunc";
+import { getTaskList } from "@/api/security/systemMonitor";
 export default {
   components: { checkbox, page, alterTask },
   data() {
@@ -122,8 +123,8 @@ export default {
       show: true,
       form: {
         taskName: "",
-        taskGroupName: "0",
-        taskStatus: "0",
+        taskGroupName: "",
+        taskStatus: "",
       },
       tableData: [
         {
@@ -131,7 +132,7 @@ export default {
           taskID: "1",
           taskName: "采集视频云平台",
           taskGroupName: "系统",
-          taskString: "xxx.xxx.xxx.xxx",
+          taskDescription: "xxx.xxx.xxx.xxx",
           cron: "001***?",
           status: "true",
         },
@@ -140,7 +141,7 @@ export default {
           taskID: "1",
           taskName: "采集视频云平台",
           taskGroupName: "默认",
-          taskString: "xxx.xxx.xxx.xxx",
+          taskDescription: "xxx.xxx.xxx.xxx",
           cron: "001***?",
           status: "true",
         },
@@ -149,7 +150,7 @@ export default {
           taskID: "1",
           taskName: "采集视频云平台",
           taskGroupName: "系统",
-          taskString: "xxx.xxx.xxx.xxx",
+          taskDescription: "xxx.xxx.xxx.xxx",
           cron: "001***?",
           status: "false",
         },
@@ -158,7 +159,7 @@ export default {
           taskID: "1",
           taskName: "采集视频云平台",
           taskGroupName: "系统",
-          taskString: "xxx.xxx.xxx.xxx",
+          taskDescription: "xxx.xxx.xxx.xxx",
           cron: "001***?",
           status: "false",
         },
@@ -167,7 +168,7 @@ export default {
           taskID: "1",
           taskName: "采集视频云平台",
           taskGroupName: "系统",
-          taskString: "xxx.xxx.xxx.xxx",
+          taskDescription: "xxx.xxx.xxx.xxx",
           cron: "001***?",
           status: "false",
         },
@@ -176,7 +177,7 @@ export default {
           taskID: "1",
           taskName: "采集视频云平台",
           taskGroupName: "系统",
-          taskString: "xxx.xxx.xxx.xxx",
+          taskDescription: "xxx.xxx.xxx.xxx",
           cron: "001***?",
           status: "false",
         },
@@ -185,7 +186,7 @@ export default {
           taskID: "1",
           taskName: "采集视频云平台",
           taskGroupName: "系统",
-          taskString: "xxx.xxx.xxx.xxx",
+          taskDescription: "xxx.xxx.xxx.xxx",
           cron: "001***?",
           status: "false",
         },
@@ -194,38 +195,34 @@ export default {
           taskID: "1",
           taskName: "采集视频云平台",
           taskGroupName: "系统",
-          taskString: "xxx.xxx.xxx.xxx",
+          taskDescription: "xxx.xxx.xxx.xxx",
           cron: "001***?",
           status: "false",
         },
       ],
       taskStatusOptions: [
         {
-          value: "0",
+          value: "",
           label: "不限",
         },
         {
-          value: "1",
-          label: "开启",
+          value: 1,
+          label: "暂停",
         },
         {
-          value: "2",
-          label: "关闭",
+          value: 0,
+          label: "正常",
         },
       ],
       taskGroupOptions: [
         {
-          value: "0",
+          value: "",
           label: "不限",
         },
         {
-          value: "1",
+          value: 1,
           label: "系统",
         },
-        {
-          value: "2",
-          label: "默认",
-        },
       ],
       multipleSelection: [],
       currentPageSize: 10,
@@ -258,26 +255,87 @@ export default {
     cancleChecked() {
       this.$refs.multipleTable.clearSelection();
     },
-    alterTask() {
+    alterTaskEvent(data) {
       this.$refs.altertask.dialogVisible = true;
+      this.$refs.altertask.form.taskID = data.taskID;
+      this.$refs.altertask.form.name = data.taskName;
+      this.$refs.altertask.form.groupName = data.taskGroupName;
+      this.$refs.altertask.form.cron_expression = data.cron;
     },
     resetEvent() {
-      // this.form.
+      this.form.taskName = "";
+      this.form.taskGroupName = "";
+      this.form.taskStatus = "";
     },
     searchEvent() {
       console.log(this.form);
       this.getTableData(1);
     },
-    getTableData(val) {},
+    getTableData(val) {
+      this.tableData = [];
+      getTaskList(
+        val,
+        this.currentPageSize,
+        this.form.taskName,
+        this.form.taskGroupName,
+        this.form.taskStatus
+      ).then((res) => {
+        if (res.data.code === 0) {
+          let data = res.data.data.data;
+          this.paginationData.total = data.total;
+          this.tableData = data.list.map((v) => {
+            return {
+              taskID: v.id,
+              taskName: v.name,
+              taskGroupName: v.groupType === 1 ? "系统" : "默认",
+              taskDescription: v.description,
+              cron: v.cronExpression,
+              status: v.status === 0 ? true : false,
+            };
+          });
+        }
+      });
+    },
     handleSizeChange() {},
     deleteEvent(data) {
       this.tableData = this.tableData.filter((v) => {
-        return v.id !== data.id;
+        return v.taskID !== data.taskID;
       });
     },
     addEvent() {},
-    batchActivate() {},
-    batchDelete() {},
+    modifyEvent() {},
+    batchDelete() {
+      console.log(this.multipleSelection);
+      let selectedIds = this.multipleSelection.map((v) => v.taskID);
+      this.tableData = this.tableData.filter(
+        (v) => !selectedIds.includes(v.taskID)
+      );
+    },
+    submitForm(data) {
+      this.$refs.altertask.dialogVisible = false;
+      this.tableData = this.tableData.map((v) => {
+        if (v.taskID == data.taskID) {
+          let name = data.name;
+          let groupName = data.groupName;
+          return {
+            taskID: v.taskID,
+            taskName: name,
+            taskGroupName: groupName,
+            taskDescription: v.taskDescription,
+            cron: data.cron_expression,
+          };
+        } else {
+          return {
+            taskID: v.taskID,
+            taskName: v.taskName,
+            taskGroupName: v.taskGroupName,
+            taskDescription: v.taskDescription,
+            cron: v.cron,
+            status: v.status,
+          };
+        }
+      });
+    },
   },
 };
 </script>

+ 191 - 91
src/views/userManagement/groupManagement/forms/corporationdetailEdit.vue

@@ -1,52 +1,50 @@
 <template>
-    <div style="height: 100%;">
-        <el-button class="addDepartment" @click="addDepartment" style="color: #fff; background: #3da0d6"><i
-                class="el-icon-s-order"></i>新建部门</el-button>
-                <departmentNew ref="departmentNew"></departmentNew>
+    <div style="height: 100%;overflow-y: auto">
+        <departmentNew ref="departmentNew"></departmentNew>
         <p class="info">企业详情</p>
-        <el-image :src="url"></el-image>
-        <el-button class="alter" v-if="show">更换</el-button>
-        <el-form :model="form" label-position="left" :disabled="disabled">
+        <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>
+        </div>
+        <el-form :model="form" label-position="right" label-width="200px">
             <el-form-item label="公司全称:">
-                <el-input v-model="form.fullName" type="text"></el-input>
+                <el-input v-model="form.company_name" type="text" placeholder="请输入公司全称"></el-input>
             </el-form-item>
             <el-form-item label="公司简称:">
-                <el-input v-model="form.abbreviateName" type="text"></el-input>
+                <el-input v-model="form.abbreviation" type="text" placeholder="请输入公司简称"></el-input>
             </el-form-item>
             <el-form-item label="上级公司:">
-                <el-select v-model="form.parentCorporation">
-                    <el-option v-for="item in superiorOptions" :value="item.value" :key="item.value"
-                        :label="item.label"></el-option>
+                <el-select v-model="form.parentCorporation" placeholder="请选择上级公司">
+                    <el-option v-for="item in superiorOptions" :key="item.value" :value="item.value" :label="item.label"></el-option>
                 </el-select>
             </el-form-item>
             <el-form-item label="统一社会信用代码:">
-                <el-input v-model="form.sccide"></el-input>
+                <el-input v-model="form.code" placeholder="统一社会信用代码"></el-input>
             </el-form-item>
-            <el-form-item v-model="form.registeredAddress" label="注册地址:">
-                <el-cascader :options="addressOptions" placeholder="选择城市/区级" filterable>
+            <el-form-item label="注册地址:">
+                <el-cascader v-model="registered_address.pro" :options="province" placeholder="选择城市/区级" filterable>
                 </el-cascader>
-                <el-input style="margin-left: 10px;"></el-input>
+                <el-input style="margin-left: 10px;" v-model="registered_address.info" placeholder="详细地址"></el-input>
             </el-form-item>
-            <el-form-item v-model="form.businessAddress" label="经营地址:">
-                <el-cascader :options="addressOptions" placeholder="选择城市/区级" filterable>
-                </el-cascader>
-                <el-input style="margin-left: 10px;"></el-input>
+            <el-form-item label="经营地址:">
+                <el-cascader v-model="business_address.pro" :options="province" placeholder="选择城市/区级" filterable></el-cascader>
+                <el-input style="margin-left: 10px;" v-model="business_address.info" placeholder="详细地址"></el-input>
             </el-form-item>
             <el-form-item label="法人姓名:">
-                <el-input v-model="form.legalName" type="text"></el-input>
+                <el-input v-model="form.legal_person_name" type="text" placeholder="请输入法人姓名"></el-input>
             </el-form-item>
             <el-form-item label="公司编码:">
-                <el-input v-model="form.corporationCode" type="text"></el-input>
+                <el-input v-model="form.company_code" type="text" placeholder="请输入公司编码"></el-input>
             </el-form-item>
             <el-form-item label="编制人数:">
-                <el-input v-model="form.complementCount" type="text"></el-input>
+                <el-input-number v-model="form.on_guard_size" :min="0" placeholder="编制人数"></el-input-number>
             </el-form-item>
             <el-form-item label="在岗人数:">
-                <el-input v-model="form.staffCount" type="text"></el-input>
+                <el-input-number v-model="form.staff_size" :min="0" placeholder="在岗人数"></el-input-number>
             </el-form-item>
         </el-form>
         <div class="bottom">
-            <el-button class="delete" style="background:#B3B3B3;">删除</el-button>
+            <el-button class="delete" style="background:#B3B3B3;" @click="del">删除</el-button>
             <el-button class="edit" @click="edit">编辑</el-button>
         </div>
     </div>
@@ -54,24 +52,41 @@
 
 <script>
 import departmentNew from '../messageDialog/departmentNew';
+import province from '@/data/province.json'
+import {delCompanyInfo, getCompanyInfo, updateCompanyInfo} from "@/api/company/company";
 
 export default {
-    components: { departmentNew },
+    components: {departmentNew},
+    props: {
+        item: Object,
+        companyList: Array,
+    },
+    watch: {
+      item: {
+          deep: true,
+          handler: function (val) {
+              this.registered_address ={pro:'', info: ''};
+              this.business_address ={pro:'', info: ''};
+              this.getCompanyInfo();
+          }
+      }
+    },
     data() {
         return {
+            province,
             show: false,
             disabled: true,
+            registered_address: {
+                pro: '',
+                info: ''
+            },
+            business_address: {
+                pro: '',
+                info: ''
+            },
             form: {
-                fullName: "",
-                abbreviateName: "",
-                parentCorporation: "",
-                sccide: "",
-                registeredAddress: "",
-                businessAddress: "",
-                legalName: "",
-                corporationCode: "",
-                complementCount: "",
-                staffCount: ""
+                staff_size: 0,
+                on_guard_size: 0,
             },
             url: "",
             superiorOptions: [
@@ -83,96 +98,181 @@ export default {
             addressOptions: [],
         };
     },
+    mounted() {
+        this.getCompanyInfo()
+    },
+    emits: ['close'],
     methods: {
+        del() {
+          this.$confirm('确定要删除吗?', '提示', {
+              type: 'warning'
+          }).then(()=>{
+              delCompanyInfo(this.item.id).then(res=>{
+                  let data = res.data;
+                  if (data.code == 0) {
+                      this.$emit('close', {
+                          type: 'view'
+                      })
+                      this.$message.success('删除成功');
+                  } else {
+                      this.$message.error(data.message);
+                  }
+              })
+          })
+        },
         edit() {
-            this.show = true;
-            this.disabled = false;
+            let business_address = '';
+            if (this.business_address.pro) {
+                for (let i = 0; i < this.business_address.pro.length; i++) {
+                    if (i>0) {
+                        business_address += '/'
+                    }
+                    business_address += this.business_address.pro[i]
+                }
+            }
+            business_address += '---'+this.business_address.info;
+
+            let registered_address = '';
+            if (this.registered_address.pro) {
+                for (let i = 0; i < this.registered_address.pro.length; i++) {
+                    if (i>0) {
+                        registered_address += '/'
+                    }
+                    registered_address += this.registered_address.pro[i]
+                }
+            }
+            registered_address += '---'+this.registered_address.info;
+
+            let param = JSON.parse(JSON.stringify(this.form));
+            param.company_id = ''+param.id
+            param.on_guard_size = param.on_guard_size
+            param.staff_size = param.staff_size
+            param.registered_address = registered_address
+            param.business_address = business_address
+            updateCompanyInfo(param).then(res=>{
+                let data = res.data;
+                if (data.code == 0) {
+                    this.$emit('close', {
+                        type: 'view'
+                    })
+                    this.$message.success('更新成功');
+                } else {
+                    this.$message.error(data.message);
+                }
+            })
         },
-        addDepartment(){
+        addDepartment() {
             this.$refs.departmentNew.dialogVisible = true;
+        },
+        getCompanyInfo() {
+            getCompanyInfo(this.item.id).then(res => {
+                let data = res.data;
+                if (data.code == 0) {
+                    this.form = JSON.parse(JSON.stringify(data.data[0]));
+                    if (this.form.registered_address) {
+                        let splitArr = this.form.registered_address.split('---')
+                        if (this.form.registered_address.indexOf('---')<1) {
+                            this.registered_address.info = this.form.registered_address.replace('---','')
+                        } else {
+                            if (splitArr.length>0) {
+                                this.registered_address.pro = splitArr[0].split('/');
+                                this.registered_address.pro = splitArr[0].split('/');
+                            }
+                            if (splitArr.length>1) {
+                                this.registered_address.info = splitArr[1];
+                            }
+                        }
+                    }
+                    if (this.form.business_address) {
+                        let splitArr = this.form.business_address.split('---')
+                        if (this.form.business_address.indexOf('---')<1) {
+                            this.business_address.info = this.form.business_address.replace('---','')
+                        } else {
+                            if (splitArr.length>0) {
+                                this.business_address.pro = splitArr[0].split('/');
+                            }
+                            if (splitArr.length>1) {
+                                this.business_address.info = splitArr[1];
+                            }
+                        }
+                    }
+                } else {
+                    this.$message.error(data.message)
+                }
+            })
         }
     },
 }
 </script>
 <style lang="less" scoped>
-.addDepartment {
-    position: absolute;
-    left: 40px;
-    bottom: 15px;
-    width: 250px;
-    text-align: center;
-    font-size: 16px;
-}
 
 .info {
-    text-align: left;
-    padding: 20px;
-    font-size: 25px;
+  text-align: left;
+  padding: 20px;
+  font-size: 16px;
 }
 
 .el-image {
-    width: 95%;
-    height: 150px;
+  width: 95%;
+  height: 150px;
 }
 
-.alter {
-    position: absolute;
-    right: 40px;
-    top: 165px;
-    width: 100px;
-    height: 30px;
-    color: #fff;
-    padding: 3px;
-    font-size: 14px;
-    background: #3da0d6;
+.company-alter {
+  position: absolute;
+  right: 55px;
+  top: 65px;
+  width: 60px;
+  height: 24px;
+  padding: 3px;
+  font-size: 1px;
+  z-index: 999;
 
 }
 
 .el-select {
-    width: 100%;
+  width: 100%;
 }
 
 .el-form {
-    padding: 20px 20% 0 20%;
+  padding: 8px 20% 0 10%;
 
     .el-form-item {
-        padding-top: 10px;
-        margin-inline: 20px;
-        margin-bottom: 0;
+        margin-bottom: 12px;
     }
+  //.el-form-item {
+  //    padding-top: 10px;
+  //    margin-inline: 20px;
+  //    margin-bottom: 0;
+  //}
+  //
 
-    .el-cascader {
-        /deep/.el-input__inner {
-            width: 180px;
-        }
-    }
+  //
+  ///deep/.el-form-item__label {
+  //    padding: 0;
+  //    text-align: left;
+  //    font-weight: 550;
+  //}
 
-    /deep/.el-form-item__label {
-        padding: 0;
-        text-align: left;
-        font-weight: 550;
-    }
-
-    /deep/.el-form-item__content {
-        display: flex;
-    }
+  /deep/ .el-form-item__content {
+    display: flex;
+  }
 }
 
 
 .bottom {
-    position: absolute;
-    bottom: 15px;
-    left: 50%;
+  position: absolute;
+  bottom: 15px;
+  left: 50%;
 }
 
 .delete,
 .edit {
-    width: 100px;
-    height: 30px;
-    color: #fff;
-    padding: 3px;
-    margin-left: 50px;
-    font-size: 14px;
-    background: #3da0d6;
+  width: 100px;
+  height: 30px;
+  color: #fff;
+  padding: 3px;
+  margin-left: 50px;
+  font-size: 14px;
+  background: #3da0d6;
 }
 </style>

+ 95 - 91
src/views/userManagement/groupManagement/forms/departmentdetailEdit.vue

@@ -1,109 +1,116 @@
 <template>
-    <div>
+    <div style="height: 100%;overflow-y: auto">
+        <departmentNew ref="departmentNew"></departmentNew>
         <p class="info">部门详情</p>
-        <el-image :src="url"></el-image>
-        <el-button class="alter" v-if="show">更换</el-button>
-
-        <el-form :model="form" label-position="left" :disabled="disabled">
-            <el-form-item label="部门级别:">
-                <el-select v-model="form.department_level">
-                    <el-option v-for="item in levelOptions" :value="item.value" :key="item.value"
-                        :label="item.label"></el-option>
-                </el-select>
+        <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>
+        </div>
+        <el-form :model="form" label-position="right" label-width="200px">
+            <el-form-item label="部门名称:">
+                <el-input v-model="form.department_name" placeholder="请输入部门名称" />
             </el-form-item>
-            <el-form-item label="上级部门:">
-                <el-select v-model="form.superior_department">
-                    <el-option v-for="item in superiorOptions" :value="item.value" :key="item.value"
-                        :label="item.label"></el-option>
+            <el-form-item label="上级公司:">
+                <el-select v-model="form.company_id" placeholder="请选择上级公司">
+                    <el-select-option label="中讯" value="1"></el-select-option>
                 </el-select>
             </el-form-item>
             <el-form-item label="部门负责人:">
-                <el-select v-model="form.departmentManager">
-                    <el-option v-for="item in managerOptions" :value="item.value" :key="item.value"
-                        :label="item.label"></el-option>
-                </el-select>
+                <el-input v-model="form.principal" placeholder="部门负责人" />
             </el-form-item>
             <el-form-item label="部门接口人:">
-                <el-select v-model="form.departmentOfficer">
-                    <el-option v-for="item in officerOptions" :value="item.value" :key="item.value"
-                        :label="item.label"></el-option>
-                </el-select>
+                <el-input v-model="form.liaison_officer" placeholder="部门接口人" />
             </el-form-item>
             <el-form-item label="排重名:">
-                <el-input v-model="form.duplication" type="text"></el-input>
+                <el-input v-model="form.duplicate_name" placeholder="排重名" />
             </el-form-item>
             <el-form-item label="在岗人数:">
-                <el-input-number :model="form.staff_num" v-model="num" @change="handleChange" :min="1"
-                    :max="100"></el-input-number>
+                <el-input-number v-model="form.on_guard" placeholder="在岗人数" :min="0" ></el-input-number>
             </el-form-item>
             <el-form-item label="自由员工:">
-                <el-input v-model="form.self_employee" type="text"></el-input>
+                <el-input-number v-model="form.freelance_staff" placeholder="自由员工" :min="0" ></el-input-number>
             </el-form-item>
             <el-form-item label="协作员工:">
-                <el-input v-model="form.collaborator" type="text"></el-input>
+                <el-input-number v-model="form.cooperation_staff" placeholder="协作员工" :min="0" ></el-input-number>
             </el-form-item>
             <el-form-item label="第三方员工:">
-                <el-input v-model="form.thirdParty_employee" type="text"></el-input>
+                <el-input-number v-model="form.thirdparty_staff" placeholder="第三方员工" :min="0" ></el-input-number>
             </el-form-item>
             <el-form-item label="部门职责:">
-                <el-input type="textarea" placeholder="请输入" v-model="textarea" maxlength="200" show-word-limit></el-input>
+                <el-input type="textarea" />
             </el-form-item>
         </el-form>
         <div class="bottom">
-            <el-button style="background:#B3B3B3;">删除</el-button>
-            <el-button @click="edit">编辑</el-button>
+            <el-button class="delete" style="background:#B3B3B3;">删除</el-button>
+            <el-button class="edit" @click="edit">编辑</el-button>
         </div>
     </div>
 </template>
 
 <script>
+import departmentNew from '../messageDialog/departmentNew';
+import province from '@/data/province.json'
+import {getCompanyInfo} from "@/api/company/company";
+
 export default {
+    components: {departmentNew},
+    props: {
+        item: Object,
+    },
     data() {
         return {
+            province,
             show: false,
             disabled: true,
             form: {
-                department_level: '',
-                superior_department: '',
-                departmentManager: '',
-                departmentOfficer: '',
-                duplication: '',
-                staff_num: '',
-                self_employee: '',
-                collaborator: '',
-                thirdParty_employee: '',
+                department_name: '',
+                company_id: '',
+                principal: '',
+                liaison_officer: '',
+                duplicate_name: '',
+                on_guard: 0,
+                freelance_staff: 0,
+                cooperation_staff: 0,
+                thirdparty_staff: 0,
+                censure: '',
             },
-            num: 100,
-            textarea: '',
-            url: '',
-            levelOptions: [],
+            url: "",
             superiorOptions: [
                 {
-                    value: '0',
-                    label: '北京电信规划设计院'
+                    value: "0",
+                    label: "中讯邮电咨询设计院"
                 }
             ],
-            managerOptions: [],
-            officerOptions: [],
-        }
+            addressOptions: [],
+        };
+    },
+    mounted() {
+        this.getCompanyInfo()
     },
     methods: {
-        handleChange() {
-            //
-        },
         edit() {
             this.show = true;
             this.disabled = false;
+        },
+        getCompanyInfo() {
+            getCompanyInfo(1).then(res => {
+                let data = res.data;
+                if (data.code == 0) {
+                    this.form = JSON.parse(JSON.stringify(data.data[0]));
+                } else {
+                    this.$message.error(data.message)
+                }
+            })
         }
-    }
-
+    },
 }
 </script>
 <style lang="less" scoped>
+
 .info {
     text-align: left;
     padding: 20px;
-    font-size: 25px;
+    font-size: 16px;
 }
 
 .el-image {
@@ -111,59 +118,55 @@ export default {
     height: 150px;
 }
 
-.alter {
+.company-alter {
     position: absolute;
-    right: 40px;
-    top: 165px;
+    right: 55px;
+    top: 65px;
+    width: 60px;
+    height: 24px;
+    padding: 3px;
+    font-size: 1px;
+    z-index: 999;
+
+}
+
+.el-select {
+    width: 100%;
 }
 
 .el-form {
-    padding: 20px 20% 0 20%;
+    padding: 20px 20% 0 10%;
 
     .el-form-item {
-        padding-top: 10px;
-        margin-inline: 20px;
-        margin-bottom: 0;
+        margin-bottom: 12px;
     }
+    //
+    //.el-cascader {
+    //    /deep/.el-input__inner {
+    //        width: 180px;
+    //    }
+    //}
+    //
+    ///deep/.el-form-item__label {
+    //    padding: 0;
+    //    text-align: left;
+    //    font-weight: 550;
+    //}
 
-    .el-select {
-        width: 100%;
-    }
-
-    .el-input-number {
-        /deep/.el-input-number__decrease {
-            border: 1px solid #DCDFE6;
-            border-radius: 4px;
-    
-        }
-        /deep/.el-input-number__increase {
-            border: 1px solid #DCDFE6;
-            border-radius: 4px;
-        }
-        /deep/.el-input__inner {
-            border: 0;
-            background: #fff;
-        }
-    }
-
-    /deep/.el-form-item__label {
-        padding: 0;
-        text-align: left;
-        font-weight: 550;
-    }
-
-    /deep/.el-form-item__content {
+    /deep/ .el-form-item__content {
         display: flex;
     }
 }
 
+
 .bottom {
     position: absolute;
     bottom: 15px;
     left: 50%;
 }
 
-.el-button {
+.delete,
+.edit {
     width: 100px;
     height: 30px;
     color: #fff;
@@ -171,4 +174,5 @@ export default {
     margin-left: 50px;
     font-size: 14px;
     background: #3da0d6;
-}</style>
+}
+</style>

+ 94 - 39
src/views/userManagement/groupManagement/index.vue

@@ -1,33 +1,42 @@
 <template>
     <div class="container">
         <div class="left-pane">
-            <el-input placeholder="请输入关键字" suffix-icon="el-icon-search" v-model="filterText"></el-input>
-            <el-tree ref="tree" :data="data" :props="defaultProps" node-key="id" 
+            <el-input class="left-pane-input" placeholder="请输入关键字" suffix-icon="el-icon-search" v-model="filterText"></el-input>
+            <el-tree ref="tree" :data="data" :props="defaultProps" node-key="id" :highlight-current="true"
                 :filter-node-method="filterNode" @node-click="handleNodeClick">
                 <span slot-scope="{node,data}">
                     <el-image :src="data.url"></el-image>
                     <span style="padding-left: 10px; vertical-align: text-bottom;">{{ node.label }}</span>
-                    <span class="operate_btns">
-                        <dropdown :events="data.id == 1 ? menuEvents : subMenuEvents" :data="{ node, data }"
-                            @itemClick="dropDownClick"></dropdown>
-                    </span>
+                    <!--<span class="operate_btns">-->
+                    <!--    <dropdown :events="data.id == 1 ? menuEvents : subMenuEvents" :data="{ node, data }"-->
+                    <!--        @itemClick="dropDownClick"></dropdown>-->
+                    <!--</span>-->
                 </span>
             </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">
-            <overView v-if="viewShow"></overView>
-            <corporation v-if="corporShow"></corporation>
-            <department v-if="departShow"></department>
+            <overView v-if="viewShow" @nodeClick="handleNodeClick"></overView>
+            <corporation :item="currentNode" v-if="corporShow" @close="handleNodeClick"></corporation>
+            <department :item="currentNode" v-if="departShow" @close="handleNodeClick"></department>
         </div>
+
+        <CorporationAdd ref="corporationAdd" />
+
     </div>
 </template>
 <script>
 import overView from './tables/corporationOverview';
 import corporation from './forms/corporationdetailEdit';
 import department from './forms/departmentdetailEdit';
+import CorporationAdd from "@/views/userManagement/groupManagement/messageDialog/corporationAdd.vue";
 import dropdown from '@/components/Dropdown/index';
+import {getCompanyList} from '@/api/company/company'
 export default {
-    components: { overView, dropdown, corporation, department },
+    components: { overView, dropdown, corporation, department, CorporationAdd },
     data() {
         return {
             filterText: '',
@@ -35,18 +44,15 @@ export default {
             corporShow: false,
             departShow: false,
             data: [{
-                id: 1,
-                label: '中讯邮电咨询设计院',
-                url: require('@/assets/tree/group/corporation@3x.png'),
+                id:2,
+                label: '北京电信规划设计院',
+                url: require('@/assets/tree/group/company@3x.png'),
+                type: 'company',
                 children: [{
-                    id:2,
-                    label: '北京电信规划设计院',
-                    url: require('@/assets/tree/group/company@3x.png'),
-                    children: [{
-                        id:3,
-                        url: require('@/assets/tree/group/affiliate@3x.png'),
-                        label: '天津办事处'
-                    }]
+                    id:3,
+                    url: require('@/assets/tree/group/affiliate@3x.png'),
+                    label: '天津办事处',
+                    type: 'dept',
                 }]
             }],
             menuEvents: [
@@ -71,30 +77,48 @@ export default {
             this.$refs.tree.filter(val);
         }
     },
+    mounted() {
+        this.getCompanyData();
+    },
     methods: {
+        getCompanyData() {
+            getCompanyList('', 1, 999).then(res=>{
+                let data = res.data;
+                if (data.code == 0) {
+                    this.data = data.data;
+                    this.data.forEach(item => {
+                        item.url = require('@/assets/tree/group/company@3x.png');
+                        item.label = item.company_name;
+                        item.type = 'company'
+                    })
+                } else {
+                    this.$message.error(data.message)
+                }
+            })
+        },
         handleNodeClick(data) {
-            switch (data.id) {
-                case 2:
-                    this.viewShow = false;
-                    this.corporShow = true;
-                    this.departShow = false;
-                    break;
-                case 3:
-                    this.viewShow = false;
-                    this.corporShow = false;
-                    this.departShow = true;
-                    break;
-                default:
-                    this.viewShow = true;
-                    this.corporShow = false;
-                    this.departShow = false;
-                    break;
+            this.currentNode = data
+            if (data.type=='company') {
+                this.viewShow = false;
+                this.corporShow = true;
+                this.departShow = false;
+            } else if (data.type=='dept') {
+                this.viewShow = false;
+                this.corporShow = false;
+                this.departShow = true;
+            } else {
+                this.corporShow = false;
+                this.departShow = false;
+                this.viewShow = true;
             }
         },
         filterNode(value, data) {
             if (!value) return true;
             return data.label.indexOf(value) !== -1;
         },
+        addDepartment() {
+          this.$refs.corporationAdd.dialogVisible = true;
+        },
         handleClick() {
 
         },
@@ -106,7 +130,7 @@ export default {
             if (funcName === 'addNode') {
                 //
             }
-        }
+        },
     }
 }
 </script>
@@ -123,21 +147,52 @@ export default {
     display: flex;
     box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.15);
 
+    .addDepartment {
+        position: absolute;
+        left: 68px;
+        bottom: 15px;
+        width: 250px;
+        height: 30px;
+        text-align: center;
+        font-size: 14px;
+        padding: 0;
+    }
+
     .left-pane {
         width: 300px;
         padding: 15px;
         height: calc(100% - 30px);
 
+        .left-pane-input {
+            /deep/ .el-input__inner {
+                height: 30px !important;
+                line-height: 30px;
+                //border-right: none;
+            }
+            /deep/ .el-input__suffix {
+                border: none;
+                background-color: transparent;
+                padding: 0;
+            }
+            /deep/ .el-input__icon {
+                line-height: 30px !important;
+            }
+        }
+
         .el-tree {
             margin-top: 10px;
             height: calc(98% - 30px);
             background-color: #FAFAFA;
 
+            .el-image {
+                vertical-align: middle;
+            }
+
             /deep/.el-tree-node__content {
                 align-items: center;
                 height: 30px;
                 cursor: pointer;
-                font-size: 16px;
+                font-size: 14px;
                 position: relative;
                 color: #999999;
                 padding-top: 10px;

+ 235 - 124
src/views/userManagement/groupManagement/messageDialog/corporationAdd.vue

@@ -1,185 +1,296 @@
 <template>
     <div>
-        <el-dialog v-dialog-drag style="overflow: hidden;" :title="popTitle" :visible.sync="dialogVisible" width="32%"
-            append-to-body>
+        <el-dialog v-dialog-drag style="overflow: auto;" :title="popTitle" :visible.sync="dialogVisible" width="900px"
+                   append-to-body>
             <el-divider></el-divider>
-            <div>
-                <el-image :src="url"></el-image>
-                <el-button class="alter">更换</el-button>
-            </div>
-            <div style="height: 400px;">
-                <el-scrollbar style="height: 90%; width: 100%; top: -20px;">
-                    <el-form :model="form" ref="form" label-position="left">
-                        <el-form-item label="公司全称:" prop="fullName">
-                            <el-input v-model="form.fullName" type="text"></el-input>
-                        </el-form-item>
-                        <el-form-item label="公司简称:" prop="abbreviateName">
-                            <el-input v-model="form.abbreviateName" type="text"></el-input>
-                        </el-form-item>
-                        <el-form-item label="上级公司:" prop="parentCorporation">
-                            <el-select v-model="form.parentCorporation">
-                                <el-option v-for="item in superiorOptions" :value="item.value" :key="item.value"
-                                    :label="item.label"></el-option>
-                            </el-select>
-                        </el-form-item>
-                        <el-form-item label="统一社会信用代码:" prop="sccide">
-                            <el-input v-model="form.sccide"></el-input>
-                        </el-form-item>
-                        <el-form-item v-model="form.registeredAddress" label="注册地址:" prop="registeredAddress">
-                            <el-cascader :options="addressOptions" placeholder="选择城市/区级" filterable>
-                            </el-cascader>
-                            <el-input style="margin-left: 10px;"></el-input>
-                        </el-form-item>
-                        <el-form-item v-model="form.businessAddress" label="经营地址:" prop="businessAddress">
-                            <el-cascader :options="addressOptions" placeholder="选择城市/区级" filterable>
-                            </el-cascader>
-                            <el-input style="margin-left: 10px;"></el-input>
-                        </el-form-item>
-                        <el-form-item label="法人姓名:" prop="legalName">
-                            <el-input v-model="form.legalName" type="text"></el-input>
-                        </el-form-item>
-                        <el-form-item label="公司编码:" prop="orporationCode">
-                            <el-input v-model="form.corporationCode" type="text"></el-input>
-                        </el-form-item>
-                        <el-form-item label="编制人数:" prop="complementCount">
-                            <el-input v-model="form.complementCount" type="text"></el-input>
-                        </el-form-item>
-                        <el-form-item label="在岗人数:" prop="staffCount">
-                            <el-input v-model="form.staffCount" type="text"></el-input>
-                        </el-form-item>
-                        <el-form-item>
-
-                        </el-form-item>
-                    </el-form>
-                </el-scrollbar>
-            </div>
+
+            <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">
+                    <el-input v-model="companyForm.company_name" type="text" placeholder="请输入公司全称"></el-input>
+                </el-form-item>
+                <el-form-item label="公司简称:">
+                    <el-input v-model="companyForm.abbreviation" type="text" placeholder="请输入公司简称"></el-input>
+                </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"
+                                   :label="item.label"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="统一社会信用代码:">
+                    <el-input v-model="companyForm.code" placeholder="统一社会信用代码"></el-input>
+                </el-form-item>
+                <el-form-item label="注册地址:">
+                    <el-cascader v-model="registered_address.pro" :options="province" placeholder="选择城市/区级"
+                                 filterable>
+                    </el-cascader>
+                    <el-input style="margin-left: 5px;width: 450px" v-model="registered_address.info"
+                              placeholder="详细地址"></el-input>
+                </el-form-item>
+                <el-form-item label="经营地址:">
+                    <el-cascader v-model="business_address.pro" :options="province" placeholder="选择城市/区级"
+                                 filterable></el-cascader>
+                    <el-input style="margin-left: 5px;width: 450px" v-model="business_address.info"
+                              placeholder="详细地址"></el-input>
+                </el-form-item>
+                <el-form-item label="法人姓名:">
+                    <el-input v-model="companyForm.legal_person_name" type="text"
+                              placeholder="请输入法人姓名"></el-input>
+                </el-form-item>
+                <el-form-item label="公司编码:">
+                    <el-input v-model="companyForm.company_code" type="text" placeholder="请输入公司编码"></el-input>
+                </el-form-item>
+                <el-form-item label="编制人数:">
+                    <el-input-number v-model="companyForm.on_guard_size" :min="0"
+                                     placeholder="编制人数"></el-input-number>
+                </el-form-item>
+                <el-form-item label="在岗人数:">
+                    <el-input-number v-model="companyForm.staff_size" :min="0" placeholder="在岗人数"></el-input-number>
+                </el-form-item>
+            </el-form>
+
+            <el-form v-if="show.dept" :model="deptForm" label-position="right" label-width="200px">
+                <el-form-item label="部门名称:">
+                    <el-input v-model="deptForm.department_name" placeholder="请输入部门名称"/>
+                </el-form-item>
+                <el-form-item label="上级公司:">
+                    <el-select v-model="deptForm.company_id" placeholder="请选择上级公司">
+                        <el-option v-for="item in companyList" :key="item.id" :value="item.id">{{ item.company_name }}</el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="部门负责人:">
+                    <el-input v-model="deptForm.principal" placeholder="部门负责人"/>
+                </el-form-item>
+                <el-form-item label="部门接口人:">
+                    <el-input v-model="deptForm.liaison_officer" placeholder="部门接口人"/>
+                </el-form-item>
+                <el-form-item label="排重名:">
+                    <el-input v-model="deptForm.duplicate_name" placeholder="排重名"/>
+                </el-form-item>
+                <el-form-item label="在岗人数:">
+                    <el-input-number v-model="deptForm.on_guard" placeholder="在岗人数" :min="0"></el-input-number>
+                </el-form-item>
+                <el-form-item label="自由员工:">
+                    <el-input-number v-model="deptForm.freelance_staff" placeholder="自由员工"
+                                     :min="0"></el-input-number>
+                </el-form-item>
+                <el-form-item label="协作员工:">
+                    <el-input-number v-model="deptForm.cooperation_staff" placeholder="协作员工"
+                                     :min="0"></el-input-number>
+                </el-form-item>
+                <el-form-item label="第三方员工:">
+                    <el-input-number v-model="deptForm.thirdparty_staff" placeholder="第三方员工"
+                                     :min="0"></el-input-number>
+                </el-form-item>
+                <el-form-item label="部门职责:">
+                    <el-input type="textarea" v-model="deptForm.censure" placeholder="部门职责"/>
+                </el-form-item>
+            </el-form>
+
             <div slot="footer" class="dialog-footer">
-                <el-button style="background-color: #2EA8E6;color: #FFFFFF; margin-right: 30px;">下一个</el-button>
                 <el-button style="background-color: #B3B3B3;color: #FFFFFF;margin-right: 30px;"
-                    @click="resetForm('form')">重置</el-button>
-                <el-button style="background-color: #2EA8E6;color: #FFFFFF;">更新</el-button>
+                           @click="resetForm('form')">重置
+                </el-button>
+                <el-button style="background-color: #2EA8E6;color: #FFFFFF;" @click="submit">确定</el-button>
             </div>
         </el-dialog>
     </div>
 </template>
 
 <script>
-export default {
+import province from '@/data/province.json'
+import {addCompany, addDept, getCompanyList} from "@/api/company/company";
 
+export default {
+    comments: {},
+    watch: {
+        addType: function (val) {
+            if (val == 1) {
+                this.popTitle = '添加企业'
+                this.show.dept = false;
+                this.show.company = true;
+            } else if (val == 2) {
+                this.popTitle = '添加部门'
+                this.show.company = false;
+                this.show.dept = true;
+            }
+        }
+    },
     data() {
         return {
+            province,
             popTitle: '添加公司',
             dialogVisible: false,
-            url: '',
-            form: {
-                fullName: "",
-                abbreviateName: "",
-                parentCorporation: "",
-                sccide: "",
-                registeredAddress: "",
-                businessAddress: "",
-                legalName: "",
-                corporationCode: "",
-                complementCount: "",
-                staffCount: ""
+            addType: '1',
+            show: {
+                company: true,
+                dept: false,
             },
-            superiorOptions: [
-                {
-                    value: "0",
-                    label: "中讯邮电咨询设计院"
-                }
-            ],
-            addressOptions: [],
+            registered_address: {
+                pro: '',
+                info: ''
+            },
+            business_address: {
+                pro: '',
+                info: ''
+            },
+            formRules: {
+                company_name: [
+                    { required: true, message: '请输入公司名称', trigger: 'change' }
+                ]
+            },
+            companyList: [],
+            companyForm: {},
+            deptForm: {},
+            form: {}
+
         }
     },
+    mounted() {
+        this.getCompanyData()
+    },
     methods: {
         close() {
 
         },
         resetForm() {
             this.$refs.form.resetFields();
+        },
+        submit() {
+            if (this.addType == '1') {
+                this.addCompany();
+            } else if (this.addType == '2') {
+                this.addDept();
+            }
+        },
+        getCompanyData(page) {
+            getCompanyList('', 1, 999).then(res=>{
+                let data = res.data;
+                if (data.code == '0') {
+                    this.companyList = data.data;
+                    this.$forceUpdate()
+                }
+            })
+        },
+        addCompany() {
+            let business_address = '';
+            if (this.business_address.pro) {
+                for (let i = 0; i < this.business_address.pro.length; i++) {
+                    if (i>0) {
+                        business_address += '/'
+                    }
+                    business_address += this.business_address.pro[i]
+                }
+            }
+            business_address += '---'+this.business_address.info;
+
+            let registered_address = '';
+            if (this.registered_address.pro) {
+                for (let i = 0; i < this.registered_address.pro.length; i++) {
+                    if (i>0) {
+                        registered_address += '/'
+                    }
+                    registered_address += this.registered_address.pro[i]
+                }
+            }
+            registered_address += '---'+this.registered_address.info;
+
+            let param = JSON.parse(JSON.stringify(this.companyForm));
+            param.on_guard_size = ''+param.on_guard_size
+            param.staff_size = ''+param.staff_size
+            param.registered_address = registered_address
+            param.business_address = business_address
+            addCompany(param).then(res=>{
+                let data = res.data;
+                if (data.code==0) {
+                    this.dialogVisible = false;
+                    this.$message.success('添加成功');
+                } else {
+                    this.$message.error(data.message);
+                }
+            })
+        },
+        addDept() {
+            let param = JSON.parse(JSON.stringify(this.deptForm));
+            addDept(param).then(res=>{
+                let data = res.data;
+                if (data.code == 0) {
+                    this.dialogVisible = false;
+                    this.$message.success('添加成功');
+                } else {
+                    this.$message.error(data.message)
+                }
+            })
         }
     }
 
 }
 </script>
 <style lang="less" scoped>
-/deep/.el-dialog__footer {
-    text-align: center;
+/deep/ .el-dialog__footer {
+  text-align: center;
 }
-/deep/.el-dialog__body {
-    padding: 0 20px;
+
+/deep/ .el-dialog__body {
+  padding: 0 20px;
 }
 
 
-/deep/.el-divider--horizontal {
-    display: block;
-    height: 1px;
-    width: 100%;
-    margin: 0 !important;
+/deep/ .el-divider--horizontal {
+  display: block;
+  height: 1px;
+  width: 100%;
+  margin: 0 !important;
 }
 
 .el-image {
-    width: 100%;
-    height: 100px;
-    margin-top: 10px;
+  width: 100%;
+  height: 100px;
+  margin-top: 10px;
 }
 
 .alter {
-    background-color: #2EA8E6;
-    color: #FFFFFF;
-    float: right;
-    position: relative;
-    top: -40px;
-    right: 10px;
-    width: 80px !important;
+  background-color: #2EA8E6;
+  color: #FFFFFF;
+  float: right;
+  position: relative;
+  top: -40px;
+  right: 10px;
+  width: 80px !important;
 }
 
 .el-icon-close {
-    margin-left: 480px;
+  margin-left: 480px;
 }
 
-/deep/.el-tabs__header {
-    height: 0;
-    margin-bottom: 0;
+/deep/ .el-tabs__header {
+  height: 0;
+  margin-bottom: 0;
 }
 
 
 .el-select {
-    width: 100%;
+  width: 100%;
 }
 
 .el-form {
-    padding: 0 5% 0 5%;
-
-    .el-form-item {
-        padding-top: 10px;
-        margin-inline: 20px;
-        margin-bottom: 0;
-    }
-
-    .el-cascader {
-        /deep/.el-input__inner {
-            width: 100px;
-        }
-    }
 
-    /deep/.el-form-item__label {
-        padding: 0;
-        text-align: left;
-        font-weight: 550;
-    }
+  .el-form-item {
+    margin-bottom: 12px;
+  }
 
-    /deep/.el-form-item__content {
-        display: flex;
-    }
 }
 
 
 .el-button {
-    width: 100px;
-    height: 30px;
-    text-align: center;
-    padding: 5px;
+  width: 100px;
+  height: 30px;
+  text-align: center;
+  padding: 5px;
 }
 </style>

+ 26 - 0
src/views/userManagement/groupManagement/messageDialog/uploadBanner.vue

@@ -0,0 +1,26 @@
+<template>
+  <div>
+      <el-dialog title="上传图片">
+          <el-steps direction="vertical" :active="1">
+              <el-step title="1 请选择图片"></el-step>
+              <el-step title="2 图片预览"></el-step>
+          </el-steps>
+      </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+    props: {
+
+    },
+    data() {
+        return {}
+    },
+    mounted() {
+    },
+    methods: {
+
+    }
+}
+</script>

+ 38 - 20
src/views/userManagement/groupManagement/tables/corporationOverview.vue

@@ -1,19 +1,15 @@
 <template>
     <div style="height:100%">
-        <el-button class="addCompany" @click="addCompany" style="color: #fff; background: #3da0d6"><i
-                class="el-icon-s-order"></i>添加公司</el-button>
-                <corporationAdd ref="corporationAdd"></corporationAdd>
         <p class="info">公司总览</p>
-        <el-button class="delete" @click="batchDelete">批量删除</el-button>
         <el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" :header-cell-style="{ textAlign: 'center' }"
             :cell-style="{ textAlign: 'center' }" height="400" style="width: 98%" @selection-change="handleSelectionChange">
             <el-table-column type="selection" width="50">
             </el-table-column>
-            <el-table-column prop="corporation_name" label="公司名称">
+            <el-table-column prop="company_name" label="公司名称">
             </el-table-column>
-            <el-table-column prop="Sccode" label="社会信用代码">
+            <el-table-column prop="code" label="社会信用代码">
             </el-table-column>
-            <el-table-column prop="legal_person" label="公司法人">
+            <el-table-column prop="legal_person_name" label="公司法人">
             </el-table-column>
             <el-table-column prop="contact_person" label="联系人">
             </el-table-column>
@@ -36,9 +32,10 @@
 <script>
 import checkbox from '@/components/Checkbox/index';
 import page from '@/components/pagination/index';
-import corporationAdd from '../messageDialog/corporationAdd';
+import {delCompanyInfo, getCompanyList} from "@/api/company/company";
 export default {
-    components: { checkbox, page,corporationAdd },
+    components: { checkbox, page },
+    emits: ['nodeClick'],
     data() {
         return {
             filterText: '',
@@ -98,16 +95,35 @@ export default {
             this.getTableData(1);
         },
         getTableData(page) {
-
+            getCompanyList('', this.paginationData.currentPage, this.paginationData.pageSize).then(res=>{
+                let data = res.data;
+                if (data.code == '0') {
+                    this.tableData = data.data
+                }
+            })
         },
-        infoDetail() {
-
+        infoDetail(data) {
+            data.type='company'
+            this.$emit('nodeClick', data)
         },
-        infoEdit() {
-
+        infoEdit(data) {
+            data.type='company'
+            this.$emit('nodeClick', data)
         },
-        deleteInfo() {
-
+        deleteInfo(data) {
+            this.$confirm('确定要删除吗?', '提示', {
+                type: 'warning'
+            }).then(()=>{
+                delCompanyInfo(data.id).then(res=>{
+                    let data = res.data;
+                    if (data.code == 0) {
+                        this.getTableData(1)
+                        this.$message.success('删除成功');
+                    } else {
+                        this.$message.error(data.message);
+                    }
+                })
+            })
         },
         batchDelete() {
 
@@ -124,7 +140,7 @@ export default {
 <style lang="less" scoped>
 .info {
     padding: 20px 20px 20px 40px;
-    font-size: 25px;
+    font-size: 16px;
     text-align: left;
 }
 
@@ -147,8 +163,8 @@ export default {
     margin-left: 1%;
     height: 400px;
     border: 1px solid #f0f2f2;
-    font-size: 0.95rem;
-    font-family: PingFang SC;
+    font-size: 14px;
+    font-family: PingFang SC,serif;
     font-weight: 500;
     color: #b2b2b2;
     background: rgba(255, 255, 255, 0.8);
@@ -203,7 +219,9 @@ export default {
     bottom: 15px;
     width: 250px;
     text-align: center;
-    font-size: 16px;
+    font-size: 14px;
+    height: 30px;
+    padding: 8px 12px;
 }
 
 .bottom {

+ 15 - 29
src/views/userManagement/personManagement/tables/userTableData.vue

@@ -5,12 +5,12 @@
                   :cell-style="{ textAlign: 'center' }" style="width: 100%;min-height: 500px"
                   @selection-change="handleSelectionChange">
             <el-table-column type="selection" width="50"></el-table-column>
-            <el-table-column prop="username" label="用户名"></el-table-column>
+            <el-table-column prop="user_name" label="用户名"></el-table-column>
             <el-table-column prop="phone" label="手机号"></el-table-column>
             <el-table-column prop="email" label="邮箱"></el-table-column>
             <el-table-column prop="role" label="角色"></el-table-column>
             <el-table-column prop="permission" label="权限"></el-table-column>
-            <el-table-column prop="working_address" label="单位"></el-table-column>
+            <el-table-column prop="company" label="单位"></el-table-column>
             <el-table-column prop="register_time" label="注册时间" width="180"></el-table-column>
             <el-table-column prop="status" label="状态">
                 <template slot-scope="scope">
@@ -20,13 +20,13 @@
             <el-table-column prop="operation" label="操作">
                 <template slot-scope="scope">
                     <el-button size="mini" type="text" style="color: #2ea8e6"
-                               v-show="scope.row.username == null ? false : true" @click="view(scope.row)">查看
+                               @click="view(scope.row)">查看
                     </el-button>
                     <el-button size="mini" type="text" style="color: #2ea8e6"
-                               v-show="scope.row.username == null ? false : true" @click="edit(scope.row)">编辑
+                               @click="edit(scope.row)">编辑
                     </el-button>
                     <el-button size="mini" type="text" style="color: #2ea8e6"
-                               v-show="scope.row.username == null ? false : true" @click="deleteUser(scope.row)">删除
+                               @click="deleteUser(scope.row)">删除
                     </el-button>
                 </template>
             </el-table-column>
@@ -74,7 +74,7 @@ export default {
     },
     methods: {
         initData() {
-            this.paginationData.currentPage=1;
+            this.paginationData.currentPage = 1;
             this.paginationData.pageSize = 10;
             this.paginationData.total = 0;
             this.getTableData(1);
@@ -93,28 +93,12 @@ export default {
                     this.paginationData.currentPage = 1;
                     this.paginationData.pageSize = 10
                     if (res.data.data.length > 0) {
-                        this.tableData = res.data.data.map((e) => {
-                            return {
-                                id: e.id,
-                                username: e.user_name,
-                                phone: e.phone == "undefined" || !e.phone ? "--" : e.phone,
-                                email: e.email == "undefined" || !e.email ? "--" : e.email,
-                                role: e.role == "undefined" || !e.role ? "--" : e.role,
-                                permission:
-                                    e.permission == "undefined" || !e.permission
-                                        ? e.permission
-                                        : "--",
-                                working_address:
-                                    e.company == "undefined" || !e.company ? "--" : e.company,
-                                register_time: this.$dayjs(e.register_time).format(
-                                    "YYYY-MM-DD HH:mm:ss"
-                                ),
-                                status:
-                                    e.on_job_status == "undefined" || !e.on_job_status
-                                        ? "--"
-                                        : e.on_job_status,
-                            };
-                        });
+                        this.tableData = res.data.data;
+                        this.tableData.forEach(item => {
+                            item.register_time = this.$dayjs(item.register_time).format(
+                                "YYYY-MM-DD HH:mm:ss"
+                            )
+                        })
                     }
                 }
             });
@@ -124,6 +108,7 @@ export default {
             this.getTableData(this.currentPage);
         },
         view(data) {
+            console.log(data)
             this.$emit('view', data);
         },
         edit(data) {
@@ -131,7 +116,7 @@ export default {
         },
         deleteUser(data) {
             let app = this;
-            this.$confirm('是否删除用户:'+data.username+' ?', '提示', {
+            this.$confirm('是否删除用户:' + data.username + ' ?', '提示', {
                 confirmButtonText: '确定',
                 cancelButtonText: '取消',
                 type: 'warning'
@@ -174,6 +159,7 @@ export default {
     .el-checkbox__input.is-checked .el-checkbox__inner::after {
       width: 70%;
       height: 70%;
+      margin-left: 1px;
       background: #2ea8e6;
       border-radius: 0;
       transform: rotate(0deg) scaleY(1);