Explorar el Código

'更新202206060933'

fanghuisheng hace 3 años
padre
commit
6dfc2ac269
Se han modificado 43 ficheros con 3535 adiciones y 583 borrados
  1. 1 0
      package.json
  2. 4 0
      public/index.html
  3. 2 2
      public/static/config.js
  4. 2 0
      public/static/svgIcons/platManage.svg
  5. 2 0
      public/static/svgIcons/statisManage.svg
  6. 67 0
      src/api/platManage/index.js
  7. 9 0
      src/api/publicList.js
  8. 67 0
      src/api/statisManage/loginLog.js
  9. 77 0
      src/api/tenantManage/authConfig.js
  10. 10 0
      src/api/tenantManage/systemConfig.js
  11. BIN
      src/assets/login_images/login_background.png
  12. 2 0
      src/icons/svgIcon/platManage.svg
  13. 2 0
      src/icons/svgIcon/statisManage.svg
  14. 5 5
      src/layout/index.vue
  15. 42 27
      src/layout/vab-avatar/index.vue
  16. 1 0
      src/layout/vab-tabs/index.vue
  17. 12 3
      src/main.js
  18. 28 0
      src/store/index.js
  19. 54 49
      src/store/modules/routes.js
  20. 2 1
      src/store/modules/tagsBar.js
  21. 1 0
      src/store/modules/user.js
  22. 23 11
      src/vab/plugins/permissions.js
  23. 117 73
      src/views/login/index.vue
  24. 1 3
      src/views/middle.vue
  25. 317 0
      src/views/platManage/dialogComponent.vue
  26. 358 0
      src/views/platManage/index.vue
  27. 5 3
      src/views/siteManage/index.vue
  28. 303 0
      src/views/statisManage/loginLog/dialogComponent.vue
  29. 426 0
      src/views/statisManage/loginLog/index.vue
  30. 400 0
      src/views/statisManage/operLog/dialogComponent.vue
  31. 470 0
      src/views/statisManage/operLog/index.vue
  32. 1 3
      src/views/systemManage/rolePermission/roleInfoCom/index.vue
  33. 1 1
      src/views/systemManage/userManage/dialogComponent.vue
  34. 20 1
      src/views/tenantManage/adminConfig/component/adminDialog.vue
  35. 3 2
      src/views/tenantManage/adminConfig/component/checkAdminList.vue
  36. 1 0
      src/views/tenantManage/adminConfig/index.vue
  37. 85 245
      src/views/tenantManage/authConfig/dialogComponent.vue
  38. 2 1
      src/views/tenantManage/authConfig/index.vue
  39. 429 62
      src/views/tenantManage/systemConfig/dialogComponent.vue
  40. 13 12
      src/views/tenantManage/systemConfig/index.vue
  41. 121 45
      src/views/tenantManage/tenantUnit/dialogComponent.vue
  42. 36 21
      src/views/tenantManage/tenantUnit/index.vue
  43. 13 13
      vue.config.js

+ 1 - 0
package.json

@@ -28,6 +28,7 @@
     "videojs-contrib-hls": "^5.15.0",
     "vue": "^3.2.18",
     "vue-grid-layout": "^3.0.0-beta1",
+    "vue-amap": "^0.5.10",
     "vue-router": "^4.0.3",
     "vuex": "^4.0.0"
   },

+ 4 - 0
public/index.html

@@ -9,6 +9,8 @@
     <title>
         <%= htmlWebpackPlugin.options.title %>
     </title>
+    <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=246349bf278f6225fa80156828d0f061"></script>
+
     <meta content="vab,vab官网,后台管理框架,vue后台管理框架,vue-admin-beautiful,vue-admin-beautiful-pro,vue-admin-beautiful官网,vue-admin-beautiful文档,vue-element-admin,vue-element-admin官网,vue-element-admin文档,vue-admin,vue-admin官网,vue-admin文档" name="keywords" />
     <meta content="<%= VUE_APP_TITLE %>官网与文档基于vue-admin-beautiful-pro构建,简称vab(是一款超棒的vue+element中后台前端快速开发框架),QQ群972435319,作者:<%= VUE_APP_AUTHOR %>" name="description" />
     <meta content="<%= VUE_APP_AUTHOR %>" name="author" />
@@ -22,6 +24,8 @@
             s.parentNode.insertBefore(hm, s);
         })();
     </script>
+
+
 </head>
 
 <body>

+ 2 - 2
public/static/config.js

@@ -4,8 +4,8 @@ var PLATFROM_CONFIG = {};
 // PLATFROM_CONFIG.baseUrl = "http://172.16.1.196:8010/" //超博本地
 
 PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/uskypower/" //线上--->测试
-PLATFROM_CONFIG.images = "https://qhome.usky.cn/file/" //线上图片--->测试
-PLATFROM_CONFIG.fileUrl = "https://qhome.usky.cn/file/" //xlsx文件访问路径--->测试
+PLATFROM_CONFIG.images = "https://qhome.usky.cn/uskyfile/" //线上图片--->测试
+PLATFROM_CONFIG.fileUrl = "https://qhome.usky.cn/uskyfile/" //xlsx文件访问路径--->测试
 
 // if (window.location.host.indexOf('localhost') != -1 || window.location.host.indexOf('pcdev.ewoogi.com') != -1) {
 //     PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/uskypower/" //线上--->测试

+ 2 - 0
public/static/svgIcons/platManage.svg

@@ -0,0 +1,2 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1653875874167" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1789" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
+</style></defs><path d="M162.889143 102.838857h-4.973714c-42.422857 0-76.8 34.377143-76.8 76.8v628.150857c0 42.422857 34.377143 76.8 76.8 76.8h635.026285c42.422857 0 76.8-34.377143 76.8-76.8V179.638857c0-42.422857-34.377143-76.8-76.8-76.8h-8.850285V404.48c0 55.954286-45.348571 101.229714-101.229715 101.229714H264.118857c-55.954286 0-101.229714-45.348571-101.229714-101.229714V102.838857z m62.829714 0V404.48c0 21.211429 17.188571 38.4 38.4 38.4h418.742857c21.211429 0 38.4-17.188571 38.4-38.4V102.838857H225.718857zM157.915429 40.009143h635.026285c77.092571 0 139.629714 62.537143 139.629715 139.629714v628.150857a139.629714 139.629714 0 0 1-139.629715 139.629715H157.988571A139.629714 139.629714 0 0 1 18.285714 807.789714V179.638857c0-77.092571 62.464-139.629714 139.629715-139.629714z m420.278857 114.468571c19.236571 0 34.889143 15.579429 34.889143 34.889143V365.714286a34.889143 34.889143 0 1 1-69.778286 0V189.44c0-19.309714 15.579429-34.889143 34.889143-34.889143z" fill="#fff" p-id="1790"></path></svg>

+ 2 - 0
public/static/svgIcons/statisManage.svg

@@ -0,0 +1,2 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1653901021291" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1772" width="200" height="200" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
+</style></defs><path d="M163.914722 847.857281l0-69.354578c0-6.698562 5.489014-12.227486 12.227486-12.227486l671.715585 0c6.698562 0 12.226462 5.528923 12.226462 12.227486l0 69.354578c0 6.698562-5.5279 12.227486-12.226462 12.227486L176.141184 860.084767C169.402713 860.084767 163.914722 854.600869 163.914722 847.857281L163.914722 847.857281zM225.091036 394.954237l138.710178 0c6.739495 0 12.227486 5.483898 12.227486 12.227486L376.028701 719.714785c0 6.748704-5.487991 12.226462-12.227486 12.226462L225.091036 731.941248c-6.698562 0-12.227486-5.478781-12.227486-12.226462L212.863551 407.181723C212.863551 400.479067 218.352565 394.954237 225.091036 394.954237L225.091036 394.954237zM442.643887 295.185976 581.354066 295.185976c6.698562 0 12.227486 5.523807 12.227486 12.227486L593.581552 719.714785c0 6.748704-5.528923 12.226462-12.227486 12.226462L442.643887 731.941248c-6.738471 0-12.227486-5.478781-12.227486-12.226462L430.416402 307.413462C430.416402 300.710806 435.906439 295.185976 442.643887 295.185976L442.643887 295.185976zM660.197762 163.91421l138.710178 0c6.698562 0 12.227486 5.523807 12.227486 12.227486L811.135426 719.714785c0 6.748704-5.528923 12.226462-12.227486 12.226462L660.197762 731.941248c-6.698562 0-12.227486-5.478781-12.227486-12.226462L647.970276 176.141696C647.970276 169.398108 653.4992 163.91421 660.197762 163.91421z" p-id="1773" fill="#ffffff"></path></svg>

+ 67 - 0
src/api/platManage/index.js

@@ -0,0 +1,67 @@
+import request from '@/utils/request'
+
+//平台管理-列表查询
+export function getPlatformList(params) {
+    return request({
+        url: '/sysPlatform/getPlatformList',
+        method: 'GET',
+        params,
+    })
+}
+
+//树结构回显
+export function getPlatformMenu(params) {
+    return request({
+        url: '/sysPlatform/getPlatformMenu',
+        method: 'GET',
+        params,
+    })
+}
+
+//单位配置-注销
+export function plannedOutageDel(params) {
+    return request({
+        url: '/wcBlackoutPlan/plannedOutageDel',
+        method: 'GET',
+        params,
+    })
+}
+
+//单位配置-新增
+export function updatePlatformMenu(params) {
+    return request({
+        url: '/sysPlatform/updatePlatformMenu',
+        method: 'POST',
+        data: params,
+    })
+}
+
+//单位配置-系统平台下拉
+export function getPlatformBoxList(params) {
+    return request({
+        url: '/tenantConfig/getPlatformBoxList',
+        method: 'GET',
+        params,
+    })
+}
+
+
+
+//单位配置-修改
+export function updateTenantData(params) {
+    return request({
+        url: '/tenantConfig/updateTenantData',
+        method: 'POST',
+        data: params,
+    })
+}
+
+
+//单位配置-导出
+export function outagePlanListExport(params) {
+    return request({
+        url: 'wcBlackoutPlan/outagePlanListExport',
+        method: 'GET',
+        params,
+    })
+}

+ 9 - 0
src/api/publicList.js

@@ -25,4 +25,13 @@ export function getAuthorities(params) {
     })
 }
 
+// 中间页的背景图 公司名称获取 logo (和主页的)
+export function getMiddleConfig(params) {
+    return request({
+        url: '/sysTenantConfig/getMiddleConfig',
+        method: 'GET',
+        params
+    })
+}
+
 // 设备下拉

+ 67 - 0
src/api/statisManage/loginLog.js

@@ -0,0 +1,67 @@
+import request from '@/utils/request'
+
+//平台管理-列表查询
+export function getLoginLogList(params) {
+    return request({
+        url: '/sysLoginLog/getLoginLogList',
+        method: 'GET',
+        params,
+    })
+}
+
+//树结构回显
+export function getPlatformMenu(params) {
+    return request({
+        url: '/sysPlatform/getPlatformMenu',
+        method: 'GET',
+        params,
+    })
+}
+
+//单位配置-注销
+export function plannedOutageDel(params) {
+    return request({
+        url: '/wcBlackoutPlan/plannedOutageDel',
+        method: 'GET',
+        params,
+    })
+}
+
+//单位配置-新增
+export function updatePlatformMenu(params) {
+    return request({
+        url: '/sysPlatform/updatePlatformMenu',
+        method: 'POST',
+        data: params,
+    })
+}
+
+//单位配置-系统平台下拉
+export function getPlatformBoxList(params) {
+    return request({
+        url: '/tenantConfig/getPlatformBoxList',
+        method: 'GET',
+        params,
+    })
+}
+
+
+
+//单位配置-修改
+export function updateTenantData(params) {
+    return request({
+        url: '/tenantConfig/updateTenantData',
+        method: 'POST',
+        data: params,
+    })
+}
+
+
+//单位配置-导出
+export function outagePlanListExport(params) {
+    return request({
+        url: 'wcBlackoutPlan/outagePlanListExport',
+        method: 'GET',
+        params,
+    })
+}

+ 77 - 0
src/api/tenantManage/authConfig.js

@@ -0,0 +1,77 @@
+import request from '@/utils/request'
+
+//单位配置-查询
+export function getTenantData(params) {
+    return request({
+        url: '/tenantConfig/getTenantData',
+        method: 'POST',
+        data: params,
+    })
+}
+
+
+// 树结构渲染
+export function getMenuList(params) {
+    return request({
+        url: '/authorityConfig/getMenuList',
+        method: 'GET',
+        params,
+    })
+}
+//树结构保存
+export function updateMenu(params) {
+    return request({
+        url: '/authorityConfig/updateMenu',
+        method: 'POST',
+        data: params,
+    })
+}
+
+
+//单位配置-注销
+export function plannedOutageDel(params) {
+    return request({
+        url: '/wcBlackoutPlan/plannedOutageDel',
+        method: 'GET',
+        params,
+    })
+}
+
+//单位配置-新增
+export function addTenantData(params) {
+    return request({
+        url: '/tenantConfig/addTenantData',
+        method: 'POST',
+        data: params,
+    })
+}
+
+//单位配置-系统平台下拉
+export function getPlatformBoxList(params) {
+    return request({
+        url: '/tenantConfig/getPlatformBoxList',
+        method: 'GET',
+        params,
+    })
+}
+
+
+
+//单位配置-修改
+export function updateTenantData(params) {
+    return request({
+        url: '/tenantConfig/updateTenantData',
+        method: 'POST',
+        data: params,
+    })
+}
+
+
+//单位配置-导出
+export function outagePlanListExport(params) {
+    return request({
+        url: 'wcBlackoutPlan/outagePlanListExport',
+        method: 'GET',
+        params,
+    })
+}

+ 10 - 0
src/api/tenantManage/systemConfig.js

@@ -44,6 +44,16 @@ export function updaMiddleConfig(params) {
     })
 }
 
+//系统配置-首页请求下拉
+export function getMenuBoxList(params) {
+    return request({
+        url: '/sysTenantConfig/getMenuBoxList',
+        method: 'GET',
+        params,
+    })
+}
+
+
 //单位配置-系统平台下拉
 export function getPlatformBoxList(params) {
     return request({

BIN
src/assets/login_images/login_background.png


+ 2 - 0
src/icons/svgIcon/platManage.svg

@@ -0,0 +1,2 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1653875874167" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1789" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
+</style></defs><path d="M162.889143 102.838857h-4.973714c-42.422857 0-76.8 34.377143-76.8 76.8v628.150857c0 42.422857 34.377143 76.8 76.8 76.8h635.026285c42.422857 0 76.8-34.377143 76.8-76.8V179.638857c0-42.422857-34.377143-76.8-76.8-76.8h-8.850285V404.48c0 55.954286-45.348571 101.229714-101.229715 101.229714H264.118857c-55.954286 0-101.229714-45.348571-101.229714-101.229714V102.838857z m62.829714 0V404.48c0 21.211429 17.188571 38.4 38.4 38.4h418.742857c21.211429 0 38.4-17.188571 38.4-38.4V102.838857H225.718857zM157.915429 40.009143h635.026285c77.092571 0 139.629714 62.537143 139.629715 139.629714v628.150857a139.629714 139.629714 0 0 1-139.629715 139.629715H157.988571A139.629714 139.629714 0 0 1 18.285714 807.789714V179.638857c0-77.092571 62.464-139.629714 139.629715-139.629714z m420.278857 114.468571c19.236571 0 34.889143 15.579429 34.889143 34.889143V365.714286a34.889143 34.889143 0 1 1-69.778286 0V189.44c0-19.309714 15.579429-34.889143 34.889143-34.889143z" fill="#000000" p-id="1790"></path></svg>

+ 2 - 0
src/icons/svgIcon/statisManage.svg

@@ -0,0 +1,2 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1653901021291" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1772" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
+</style></defs><path d="M163.914722 847.857281l0-69.354578c0-6.698562 5.489014-12.227486 12.227486-12.227486l671.715585 0c6.698562 0 12.226462 5.528923 12.226462 12.227486l0 69.354578c0 6.698562-5.5279 12.227486-12.226462 12.227486L176.141184 860.084767C169.402713 860.084767 163.914722 854.600869 163.914722 847.857281L163.914722 847.857281zM225.091036 394.954237l138.710178 0c6.739495 0 12.227486 5.483898 12.227486 12.227486L376.028701 719.714785c0 6.748704-5.487991 12.226462-12.227486 12.226462L225.091036 731.941248c-6.698562 0-12.227486-5.478781-12.227486-12.226462L212.863551 407.181723C212.863551 400.479067 218.352565 394.954237 225.091036 394.954237L225.091036 394.954237zM442.643887 295.185976 581.354066 295.185976c6.698562 0 12.227486 5.523807 12.227486 12.227486L593.581552 719.714785c0 6.748704-5.528923 12.226462-12.227486 12.226462L442.643887 731.941248c-6.738471 0-12.227486-5.478781-12.227486-12.226462L430.416402 307.413462C430.416402 300.710806 435.906439 295.185976 442.643887 295.185976L442.643887 295.185976zM660.197762 163.91421l138.710178 0c6.698562 0 12.227486 5.523807 12.227486 12.227486L811.135426 719.714785c0 6.748704-5.528923 12.226462-12.227486 12.226462L660.197762 731.941248c-6.698562 0-12.227486-5.478781-12.227486-12.226462L647.970276 176.141696C647.970276 169.398108 653.4992 163.91421 660.197762 163.91421z" p-id="1773"></path></svg>

+ 5 - 5
src/layout/index.vue

@@ -12,10 +12,10 @@
        <div style="width: 408px;display:inline-block;position:absolute;left:0">
          <vab-logo />
        </div>
-       <div class="menu-outBox" style="display:none" >
+       <!-- <div class="menu-outBox" style="display:none" >
          <a-menu
               class="vab-menu"
-              theme="light"
+              theme="dark"
               mode="inline"
               v-model:selectedKeys="selectedKeys"
               v-model:openKeys="openKeys"
@@ -28,7 +28,7 @@
                 :item="route"
               />
             </a-menu>
-       </div>
+       </div> -->
        <div style="display:inline-block;position:absolute;right:10px">
          <vab-avatar />
        </div>
@@ -116,7 +116,7 @@
       <!-- 菜单start -->
       <a-menu
         class="vab-menu"
-        theme=""
+        theme="light"
         mode="inline"
         v-model:selectedKeys="selectedKeys"
         v-model:openKeys="openKeys"
@@ -226,7 +226,7 @@ export default {
     overflow: auto;
     .vab-menu {
       overflow-y: auto;
-      height: calc(100vh - @vab-header-height);
+      height: calc(100vh - 107px);
       li {
         //     margin-top: 10px;
         // margin-bottom: 10px;

+ 42 - 27
src/layout/vab-avatar/index.vue

@@ -5,10 +5,11 @@
       <!-- 天气预留位置 -->
     </span>
 
-    <span class="goPanelBlock">
-      <a  @click="goPanel" target="_blank">
-        <img src="/static/svgIcons/home.svg" alt="" width="12">
-        大屏</a>
+    <span class="goPanelBlock" v-if="$store.state.largeScreenUrl">
+      <a @click="goPanel" target="_blank">
+        <img src="/static/svgIcons/home.svg" alt="" width="12" />
+        大屏
+      </a>
     </span>
 
     <span class="bell">
@@ -36,21 +37,21 @@
           "
         /> -->
 
-        <span style="margin-right:10px;display:inline-block">欢迎您,{{ username }}</span>
-        
+        <span style="margin-right: 10px; display: inline-block">
+          欢迎您,{{ username }}
+        </span>
+
         <DownOutlined />
       </span>
 
       <template v-slot:overlay>
         <a-menu>
-           <a-menu-item @click="goPerCenter">个人中心</a-menu-item>
+          <a-menu-item @click="goPerCenter">个人中心</a-menu-item>
           <a-menu-item @click="logout">退出登录</a-menu-item>
         </a-menu>
       </template>
     </a-dropdown>
 
-    
-
     <!-- <span><img src="../../assets/images/switch.png" alt="" width="15" /></span> -->
   </div>
 </template>
@@ -59,7 +60,8 @@
 import { recordRoute } from '@/config'
 import { DownOutlined } from '@ant-design/icons-vue'
 import { useStore } from 'vuex'
-import { mapGetters } from 'vuex'
+import { mapActions, mapGetters } from 'vuex'
+// import { mapGetters, } from 'vuex'
 export default {
   name: 'VabAvatar',
   components: { DownOutlined },
@@ -95,32 +97,45 @@ export default {
   },
   methods: {
 
-    goPerCenter(){
-      this.$router.push('/perCenter/index')
+     ...mapActions({
+ 
+      delAllVisitedRoutes: 'tagsBar/delAllVisitedRoutes',
 
+      // toggleCollapse: 'settings/toggleCollapse',
+    }),
+    goPerCenter() {
+      this.$router.push('/perCenter/index')
     },
 
-    goPanel(){
-      
+    goPanel() {
       if (window.location.host.indexOf('localhost') != -1) {
-
-     
-            window.open("http://localhost:8080/#/home");
-            
-        } else {
-            window.open("http://101.133.214.75:13201/");
-        }
+        window.open('http://localhost:8080/#/home')
+      } else {
+        var aa = this.$store.state.largeScreenUrl
+        window.open(aa)
+      }
     },
     goAlarmingPage() {
       this.$router.push('/alarmManage/index')
     },
 
+     async closeAllTabs() {
+      await this.delAllVisitedRoutes()
+      if (this.affixTabs.some((tag) => tag.path === this.toThisTag().path))
+        return
+      this.toLastTag()
+    },
+
     async logout() {
       await this.$store.dispatch('user/logout')
       if (recordRoute) {
         // const fullPath = this.$route.fullPath
         // this.$router.push(`/login?redirect=${fullPath}`)
 
+        // this.$store.visitedRoutes=[]
+
+        this.closeAllTabs()
+
         this.$router.push('/login')
       } else {
         this.$router.push('/login')
@@ -149,9 +164,9 @@ export default {
     display: inline-block;
     font-size: 14px;
     color: #fff;
-    img{
-      position:relative;
-      top:-1px;
+    img {
+      position: relative;
+      top: -1px;
     }
   }
   .goPanelBlock a:hover {
@@ -160,9 +175,9 @@ export default {
   .bell {
     margin: 0 18px 0 18px;
     cursor: pointer;
-    img{
-      position:relative;
-      top:-1px
+    img {
+      position: relative;
+      top: -1px;
     }
   }
   .bell:hover {

+ 1 - 0
src/layout/vab-tabs/index.vue

@@ -46,6 +46,7 @@
           {{ item.title }}
         </el-breadcrumb-item>
       </el-breadcrumb> -->
+      
       <!-- {{visitedRoutes}} -->
 
       <a-tabs

+ 12 - 3
src/main.js

@@ -6,7 +6,7 @@ import store from './store'
 import 'ant-design-vue/dist/antd.css'
 import '@/vab'
 
-import 'default-passive-events'
+// import 'default-passive-events'
 
 // 引入 ElementUI
 import ElementPlus from 'element-plus'
@@ -82,8 +82,17 @@ router.beforeEach((to) => {
 
         console.log(to.meta.title)
         store.commit('getAuthorities', to.meta.title)
-        console.log('store.state.authorities')
-        console.log(store.state.authorities)
+            // store.commit('getMiddleConfig')
+
+        // console.log('store.state.authorities')
+        // console.log(store.state.authorities)
+
+
+
+
+
+
+        // next()
 
 
     }

+ 28 - 0
src/store/index.js

@@ -35,6 +35,10 @@ export default createStore({
         homeLogo: '',
         homeTitle: '永天智慧电力平台',
         
+        largeScreenUrl: '',
+        middleStatus: 1,
+        homePageUrl: '',
+        firstMiddleState: false,
 
         Time_Data: [], //公共api请求参数->Time_Data
         timearr: [], //公共处理开始时间和结束时间中的时间段天数 值存储
@@ -147,6 +151,30 @@ export default createStore({
 
         },
 
+        /**
+         * @中间页主体页面配置  
+         * @param {*} state 
+         */
+        async getMiddleConfig(state) {
+            await api
+                .getMiddleConfig()
+                .then((requset) => {
+                    if (requset.status === 'SUCCESS') {
+                        state.homeStyle = requset.data[0].homeStyle
+                        state.homeLogo = requset.data[0].homeLogo
+                        state.homeTitle = requset.data[0].middleTitle
+                        state.largeScreenUrl = requset.data[0].largeScreenUrl
+                        state.middleStatus = requset.data[0].middleStatus
+                        state.homePageUrl = requset.data[0].homePageUrl
+                            // alert('中间页请求后' + state.middleStatus)
+                    } else {
+                        ElMessage.error(requset.msg)
+                    }
+                })
+
+        },
+
+
 
 
 

+ 54 - 49
src/store/modules/routes.js

@@ -55,6 +55,7 @@ const actions = {
         data[0].meta.affix = false
         data[0].children[0].meta.affix = true
 
+
         // data.unshift({
         //     path: "/home",
         //     hidden: false,
@@ -78,58 +79,62 @@ const actions = {
         //     }]
         // })
 
-        // data.push({
-        //     path: "/tenantManage",
-        //     hidden: false,
-        //     redirect: "/tenantManage/tenantUnit",
-        //     component: "Layout",
-        //     meta: {
-        //         title: "租户管理",
-        //         icon: "tenantManage",
-
-        //     },
-        //     children: [{
-        //         meta: {
-        //             title: "租户单位配置",
-        //             icon: "tenantManage",
-
-        //         },
-        //         path: "/tenantUnit",
-        //         hidden: false,
-        //         component: "@/views/tenantManage/tenantUnit",
-
-        //     }, {
-        //         meta: {
-        //             title: "管理员配置",
-        //             icon: "tenantManage",
-
-        //         },
-        //         path: "/adminConfig",
-        //         hidden: false,
-        //         component: "@/views/tenantManage/adminConfig",
 
-        //     }, {
-        //         meta: {
-        //             title: "系统配置",
-        //             icon: "tenantManage",
 
-        //         },
-        //         path: "/systemConfig",
-        //         hidden: false,
-        //         component: "@/views/tenantManage/systemConfig",
 
-        //     }, {
-        //         meta: {
-        //             title: "权限配置",
-        //             icon: "tenantManage",
-
-        //         },
-        //         path: "/authConfig",
-        //         hidden: false,
-        //         component: "@/views/tenantManage/authConfig",
-
-        //     }, ]
-        // })
+        data.push({
+            path: "/platManage",
+            hidden: false,
+            redirect: "/platManage/index",
+            component: "Layout",
+            meta: {
+                title: "平台管理",
+                icon: "platManage",
+
+            },
+            children: [{
+                meta: {
+                    title: "平台管理",
+                    icon: "platManage",
+
+                },
+                path: "/platManage",
+                hidden: false,
+                component: "@/views/platManage/index",
+
+            }, ]
+        }, {
+            path: "/statisManage",
+            hidden: false,
+            redirect: "/statisManage/loginLog",
+            component: "Layout",
+            meta: {
+                title: "统计管理",
+                icon: "statisManage",
+
+            },
+            children: [{
+                meta: {
+                    title: "登录日志",
+                    icon: "statisManage",
+
+                },
+                path: "/loginLog",
+                hidden: false,
+                component: "@/views/statisManage/loginLog",
+
+            }, {
+                meta: {
+                    title: "操作日志",
+                    icon: "statisManage",
+
+                },
+                path: "/operLog",
+                hidden: false,
+                component: "@/views/statisManage/operLog",
+
+            }]
+        })
 
 
 

+ 2 - 1
src/store/modules/tagsBar.js

@@ -90,7 +90,8 @@ const mutations = {
      * @returns
      */
     delAllVisitedRoutes(state) {
-        state.visitedRoutes = state.visitedRoutes.filter((item) => item.meta.affix)
+        // state.visitedRoutes = state.visitedRoutes.filter((item) => item.meta.affix)
+        state.visitedRoutes = []
     },
 }
 const actions = {

+ 1 - 0
src/store/modules/user.js

@@ -93,6 +93,7 @@ const actions = {
                     message: `登录成功`,
                     description: `${thisTime}!`,
                 })
+                store.state.firstMiddleState = true
 
             }
 

+ 23 - 11
src/vab/plugins/permissions.js

@@ -5,6 +5,7 @@
 import router from '@/router'
 import store from '@/store'
 import getPageTitle from '@/utils/pageTitle'
+// import * as api from '@/api/publicList'
 import {
     authentication,
     loginInterception,
@@ -14,18 +15,24 @@ import {
 
 router.beforeEach(async(to, from, next) => {
 
+
+
+
     let hasToken = store.getters['user/accessToken']
 
     if (!loginInterception) hasToken = true
     console.log(localStorage.getItem('accessToken'))
     console.log(localStorage.getItem('accessToken'))
     if (hasToken) {
-        if (to.path === '/login') {
 
+        if (to.path === '/login') {
 
             next({ path: '/' })
         } else {
 
+
+
+
             const hasRoles =
                 store.getters['acl/admin'] ||
                 store.getters['acl/role'].length > 0 ||
@@ -40,7 +47,7 @@ router.beforeEach(async(to, from, next) => {
                 next()
             } else {
 
-
+                store.commit('getMiddleConfig')
 
                 try {
                     if (loginInterception) {
@@ -58,23 +65,28 @@ router.beforeEach(async(to, from, next) => {
                     }
 
                     accessRoutes.forEach((item) => {
-
                         router.addRoute(item)
                     })
 
-                    if (accessRoutes[1].path != '/') {
+                    console.log('accessRoutes')
+                    console.log(accessRoutes)
 
-                        next('/middle')
-                            // next(accessRoutes[1].path)
+                    // alert('判断是否显示中间页的middleStatus值' + store.state.middleStatus)
 
+                    // alert(store.state.firstMiddleState)
+                    if (store.state.middleStatus == 1 && store.state.firstMiddleState == true) {
+                        next('/middle')
                     } else {
-                        // router.push({
-                        //     path: '/middle'
-                        // })
+                        // alert(store.state.homePageUrl)
+                        next(accessRoutes[0].children[0].path)
+                            // if (store.state.homePageUrl) {
+                            //     var pathUrl = (store.state.homePageUrl).slice(8);
+                            //     next(pathUrl)
 
-                        next('/middle')
+                        // } else {
+                        //     next(accessRoutes[0].children[0].path)
 
-                        // next({...to, replace: true })
+                        // }
 
                     }
 

+ 117 - 73
src/views/login/index.vue

@@ -2,65 +2,81 @@
   <div
     class="login-container"
     :style="{ backgroundImage: 'url(' + backdropUrl + ')' }"
-
   >
-    <a-row>
-      <a-col :xs="0" :md="0" :sm="12" :lg="14" :xl="16"></a-col>
-      <a-col :xs="24" :sm="24" :md="12" :lg="10" :xl="6">
-        <div class="login-container-form">
-          <!-- <div class="login-container-hello">hello!</div> -->
-          <div class="login-container-title">{{ companyName}}</div>
-          <a-form :model="form" @submit="handleSubmit" @submit.prevent>
-            <a-form-item>
-              <a-input v-model:value="form.username" placeholder="Username">
-                <template v-slot:prefix>
-                  <UserOutlined style="color: rgba(0, 0, 0, 0.25)" />
-                </template>
-              </a-input>
-            </a-form-item>
-            <a-form-item>
-              <a-input
-                v-model:value="form.password"
-                type="password"
-                placeholder="Password"
-              >
-                <template v-slot:prefix>
-                  <LockOutlined style="color: rgba(0, 0, 0, 0.25)" />
-                </template>
-              </a-input>
-            </a-form-item>
+    <div
+      class="container-inbox"
+      style="width: 800px; background: rgba(0, 0, 0, 0.35)"
+    >
+      <a-row>
+        <a-col
+          :xs="10"
+          :md="10"
+          :sm="10"
+          :lg="10"
+          :xl="10"
+          class="row-left-box"
+          style="display: flex; justify-content: center; align-items: center"
+        >
+          <div style="text-align:center">
+            <img :src="`${loginLogo}`" alt="" style="width: 193px" />
+            <div class="login-container-title">{{ companyName }}</div>
+            <div class="row-left-after"></div>
+          </div>
+        </a-col>
+        <a-col :xs="14" :sm="14" :md="14" :lg="14" :xl="14">
+          <div class="login-container-form">
+            <a-form :model="form" @submit="handleSubmit" @submit.prevent>
+              <a-form-item>
+                <a-input v-model:value="form.username" placeholder="请输入账号">
+                  <template v-slot:prefix>
+                    <UserOutlined style="color: rgba(0, 0, 0, 0.25)" />
+                  </template>
+                </a-input>
+              </a-form-item>
+              <a-form-item>
+                <a-input
+                  v-model:value="form.password"
+                  type="password"
+                  placeholder="请输入密码"
+                >
+                  <template v-slot:prefix>
+                    <LockOutlined style="color: rgba(0, 0, 0, 0.25)" />
+                  </template>
+                </a-input>
+              </a-form-item>
+
+              <a-form-item>
+                <JcRange
+                  @successFun="onSuccess()"
+                  @errorFun="onError()"
+                ></JcRange>
+              </a-form-item>
 
-            <a-form-item>
-              <JcRange
-                :status="status"
-                @successFun="onSuccess()"
-                @errorFun="onError()"
-              ></JcRange>
-            </a-form-item>
+              <a-form-item>
+                <a-button
+                  type="primary"
+                  html-type="submit"
+                  :disabled="
+                    form.username === '' ||
+                    form.password === '' ||
+                    status == false
+                  "
+                >
+                  登录
+                </a-button>
+              </a-form-item>
+            </a-form>
+          </div>
+        </a-col>
+      </a-row>
+    </div>
 
-            <a-form-item>
-              <a-button
-                type="primary"
-                html-type="submit"
-                :disabled="
-                  form.username === '' ||
-                  form.password === '' ||
-                  status == false
-                "
-              >
-                登录
-              </a-button>
-            </a-form-item>
-          </a-form>
-        </div>
-      </a-col>
-    </a-row>
     <div class="login-container-tips">
       <!-- 基于vue{{ dependencies['vue'] }}
       + ant-design-vue
       {{ dependencies['ant-design-vue'] }}开发 -->
       <!-- 上海永天科技股份有限公司 -->
-      {{loginFooter}}
+      {{ loginFooter }}
     </div>
   </div>
 </template>
@@ -94,7 +110,8 @@ export default {
 
       companyName: '永天智慧电力平台',
       backdropUrl: require('@/assets/login_images/login_background.png'),
-      loginFooter:'上海永天科技股份有限公司'
+      loginFooter: '上海永天科技股份有限公司',
+      loginLogo: require('@/assets/logo2.png'),
     }
   },
   computed: {
@@ -112,7 +129,6 @@ export default {
     },
   },
   mounted() {
-
     this.form.username = '' //admin
     this.form.password = '' //admin123
 
@@ -128,29 +144,27 @@ export default {
     // this.loginFooter='上海永天科技股份有限公司'
   },
   methods: {
-
-  //根据不同的域名,显示不同的title和背景图
+    //根据不同的域名,显示不同的title和背景图
     getLoginStyle() {
       api
         .getLoginStyle({
-          url:window.location.host.indexOf('localhost') != -1 ?'dianli.usky.cn:13201':window.location.host
+          url:
+            window.location.host.indexOf('localhost') != -1
+              ? 'dianli.usky.cn:13201'
+              : window.location.host,
         })
         .then((requset) => {
           if (requset.status === 'SUCCESS') {
-
             this.backdropUrl = requset.data[0].loginBackUrl
             this.companyName = requset.data[0].loginTitle
             this.loginFooter = requset.data[0].loginFooter
-            // this.backdropUrl = requset.data[0].loginBackUrl?requset.data[0].loginBackUrl:require('@/assets/login_images/login_background.png')
-            // this.companyName = requset.data[0].loginTitle?requset.data[0].loginTitle:'永天智慧电力平台'
-            // this.loginFooter = requset.data[0].loginFooter?requset.data[0].loginFooter:'上海永天科技股份有限公司'
+            this.loginLogo = requset.data[0].loginLogo
           } else {
             alert(requset.msg)
           }
         })
     },
 
-
     ...mapActions({
       login: 'user/login',
     }),
@@ -175,21 +189,48 @@ export default {
   },
 }
 </script>
+<style scoped>
+.row-left-box {
+  position: relative;
+}
+.row-left-after {
+  position: absolute;
+  width: 1.5px;
+  height: 76%;
+  position: absolute;
+  right: 0;
+  top: 12%;
+  background: -webkit-linear-gradient(
+    top,
+    rgba(0, 0, 0, 0.1) -4%,
+    #1f91ec 50%,
+    rgba(0, 0, 0, 0.1) 100%
+  );
+}
+</style>
 <style lang="less">
 .login-container {
   width: 100%;
   height: 100vh;
   // background: url('~@/assets/login_images/login_background.png');
   background-size: cover;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  background-repeat: no-repeat;
+  background-position: top center;
+
   &-form {
-    width: calc(100% - 40px);
-    min-width: 360px;
-    height: 440px;
-    padding: 4vh;
-    margin-top: calc((100vh - 380px) / 2);
-    margin-right: 20px;
-    margin-left: 20px;
-    background: url('~@/assets/login_images/login_form.png');
+    // width: calc(100% - 40px);
+    padding-top: 40px;
+    padding-bottom: 40px;
+    // min-width: 360px;
+    // height: 440px;
+    // padding: 4vh;
+    // margin-top: calc((100vh - 380px) / 2);
+    // margin-right: 20px;
+    // margin-left: 20px;
+    // background: url('~@/assets/login_images/login_form.png');
     background-size: 100% 100%;
     border-radius: 10px;
     box-shadow: 0 2px 8px 0 rgba(7, 17, 27, 0.06);
@@ -199,10 +240,12 @@ export default {
     color: #fff;
   }
   &-title {
-    margin-bottom: 30px;
-    font-size: 20px;
+    // margin-bottom: 30px;
+    font-size: 24px;
+    font-weight: bold;
+    margin-top: 46px;
     color: #fff;
-    text-align:center
+    // text-align: center;
   }
   &-tips {
     position: fixed;
@@ -213,7 +256,8 @@ export default {
     text-align: center;
   }
   .ant-col {
-    width: 100%;
+    width: 360px;
+    margin: 0 auto;
     padding: 0 10px 0 10px;
   }
   .ant-input {

+ 1 - 3
src/views/middle.vue

@@ -128,9 +128,7 @@ export default defineComponent({
             middleLogo.value = requset.data[0].middleLogo
             middleTitle.value = requset.data[0].middleTitle
             middleFooter.value = requset.data[0].middleFooter
-            store.state.homeStyle=requset.data[0].homeStyle
-            store.state.homeLogo=requset.data[0].homeLogo
-            store.state.homeTitle=requset.data[0].middleTitle
+         
 
           } else {
             alert(requset.msg)

+ 317 - 0
src/views/platManage/dialogComponent.vue

@@ -0,0 +1,317 @@
+<template>
+  <el-dialog
+    :title="dialogTitle"
+    v-model="showDialog"
+    @open="open()"
+    @close="closeDialog(0)"
+  >
+    <el-form
+      ref="formInfo"
+      :model="form"
+      class="demo-form-inline aaa"
+      label-width="150px"
+      :rules="rules"
+    >
+      <el-form-item
+        label="平台名称:"
+        prop="platformName"
+        v-if="dialogTitle == '添加模板'"
+      >
+        <el-input v-model="form.platformName"></el-input>
+      </el-form-item>
+      <el-form-item label="" prop="aa">
+        <el-tree
+          v-if="data.length"
+          :data="data"
+          :props="defaultProps"
+          @node-click="handleNodeClick"
+          show-checkbox
+          node-key="id"
+          :default-checked-keys="checkedArr"
+          :check-strictly="isStrictly"
+          @check="currentChecked"
+        />
+      </el-form-item>
+
+      <br />
+
+      <div style="text-align: right">
+        <el-button @click="closeDialog(0)">取消</el-button>
+        <el-button type="primary" @click="submitForm()">保存</el-button>
+      </div>
+    </el-form>
+  </el-dialog>
+</template>
+<script>
+// 地图
+import AMap from 'AMap'
+import { useStore } from 'vuex'
+import { defineComponent, ref, watchEffect, onMounted } from 'vue'
+import * as api from '@/api/platManage/index.js'
+import { ElMessage } from 'element-plus'
+
+export default defineComponent({
+  name: 'DialogComponent',
+  emits: ['closeDialog'],
+  props: {
+    show_Dialog: Boolean,
+    dialogTitle: String,
+    itemInfo: {
+      type: Object,
+      default: function () {
+        return {}
+      },
+    },
+  },
+  setup(props, { emit }) {
+    const store = useStore()
+    const beginTime = ref('')
+    const showDialog = ref(false)
+    const form = ref({})
+    const formInfo = ref(null)
+    const nowDate = ref(new Date().getTime())
+
+    const data = ref([])
+    const checkedArr = ref([])
+    const getPlatformBoxList = ref([])
+
+    const roleValid = (rule, value, callback) => {
+      rule
+      if (value.length === 0) {
+        callback(new Error('角色不能为空'))
+      } else {
+        callback()
+      }
+    }
+
+    const disabledDate = (time) => {
+      return time.getTime() < Date.now()
+    }
+
+    const currentChecked = (nodeObj, SelectedObj) => {
+      nodeObj, SelectedObj
+      console.log('SelectedObj.checkedNodes')
+      console.log(SelectedObj.checkedNodes)
+      checkedArr.value = []
+
+      SelectedObj.checkedNodes.forEach((item) => {
+        checkedArr.value.push(item.id)
+      })
+      console.log(checkedArr.value)
+    }
+
+    //树结构回显
+    function getPlatformMenu() {
+      var platformId = ''
+      if (props.dialogTitle == '添加模板') {
+        platformId = 0
+      } else {
+        platformId = form.value.id
+      }
+
+      api
+        .getPlatformMenu({
+          platformId: platformId,
+        })
+        .then((requset) => {
+          if (requset.status === 'SUCCESS') {
+            console.log('requset.data111')
+            console.log(requset.data)
+            var jsona = JSON.stringify(requset.data.menus)
+            var jsonb = jsona.replace(/"menu"/g, '"label"')
+            jsonb = jsonb.replace(/"authority"/g, '"children"')
+            jsonb = jsonb.replace(/"name"/g, '"label"')
+            var jsonc = JSON.parse(jsonb)
+            data.value = jsonc
+            console.log('data.value')
+            console.log(data.value)
+
+            checkedArr.value = requset.data.checkedKeys
+            console.log('checkedArr.value')
+            console.log(checkedArr.value)
+          } else {
+            ElMessage.error(requset.msg)
+          }
+        })
+    }
+
+    // 保存操作
+    const submitForm = () => {
+      formInfo.value.validate((valid) => {
+        if (valid) {
+          var params = {}
+          if (props.dialogTitle == '添加模板') {
+            params = {
+              platformId: 0,
+              platformName: form.value.platformName,
+              menuIds: checkedArr.value,
+            }
+          } else {
+            params = {
+              platformId: form.value.id,
+              menuIds: checkedArr.value,
+            }
+          }
+          if (checkedArr.value.length) {
+            api.updatePlatformMenu(params).then((requset) => {
+              if (requset.status === 'SUCCESS') {
+                ElMessage.success({
+                  message: '新增成功',
+                  type: 'success',
+                })
+                showDialog.value = false
+                // closeDialog()
+              } else {
+                ElMessage.error(requset.msg)
+              }
+            })
+          } else {
+            ElMessage.warning('请至少选择一个权限保存')
+          }
+        } else {
+          console.log('error submit!!')
+          return false
+        }
+      })
+    }
+    const marker = ref([])
+
+    function initMap() {
+      // AMap start
+      var map = new AMap.Map('mapF', {
+        resizeEnable: true,
+      })
+      //为地图注册click事件获取鼠标点击出的经纬度坐标
+
+      var marker = new AMap.Marker({})
+      map.on('click', function (e) {
+        form.value.geoPosition = e.lnglat.getLng() + ',' + e.lnglat.getLat()
+
+        map.remove([marker])
+        marker = new AMap.Marker({
+          position: new AMap.LngLat(e.lnglat.getLng(), e.lnglat.getLat()), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
+        })
+
+        map.add([marker])
+      })
+      // AMap end
+    }
+
+    const open = () => {
+      form.value = props.itemInfo
+      console.log('form.value')
+      console.log(form.value)
+
+      // optionselect()
+      getPlatformMenu()
+    }
+
+    // 关闭弹框
+    const closeDialog = (flag) => {
+      checkedArr.value = []
+      resetForm()
+      showDialog.value = false
+      emit('closeDialog', flag)
+    }
+
+    function resetForm() {
+      formInfo.value.resetFields()
+    }
+
+    watchEffect((fn, options) => {
+      fn, options
+      showDialog.value = props.show_Dialog
+    })
+
+    //禁止选择以前的时间
+    const pickerEndDate = (time) => {
+      const timeRange = 1 * 24 * 60 * 60 * 1000
+      return time.getTime() <= Date.now() - timeRange * 1
+    }
+
+    onMounted(() => {})
+
+    return {
+      pickerEndDate,
+      roleValid,
+      submitForm,
+      closeDialog,
+      open,
+
+      data,
+
+      getPlatformMenu,
+
+      // map123,
+      store,
+      beginTime,
+      showDialog,
+      checkedArr,
+      initMap,
+      nowDate,
+      disabledDate,
+      marker,
+
+      checked: true,
+      form,
+      formInfo,
+      getPlatformBoxList,
+      currentChecked,
+
+      rules: {
+        platformName: [
+          { required: true, message: '请输入平台名称', trigger: 'blur' },
+          {
+            min: 1,
+            max: 30,
+            message: '长度在 1 到 30个字符',
+            trigger: 'blur',
+          },
+        ],
+      },
+    }
+  },
+})
+</script>
+ 
+<style scoped lang="scss">
+.el-input,
+.el-select,
+.el-date-editor.el-input,
+.el-date-editor.el-input__inner {
+  width: 240px;
+}
+
+.el-form-item {
+  margin: 0 0 20px !important;
+}
+// label样式
+.el-form-item__label {
+  width: 120px !important;
+}
+.el-form-item__content {
+  margin-left: 100px;
+}
+.demo-form-inline .el-form-item:not(.user-layout .el-form-item) {
+  margin: 0 auto 20px 55px;
+}
+</style>
+<style lang="scss">
+// .aaa{
+
+//   .el-form-item:not(.user-layout .el-form-item){
+//   width:90%;
+//   max-width:100%
+// }
+
+// .el-tree>.el-tree-node>.el-tree-node__children .el-tree-node {
+//   display:inline-block
+
+// }
+// .el-tree>.el-tree-node{
+//   display:block
+
+// }
+
+// }
+</style>

+ 358 - 0
src/views/platManage/index.vue

@@ -0,0 +1,358 @@
+<template>
+  <div class="app-container">
+    <!-- 筛选start -->
+    <div class="filter-container mb-10">
+      <div class="left">
+        <div>
+          <a class="" style="margin-right: 30px">平台管理列表</a>
+          <el-button
+            icon="el-icon-plus"
+            type="success"
+            @click="addItem()"
+          >
+           添加模板
+          </el-button>
+        </div>
+      </div>
+    </div>
+
+    <div class="filter-container mb-10">
+      <div style="margin-top: 20px">
+        <div class="filter-item">
+          平台名称:
+          <el-input
+            v-model="platformName"
+            placeholder="请输入内容"
+            style="width: 150px"
+          ></el-input>
+        </div>
+       
+
+        <div class="filter-item planOutage">
+          选择时间范围:
+          <el-date-picker
+            v-model="dateTime"
+            type="datetimerange"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            style="width: auto"
+          ></el-date-picker>
+        </div>
+
+        <el-button
+          type="primary"
+          icon="el-icon-search"
+          @click="Select()"
+          class="search-button"
+        >
+          查询
+        </el-button>
+      </div>
+    </div>
+
+    <!-- 筛选end -->
+
+    <!-- 表格start -->
+    <el-table
+      :data="tableData"
+      border
+      stripe
+      :header-cell-style="headClass"
+      :cell-style="cellStyle"
+    >
+      <el-table-column type="index" label="序号" width="50px"></el-table-column>
+      <el-table-column
+        prop="platformName"
+        label="平台名称"
+      ></el-table-column>
+      <el-table-column
+        prop="tenantCount"
+        label="在用租户数"
+      ></el-table-column>
+      <el-table-column
+        prop="createTime"
+        label="创建时间"
+      ></el-table-column>
+     
+
+  
+      <el-table-column fixed="right" label="操作" width="80">
+        <template #default="scope">
+          <el-button
+            type="text"
+            size="small"
+            @click.prevent="editRow(scope.row)"
+          >
+            编辑
+          </el-button>
+          
+        </template>
+      </el-table-column>
+    </el-table>
+    <!-- 表格end -->
+
+    <!-- 分页start -->
+    <div class="paginationBlock">
+      <el-pagination
+        v-model:currentPage="page"
+        :page-sizes="[15, 20, 25, 30]"
+        :page-size="pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        background
+      ></el-pagination>
+    </div>
+
+    <!-- 分页end -->
+
+    <!--弹框组件开始-----------------------start-->
+    <dialog-component
+      :dialog-title="dialogTitle"
+      :item-info="tableItem"
+      @closeDialog="closeDialog"
+      :show_Dialog="showDialog"
+    ></dialog-component>
+    <!--弹框组件开始-----------------------end-->
+  </div>
+</template>
+
+<script>
+import { useStore } from 'vuex'
+import { defineComponent, onMounted, ref } from 'vue'
+import DialogComponent from './dialogComponent'
+import * as api from '@/api/platManage/index.js'
+import { ElMessage } from 'element-plus'
+
+export default defineComponent({
+  name: 'VariableList',
+
+  components: { DialogComponent },
+  setup() {
+    const store = useStore()
+
+    const tableItem = ref()
+    const dialogTitle = ref('')
+    const showDialog = ref(false)
+
+    const tableData = ref()
+    const currentPage = ref(1)
+    const pageSize = ref(15)
+    const total = ref(0)
+
+    const status = ref(0)
+    const createTime = ref('')
+    const platformName = ref('')
+    const tenantCount = ref('')
+
+    const dateTime = ref('')
+    const select = ref(1)
+
+    const input = ref('')
+    const region = ref()
+
+    // 添加操作
+    const addItem = () => {
+      tableItem.value = {
+        platformName: '',
+        tenantCount: '',
+        tenantTerm: 3,
+        geoPosition: '',
+        createTime: '',
+        phoneNumber: '',
+        systemName: '',
+        email: '',
+        address: '',
+        status:0,
+        domain:''
+      }
+      dialogTitle.value = '添加模板'
+      showDialog.value = true
+    }
+    // 编辑操作
+    const editRow = (row) => {
+      console.log(row)
+      tableItem.value = {
+        id:row.id,
+        platformName: row.platformName,
+        tenantCount: row.tenantCount,
+        tenantTerm: row.tenantTerm=='永久有效'?3:4,
+        value1:row.tenantTerm,
+        status: Number(row.status),
+        geoPosition: row.geoPosition,
+        createTime: Number(row.createTime),
+        phoneNumber: row.phoneNumber,
+        systemName: Number(row.systemName),
+        email: row.email,
+        address: row.address,
+        remark:row.remark,
+        domain:row.domain
+      }
+      dialogTitle.value = '编辑'
+      showDialog.value = true
+    }
+
+    // 关闭操作
+    const closeDialog = (flag) => {
+      if (flag) {
+        // 重新刷新表格内容
+        // this.fetchData()
+        console.log(1)
+      }
+      showDialog.value = false
+      Select()
+    }
+
+    //删除 是否删除  ---- 是
+    const handleDelete = (row) => {
+      api.plannedOutageDel({ id: row.id }).then((requset) => {
+        if (requset.status === 'SUCCESS') {
+          ElMessage.success({
+            message: '删除成功',
+            type: 'success',
+          })
+          Select()
+        } else {
+          ElMessage.error(requset.msg)
+        }
+      })
+    }
+    //是否删除  ---- 否
+    const cancelEvent = () => {
+      console.log('cancel!')
+    }
+
+    //查询列表
+    function Select() {
+      store.commit('TimeAll_function', dateTime.value)
+      const time = store.state.Time_Data
+      api
+        .getPlatformList({
+          size: pageSize.value,
+          page: currentPage.value,
+          startTime: time[0] ? time[0] : '',
+          endTime: time[1] ? time[1] : '',
+          // status: status.value,
+          // createTime: createTime.value,
+          platformName: platformName.value,
+          // tenantCount: tenantCount.value,
+        })
+        .then((requset) => {
+          if (requset.status === 'SUCCESS') {
+            tableData.value = requset.data.records.map((val) => {
+              store.commit('getTimestampAll', val.startTime)
+              val.startTime = store.state.timeProcessing
+              store.commit('getTimestampAll', val.endTime)
+              val.endTime = store.state.timeProcessing
+              store.commit('getTimestampAll', val.createTime)
+              val.createTime = store.state.timeProcessing
+            })
+            tableData.value = requset.data.records
+            total.value = requset.data.total
+          } else {
+            ElMessage.error(requset.msg)
+          }
+        })
+    }
+
+    onMounted(() => {
+      Select()
+    })
+
+    const handleSizeChange = (val) => {
+      pageSize.value = val
+      Select()
+    }
+    const handleCurrentChange = (val) => {
+      currentPage.value = val
+      Select()
+    }
+    // 表头样式设置
+    const goVariableList = () => {
+      // 跳转至订单列表页面传参
+      this.$router.push({
+        path: '../siteManage/variableList/index.vue',
+      })
+      // this.$router.push({ name:'variableList'})
+    }
+    const headClass = () => {
+      return 'background:#FAFAFA;'
+    }
+    //处理状态状态值变色
+    const cellStyle = ({ row, column, rowIndex, columnIndex }) => {
+      row, column, rowIndex
+      // console.log(row, column, rowIndex)
+
+      if (columnIndex) {
+        // return `text-align:left;cursor:pointer;`
+      } else {
+        return ''
+      }
+    }
+
+    //导出
+    const DataReportExport = () => {
+      store.commit('TimeAll_function', dateTime.value)
+      const time = store.state.Time_Data
+      api
+        .outagePlanListExport({
+          type: region.value,
+          startTime: time[0] ? time[0] : '',
+          endTime: time[1] ? time[1] : '',
+        })
+        .then((requset) => {
+          if (requset.status === 'SUCCESS') {
+            window.location.href = window.PLATFROM_CONFIG.fileUrl + requset.data
+            ElMessage.success({
+              message: '导出成功',
+              type: 'success',
+            })
+          } else {
+            ElMessage.error(requset.msg)
+          }
+        })
+    }
+    return {
+      cellStyle,
+      headClass,
+      goVariableList,
+
+      handleDelete,
+      cancelEvent,
+      closeDialog,
+      editRow,
+      addItem,
+      Select,
+
+      store,
+
+      total,
+      pageSize,
+      currentPage,
+      handleSizeChange,
+      handleCurrentChange,
+
+      createTime,
+      tableData,
+      platformName,
+      tenantCount,
+      status,
+
+      showDialog,
+      select,
+      dateTime,
+      tableItem,
+      dialogTitle,
+      input,
+      region,
+
+      DataReportExport,
+    }
+  },
+})
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 5 - 3
src/views/siteManage/index.vue

@@ -4,7 +4,7 @@
     <div class="grid-content treeDom">
       <div style="text-align: center" class="mb-20">
         <el-button
-          v-if="treeLevel == 3 || groupingId == 0 || treeLevel == 1"
+          v-if="treeLevel == 3 || groupingId == 0 "
           disabled
         >
           添加分组
@@ -13,7 +13,7 @@
           添加分组
         </el-button>
         <el-button
-          v-if="treeLevel == 3 || groupingId == 0 || treeLevel == 1"
+          v-if="treeLevel == 3 || groupingId == 0 "
           disabled
         >
           添加站点
@@ -89,7 +89,7 @@
     <div
       class="grid-content nestingDom"
       style="width: calc(100% - 300px)"
-      v-if="flag2 && treeLevel != 1"
+      v-if="flag2 "
     >
       <el-tabs
         v-if="treeLevel == 3 || groupingId == 0"
@@ -292,6 +292,7 @@ export default defineComponent({
     }
 
     const handleNodeClick = (data, obj, node) => {
+      // alert('obj.level'+obj.level) 
       activeName.value = 'first'
       data, node
       flag2.value = true
@@ -377,6 +378,7 @@ export default defineComponent({
     //新建分组
     const tableItem = reactive([])
     const addGroup = () => {
+      // alert('添加分组弹框')
       tableItem.value = {
         groupingName: '',
       }

+ 303 - 0
src/views/statisManage/loginLog/dialogComponent.vue

@@ -0,0 +1,303 @@
+<template>
+  <el-dialog
+    :title="dialogTitle"
+    v-model="showDialog"
+    @open="open()"
+    @close="closeDialog(0)"
+  >
+    <el-form
+      ref="formInfo"
+      :model="form"
+      class="demo-form-inline"
+      label-width="150px"
+      :rules="rules"
+    >
+      <el-form-item
+        label="平台名称:"
+        prop="platformName"
+        v-if="dialogTitle == '添加模板'"
+      >
+        <el-input v-model="form.platformName"></el-input>
+      </el-form-item>
+      <el-form-item label="" prop="aa">
+        <el-tree
+          v-if="data.length"
+          :data="data"
+          :props="defaultProps"
+          @node-click="handleNodeClick"
+          show-checkbox
+          node-key="id"
+          :default-expand-all="isExpand"
+          :default-checked-keys="checkedArr"
+          :check-strictly="isStrictly"
+          @check="currentChecked"
+        />
+      </el-form-item>
+
+      <br />
+
+      <div style="text-align: right">
+        <el-button @click="closeDialog(0)">取消</el-button>
+        <el-button type="primary" @click="submitForm()">保存</el-button>
+      </div>
+    </el-form>
+  </el-dialog>
+</template>
+<script>
+// 地图
+import AMap from 'AMap'
+import { useStore } from 'vuex'
+import { defineComponent, ref, watchEffect, onMounted } from 'vue'
+import * as api from '@/api/platManage/index.js'
+import { ElMessage } from 'element-plus'
+
+export default defineComponent({
+  name: 'DialogComponent',
+  emits: ['closeDialog'],
+  props: {
+    show_Dialog: Boolean,
+    dialogTitle: String,
+    itemInfo: {
+      type: Object,
+      default: function () {
+        return {}
+      },
+    },
+  },
+  setup(props, { emit }) {
+    const store = useStore()
+    const beginTime = ref('')
+    const showDialog = ref(false)
+    const form = ref({})
+    const formInfo = ref(null)
+    const nowDate = ref(new Date().getTime())
+
+    const data = ref([])
+    const checkedArr = ref([])
+    const getPlatformBoxList = ref([])
+
+    const roleValid = (rule, value, callback) => {
+      rule
+      if (value.length === 0) {
+        callback(new Error('角色不能为空'))
+      } else {
+        callback()
+      }
+    }
+
+    const disabledDate = (time) => {
+      return time.getTime() < Date.now()
+    }
+
+    const currentChecked = (nodeObj, SelectedObj) => {
+      nodeObj, SelectedObj
+       console.log('SelectedObj.checkedNodes')
+      console.log(SelectedObj.checkedNodes)
+      checkedArr.value = []
+ 
+
+      SelectedObj.checkedNodes.forEach((item) => {
+        checkedArr.value.push(item.id)
+      })
+      console.log(checkedArr.value)
+    }
+
+    //树结构回显
+    function getPlatformMenu() {
+      var platformId = ''
+      if (props.dialogTitle == '添加模板') {
+        platformId = 0
+      } else {
+        platformId = form.value.id
+      }
+
+      api
+        .getPlatformMenu({
+          platformId: platformId,
+        })
+        .then((requset) => {
+          if (requset.status === 'SUCCESS') {
+            console.log('requset.data111')
+            console.log(requset.data)
+            var jsona = JSON.stringify(requset.data.menus)
+            var jsonb = jsona.replace(/"menu"/g, '"label"')
+            jsonb = jsonb.replace(/"authority"/g, '"children"')
+            jsonb = jsonb.replace(/"name"/g, '"label"')
+            var jsonc = JSON.parse(jsonb)
+            data.value = jsonc
+            console.log('data.value')
+            console.log(data.value)
+
+            checkedArr.value = requset.data.checkedKeys
+            console.log('checkedArr.value')
+            console.log(checkedArr.value)
+          } else {
+            ElMessage.error(requset.msg)
+          }
+        })
+    }
+
+    // 保存操作
+    const submitForm = () => {
+      formInfo.value.validate((valid) => {
+        if (valid) {
+          var params = {}
+          if (props.dialogTitle == '添加模板') {
+            params = {
+              platformId: 0,
+              platformName: form.value.platformName,
+              menuIds: checkedArr.value,
+            }
+          } else {
+            params = {
+              platformId: form.value.id,
+              menuIds: checkedArr.value,
+            }
+          }
+          if (checkedArr.value.length) {
+            api.updatePlatformMenu(params).then((requset) => {
+              if (requset.status === 'SUCCESS') {
+                ElMessage.success({
+                  message: '新增成功',
+                  type: 'success',
+                })
+                closeDialog()
+              } else {
+                ElMessage.error(requset.msg)
+              }
+            })
+          }else{
+            ElMessage.warning('请至少选择一个权限保存')
+          }
+        } else {
+          console.log('error submit!!')
+          return false
+        }
+      })
+    }
+    const marker = ref([])
+
+    function initMap() {
+      // AMap start
+      var map = new AMap.Map('mapF', {
+        resizeEnable: true,
+      })
+      //为地图注册click事件获取鼠标点击出的经纬度坐标
+
+      var marker = new AMap.Marker({})
+      map.on('click', function (e) {
+        form.value.geoPosition = e.lnglat.getLng() + ',' + e.lnglat.getLat()
+
+        map.remove([marker])
+        marker = new AMap.Marker({
+          position: new AMap.LngLat(e.lnglat.getLng(), e.lnglat.getLat()), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
+        })
+
+        map.add([marker])
+      })
+      // AMap end
+    }
+
+    const open = () => {
+      form.value = props.itemInfo
+      console.log('form.value')
+      console.log(form.value)
+
+      // optionselect()
+      getPlatformMenu()
+    }
+
+    // 关闭弹框
+    const closeDialog = (flag) => {
+      checkedArr.value = []
+      resetForm()
+      showDialog.value = false
+      emit('closeDialog', flag)
+    }
+
+    function resetForm() {
+      formInfo.value.resetFields()
+    }
+
+    watchEffect((fn, options) => {
+      fn, options
+      showDialog.value = props.show_Dialog
+    })
+
+    //禁止选择以前的时间
+    const pickerEndDate = (time) => {
+      const timeRange = 1 * 24 * 60 * 60 * 1000
+      return time.getTime() <= Date.now() - timeRange * 1
+    }
+
+    onMounted(() => {})
+
+    return {
+      pickerEndDate,
+      roleValid,
+      submitForm,
+      closeDialog,
+      open,
+
+      data,
+
+      getPlatformMenu,
+
+      // map123,
+      store,
+      beginTime,
+      showDialog,
+      checkedArr,
+
+      initMap,
+      nowDate,
+      disabledDate,
+      marker,
+
+      checked: true,
+      form,
+      formInfo,
+      getPlatformBoxList,
+      currentChecked,
+
+      rules: {
+        platformName: [
+          { required: true, message: '请输入平台名称', trigger: 'blur' },
+          {
+            min: 1,
+            max: 30,
+            message: '长度在 1 到 30个字符',
+            trigger: 'blur',
+          },
+        ],
+        
+      },
+    }
+  },
+})
+</script>
+ 
+<style scoped lang="scss">
+.el-input,
+.el-select,
+.el-date-editor.el-input,
+.el-date-editor.el-input__inner {
+  width: 240px;
+}
+
+.el-form-item {
+  margin: 0 0 20px !important;
+}
+// label样式
+.el-form-item__label {
+  width: 120px !important;
+}
+.el-form-item__content {
+  margin-left: 100px;
+}
+.demo-form-inline .el-form-item:not(.user-layout .el-form-item) {
+  margin: 0 auto 20px 55px;
+}
+</style>
+<style>
+</style>

+ 426 - 0
src/views/statisManage/loginLog/index.vue

@@ -0,0 +1,426 @@
+<template>
+  <div class="app-container">
+    <!-- 筛选start -->
+    <div class="filter-container mb-10">
+      <div class="left">
+        <div>
+          <a class="" style="margin-right: 30px">登录日志列表</a>
+          <!-- <el-button
+            icon="el-icon-plus"
+            type="success"
+            @click="addItem()"
+          >
+           添加模板
+          </el-button> -->
+        </div>
+      </div>
+    </div>
+
+    <div class="filter-container mb-10">
+      <div style="margin-top: 20px">
+        <div class="filter-item">
+          登录地址:
+          <el-input
+            v-model="ipaddr"
+            placeholder="请输入"
+            style="width: 150px"
+          ></el-input>
+        </div>
+        <div class="filter-item">
+          账号:
+          <el-input
+            v-model="userName"
+            placeholder="请输入"
+            style="width: 150px"
+          ></el-input>
+        </div>
+        <div class="filter-item">
+          登录状态:
+          <el-select
+            v-model="status"
+            placeholder="请选择"
+            style="width: 130px"
+            clearable
+          >
+            <el-option label="成功" :value="0"></el-option>
+            <el-option label="失败" :value="1"></el-option>
+          </el-select>
+        </div>
+       
+
+        <div class="filter-item planOutage">
+          选择时间范围:
+          <el-date-picker
+            v-model="dateTime"
+            type="datetimerange"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            style="width: auto"
+          ></el-date-picker>
+        </div>
+
+        <el-button
+            class="search-button"
+            @click=";(ipaddr = ''), (userName = ''),(status = 0), (dateTime = ''),Select()"
+          >
+            重置
+          </el-button>
+
+        <el-button
+          type="primary"
+          icon="el-icon-search"
+          @click="Select()"
+          class="search-button"
+        >
+          查询
+        </el-button>
+      </div>
+    </div>
+
+    <!-- 筛选end -->
+
+    <!-- 表格start -->
+    <el-table
+      :data="tableData"
+      border
+      stripe
+      :header-cell-style="headClass"
+      :cell-style="cellStyle"
+    >
+      <!-- <el-table-column type="index" label="序号" width="50px"></el-table-column> -->
+      <el-table-column
+        prop="infoId"
+        label="访问编号"
+      ></el-table-column>
+      <el-table-column
+        prop="nickName"
+        label="用户名称"
+        width="120px"
+      ></el-table-column>
+      <el-table-column
+        prop="userName"
+         width="120px"
+        label="账号"
+      ></el-table-column>
+      <el-table-column
+        prop="ipaddr"
+        label="登录地址"
+      ></el-table-column>
+      <el-table-column
+        prop="loginLocation"
+        label="登录地点"
+      ></el-table-column>
+      <el-table-column
+        prop="browser"
+        label="浏览器"
+      ></el-table-column>
+      <el-table-column
+        prop="os"
+        label="操作系统"
+      ></el-table-column>
+      <el-table-column
+        prop="status"
+        label="登录状态"
+      >
+      <template #default="scope">
+          <span
+            :style="{
+              color: scope.row.status == '0' ? '#8DCF6E' : '#FF747B',
+            }"
+          >
+            {{ scope.row.status === '0' ? '成功' : '失败' }}
+          </span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="msg"
+        label="操作信息"
+        
+      ></el-table-column>
+      <el-table-column
+        prop="loginTime"
+        label="登录时间"
+       width="170px"
+      ></el-table-column>
+     
+
+  
+      <!-- <el-table-column fixed="right" label="操作" width="80">
+        <template #default="scope">
+          <el-button
+            type="text"
+            size="small"
+            @click.prevent="editRow(scope.row)"
+          >
+            编辑
+          </el-button>
+        </template>
+      </el-table-column> -->
+    </el-table>
+    <!-- 表格end -->
+
+    <!-- 分页start -->
+    <div class="paginationBlock">
+      <el-pagination
+        v-model:currentPage="page"
+        :page-sizes="[15, 20, 25, 30]"
+        :page-size="pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        background
+      ></el-pagination>
+    </div>
+
+    <!-- 分页end -->
+
+    <!--弹框组件开始-----------------------start-->
+    <dialog-component
+      :dialog-title="dialogTitle"
+      :item-info="tableItem"
+      @closeDialog="closeDialog"
+      :show_Dialog="showDialog"
+    ></dialog-component>
+    <!--弹框组件开始-----------------------end-->
+  </div>
+</template>
+
+<script>
+import { useStore } from 'vuex'
+import { defineComponent, onMounted, ref } from 'vue'
+import DialogComponent from './dialogComponent'
+import * as api from '@/api/statisManage/loginLog.js'
+import { ElMessage } from 'element-plus'
+
+export default defineComponent({
+  name: 'VariableList',
+
+  components: { DialogComponent },
+  setup() {
+    const store = useStore()
+
+    const tableItem = ref()
+    const dialogTitle = ref('')
+    const showDialog = ref(false)
+
+    const tableData = ref()
+    const currentPage = ref(1)
+    const pageSize = ref(15)
+    const total = ref(0)
+
+    
+    const createTime = ref('')
+    const status = ref(0)
+    const ipaddr = ref('')
+    const userName=ref('')
+
+    const dateTime = ref('')
+    const select = ref(1)
+
+    const input = ref('')
+    const region = ref()
+
+    // 添加操作
+    const addItem = () => {
+      tableItem.value = {
+        platformName: '',
+        tenantCount: '',
+        tenantTerm: 3,
+        geoPosition: '',
+        createTime: '',
+        phoneNumber: '',
+        systemName: '',
+        email: '',
+        address: '',
+        status:0,
+        domain:''
+      }
+      dialogTitle.value = '添加模板'
+      showDialog.value = true
+    }
+    // 编辑操作
+    const editRow = (row) => {
+      console.log(row)
+      tableItem.value = {
+        id:row.id,
+        platformName: row.platformName,
+        tenantCount: row.tenantCount,
+        tenantTerm: row.tenantTerm=='永久有效'?3:4,
+        value1:row.tenantTerm,
+        status: Number(row.status),
+        geoPosition: row.geoPosition,
+        createTime: Number(row.createTime),
+        phoneNumber: row.phoneNumber,
+        systemName: Number(row.systemName),
+        email: row.email,
+        address: row.address,
+        remark:row.remark,
+        domain:row.domain
+      }
+      dialogTitle.value = '编辑'
+      showDialog.value = true
+    }
+
+    // 关闭操作
+    const closeDialog = (flag) => {
+      if (flag) {
+        // 重新刷新表格内容
+        // this.fetchData()
+        console.log(1)
+      }
+      showDialog.value = false
+      Select()
+    }
+
+    //删除 是否删除  ---- 是
+    const handleDelete = (row) => {
+      api.plannedOutageDel({ id: row.id }).then((requset) => {
+        if (requset.status === 'SUCCESS') {
+          ElMessage.success({
+            message: '删除成功',
+            type: 'success',
+          })
+          Select()
+        } else {
+          ElMessage.error(requset.msg)
+        }
+      })
+    }
+    //是否删除  ---- 否
+    const cancelEvent = () => {
+      console.log('cancel!')
+    }
+
+    //查询列表
+    function Select() {
+      store.commit('TimeAll_function', dateTime.value)
+      const time = store.state.Time_Data
+      api
+        .getLoginLogList({
+          size: pageSize.value,
+          page: currentPage.value,
+          startTime: time[0] ? time[0] : '',
+          endTime: time[1] ? time[1] : '',
+          status: status.value,
+          ipaddr: ipaddr.value,
+          userName: userName.value,
+        })
+        .then((requset) => {
+          if (requset.status === 'SUCCESS') {
+            tableData.value = requset.data.records.map((val) => {
+              store.commit('getTimestampAll', val.startTime)
+              val.startTime = store.state.timeProcessing
+              store.commit('getTimestampAll', val.endTime)
+              val.endTime = store.state.timeProcessing
+              store.commit('getTimestampAll', val.createTime)
+              val.createTime = store.state.timeProcessing
+            })
+            tableData.value = requset.data.records
+            total.value = requset.data.total
+          } else {
+            ElMessage.error(requset.msg)
+          }
+        })
+    }
+
+    onMounted(() => {
+      Select()
+    })
+
+    const handleSizeChange = (val) => {
+      pageSize.value = val
+      Select()
+    }
+    const handleCurrentChange = (val) => {
+      currentPage.value = val
+      Select()
+    }
+    // 表头样式设置
+    const goVariableList = () => {
+      // 跳转至订单列表页面传参
+      this.$router.push({
+        path: '../siteManage/variableList/index.vue',
+      })
+      // this.$router.push({ name:'variableList'})
+    }
+    const headClass = () => {
+      return 'background:#FAFAFA;'
+    }
+    //处理状态状态值变色
+    const cellStyle = ({ row, column, rowIndex, columnIndex }) => {
+      row, column, rowIndex
+      // console.log(row, column, rowIndex)
+
+      if (columnIndex) {
+        // return `text-align:left;cursor:pointer;`
+      } else {
+        return ''
+      }
+    }
+
+    //导出
+    const DataReportExport = () => {
+      store.commit('TimeAll_function', dateTime.value)
+      const time = store.state.Time_Data
+      api
+        .outagePlanListExport({
+          type: region.value,
+          startTime: time[0] ? time[0] : '',
+          endTime: time[1] ? time[1] : '',
+        })
+        .then((requset) => {
+          if (requset.status === 'SUCCESS') {
+            window.location.href = window.PLATFROM_CONFIG.fileUrl + requset.data
+            ElMessage.success({
+              message: '导出成功',
+              type: 'success',
+            })
+          } else {
+            ElMessage.error(requset.msg)
+          }
+        })
+    }
+    return {
+      cellStyle,
+      headClass,
+      goVariableList,
+
+      handleDelete,
+      cancelEvent,
+      closeDialog,
+      editRow,
+      addItem,
+      Select,
+
+      store,
+
+      total,
+      pageSize,
+      currentPage,
+      handleSizeChange,
+      handleCurrentChange,
+
+      createTime,
+      tableData,
+       ipaddr,  userName, 
+      // tenantCount,
+      status,
+
+      showDialog,
+      select,
+      dateTime,
+      tableItem,
+      dialogTitle,
+      input,
+      region,
+
+      DataReportExport,
+    }
+  },
+})
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 400 - 0
src/views/statisManage/operLog/dialogComponent.vue

@@ -0,0 +1,400 @@
+<template>
+  <el-dialog
+    :title="dialogTitle"
+    v-model="showDialog"
+    width="900px"
+    @open="open()"
+    @close="closeDialog(0)"
+  >
+    <el-form
+      ref="formInfo"
+      :model="form"
+      class="demo-form-inline"
+      label-width="150px"
+      :rules="rules"
+    >
+      <el-row>
+        <el-col :span="12" :gutter="20">
+          <el-form-item label="操作模块:" prop="tenantName">
+            <el-input v-model="form.tenantName"></el-input>
+          </el-form-item>
+          <el-form-item label="登录信息:" prop="tenantManager">
+            <el-input v-model="form.tenantManager"></el-input>
+          </el-form-item>
+
+        </el-col>
+        <el-col :span="12" :gutter="20">
+           <el-form-item label="请求地址:" prop="phoneNumber">
+            <el-input v-model="form.phoneNumber"></el-input>
+          </el-form-item>
+           <el-form-item label="请求方法:" prop="address">
+            <el-input v-model="form.address"></el-input>
+          </el-form-item>
+          
+         
+        </el-col>
+      </el-row>
+
+    
+      <el-form-item label="操作方法:" prop="remark">
+        <el-input
+          v-model="form.remark"
+          type="text"
+          placeholder="请输入..."
+          style="width: 670px"
+        />
+      </el-form-item>
+      <el-form-item label="请求参数:" prop="remark">
+        <el-input
+          v-model="form.remark"
+          type="text"
+          placeholder="请输入..."
+          style="width: 670px"
+        />
+      </el-form-item>
+      <el-form-item label="返回参数:" prop="remark">
+        <el-input
+          v-model="form.remark"
+          type="text"
+          placeholder="请输入..."
+          style="width: 670px"
+        />
+      </el-form-item>
+
+      <el-row>
+        <el-col :span="12" :gutter="20">
+          <el-form-item label="操作状态:" prop="status">
+            <el-select v-model="form.status" placeholder="请选择">
+              <el-option label="正常" :value="0"></el-option>
+              <el-option label="停用" :value="1"></el-option>
+            </el-select>
+          </el-form-item>
+
+        </el-col>
+        <el-col :span="12" :gutter="20">
+           <el-form-item label="操作时间:" prop="phoneNumber">
+            <el-input v-model="form.phoneNumber"></el-input>
+          </el-form-item>
+          <!-- <el-form-item label="有效期限:" prop="tenantTerm">
+            <el-radio-group v-model="form.tenantTerm">
+              <el-radio :label="3" value="3">2090-01-01</el-radio>
+              <el-radio :label="4" value="4">
+                <el-date-picker
+                  :min-time="nowDate"
+                  v-model="form.value1"
+                  :disabled-date="disabledDate"
+                  type="date"
+                  placeholder="请选择日期"
+                />
+              </el-radio>
+            </el-radio-group>
+          </el-form-item> -->
+          
+        </el-col>
+      </el-row>
+     
+
+      <br />
+
+      <div style="text-align: right">
+        <el-button @click="closeDialog(0)">取消</el-button>
+        <el-button type="primary" @click="submitForm()">保存</el-button>
+      </div>
+    </el-form>
+  </el-dialog>
+</template>
+<script>
+// 地图
+import AMap from 'AMap'
+import { useStore } from 'vuex'
+import { defineComponent, ref, watchEffect, onMounted } from 'vue'
+import * as api from '@/api/tenantManage/tenantUnit.js'
+import { ElMessage } from 'element-plus'
+// import { parseTime } from '@/utils'
+import { validatorPhone, parseTime, isEmail } from '@/utils'
+
+export default defineComponent({
+  name: 'DialogComponent',
+  emits: ['closeDialog'],
+  props: {
+    show_Dialog: Boolean,
+    dialogTitle: String,
+    itemInfo: {
+      type: Object,
+      default: function () {
+        return {}
+      },
+    },
+  },
+  setup(props, { emit }) {
+    const store = useStore()
+    const beginTime = ref('')
+    const showDialog = ref(false)
+    const form = ref({})
+    const formInfo = ref(null)
+    const nowDate = ref(new Date().getTime())
+
+    const getPlatformBoxList = ref([])
+
+    const roleValid = (rule, value, callback) => {
+      rule
+      if (value.length === 0) {
+        callback(new Error('角色不能为空'))
+      } else {
+        callback()
+      }
+    }
+
+    const disabledDate = (time) => {
+      return time.getTime() < Date.now()
+    }
+
+    // 保存操作
+    const submitForm = () => {
+      formInfo.value.validate((valid) => {
+        if (valid) {
+          var aa = form.value
+          if (aa.tenantTerm == 3) {
+            aa.tenantTerm = '永久有效'
+          }
+          if (aa.tenantTerm == 4) {
+            if (!form.value.value1) {
+              ElMessage.warning('请选择日期')
+              return
+            }
+            aa.tenantTerm = form.value.value1
+
+            parseTime
+
+            aa.tenantTerm
+              ? (aa.tenantTerm = parseTime(aa.tenantTerm).substring(0, 10))
+              : ''
+          }
+
+          if (props.dialogTitle === '新增') {
+            api.addTenantData(form.value).then((requset) => {
+              if (requset.status === 'SUCCESS') {
+                ElMessage.success({
+                  message: '新增成功',
+                  type: 'success',
+                })
+                closeDialog()
+              } else {
+                ElMessage.error(requset.msg)
+              }
+            })
+          } else {
+            api.updateTenantData(form.value).then((requset) => {
+              if (requset.status === 'SUCCESS') {
+                ElMessage.success({
+                  message: '修改成功',
+                  type: 'success',
+                })
+                closeDialog()
+              } else {
+                ElMessage.error(requset.msg)
+              }
+            })
+          }
+        } else {
+          console.log('error submit!!')
+          return false
+        }
+      })
+    }
+    const marker = ref([])
+
+    function initMap() {
+      // AMap start
+      var map = new AMap.Map('mapF', {
+        resizeEnable: true,
+      })
+      //为地图注册click事件获取鼠标点击出的经纬度坐标
+
+      var marker = new AMap.Marker({})
+      map.on('click', function (e) {
+                form.value.geoPosition = e.lnglat.getLng() + ',' + e.lnglat.getLat()
+
+        map.remove([marker])
+        marker = new AMap.Marker({
+          position: new AMap.LngLat(e.lnglat.getLng(), e.lnglat.getLat()), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
+        })
+
+        map.add([marker])
+
+      })
+      // AMap end
+    }
+
+    const open = () => {
+      // initMap()
+      setTimeout(function () {
+        initMap()
+      }, 10)
+
+      form.value = props.itemInfo
+      console.log('form.value')
+      console.log(form.value)
+
+      optionselect()
+    }
+
+    // 关闭弹框
+    const closeDialog = (flag) => {
+      resetForm()
+      showDialog.value = false
+      emit('closeDialog', flag)
+    }
+
+    function resetForm() {
+      formInfo.value.resetFields()
+    }
+
+    //角色下拉请求
+    function optionselect() {
+      api.getPlatformBoxList().then((requset) => {
+        if (requset.status === 'SUCCESS') {
+          getPlatformBoxList.value = requset.data
+        } else {
+          ElMessage.error(requset.msg)
+        }
+      })
+    }
+
+    watchEffect((fn, options) => {
+      fn, options
+      showDialog.value = props.show_Dialog
+    })
+
+    //禁止选择以前的时间
+    const pickerEndDate = (time) => {
+      const timeRange = 1 * 24 * 60 * 60 * 1000
+      return time.getTime() <= Date.now() - timeRange * 1
+    }
+
+    onMounted(() => {})
+
+    return {
+      pickerEndDate,
+      roleValid,
+      submitForm,
+      closeDialog,
+      open,
+
+      // map123,
+      store,
+      beginTime,
+      showDialog,
+
+      initMap,
+      nowDate,
+      disabledDate,
+      marker,
+
+      checked: true,
+      form,
+      formInfo,
+      getPlatformBoxList,
+
+      rules: {
+        tenantName: [
+          { required: true, message: '请输入租户名称', trigger: 'blur' },
+          {
+            min: 1,
+            max: 30,
+            message: '长度在 1 到 30个字符',
+            trigger: 'blur',
+          },
+        ],
+        tenantManager: [
+          { required: true, message: '请输入租户负责人', trigger: 'blur' },
+          {
+            min: 1,
+            max: 10,
+            message: '长度在 1 到 10个字符',
+            trigger: 'blur',
+          },
+        ],
+        tenantTerm: [
+          { required: true, message: '请选择有效期限', trigger: 'change' },
+        ],
+        status: [{ required: true, message: '请选择状态', trigger: 'change' }],
+        geoPosition: [
+          { required: true, message: '请选输入地理位置', trigger: 'blur' },
+        ],
+
+        tenantType: [
+          { required: true, message: '请输入租户类型', trigger: 'blur' },
+        ],
+        phoneNumber: [
+          {
+            required: true,
+            message: '请输入负责人手机号码',
+            trigger: 'blur',
+          },
+          {
+            validator: validatorPhone,
+            message: '输入的电话号码不正确',
+            trigger: 'blur',
+          },
+        ],
+        systemName: [
+          { required: true, message: '请选择系统平台', trigger: 'blur' },
+        ],
+        email: [
+          { required: true, message: '请输入邮箱地址', trigger: 'blur' },
+
+          {
+            validator: isEmail,
+            message: '输入的邮箱地址不正确',
+            trigger: 'blur',
+          },
+        ],
+        address: [
+          { required: true, message: '请输入联系地址', trigger: 'blur' },
+          {
+            min: 1,
+            max: 30,
+            message: '长度在 1 到 30个字符',
+            trigger: 'blur',
+          },
+        ],
+        domain: [
+          { required: true, message: '请输入域名地址', trigger: 'blur' },
+          {
+            min: 1,
+            max: 250,
+            message: '长度在 1 到 250个字符',
+            trigger: 'blur',
+          },
+        ],
+      },
+    }
+  },
+})
+</script>
+ 
+<style scoped lang="scss">
+.el-input,
+.el-select,
+.el-date-editor.el-input,
+.el-date-editor.el-input__inner {
+  width: 240px;
+}
+
+.el-form-item {
+  margin: 0 0 20px !important;
+}
+// label样式
+.el-form-item__label {
+  width: 120px !important;
+}
+.el-form-item__content {
+  margin-left: 100px;
+}
+.demo-form-inline .el-form-item:not(.user-layout .el-form-item) {
+  // margin: 0 auto 20px 55px;
+}
+</style>
+<style>
+</style>

+ 470 - 0
src/views/statisManage/operLog/index.vue

@@ -0,0 +1,470 @@
+<template>
+  <div class="app-container">
+    <!-- 筛选start -->
+    <div class="filter-container mb-10">
+      <div class="left">
+        <div>
+          <a class="" style="margin-right: 30px">操作日志列表</a>
+          <!-- <el-button
+            icon="el-icon-plus"
+            type="success"
+            @click="addItem()"
+            :disabled="store.state.authorities.indexOf('新增') == -1"
+          >
+            新增
+          </el-button> -->
+        </div>
+      </div>
+
+      <div class="right">
+        <!-- <el-button type="primary">全部导出</el-button>
+        <el-button
+          type="primary"
+        >
+          导出
+        </el-button> -->
+
+        <!-- <el-button
+          type="primary"
+          @click="DataReportExport()"
+          :disabled="store.state.authorities.indexOf('导出') == -1"
+        >
+          导出
+        </el-button> -->
+      </div>
+    </div>
+
+    <div class="filter-container mb-10">
+      <div style="margin-top: 20px">
+        <div class="filter-item">
+          系统模块:
+          <el-input
+            v-model="tenantName"
+            placeholder="请输入"
+            style="width: 150px"
+          ></el-input>
+        </div>
+        <div class="filter-item">
+          操作人员/账号:
+          <el-input
+            v-model="tenantManager"
+            placeholder="请输入"
+            style="width: 150px"
+          ></el-input>
+        </div>
+        <div class="filter-item">
+          操作类别:
+          <el-select
+            v-model="tenantType"
+            placeholder="请选择"
+            style="width: 150px"
+            clearable
+          >
+            <el-option label="类别1" :value="0"></el-option>
+            <el-option label="类别2" :value="1"></el-option>
+          </el-select>
+        </div>
+        <div class="filter-item">
+          操作状态:
+          <el-select
+            v-model="status"
+            placeholder="请选择"
+            style="width: 200px"
+            clearable
+          >
+            <el-option label="正常" :value="0"></el-option>
+            <el-option label="停用" :value="1"></el-option>
+          </el-select>
+        </div>
+
+        <div class="filter-item planOutage">
+          选择时间范围:
+          <el-date-picker
+            v-model="dateTime"
+            type="datetimerange"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            style="width: auto"
+          ></el-date-picker>
+        </div>
+
+        <el-button
+          type="primary"
+          icon="el-icon-search"
+          @click="Select()"
+          class="search-button"
+        >
+          查询
+        </el-button>
+      </div>
+    </div>
+
+    <!-- 筛选end -->
+
+    <!-- 表格start -->
+    <el-table
+      :data="tableData"
+      border
+      stripe
+      :header-cell-style="headClass"
+      :cell-style="cellStyle"
+    >
+      <!-- <el-table-column type="index" label="序号" width="50px"></el-table-column> -->
+      <el-table-column
+        prop="tenantName"
+        label="日志编号"
+        min-width="140px"
+      ></el-table-column>
+      <el-table-column
+        prop="tenantManager"
+        label="系统模块"
+        min-width="100px"
+      ></el-table-column>
+      <el-table-column
+        prop="phoneNumber"
+        label="操作类型"
+        min-width="125px"
+      ></el-table-column>
+      <el-table-column
+        prop="geoPosition"
+        label="请求方式"
+        min-width="160px"
+      ></el-table-column>
+      <el-table-column
+        prop="platformName"
+        label="操作人员"
+        min-width="140px"
+      ></el-table-column>
+      <el-table-column prop="tenantType" label="操作账号" min-width="150px">
+       
+      </el-table-column>
+      <el-table-column
+        prop="tenantTerm"
+        label="操作地址"
+        min-width="110px"
+      >
+      </el-table-column>
+      <el-table-column
+        prop="tenantTerm"
+        label="操作地点"
+        min-width="110px"
+      >
+      </el-table-column>
+      
+     
+
+      
+      
+
+       <el-table-column prop="status" label="操作状态" width="">
+        <template #default="scope">
+          <span
+            :style="{
+              color: scope.row.status == '0' ? '#8DCF6E' : '#FF747B',
+            }"
+          >
+            {{ scope.row.status === '0' ? '正常' : '停用' }}
+          </span>
+        </template>
+      </el-table-column>
+
+      <el-table-column
+        prop="tenantTerm"
+        label="操作业务"
+        min-width="110px"
+      >
+      </el-table-column>
+
+      <el-table-column
+        prop="tenantTerm"
+        label="IP"
+        min-width="110px"
+      >
+      </el-table-column>
+      <el-table-column
+        prop="tenantTerm"
+        label="操作日期"
+        min-width="110px"
+      >
+      </el-table-column>
+      
+      <el-table-column fixed="right" label="操作" width="80">
+        <template #default="scope">
+          <el-button
+            type="text"
+            size="small"
+            @click.prevent="editRow(scope.row)"
+          >
+            详情
+          </el-button>
+          
+        </template>
+      </el-table-column>
+    </el-table>
+    <!-- 表格end -->
+
+    <!-- 分页start -->
+    <div class="paginationBlock">
+      <el-pagination
+        v-model:currentPage="page"
+        :page-sizes="[15, 20, 25, 30]"
+        :page-size="pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        background
+      ></el-pagination>
+    </div>
+
+    <!-- 分页end -->
+
+    <!--弹框组件开始-----------------------start-->
+    <dialog-component
+      :dialog-title="dialogTitle"
+      :item-info="tableItem"
+      @closeDialog="closeDialog"
+      :show_Dialog="showDialog"
+    ></dialog-component>
+    <!--弹框组件开始-----------------------end-->
+  </div>
+</template>
+
+<script>
+import { useStore } from 'vuex'
+import { defineComponent, onMounted, ref } from 'vue'
+import DialogComponent from './dialogComponent'
+import * as api from '@/api/tenantManage/tenantUnit.js'
+import { ElMessage } from 'element-plus'
+
+export default defineComponent({
+  name: 'VariableList',
+
+  components: { DialogComponent },
+  setup() {
+    const store = useStore()
+
+    const tableItem = ref()
+    const dialogTitle = ref('')
+    const showDialog = ref(false)
+
+    const tableData = ref()
+    const currentPage = ref(1)
+    const pageSize = ref(15)
+    const total = ref(0)
+
+    const status = ref(0)
+    const tenantType = ref('')
+    const tenantName = ref('')
+    const tenantManager = ref('')
+
+    const dateTime = ref('')
+    const select = ref(1)
+
+    const input = ref('')
+    const region = ref()
+
+    // 添加操作
+    const addItem = () => {
+      tableItem.value = {
+        tenantName: '',
+        tenantManager: '',
+        tenantTerm: 3,
+        geoPosition: '',
+        tenantType: '',
+        phoneNumber: '',
+        systemName: '',
+        email: '',
+        address: '',
+        status:0,
+        domain:''
+      }
+      dialogTitle.value = '新增'
+      showDialog.value = true
+    }
+    // 编辑操作
+    const editRow = (row) => {
+      console.log(row)
+      tableItem.value = {
+        id:row.id,
+        tenantName: row.tenantName,
+        tenantManager: row.tenantManager,
+        tenantTerm: row.tenantTerm=='永久有效'?3:4,
+        value1:row.tenantTerm,
+        status: Number(row.status),
+        geoPosition: row.geoPosition,
+        tenantType: Number(row.tenantType),
+        phoneNumber: row.phoneNumber,
+        systemName: Number(row.systemName),
+        email: row.email,
+        address: row.address,
+        remark:row.remark,
+        domain:row.domain
+      }
+      dialogTitle.value = '操作日志详情'
+      showDialog.value = true
+    }
+
+    // 关闭操作
+    const closeDialog = (flag) => {
+      if (flag) {
+        // 重新刷新表格内容
+        // this.fetchData()
+        console.log(1)
+      }
+      showDialog.value = false
+      Select()
+    }
+
+    //删除 是否删除  ---- 是
+    const handleDelete = (row) => {
+      api.plannedOutageDel({ id: row.id }).then((requset) => {
+        if (requset.status === 'SUCCESS') {
+          ElMessage.success({
+            message: '删除成功',
+            type: 'success',
+          })
+          Select()
+        } else {
+          ElMessage.error(requset.msg)
+        }
+      })
+    }
+    //是否删除  ---- 否
+    const cancelEvent = () => {
+      console.log('cancel!')
+    }
+
+    //查询设备列表
+    function Select() {
+      store.commit('TimeAll_function', dateTime.value)
+      const time = store.state.Time_Data
+      api
+        .getTenantData({
+          size: pageSize.value,
+          page: currentPage.value,
+          startTime: time[0] ? time[0] : '',
+          endTime: time[1] ? time[1] : '',
+          status: status.value,
+          tenantType: tenantType.value,
+          tenantName: tenantName.value,
+          tenantManager: tenantManager.value,
+        })
+        .then((requset) => {
+          if (requset.status === 'SUCCESS') {
+            tableData.value = requset.data.records.map((val) => {
+              store.commit('getTimestampAll', val.startTime)
+              val.startTime = store.state.timeProcessing
+              store.commit('getTimestampAll', val.endTime)
+              val.endTime = store.state.timeProcessing
+              store.commit('getTimestampAll', val.createTime)
+              val.createTime = store.state.timeProcessing
+            })
+            tableData.value = requset.data.records
+            total.value = requset.data.total
+          } else {
+            ElMessage.error(requset.msg)
+          }
+        })
+    }
+
+    onMounted(() => {
+      Select()
+    })
+
+    const handleSizeChange = (val) => {
+      pageSize.value = val
+      Select()
+    }
+    const handleCurrentChange = (val) => {
+      currentPage.value = val
+      Select()
+    }
+    // 表头样式设置
+    const goVariableList = () => {
+      // 跳转至订单列表页面传参
+      this.$router.push({
+        path: '../siteManage/variableList/index.vue',
+      })
+      // this.$router.push({ name:'variableList'})
+    }
+    const headClass = () => {
+      return 'background:#FAFAFA;'
+    }
+    //处理状态状态值变色
+    const cellStyle = ({ row, column, rowIndex, columnIndex }) => {
+      row, column, rowIndex
+      // console.log(row, column, rowIndex)
+
+      if (columnIndex) {
+        // return `text-align:left;cursor:pointer;`
+      } else {
+        return ''
+      }
+    }
+
+    //导出
+    const DataReportExport = () => {
+      store.commit('TimeAll_function', dateTime.value)
+      const time = store.state.Time_Data
+      api
+        .outagePlanListExport({
+          type: region.value,
+          startTime: time[0] ? time[0] : '',
+          endTime: time[1] ? time[1] : '',
+        })
+        .then((requset) => {
+          if (requset.status === 'SUCCESS') {
+            window.location.href = window.PLATFROM_CONFIG.fileUrl + requset.data
+            ElMessage.success({
+              message: '导出成功',
+              type: 'success',
+            })
+          } else {
+            ElMessage.error(requset.msg)
+          }
+        })
+    }
+    return {
+      cellStyle,
+      headClass,
+      goVariableList,
+
+      handleDelete,
+      cancelEvent,
+      closeDialog,
+      editRow,
+      addItem,
+      Select,
+
+      store,
+
+      total,
+      pageSize,
+      currentPage,
+      handleSizeChange,
+      handleCurrentChange,
+
+      tenantType,
+      tableData,
+      tenantName,
+      tenantManager,
+      status,
+
+      showDialog,
+      select,
+      dateTime,
+      tableItem,
+      dialogTitle,
+      input,
+      region,
+
+      DataReportExport,
+    }
+  },
+})
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 1 - 3
src/views/systemManage/rolePermission/roleInfoCom/index.vue

@@ -21,9 +21,7 @@
             :label="item.name"
             :key="item.actionid"
             v-model="item.checked"
-            :disabled="
-              radio1 == 1 || scope.row.menu == '权限管理' ? true : false
-            "
+           
             @change="handleCheckedChange"
           ></el-checkbox>
         </template>

+ 1 - 1
src/views/systemManage/userManage/dialogComponent.vue

@@ -302,7 +302,7 @@ export default defineComponent({
         roleId: [
           { required: true, message: '请选择角色名称', trigger: 'blur' },
         ],
-         siteId:  [{ required: true, message: '请选择站点', trigger: 'blur' }],
+         siteId:  [{ required: false, message: '请选择站点', trigger: 'blur' }],
         password: [
           { required: true, message: '请输入密码', trigger: 'blur' },
           {

+ 20 - 1
src/views/tenantManage/adminConfig/component/adminDialog.vue

@@ -11,7 +11,7 @@
         :model="form"
         :rules="rules"
         ref="ruleForm"
-        label-width="150px"
+        label-width="130px"
         class="demo-ruleForm"
       >
         <el-form-item label="管理员姓名:" prop="nickName">
@@ -138,10 +138,27 @@ export default defineComponent({
 
     const open = () => {
       form.value = props.itemInfo
+      form.value.status=Number(form.value.status)
       console.log('form.value')
       console.log(form.value)
     }
 
+    const validatePass = (rule, value, callback) => {
+      if (value === '') {
+        callback(new Error('请输入密码'))
+      } else if (
+        !/^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$).{6,20}$/.test(value)
+      ) {
+        callback(new Error('请输入6-18位特殊字符、字母、数字组合的密码'))
+      } else {
+        // if (this.ruleForm.confirmPwd !== '') {
+        //   this.$refs.ruleForm.validateField('confirmPwd')
+        // }
+        callback()
+      }
+    }
+
+
     // close(): Dialog弹窗关闭之后做的事
     const close = () => {
       resetForm()
@@ -165,6 +182,7 @@ export default defineComponent({
       submit,
       form,
       cloneDialog,
+      validatePass,
 
       ruleForm,
       resetForm,
@@ -213,6 +231,7 @@ export default defineComponent({
             message: '密码不能为空',
             trigger: 'blur',
           },
+          { validator: validatePass, trigger: 'blur' },
         ],
         status: [
           {

+ 3 - 2
src/views/tenantManage/adminConfig/component/checkAdminList.vue

@@ -68,7 +68,7 @@
     <div class="paginationBlock1" style="margin-top:30px">
       <el-pagination
         v-model:currentPage="page"
-        :page-sizes="[15, 20, 25, 30]"
+        :page-sizes="[5,10,15, 20]"
         :page-size="pageSize"
         layout="total, sizes, prev, pager, next, jumper"
         :total="total"
@@ -195,7 +195,7 @@ export default defineComponent({
 
     //管理员配置  (修改操作)
     const adminConfig = (row) => {
-      alert('编辑操作')
+      // alert('编辑操作')
        console.log('row')
       console.log(row)
 
@@ -269,6 +269,7 @@ export default defineComponent({
 
     const closeNo = (value) => {
       showDialog2.value = value
+      Select()
     }
 
     const closeNo3 = (value) => {

+ 1 - 0
src/views/tenantManage/adminConfig/index.vue

@@ -215,6 +215,7 @@ export default defineComponent({
     const adminConfig = (row) => {
       tableItem.value = {
         tenantId: row.id,
+        status:0
       }
       DialogArray.value = row
       dialogTitle.value = '配置管理员'

+ 85 - 245
src/views/tenantManage/authConfig/dialogComponent.vue

@@ -13,8 +13,8 @@
         label-width="150px"
         :rules="rules"
       >
-        <el-form-item label="菜单权限:" prop="aaa">
-          <div>
+        <el-form-item label="" prop="aaa">
+          <!-- <div>
             <el-checkbox
               v-model="checked1"
               label="展开/折叠"
@@ -23,16 +23,28 @@
             />
             <el-checkbox v-model="checked2" label="全选/全不选" size="large" />
             <el-checkbox v-model="checked3" label="父子联动" size="large"/>
-          </div>
+          </div> -->
           <el-tree
             v-if="data.length"
             :data="data"
             :props="defaultProps"
             @node-click="handleNodeClick"
             show-checkbox
+            node-key="id"
             :default-expand-all="isExpand"
+            :default-checked-keys="checkedArr"
             :check-strictly="isStrictly"
+             @check="currentChecked"
           />
+
+          <br />
+
+          <div style="text-align: right">
+            <el-button @click="closeDialog(0)">取消</el-button>
+            <el-button type="primary" @click="submitForm(formInfo)">
+              保存
+            </el-button>
+          </div>
         </el-form-item>
       </el-form>
     </el-dialog>
@@ -41,10 +53,10 @@
 <script>
 import { useStore } from 'vuex'
 import { defineComponent, ref, watchEffect, watch, onMounted } from 'vue'
-import * as api from '@/api/tenantManage/tenantUnit.js'
+import * as api from '@/api/tenantManage/authConfig.js'
 import { ElMessage } from 'element-plus'
 // import { parseTime } from '@/utils'
-import { validatorPhone, parseTime, isEmail } from '@/utils'
+// import { validatorPhone, parseTime, isEmail } from '@/utils'
 export default defineComponent({
   name: 'DialogComponent',
   emits: ['closeDialog'],
@@ -66,75 +78,35 @@ export default defineComponent({
     const formInfo = ref(null)
 
     const isExpand = ref(false)
-    const isStrictly=ref(true)
+    const isStrictly = ref(false)
     const getPlatformBoxList = ref([])
     const checked1 = ref(false)
     const checked2 = ref(false)
     const checked3 = ref(false)
+    const checkedArr = ref([])
 
-    const data = ref([
-      {
-        label: 'Level one 1',
-        children: [
-          {
-            label: 'Level two 1-1',
-            children: [
-              {
-                label: 'Level three 1-1-1',
-              },
-            ],
-          },
-        ],
-      },
-      {
-        label: 'Level one 2',
-        children: [
-          {
-            label: 'Level two 2-1',
-            children: [
-              {
-                label: 'Level three 2-1-1',
-              },
-            ],
-          },
-          {
-            label: 'Level two 2-2',
-            children: [
-              {
-                label: 'Level three 2-2-1',
-              },
-            ],
-          },
-        ],
-      },
-      {
-        label: 'Level one 3',
-        children: [
-          {
-            label: 'Level two 3-1',
-            children: [
-              {
-                label: 'Level three 3-1-1',
-              },
-            ],
-          },
-          {
-            label: 'Level two 3-2',
-            children: [
-              {
-                label: 'Level three 3-2-1',
-              },
-            ],
-          },
-        ],
-      },
-    ])
+    const data = ref([])
 
     const handleNodeClick = (data, obj, node) => {
       data, node
       console.log(data)
     }
 
+     const currentChecked = (nodeObj, SelectedObj) => {
+      nodeObj, SelectedObj
+       console.log('SelectedObj.checkedNodes')
+      console.log(SelectedObj.checkedNodes)
+      checkedArr.value = []
+ 
+
+      SelectedObj.checkedNodes.forEach((item) => {
+        checkedArr.value.push(item.id)
+      })
+      console.log(checkedArr.value)
+    }
+
+
+
     //展开合并
     const handleExpandChange = () => {
       data.value = []
@@ -261,8 +233,6 @@ export default defineComponent({
           ]
         }, 10)
       }
-
-    
     }
 
     //全选全不选
@@ -392,8 +362,7 @@ export default defineComponent({
         }, 10)
       }
     }
-    const handleStrictlyChange=()=>{
-   
+    const handleStrictlyChange = () => {
       if (checked3.value) {
         isStrictly.value = false
         setTimeout(function () {
@@ -457,68 +426,8 @@ export default defineComponent({
         }, 10)
       } else {
         isStrictly.value = true
-        setTimeout(function () {
-          data.value = [
-            {
-              label: 'Level one 1',
-              children: [
-                {
-                  label: 'Level two 1-1',
-                  children: [
-                    {
-                      label: 'Level three 1-1-1',
-                    },
-                  ],
-                },
-              ],
-            },
-            {
-              label: 'Level one 2',
-              children: [
-                {
-                  label: 'Level two 2-1',
-                  children: [
-                    {
-                      label: 'Level three 2-1-1',
-                    },
-                  ],
-                },
-                {
-                  label: 'Level two 2-2',
-                  children: [
-                    {
-                      label: 'Level three 2-2-1',
-                    },
-                  ],
-                },
-              ],
-            },
-            {
-              label: 'Level one 3',
-              children: [
-                {
-                  label: 'Level two 3-1',
-                  children: [
-                    {
-                      label: 'Level three 3-1-1',
-                    },
-                  ],
-                },
-                {
-                  label: 'Level two 3-2',
-                  children: [
-                    {
-                      label: 'Level three 3-2-1',
-                    },
-                  ],
-                },
-              ],
-            },
-          ]
-        }, 10)
+        setTimeout(function () {}, 10)
       }
-      
-
     }
     const roleValid = (rule, value, callback) => {
       rule
@@ -531,31 +440,14 @@ export default defineComponent({
 
     // 保存操作
     const submitForm = () => {
-      formInfo.value.validate((valid) => {
-        if (valid) {
-          var aa = form.value
-          if (aa.tenantTerm == 3) {
-            aa.tenantTerm = '永久有效'
-          }
-          if (aa.tenantTerm == 4) {
-            if (!form.value.value1) {
-              ElMessage.warning('请选择日期')
-              return
-            }
-            aa.tenantTerm = form.value.value1
-
-            parseTime
-
-            aa.tenantTerm
-              ? (aa.tenantTerm = parseTime(aa.tenantTerm).substring(0, 10))
-              : ''
-          }
-
-          if (props.dialogTitle === '新增') {
-            api.addTenantData(form.value).then((requset) => {
+      if (checkedArr.value.length) {
+           api.updateMenu({
+             "tenantId":form.value.id,
+             "menuIds":checkedArr.value
+           }).then((requset) => {
               if (requset.status === 'SUCCESS') {
                 ElMessage.success({
-                  message: '新增成功',
+                  message: '保存成功',
                   type: 'success',
                 })
                 closeDialog()
@@ -563,24 +455,12 @@ export default defineComponent({
                 ElMessage.error(requset.msg)
               }
             })
-          } else {
-            api.updateTenantData(form.value).then((requset) => {
-              if (requset.status === 'SUCCESS') {
-                ElMessage.success({
-                  message: '修改成功',
-                  type: 'success',
-                })
-                closeDialog()
-              } else {
-                ElMessage.error(requset.msg)
-              }
-            })
-          }
         } else {
-          console.log('error submit!!')
-          return false
+          ElMessage.warning('请至少选择一个权限保存')
+      
         }
-      })
+
+
     }
 
     const open = () => {
@@ -588,7 +468,7 @@ export default defineComponent({
       console.log('form.value')
       console.log(form.value)
 
-      optionselect()
+      getMenuList()
     }
 
     // 关闭弹框
@@ -596,21 +476,41 @@ export default defineComponent({
       resetForm()
       showDialog.value = false
       emit('closeDialog', flag)
+      checkedArr.value=[]
     }
 
     function resetForm() {
       formInfo.value.resetFields()
     }
 
-    //角色下拉请求
-    function optionselect() {
-      api.getPlatformBoxList().then((requset) => {
-        if (requset.status === 'SUCCESS') {
-          getPlatformBoxList.value = requset.data
-        } else {
-          ElMessage.error(requset.msg)
-        }
-      })
+    //树结构下拉
+    function getMenuList() {
+      api
+        .getMenuList({
+          tenantId: form.value.id,
+          platformId: form.value.systemName,
+        })
+        .then((requset) => {
+          if (requset.status === 'SUCCESS') {
+            var jsona = JSON.stringify(requset.data.menus)
+            var jsonb = jsona.replace(/"menu"/g, '"label"')
+            jsonb = jsonb.replace(/"authority"/g, '"children"')
+            jsonb = jsonb.replace(/"name"/g, '"label"')
+            var jsonc = JSON.parse(jsonb)
+            data.value = jsonc
+            console.log('data.value')
+            console.log(data.value)
+
+            checkedArr.value = requset.data.checkedKeys
+             console.log(  'checkedArr.value')
+            console.log(  checkedArr.value)
+
+            
+
+          } else {
+            ElMessage.error(requset.msg)
+          }
+        })
     }
 
     //监听变化
@@ -661,70 +561,11 @@ export default defineComponent({
       handleExpandChange,
       handleCheckedChange,
       handleStrictlyChange,
+      checkedArr,
+      currentChecked,
 
       rules: {
-        tenantName: [
-          { required: true, message: '请输入租户名称', trigger: 'blur' },
-          {
-            min: 1,
-            max: 30,
-            message: '长度在 1 到 30个字符',
-            trigger: 'blur',
-          },
-        ],
-        tenantManager: [
-          { required: true, message: '请输入租户负责人', trigger: 'blur' },
-          {
-            min: 1,
-            max: 10,
-            message: '长度在 1 到 10个字符',
-            trigger: 'blur',
-          },
-        ],
-        tenantTerm: [
-          { required: true, message: '请选择有效期限', trigger: 'change' },
-        ],
-        geoPosition: [
-          { required: true, message: '请选输入地理位置', trigger: 'blur' },
-        ],
-
-        tenantType: [
-          { required: true, message: '请输入租户类型', trigger: 'blur' },
-        ],
-        phoneNumber: [
-          {
-            required: true,
-            message: '请输入负责人手机号码',
-            trigger: 'blur',
-          },
-          {
-            validator: validatorPhone,
-            message: '输入的电话号码不正确',
-            trigger: 'blur',
-          },
-        ],
-        systemName: [
-          { required: true, message: '请选择系统平台', trigger: 'blur' },
-        ],
-        email: [
-          { required: true, message: '请输入邮箱地址', trigger: 'blur' },
-
-          {
-            validator: isEmail,
-            message: '输入的邮箱地址不正确',
-            trigger: 'blur',
-          },
-        ],
-        address: [
-          { required: true, message: '请输入联系地址', trigger: 'blur' },
-          {
-            min: 1,
-            max: 15,
-            message: '长度在 1 到 15个字符',
-            trigger: 'blur',
-          },
-        ],
-      },
+      }
     }
   },
 })
@@ -759,12 +600,11 @@ export default defineComponent({
   padding: 15px;
 }
 
-.aa {
-  ::v-deep .el-form-item--small .el-form-item__label {
-    line-height: 40px !important;
-    // margin-top:10px
-  }
-}
+// .aa {
+//   ::v-deep .el-form-item--small .el-form-item__label {
+//     line-height: 15px !important;
+//   }
+// }
 </style>
 <style>
 </style>

+ 2 - 1
src/views/tenantManage/authConfig/index.vue

@@ -276,12 +276,13 @@ export default defineComponent({
         address: row.address,
         remark:row.remark
       }
-      dialogTitle.value = '配置'
+      dialogTitle.value = '菜单权限'
       showDialog.value = true
     }
 
     // 关闭操作
     const closeDialog = (flag) => {
+      // alert(1)
       if (flag) {
         // 重新刷新表格内容
         // this.fetchData()

+ 429 - 62
src/views/tenantManage/systemConfig/dialogComponent.vue

@@ -21,19 +21,53 @@
               label-width="150px"
               :rules="rules"
             >
-              <el-form-item label="主页标题:" prop="middleTitle">
+              <el-form-item label="主页标题:" prop="homeTitle">
                 <el-input v-model="form.middleTitle"></el-input>
               </el-form-item>
+
+              <el-form-item label="主题样式:" prop="homeStyle">
+                <el-select v-model="form.homeStyle" placeholder="请选择">
+                  <el-option label="#f22636" value="#f22636">
+                    <div class="homeStyleColor" style="background:#f22636"></div>
+                  </el-option>
+                  <el-option label="#f75527" value="#f75527">
+                    <div class="homeStyleColor" style="background:#f75527"></div>
+                  </el-option>
+                  <el-option label="#fdaa30" value="#fdaa30">
+                    <div class="homeStyleColor" style="background:#fdaa30"></div>
+                  </el-option>
+                  <el-option label="#2bc1c5" value="#2bc1c5">
+                    <div class="homeStyleColor" style="background:#2bc1c5"></div>
+                  </el-option>
+                  <el-option label="#58c22d" value="#58c22d">
+                    <div class="homeStyleColor" style="background:#58c22d"></div>
+                  </el-option>
+                  <el-option label="#2292fc" value="#2292fc">
+                    <div class="homeStyleColor" style="background:#2292fc"></div>
+                  </el-option>
+                  <el-option label="#5159ea" value="#5159ea">
+                    <div class="homeStyleColor" style="background:#5159ea"></div>
+                  </el-option>
+                  <el-option label="#7537c1" value="#7537c1">
+                    <div class="homeStyleColor" style="background:#7537c1"></div>
+                  </el-option>
+                </el-select>
+              </el-form-item>
+
+              <el-form-item label="大屏跳转地址:" prop="largeScreenUrl ">
+                <el-input v-model="form.largeScreenUrl "></el-input>
+              </el-form-item>
+
+             
               <el-form-item label="主页logo:" prop="homeLogo">
                 <el-input v-model="form.homeLogo"></el-input>
                 <el-upload
-                ref="upload"
+                  ref="upload"
                   :action="uploadUrl"
                   :on-success="handleUpAvatar"
                   :on-remove="handleRemove"
                   list-type="picture"
                   :limit="1"
-                  :on-preview="handlePictureCardPreview"
                   :headers="{ accessToken: [accessToken] }"
                   :on-exceed="overLength"
                 >
@@ -41,13 +75,23 @@
                     上传
                   </el-button>
                   <template #tip>
-                    <div class="el-upload__tip">图片尺寸:1920*1080</div>
+                    <div class="el-upload__tip">图片尺寸:待更新</div>
                   </template>
                 </el-upload>
               </el-form-item>
 
               <el-form-item label="首页请求地址:" prop="homePageUrl">
-                <el-input v-model="form.homePageUrl"></el-input>
+                <!-- <el-input v-model="form.homePageUrl"></el-input> -->
+
+                <el-select v-model="form.homePageUrl" placeholder="请选择"   clearable>
+                  <el-option
+                    v-for="item in homeUrlList"
+                    :key="item.value"
+                    :label="item.menuName"
+                    :value="item.component"
+                  ></el-option>
+                </el-select>
+
                 <!-- <el-select v-model="form.homePageUrl" placeholder="请选择">
                   <el-option label="地址1" :value="1"></el-option>
                   <el-option label="地址2" :value="2"></el-option>
@@ -56,8 +100,8 @@
 
               <el-form-item label="主页导航栏:" prop="homeLayout">
                 <el-radio-group v-model="form.homeLayout">
-                  <el-radio :label="1" value="1">顶部导航栏</el-radio>
                   <el-radio :label="2" value="2">左侧导航栏</el-radio>
+                  <el-radio :label="1" value="1">顶部导航栏</el-radio>
                 </el-radio-group>
               </el-form-item>
 
@@ -65,7 +109,9 @@
 
               <div style="text-align: right">
                 <el-button @click="closeDialog(0)">取消</el-button>
-                <el-button type="primary" @click="submitForm()">保存</el-button>
+                <el-button type="primary" @click="submitForm('formInfo')">
+                  保存
+                </el-button>
               </div>
             </el-form>
           </el-tab-pane>
@@ -80,26 +126,81 @@
               label-width="150px"
               :rules="rules"
             >
-              <el-form-item label="登录页标题:" prop="tenantName">
-                <el-input v-model="form.tenantName"></el-input>
+              <el-form-item label="登录页标题:" prop="loginTitle">
+                <el-input v-model="form.loginTitle"></el-input>
               </el-form-item>
-              <el-form-item label="登录页logo:" prop="tenantManager">
-                <el-input v-model="form.tenantManager"></el-input>
+              <el-form-item label="登录页logo:" prop="loginLogo">
+                <!-- <el-input v-model="form.tenantManager"></el-input> -->
+                <el-input v-model="form.loginLogo"></el-input>
+                <el-upload
+                  ref="upload2"
+                  :action="uploadUrl"
+                  :on-success="handleUpAvatar2"
+                  :on-remove="handleRemove2"
+                  list-type="picture"
+                  :limit="1"
+                  :headers="{ accessToken: [accessToken] }"
+                  :on-exceed="overLength"
+                >
+                  <el-button type="primary" style="margin-top: 10px">
+                    上传
+                  </el-button>
+                  <template #tip>
+                    <div class="el-upload__tip">图片尺寸:待更新</div>
+                  </template>
+                </el-upload>
               </el-form-item>
-              <el-form-item label="登录页背景:" prop="tenantManager">
-                <el-input v-model="form.tenantManager"></el-input>
+              <el-form-item label="登录页背景:" prop="loginBackUrl">
+                <!-- <el-input v-model="form.tenantManager"></el-input> -->
+                <el-input v-model="form.loginBackUrl"></el-input>
+                <el-upload
+                  ref="upload22"
+                  :action="uploadUrl"
+                  :on-success="handleUpAvatar22"
+                  :on-remove="handleRemove22"
+                  list-type="picture"
+                  :limit="1"
+                  :headers="{ accessToken: [accessToken] }"
+                  :on-exceed="overLength"
+                >
+                  <el-button type="primary" style="margin-top: 10px">
+                    上传
+                  </el-button>
+                  <template #tip>
+                    <div class="el-upload__tip">图片尺寸:1920*1080</div>
+                  </template>
+                </el-upload>
               </el-form-item>
-              <el-form-item label="登录页底部名称:" prop="tenantName">
-                <el-input v-model="form.tenantName"></el-input>
+              <el-form-item label="登录页底部名称:" prop="loginFooter">
+                <el-input v-model="form.loginFooter"></el-input>
               </el-form-item>
-              <el-form-item label="标签页图标:" prop="tenantManager">
-                <el-input v-model="form.tenantManager"></el-input>
+              <el-form-item label="标签页图标:" prop="labelIcon">
+                <el-input v-model="form.labelIcon"></el-input>
+                <el-upload
+                  ref="upload222"
+                  :action="uploadUrl"
+                  :on-success="handleUpAvatar222"
+                  :on-remove="handleRemove222"
+                  list-type="picture"
+                  :limit="1"
+                  :headers="{ accessToken: [accessToken] }"
+                  :on-exceed="overLength"
+                >
+                  <el-button type="primary" style="margin-top: 10px">
+                    上传
+                  </el-button>
+                  <template #tip>
+                    <div class="el-upload__tip">图片尺寸:待更新</div>
+                  </template>
+                </el-upload>
               </el-form-item>
               <br />
 
               <div style="text-align: right">
                 <el-button @click="closeDialog(0)">取消</el-button>
-                <el-button type="primary" @click="submitForm()">保存</el-button>
+                <el-button type="primary" @click="submitForm2('formInfo2')">
+                  保存
+                </el-button>
               </div>
             </el-form>
           </el-tab-pane>
@@ -114,23 +215,62 @@
               label-width="150px"
               :rules="rules"
             >
-              <el-form-item label="是否开启中间页:" prop="tenantName">
-                <el-switch v-model="value" size="large" />
+              <el-form-item label="是否开启中间页:" prop="middleStatus">
+                <el-switch v-model="form.middleStatus" size="large" />
               </el-form-item>
-              <el-form-item label="中间页logo:" prop="tenantManager">
-                <el-input v-model="form.tenantManager"></el-input>
+              <el-form-item label="中间页标题:" prop="middleTitle">
+                <el-input v-model="form.middleTitle"></el-input>
               </el-form-item>
-              <el-form-item label="中间页背景:" prop="tenantManager">
-                <el-input v-model="form.tenantManager"></el-input>
+              <el-form-item label="中间页logo:" prop="middleLogo">
+                <el-input v-model="form.middleLogo"></el-input>
+                <el-upload
+                  ref="upload3"
+                  :action="uploadUrl"
+                  :on-success="handleUpAvatar3"
+                  :on-remove="handleRemove3"
+                  list-type="picture"
+                  :limit="1"
+                  :headers="{ accessToken: [accessToken] }"
+                  :on-exceed="overLength"
+                >
+                  <el-button type="primary" style="margin-top: 10px">
+                    上传
+                  </el-button>
+                  <template #tip>
+                    <div class="el-upload__tip">图片尺寸:待更新</div>
+                  </template>
+                </el-upload>
               </el-form-item>
-              <el-form-item label="中间页底部名称:" prop="tenantName">
-                <el-input v-model="form.tenantName"></el-input>
+              <el-form-item label="中间页背景:" prop="middleBackUrl">
+                <el-input v-model="form.middleBackUrl"></el-input>
+                <el-upload
+                  ref="upload33"
+                  :action="uploadUrl"
+                  :on-success="handleUpAvatar33"
+                  :on-remove="handleRemove33"
+                  list-type="picture"
+                  :limit="1"
+                  :headers="{ accessToken: [accessToken] }"
+                  :on-exceed="overLength"
+                >
+                  <el-button type="primary" style="margin-top: 10px">
+                    上传
+                  </el-button>
+                  <template #tip>
+                    <div class="el-upload__tip">图片尺寸:待更新</div>
+                  </template>
+                </el-upload>
+              </el-form-item>
+              <el-form-item label="中间页底部名称:" prop="middleFooter">
+                <el-input v-model="form.middleFooter"></el-input>
               </el-form-item>
               <br />
 
               <div style="text-align: right">
                 <el-button @click="closeDialog(0)">取消</el-button>
-                <el-button type="primary" @click="submitForm()">保存</el-button>
+                <el-button type="primary" @click="submitForm3(formInfo3)">
+                  保存
+                </el-button>
               </div>
             </el-form>
           </el-tab-pane>
@@ -180,14 +320,22 @@ export default defineComponent({
     const showDialog = ref(false)
     const form = ref({})
     const formInfo = ref(null)
+    const formInfo2 = ref(null)
+    const formInfo3 = ref(null)
     const value = ref(true)
     const accessToken = ref(store.state.user.accessToken)
 
-    const upload = ref(null);
+
+    const upload = ref(null)
+    const upload2 = ref(null)
+    const upload22 = ref(null)
+    const upload222 = ref(null)
+    const upload3 = ref(null)
+    const upload33 = ref(null)
 
     const activeName = ref('first')
 
-    const getPlatformBoxList = ref([])
+    const homeUrlList = ref([])
 
     const dataSet = reactive({
       uploadUrl:
@@ -206,49 +354,183 @@ export default defineComponent({
     }
     const overLength = () => {
       ElMessage.warning('只能上传一张')
-
     }
 
-    // //上传成功的回调
+    //上传成功的回调
     function handleUpAvatar(res) {
-      console.log('res')
-      console.log(res.data)
-      form.value.homeLogo = window.PLATFROM_CONFIG.baseUrl +res.data
-
-      console.log(form.value.homeLogo)
+      form.value.homeLogo = window.PLATFROM_CONFIG.fileUrl + res.data
+    }
+    function handleUpAvatar2(res) {
+      form.value.loginLogo = window.PLATFROM_CONFIG.fileUrl + res.data
+    }
+    function handleUpAvatar22(res) {
+      form.value.loginBackUrl = window.PLATFROM_CONFIG.fileUrl + res.data
+    }
+    function handleUpAvatar222(res) {
+      form.value.labelIcon = window.PLATFROM_CONFIG.fileUrl + res.data
+    }
+    function handleUpAvatar3(res) {
+      form.value.middleLogo = window.PLATFROM_CONFIG.fileUrl + res.data
+    }
+    function handleUpAvatar33(res) {
+      form.value.middleBackUrl = window.PLATFROM_CONFIG.fileUrl + res.data
     }
 
-   function  handleRemove(){
-     form.value.homeLogo = ''
-
+    function handleRemove() {
+      form.value.homeLogo = ''
+    }
+    function handleRemove2() {
+      form.value.loginLogo = ''
+    }
+    function handleRemove22() {
+      form.value.loginBackUrl = ''
+    }
+    function handleRemove222() {
+      form.value.labelIcon = ''
+    }
+    function handleRemove3() {
+      form.value.middleLogo = ''
+    }
+    function handleRemove33() {
+      form.value.middleBackUrl = ''
     }
 
-    // 保存操作
+    // 主页配置保存操作
     const submitForm = () => {
       formInfo.value.validate((valid) => {
         if (valid) {
-          form.value.tenantId = props.itemInfo.tenantId
+          var aa = {
+            id: props.itemInfo.id,
+            tenantId: props.itemInfo.tenantId,
+            middleTitle: form.value.middleTitle,
+            homeLogo: form.value.homeLogo,
+            homePageUrl: form.value.homePageUrl,
+            homeLayout: form.value.homeLayout,
+            homeStyle: form.value.homeStyle,
+            largeScreenUrl :form.value.largeScreenUrl,
+          }
+
           if (props.configStatus) {
-            alert('已配置修改提交')
-            api.updaMiddleConfig(form.value).then((requset) => {
+            // alert('已配置修改提交')
+            api.updaMiddleConfig(aa).then((requset) => {
               if (requset.status === 'SUCCESS') {
                 ElMessage.success({
                   message: '修改配置成功',
                   type: 'success',
                 })
+                 store.commit('getMiddleConfig')
                 closeDialog()
               } else {
                 ElMessage.error(requset.msg)
               }
             })
           } else {
-            alert('未配置新增提交')
-            api.addMiddleConfig(form.value).then((requset) => {
+            // alert('未配置新增提交')
+            api.addMiddleConfig(aa).then((requset) => {
               if (requset.status === 'SUCCESS') {
                 ElMessage.success({
                   message: '新增配置成功',
                   type: 'success',
                 })
+                 store.commit('getMiddleConfig')
+                closeDialog()
+              } else {
+                ElMessage.error(requset.msg)
+              }
+            })
+          }
+        } else {
+          console.log('error submit!!')
+          return false
+        }
+      })
+    }
+
+    // 登录页配置保存操作
+    const submitForm2 = () => {
+      formInfo2.value.validate((valid) => {
+        if (valid) {
+          var aa = {
+            id: props.itemInfo.id,
+            tenantId: props.itemInfo.tenantId,
+            loginLogo: form.value.loginLogo,
+            loginTitle: form.value.loginTitle,
+            loginBackUrl: form.value.loginBackUrl,
+            loginFooter: form.value.loginFooter,
+            labelIcon: form.value.labelIcon,
+          }
+          if (props.configStatus) {
+            // alert('已配置修改提交')
+            api.updaMiddleConfig(aa).then((requset) => {
+              if (requset.status === 'SUCCESS') {
+                ElMessage.success({
+                  message: '修改配置成功',
+                  type: 'success',
+                })
+                closeDialog()
+                 store.commit('getMiddleConfig')
+              } else {
+                ElMessage.error(requset.msg)
+              }
+            })
+          } else {
+            // alert('未配置新增提交')
+            api.addMiddleConfig(aa).then((requset) => {
+              if (requset.status === 'SUCCESS') {
+                ElMessage.success({
+                  message: '新增配置成功',
+                  type: 'success',
+                })
+                 store.commit('getMiddleConfig')
+                closeDialog()
+              } else {
+                ElMessage.error(requset.msg)
+              }
+            })
+          }
+        } else {
+          console.log('error submit!!')
+          return false
+        }
+      })
+    }
+
+    // 登录页配置保存操作
+    const submitForm3 = () => {
+      formInfo3.value.validate((valid) => {
+        if (valid) {
+          var aa = {
+            id: props.itemInfo.id,
+            tenantId: props.itemInfo.tenantId,
+            middleStatus: form.value.middleStatus ? 1 : 0,
+            middleLogo: form.value.middleLogo,
+            middleTitle: form.value.middleTitle,
+            middleBackUrl: form.value.middleBackUrl,
+            middleFooter: form.value.middleFooter,
+          }
+          if (props.configStatus) {
+            // alert('已配置修改提交')
+            api.updaMiddleConfig(aa).then((requset) => {
+              if (requset.status === 'SUCCESS') {
+                ElMessage.success({
+                  message: '修改配置成功',
+                  type: 'success',
+                })
+                 store.commit('getMiddleConfig')
+                closeDialog()
+              } else {
+                ElMessage.error(requset.msg)
+              }
+            })
+          } else {
+            // alert('未配置新增提交')
+            api.addMiddleConfig(aa).then((requset) => {
+              if (requset.status === 'SUCCESS') {
+                ElMessage.success({
+                  message: '新增配置成功',
+                  type: 'success',
+                })
+                 store.commit('getMiddleConfig')
                 closeDialog()
               } else {
                 ElMessage.error(requset.msg)
@@ -265,33 +547,44 @@ export default defineComponent({
     const open = () => {
       setTimeout(function () {
         form.value = props.itemInfo
+        form.value.middleStatus = props.itemInfo.middleStatus ? true : false
+        form.value.homePageUrl = props.itemInfo.homePageUrl
+        // form.value.homeStyle = Number(props.itemInfo.homeStyle)
+        form.value.homeLayout = 2
         console.log('子组件中form.value')
         console.log(form.value)
-      }, 500)
 
-      optionselect()
+        getMenuBoxList(props.itemInfo.tenantId)
+      }, 500)
 
       //  alert(props.configStatus)
     }
 
     // 关闭弹框
     const closeDialog = (flag) => {
+      activeName.value = 'first'
       resetForm()
-      upload.value.clearFiles();
+      upload.value.clearFiles()
+      upload2.value.clearFiles()
+      upload22.value.clearFiles()
+      upload222.value.clearFiles()
+      upload3.value.clearFiles()
+      upload33.value.clearFiles()
+
       showDialog.value = false
       emit('closeDialog', flag)
     }
 
     function resetForm() {
-     
       formInfo.value.resetFields()
     }
 
     //角色下拉请求
-    function optionselect() {
-      api.getPlatformBoxList().then((requset) => {
+    function getMenuBoxList(params) {
+      api.getMenuBoxList({ tenantId: params }).then((requset) => {
         if (requset.status === 'SUCCESS') {
-          getPlatformBoxList.value = requset.data
+          console.log(requset.data)
+          homeUrlList.value = requset.data
         } else {
           ElMessage.error(requset.msg)
         }
@@ -316,9 +609,12 @@ export default defineComponent({
       pickerEndDate,
       roleValid,
       submitForm,
+      submitForm2,
+      submitForm3,
       closeDialog,
       open,
 
+
       store,
       beginTime,
       showDialog,
@@ -326,19 +622,36 @@ export default defineComponent({
       checked: true,
       form,
       formInfo,
-      getPlatformBoxList,
+      formInfo2,
+      formInfo3,
+      homeUrlList,
 
       activeName,
       value,
       overLength,
       handleUpAvatar,
+      handleUpAvatar2,
+      handleUpAvatar22,
+      handleUpAvatar222,
+      handleUpAvatar3,
+      handleUpAvatar33,
       handleRemove,
+      handleRemove2,
+      handleRemove22,
+      handleRemove222,
+      handleRemove3,
+      handleRemove33,
       accessToken,
       upload,
+      upload2,
+      upload22,
+      upload222,
+      upload3,
+      upload33,
 
       rules: {
-        middleTitle: [
-          { required: true, message: '请输入主页标题', trigger: 'blur' },
+        homeTitle: [
+          { required: false, message: '请输入主页标题', trigger: 'blur' },
           {
             min: 1,
             max: 30,
@@ -346,14 +659,55 @@ export default defineComponent({
             trigger: 'blur',
           },
         ],
-        homeLogo: [
-          { required: true, message: '请输入主页logo', trigger: 'blur' },
+        homeStyle: [
+          { required: false, message: '请输入主页logo', trigger: 'blur' },
         ],
-        homePageUrl: [
-          { required: true, message: '请输入主页请求地址', trigger: 'blur' },
+        homeLogo: [
+          { required: false, message: '请输入主页logo', trigger: 'blur' },
         ],
         homeLayout: [
-          { required: true, message: '请选则主页导航布局', trigger: 'change' },
+          { required: false, message: '请选则主页导航布局', trigger: 'blur' },
+        ],
+        largeScreenUrl: [
+          { required: false, message: '请输入大屏地址', trigger: 'blur' },
+        ],
+
+        loginTitle: [
+          { required: false, message: '请输入登录页标题', trigger: 'blur' },
+        ],
+        loginLogo: [
+          { required: false, message: '请选则登录页logo', trigger: 'blur' },
+        ],
+        loginBackUrl: [
+          { required: false, message: '请选择登录页背景图', trigger: 'blur' },
+        ],
+        loginFooter: [
+          { required: false, message: '请输入登录页底部标题', trigger: 'blur' },
+        ],
+        labelIcon: [
+          { required: false, message: '请输入标签页图标', trigger: 'blur' },
+        ],
+
+        // middleStatus: [
+        //   { required: false, message: '请选则中间页状态', trigger: 'blur' },
+        // ],
+        middleTitle: [
+          { required: false, message: '请输入中间页标题', trigger: 'blur' },
+          {
+            min: 1,
+            max: 30,
+            message: '长度在 1 到 30个字符',
+            trigger: 'blur',
+          },
+        ],
+        middleLogo: [
+          { required: false, message: '请输入中间页logo', trigger: 'blur' },
+        ],
+        middleBackUrl: [
+          { required: false, message: '请选择中间页背景图', trigger: 'blur' },
+        ],
+        middleFooter: [
+          { required: false, message: '请输入中间页底部标题', trigger: 'blur' },
         ],
       },
     }
@@ -401,12 +755,25 @@ export default defineComponent({
   margin-left: 10px;
   display: inline-block;
 }
-::v-deep .el-upload-list__item{
-  width:100px!important
+::v-deep .el-upload-list__item {
+  width: 100px !important;
 }
+
+.homeStyleColor{
+  width: 100%;
+    height: 20px;
+    margin-top: 7px;
+    color:#fff;
+    // line-height:20px;
+    // padding-left:5px
+
+} 
+
 </style>
 <style>
 .systemCard .el-dialog__body {
   padding-top: 10px !important;
 }
+
+
 </style>

+ 13 - 12
src/views/tenantManage/systemConfig/index.vue

@@ -5,7 +5,6 @@
       <div class="left">
         <div>
           <a class="" style="margin-right: 30px">系统配置列表</a>
-         
         </div>
       </div>
 
@@ -169,11 +168,16 @@ export default defineComponent({
     const input = ref('')
     const region = ref()
 
-   
     // 配置操作
     const configRow = (row) => {
+      tableItem.value = {
+        tenantId: row.id,
+      }
+
+      console.log('tableItem.value')
+      console.log(tableItem.value)
+
       getMiddleConfigList(row.id)
-      console.log(row)
 
       dialogTitle.value = '配置'
       showDialog.value = true
@@ -217,22 +221,19 @@ export default defineComponent({
         })
         .then((requset) => {
           if (requset.status === 'SUCCESS') {
+            // tableItem.value.tenantId=params
 
-            console.log('requset.data')
-            console.log(requset.data)
-
-            tableItem.value=requset.data[0];
+            console.log('tableItem.value')
+            console.log(tableItem.value)
 
             if (requset.data.length) {
               console.log('已配置')
-              
-               console.log('tableItem.value')
-              console.log(tableItem.value)
+              tableItem.value = requset.data[0]
+              tableItem.value.homeLayout = Number(requset.data[0].homeLayout)
 
               configStatus.value = true
             } else {
-
-               console.log('暂无配置')
+              console.log('暂无配置')
               configStatus.value = false
             }
           } else {

+ 121 - 45
src/views/tenantManage/tenantUnit/dialogComponent.vue

@@ -24,16 +24,24 @@
 
           <el-form-item label="有效期限:" prop="tenantTerm">
             <el-radio-group v-model="form.tenantTerm">
-              <el-radio :label="3" value="3">永久有效</el-radio>
+              <el-radio :label="3" value="3">2090-01-01</el-radio>
               <el-radio :label="4" value="4">
                 <el-date-picker
+                  :min-time="nowDate"
                   v-model="form.value1"
+                  :disabled-date="disabledDate"
                   type="date"
                   placeholder="请选择日期"
                 />
               </el-radio>
             </el-radio-group>
           </el-form-item>
+          <el-form-item label="状态:" prop="status">
+            <el-select v-model="form.status" placeholder="请选择">
+              <el-option label="正常" :value="0"></el-option>
+              <el-option label="停用" :value="1"></el-option>
+            </el-select>
+          </el-form-item>
 
           <el-form-item label="地理位置:" prop="geoPosition">
             <el-input v-model="form.geoPosition"></el-input>
@@ -54,40 +62,56 @@
           </el-form-item> -->
 
           <el-form-item label="系统平台:" prop="systemName">
-            <el-select
-              v-model="form.systemName"
-              placeholder="请选择"
-            >
+            <el-select v-model="form.systemName" placeholder="请选择">
               <!-- <el-option label="永天智慧电力平台" :value="1"></el-option>
               <el-option label="伍继智慧电力平台" :value="2"></el-option>
               <el-option label="电力运营管理平台" :value="3"></el-option> -->
 
               <el-option
-            v-for="(item, index) in getPlatformBoxList"
-            :key="index"
-            :label="item.platformName"
-            :value="item.id"
-          ></el-option>
-
-
+                v-for="(item, index) in getPlatformBoxList"
+                :key="index"
+                :label="item.platformName"
+                :value="item.id"
+              ></el-option>
             </el-select>
           </el-form-item>
 
-
           <el-form-item label="邮箱地址:" prop="email">
             <el-input v-model="form.email"></el-input>
           </el-form-item>
           <el-form-item label="联系地址:" prop="address">
             <el-input v-model="form.address"></el-input>
           </el-form-item>
+          <el-form-item label="域名配置:" prop="domain">
+            <el-input v-model="form.domain"></el-input>
+          </el-form-item>
         </el-col>
       </el-row>
 
       <el-form-item label="">
         <div
-          style="width: 670px; height: 130px; background: rgba(0, 0, 0, 0.2);text-align:center"
+          style="
+            width: 670px;
+            height: 300px;
+            background: #016ddb;
+            text-align: center;
+            position: relative;
+          "
         >
-          地图api待接入
+          <!-- 地图api待接入 -->
+
+          <div
+            class="map"
+            id="mapF"
+            style="
+              height: 100%;
+              z-index: 99;
+              position: absolute;
+              top: 0;
+              left: 0;
+              width: 100%;
+            "
+          ></div>
         </div>
       </el-form-item>
       <el-form-item label="备注:" prop="remark">
@@ -101,7 +125,7 @@
       </el-form-item>
 
       <br />
- 
+
       <div style="text-align: right">
         <el-button @click="closeDialog(0)">取消</el-button>
         <el-button type="primary" @click="submitForm()">保存</el-button>
@@ -110,12 +134,15 @@
   </el-dialog>
 </template>
 <script>
+// 地图
+import AMap from 'AMap'
 import { useStore } from 'vuex'
-import { defineComponent, ref, watchEffect ,onMounted} from 'vue'
+import { defineComponent, ref, watchEffect, onMounted } from 'vue'
 import * as api from '@/api/tenantManage/tenantUnit.js'
 import { ElMessage } from 'element-plus'
 // import { parseTime } from '@/utils'
 import { validatorPhone, parseTime, isEmail } from '@/utils'
+
 export default defineComponent({
   name: 'DialogComponent',
   emits: ['closeDialog'],
@@ -135,8 +162,9 @@ export default defineComponent({
     const showDialog = ref(false)
     const form = ref({})
     const formInfo = ref(null)
+    const nowDate = ref(new Date().getTime())
 
-     const getPlatformBoxList = ref([])
+    const getPlatformBoxList = ref([])
 
     const roleValid = (rule, value, callback) => {
       rule
@@ -147,29 +175,31 @@ export default defineComponent({
       }
     }
 
+    const disabledDate = (time) => {
+      return time.getTime() < Date.now()
+    }
+
     // 保存操作
     const submitForm = () => {
       formInfo.value.validate((valid) => {
         if (valid) {
-
           var aa = form.value
-            if (aa.tenantTerm == 3) {
-              aa.tenantTerm = '永久有效'
+          if (aa.tenantTerm == 3) {
+            aa.tenantTerm = '永久有效'
+          }
+          if (aa.tenantTerm == 4) {
+            if (!form.value.value1) {
+              ElMessage.warning('请选择日期')
+              return
             }
-            if (aa.tenantTerm == 4) {
-              if (!form.value.value1) {
-                ElMessage.warning('请选择日期')
-                return
-              }
-              aa.tenantTerm = form.value.value1
-
-              parseTime
+            aa.tenantTerm = form.value.value1
 
-              aa.tenantTerm
-                ? (aa.tenantTerm = parseTime(aa.tenantTerm).substring(0, 10))
-                : ''
-            }
+            parseTime
 
+            aa.tenantTerm
+              ? (aa.tenantTerm = parseTime(aa.tenantTerm).substring(0, 10))
+              : ''
+          }
 
           if (props.dialogTitle === '新增') {
             api.addTenantData(form.value).then((requset) => {
@@ -202,14 +232,49 @@ export default defineComponent({
         }
       })
     }
+    const marker = ref([])
+
+    function initMap() {
+      var marker = new AMap.Marker({})
+
+      // AMap start
+      var map = new AMap.Map('mapF', {
+        resizeEnable: true,
+      })
+      
+      //地图点标记回显
+      if (props.dialogTitle != '新增') {
+        var newArray = form.value.geoPosition&&form.value.geoPosition.indexOf(',')!=-1?form.value.geoPosition.split(','):[0,0 ]
+        marker = new AMap.Marker({
+          position: new AMap.LngLat(newArray[0], newArray[1]), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
+        })
+        map.add([marker])
+      } 
+    
+
+      //为地图注册click事件获取鼠标点击出的经纬度坐标
+      map.on('click', function (e) {
+        form.value.geoPosition = e.lnglat.getLng() + ',' + e.lnglat.getLat()
+
+        map.remove([marker])
+        marker = new AMap.Marker({
+          position: new AMap.LngLat(e.lnglat.getLng(), e.lnglat.getLat()), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
+        })
+
+        map.add([marker])
+      })
+      // AMap end
+    }
 
     const open = () => {
-      form.value = props.itemInfo;
+      form.value = props.itemInfo
       console.log('form.value')
       console.log(form.value)
+      setTimeout(function () {
+        initMap()
+      }, 10)
 
-       optionselect()
-       
+      optionselect()
     }
 
     // 关闭弹框
@@ -227,7 +292,6 @@ export default defineComponent({
     function optionselect() {
       api.getPlatformBoxList().then((requset) => {
         if (requset.status === 'SUCCESS') {
-     
           getPlatformBoxList.value = requset.data
         } else {
           ElMessage.error(requset.msg)
@@ -235,8 +299,6 @@ export default defineComponent({
       })
     }
 
-
-
     watchEffect((fn, options) => {
       fn, options
       showDialog.value = props.show_Dialog
@@ -248,9 +310,7 @@ export default defineComponent({
       return time.getTime() <= Date.now() - timeRange * 1
     }
 
-    onMounted(() => {
-     
-    })
+    onMounted(() => {})
 
     return {
       pickerEndDate,
@@ -259,10 +319,16 @@ export default defineComponent({
       closeDialog,
       open,
 
+      // map123,
       store,
       beginTime,
       showDialog,
 
+      initMap,
+      nowDate,
+      disabledDate,
+      marker,
+
       checked: true,
       form,
       formInfo,
@@ -290,8 +356,9 @@ export default defineComponent({
         tenantTerm: [
           { required: true, message: '请选择有效期限', trigger: 'change' },
         ],
+        status: [{ required: true, message: '请选择状态', trigger: 'change' }],
         geoPosition: [
-          { required: true, message: '请选输入地理位置', trigger: 'blur' },
+          { required: true, message: '请选地理位置', trigger: 'blur' },
         ],
 
         tenantType: [
@@ -325,8 +392,17 @@ export default defineComponent({
           { required: true, message: '请输入联系地址', trigger: 'blur' },
           {
             min: 1,
-            max: 15,
-            message: '长度在 1 到 15个字符',
+            max: 30,
+            message: '长度在 1 到 30个字符',
+            trigger: 'blur',
+          },
+        ],
+        domain: [
+          { required: true, message: '请输入域名地址', trigger: 'blur' },
+          {
+            min: 1,
+            max: 250,
+            message: '长度在 1 到 250个字符',
             trigger: 'blur',
           },
         ],

+ 36 - 21
src/views/tenantManage/tenantUnit/index.vue

@@ -37,7 +37,7 @@
     <div class="filter-container mb-10">
       <div style="margin-top: 20px">
         <div class="filter-item">
-          租户名称:
+          单位名称:
           <el-input
             v-model="tenantName"
             placeholder="请输入内容"
@@ -55,7 +55,7 @@
           ></el-input>
         </div>
         <div class="filter-item">
-          客户类型:
+          试用租户/正式租户:
           <el-select
             v-model="tenantType"
             placeholder="请选择"
@@ -81,7 +81,7 @@
           </el-select>
         </div>
 
-        <div class="filter-item planOutage">
+        <!-- <div class="filter-item planOutage">
           选择时间范围:
           <el-date-picker
             v-model="dateTime"
@@ -92,7 +92,7 @@
             style="width: auto"
             :disabled="store.state.authorities.indexOf('查询') == -1"
           ></el-date-picker>
-        </div>
+        </div> -->
 
         <el-button
           type="primary"
@@ -119,7 +119,7 @@
       <el-table-column type="index" label="序号" width="50px"></el-table-column>
       <el-table-column
         prop="tenantName"
-        label="租户名称"
+        label="单位名称"
         min-width="140px"
       ></el-table-column>
       <el-table-column
@@ -132,19 +132,40 @@
         label="负责人手机号"
         min-width="125px"
       ></el-table-column>
-      <el-table-column prop="tenantType" label="客户类型" min-width="80px">
+      <el-table-column prop="tenantType" label="客户类型" min-width="150px">
         <template #default="scope">
           <span>
-            {{ scope.row.tenantType === '0' ? '试用租户' : '正式租户' }}
+            {{ scope.row.tenantType === '0' ? '试用客户' : '正式客户' }}
           </span>
         </template>
       </el-table-column>
       <el-table-column
+        prop="tenantTerm"
+        label="到期时间"
+        min-width="110px"
+      >
+       <template #default="scope">
+          <span>
+            {{ scope.row.tenantTerm === '永久有效' ? '2090-01-01' : scope.row.tenantTerm }}
+          </span>
+        </template>
+      
+      </el-table-column>
+      <!-- <el-table-column
         prop="geoPosition"
         label="地理位置"
         min-width="160px"
+      ></el-table-column> -->
+     
+
+      <el-table-column
+        prop="platformName"
+        label="系统平台"
+        min-width="140px"
       ></el-table-column>
-      <el-table-column prop="status" label="状态" width="">
+      
+
+       <el-table-column prop="status" label="状态" width="">
         <template #default="scope">
           <span
             :style="{
@@ -155,17 +176,7 @@
           </span>
         </template>
       </el-table-column>
-
-      <el-table-column
-        prop="platformName"
-        label="系统平台"
-        min-width="140px"
-      ></el-table-column>
-      <el-table-column
-        prop="tenantTerm"
-        label="到期时间"
-        min-width="110px"
-      ></el-table-column>
+      
       <el-table-column fixed="right" label="操作" width="80">
         <template #default="scope">
           <el-button
@@ -232,7 +243,7 @@ export default defineComponent({
     const pageSize = ref(15)
     const total = ref(0)
 
-    const status = ref('')
+    const status = ref(0)
     const tenantType = ref('')
     const tenantName = ref('')
     const tenantManager = ref('')
@@ -255,6 +266,8 @@ export default defineComponent({
         systemName: '',
         email: '',
         address: '',
+        status:0,
+        domain:''
       }
       dialogTitle.value = '新增'
       showDialog.value = true
@@ -268,13 +281,15 @@ export default defineComponent({
         tenantManager: row.tenantManager,
         tenantTerm: row.tenantTerm=='永久有效'?3:4,
         value1:row.tenantTerm,
+        status: Number(row.status),
         geoPosition: row.geoPosition,
         tenantType: Number(row.tenantType),
         phoneNumber: row.phoneNumber,
         systemName: Number(row.systemName),
         email: row.email,
         address: row.address,
-        remark:row.remark
+        remark:row.remark,
+        domain:row.domain
       }
       dialogTitle.value = '编辑'
       showDialog.value = true

+ 13 - 13
vue.config.js

@@ -50,22 +50,11 @@ module.exports = {
     outputDir,
     lintOnSave,
     transpileDependencies,
-    css: {
-        loaderOptions: {
-            sass: {
-                data: `
-        @import "@/assets/css/index.scss";
-        @import "@/assets/css/global.scss";
-        `
-            }
-        }
-    },
     devServer: {
         hot: true,
         port: devPort,
         open: true,
         noInfo: false,
-        port: 13201,
         overlay: {
             warnings: true,
             errors: true,
@@ -95,7 +84,12 @@ module.exports = {
         // after: mockServer(),
     },
     configureWebpack() {
+
         return {
+
+            externals: {
+                AMap: "AMap"
+            },
             module: {
                 rules: [{
                     test: /\.mjs$/,
@@ -177,9 +171,9 @@ module.exports = {
                             archive: [{
                                 source: `./${outputDir}`,
                                 destination: `./${outputDir}/${abbreviation}_${outputDir}_${date}.7z`,
-                            }, ],
+                            },],
                         },
-                    }, ])
+                    },])
                     .end()
             })
         }
@@ -190,6 +184,12 @@ module.exports = {
         requireModuleExtension: true,
         sourceMap: true,
         loaderOptions: {
+            sass: {
+                data: `
+                    @import "@/assets/css/index.scss";
+                    @import "@/assets/css/global.scss";
+                    `
+            },
             less: {
                 lessOptions: {
                     javascriptEnabled: true,