ming 3 years ago
parent
commit
63465cd6db

+ 32 - 36
public/index.html

@@ -2,56 +2,52 @@
 <html lang="en">
 
 <head>
-  <meta charset="utf-8" />
-  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
-  <meta name="viewport" content="width=device-width,initial-scale=1.0" />
-  <link rel="icon" href="<%= BASE_URL %>favicon.ico" />
-  <title>
-    <%= htmlWebpackPlugin.options.title %>
-  </title>
-  <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" />
-  <link href="<%= BASE_URL %>static/css/loading.css" rel="stylesheet" />
-  <script>
-    var _hmt = _hmt || [];
-    (function () {
-      var hm = document.createElement("script");
-      hm.src = "https://hm.baidu.com/hm.js?7174bade1219f9cc272e7978f9523fc8";
-      var s = document.getElementsByTagName("script")[0];
-      s.parentNode.insertBefore(hm, s);
-    })();
-  </script>
+    <meta charset="utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
+    <link rel="icon" href="<%= BASE_URL %>favicon.ico" />
+    <title>
+        <%= htmlWebpackPlugin.options.title %>
+    </title>
+    <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" />
+    <link href="<%= BASE_URL %>static/css/loading.css" rel="stylesheet" />
+    <script>
+        var _hmt = _hmt || [];
+        (function() {
+            var hm = document.createElement("script");
+            hm.src = "https://hm.baidu.com/hm.js?7174bade1219f9cc272e7978f9523fc8";
+            var s = document.getElementsByTagName("script")[0];
+            s.parentNode.insertBefore(hm, s);
+        })();
+    </script>
 </head>
 
 <body>
-  <noscript>
+    <noscript>
     <strong>
       We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work
         properly without JavaScript enabled. Please enable it to continue.
     </strong>
   </noscript>
-  <div id="app">
-    <div class="first-loading-wrp">
-      <div class="loading-wrp">
-        <span class="dot dot-spin">
+    <div id="app">
+        <div class="first-loading-wrp">
+            <!-- <div class="loading-wrp">
+                <span class="dot dot-spin">
           <i></i>
           <i></i>
           <i></i>
           <i></i>
         </span>
-      </div>
-      <h1>
-        <%= VUE_APP_TITLE %>
-      </h1>
+            </div> -->
+            <h1>
+                <%= VUE_APP_TITLE %>
+            </h1>
+        </div>
     </div>
-  </div>
-  <!-- built files will be auto injected -->
-  <script src="./static/config.js"></script>
+    <!-- built files will be auto injected -->
+    <script src="./static/config.js"></script>
 </body>
 
 </html>

+ 9 - 0
src/api/user.js

@@ -51,6 +51,15 @@ export function getLoginStyle(params) {
     })
 }
 
+// 中间页的背景图 公司名称获取 logo
+export function getMiddleConfig(params) {
+    return request({
+        url: '/sysTenantConfig/getMiddleConfig',
+        method: 'get',
+        params
+    })
+}
+
 // 个人中心,信息查询
 export async function getUserData(params) {
     return request({

+ 8 - 2
src/layout/vab-avatar/index.vue

@@ -6,7 +6,9 @@
     </span>
 
     <span class="goPanelBlock">
-      <a  @click="goPanel">电力大屏</a>
+      <a  @click="goPanel">
+        <img src="/static/svgIcons/home.svg" alt="" width="12">
+        电力大屏</a>
     </span>
 
     <a-dropdown>
@@ -138,11 +140,15 @@ export default {
     text-align: center;
     width: 90px;
     line-height: 36px;
-    background: rgba(255, 255, 255, 0.2);
+    // background: rgba(255, 255, 255, 0.2);
     border-radius: 4px;
     display: inline-block;
     font-size: 14px;
     color: #fff;
+    img{
+      position:relative;
+      top:-1px;
+    }
   }
   .goPanelBlock a:hover {
     opacity: 0.7;

+ 7 - 2
src/layout/vab-tabs/index.vue

@@ -275,11 +275,12 @@ export default {
       border-bottom:0px solid red
     }
     &-tab {
-      height: 32px !important;
+      height: 30px !important;
       margin-right: 5px !important;
-      line-height: 32px !important;
+      line-height: 30px !important;
       background: #ffffff !important;
       border: 1px solid #dedede !important;
+      padding: 0 10px!important;
     }
     &-tab-prev,
     &-tab-next {
@@ -302,6 +303,10 @@ export default {
     line-height: 36px;
   }
 }
+
+.ant-tabs-nav-container{
+  font-size:12px!important;
+}
 // .anticon[tabindex]{
 //   position: relative;
 //     top: -12px;

+ 0 - 21
src/router/index.js

@@ -45,27 +45,6 @@ export const constantRoutes = [{
     //     hidden: true,
     // },
 
-    // {
-    //     path: '/index',
-    //     redirect: '/index/index',
-    //     meta: {
-    //         title: '数据看板',
-    //         icon: 'home',
-
-    //     },
-    //     component: Layout,
-    //     children: [{
-    //         meta: {
-    //             title: '数据看板',
-    //             icon: 'home',
-    //             affix: true,
-    //         },
-    //         path: '/index/index',
-    //         component: () =>
-    //             import ('@/views/index/index'),
-    //     }, ]
-    // },
-
 
     {
         path: '/perCenter',

+ 31 - 0
src/store/modules/routes.js

@@ -80,6 +80,37 @@ const actions = {
                 }
             }]
         })
+
+        data.push({
+            "path": "/systemManage",
+            "hidden": false,
+            "redirect": "/systemManage/userManage",
+            "component": "Layout",
+            "meta": {
+                "title": "租户管理",
+                "icon": "systemManage",
+                "affix": null
+            },
+            "children": [{
+                "path": "userManage",
+                "hidden": false,
+                "component": "@/views/systemManage/userManage/index",
+                "meta": {
+                    "title": "租户单位配置",
+                    "icon": "systemManage",
+                    "affix": null
+                }
+            }, {
+                "path": "rolePermission1",
+                "hidden": false,
+                "component": "@/views/tenantManage/rolePermission1/index",
+                "meta": {
+                    "title": "管理员配置",
+                    "icon": "systemManage",
+                    "affix": null
+                }
+            }]
+        })
         data.forEach(function(item) {
             if (item.children.length > 1) {
                 item.children.forEach(function(i) {

+ 4 - 4
src/utils/request.js

@@ -83,10 +83,10 @@ instance.interceptors.request.use(
             //这里写加载动画
         }
 
-        //中间页请求去掉请求头,否则接口报错403
-        if (config.url == '/sysTenantConfig/getTenantConfig') {
-            config.headers.accessToken = ''
-        }
+        //单独接口去掉token
+        // if (config.url == '/sysTenantConfig/getTenantConfig') {
+        //     config.headers.accessToken = ''
+        // }
 
         return config
     },

+ 2 - 5
src/views/login/index.vue

@@ -118,10 +118,7 @@ export default {
     if (router.currentRoute.value.query.userName === 'admin') {
       this.handleSubmit()
     }
-
     this.getLoginStyle()
-    this.companyName='永天智慧电力平台'
-    this.backdropUrl=require('@/assets/login_images/login_background.png')
   },
   methods: {
 
@@ -133,8 +130,8 @@ export default {
         })
         .then((requset) => {
           if (requset.status === 'SUCCESS') {
-            this.backdropUrl = requset.data[0].loginBackUrl
-            this.companyName = requset.data[0].loginTitle
+            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:'永天智慧电力平台'
           } else {
             alert(requset.msg)
           }

+ 11 - 18
src/views/middle.vue

@@ -86,13 +86,8 @@ export default defineComponent({
 
     onMounted(() => {
 
-      middleBackUrl.value=require('@/assets/images/middle_background.png')
-      middleTitle.value='永天智慧电力平台'
-      middleLogo.value=require('@/assets/logo2.png')
+      getMiddleConfig()
 
-      getLoginStyle()
-      console.log('middleList')
-      console.log(middleList)
 
 
       var color = [
@@ -121,16 +116,14 @@ export default defineComponent({
     })
     
     //根据不同的域名,显示不同的title和背景图
-    function getLoginStyle() {
+    function getMiddleConfig() {
       api
-        .getLoginStyle({
-          url:window.location.host.indexOf('localhost') != -1 ?'fivee.dianli.uskycloud.com':window.location.host
-        })
-        .then((requset) => {
+        .getMiddleConfig({}) .then((requset) => {
           if (requset.status === 'SUCCESS') {
-            middleBackUrl.value = requset.data[0].middleBackUrl
-            middleLogo.value = requset.data[0].middleLogo
-            middleTitle.value = requset.data[0].middleTitle
+            //有返回值用返回值配置,无返回值用默认配置
+            middleBackUrl.value = requset.data[0].middleBackUrl?requset.data[0].middleBackUrl:require('@/assets/images/middle_background.png')
+            middleLogo.value = requset.data[0].middleLogo?requset.data[0].middleLogo:require('@/assets/logo2.png')
+            middleTitle.value = requset.data[0].middleTitle?requset.data[0].middleTitle:'永天智慧电力平台'
           } else {
             alert(requset.msg)
           }
@@ -138,7 +131,7 @@ export default defineComponent({
     }
     return {
       middleList,
-      getLoginStyle,
+      getMiddleConfig,
       middleBackUrl,
       middleLogo,
       middleTitle
@@ -180,11 +173,11 @@ export default defineComponent({
       }
       .list-one-img {
         cursor: pointer;
-        width: 92px;
-        height: 92px;
+        width: 65px;
+        height: 65px;
         // background: #5c88fa;
         background-image: linear-gradient(135deg, #64c3f5, #5590e9);
-        line-height: 92px;
+        line-height: 65px;
         border-radius: 22px;
         margin: 0 auto;
         margin-bottom: 14px;

+ 169 - 0
src/views/tenantManage/rolePermission1/addRoleCom.vue

@@ -0,0 +1,169 @@
+<template>
+  <el-dialog
+    :title="dialogTitle"
+    v-model="dialogVisible"
+    width="400px"
+    @close="closeDialog()"
+    @open="open"
+  >
+    <el-form
+      ref="formInfo"
+      :model="form"
+      class="demo-form-inline"
+      label-width="100px"
+      :rules="rules"
+    >
+      <el-form-item label="角色名称:" prop="roleName">
+        <el-input v-model="form.roleName"></el-input>
+      </el-form-item>
+      <el-form-item label="角色权限:" prop="roleKey">
+        <el-input v-model="form.roleKey"></el-input>
+      </el-form-item>
+      <el-form-item label="角色状态:" prop="status">
+        <el-radio-group v-model="form.status">
+          <el-radio label="0" value="0">正常</el-radio>
+          <el-radio label="1" value="1">停用</el-radio>
+        </el-radio-group>
+      </el-form-item>
+
+      <el-form-item label="角色排序:" prop="roleSort">
+        <el-input-number
+          v-model="form.roleSort"
+          controls-position="right"
+          :min="0"
+          :max="255"
+        ></el-input-number>
+      </el-form-item>
+
+      <div style="text-align: right">
+        <el-button type="primary" @click="submitForm('formInfo')">
+          保存
+        </el-button>
+      </div>
+    </el-form>
+  </el-dialog>
+</template>
+<script>
+import { defineComponent, ref, watchEffect } from 'vue'
+import * as api from '@/api/systemManage/rolePermission.js'
+import { ElMessage } from 'element-plus'
+
+export default defineComponent({
+  name: 'AddRoleCom',
+  emits: ['closeDialog'],
+  props: {
+    flag: Boolean,
+    dialogTitle: String,
+    itemInfo: Object,
+  },
+  setup(props, context) {
+    context
+
+    const dialogVisible = ref(false)
+    const formInfo = ref(null)
+
+    const form = ref([])
+
+    // open(): Dialog弹窗打开之前做的事
+    const open = () => {
+      console.log('')
+      form.value = props.itemInfo.value
+      console.log()
+    }
+
+    // 关闭弹框
+    const closeDialog = () => {
+      context.emit('closeDialog', false)
+      dialogVisible.value = false
+
+      
+    }
+
+    watchEffect((fn) => {
+      fn
+      dialogVisible.value = props.flag
+    })
+
+    const roleValid = (rule, value, callback) => {
+      rule
+      if (value.length === 0) {
+        callback(new Error('角色不能为空'))
+      } else {
+        callback()
+      }
+    }
+
+    // 保存-修改操作
+    const submitForm = () => {
+      console.log(formInfo)
+      formInfo.value.validate((valid) => {
+        if (valid) {
+          // 走保存请求
+          if (props.dialogTitle === '角色新增') {
+            api.roleAdd(form.value).then((requset) => {
+              if (requset.status === 'SUCCESS') {
+                ElMessage.success({
+                  message: '新增成功',
+                  type: 'success',
+                })
+                closeDialog()
+
+
+                //角色新增成功后,提交全选按钮权限给后台
+
+
+
+
+              } else {
+                ElMessage.error(requset.msg)
+              }
+            })
+          } else {
+              // alert('修改')
+            api.roleUpdate(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
+        }
+      })
+    }
+
+    return {
+      closeDialog,
+      dialogVisible,
+      roleValid,
+      formInfo,
+      form,
+      open,
+      submitForm,
+      rules: {
+        roleName: [
+          { required: true, message: '请输入角色名称', trigger: 'blur' },
+        ],
+        roleKey: [
+          { required: true, message: '请输入角色权限', trigger: 'blur' },
+        ],
+        status: [
+          { required: true, message: '请选择角色状态', trigger: 'change' },
+        ],
+      },
+    }
+  },
+})
+</script>
+ 
+<style scoped lang="scss">
+</style>

+ 297 - 0
src/views/tenantManage/rolePermission1/index.vue

@@ -0,0 +1,297 @@
+<template>
+  <div class="app-container page-nesting" style="position: relative">
+    <!-- 左侧start -->
+    <div class="grid-content treeDom roleLeft">
+      <div style="" class="mb-20 addBox">
+        <b>角色类型</b>
+        <el-button type="success" @click="addRole()" :disabled="store.state.authorities.indexOf('新增')==-1">新增</el-button>
+        <el-button type="primary" @click="editRole()" :disabled="store.state.authorities.indexOf('修改')==-1">修改</el-button>
+      </div>
+      <el-radio-group v-model="radio1">
+        <el-radio-button
+          @change="listTabsChange(radio1, item)"
+          v-for="(item, index) in roleData"
+          :label="item.roleId"
+          :key="index"
+        >
+          <img src="@/assets/images/userIcon.svg" />
+          {{ item.roleName }}
+          <i v-if="store.state.authorities.indexOf('删除')!=-1" class="el-icon-delete" @click="deleteRoleItem(item)"></i>
+        </el-radio-button>
+      </el-radio-group>
+    </div>
+    <!-- 左侧end -->
+
+    <!-- 右侧表格start -->
+    <div class="grid-content nestingDom" style="width: calc(100% - 300px)">
+      <role-info-com
+        class="basicInfo"
+        style="height: calc(100vh - 140px)"
+        v-if="menuData.length > 0&&menuData2.length > 0"
+        :menuData="menuData"
+        :menuData2="menuData2"
+        :checkedKeys="checkedKeys"
+        :objItem="objItem"
+        :radio1="radio1"
+      ></role-info-com>
+    </div>
+    <!-- 右侧表格end -->
+
+    <!-- 新建角色start -->
+    <add-role-com
+      :dialog-title="dialogTitle"
+      :itemInfo="tableItem"
+      @closeDialog="closeDialog"
+      :flag="showDialog"
+     
+    ></add-role-com>
+    <!-- 新建角色end -->
+  </div>
+</template>
+
+<script>
+import { defineComponent, ref, reactive, onMounted } from 'vue'
+import * as api from '@/api/systemManage/rolePermission.js'
+import { ElMessage } from 'element-plus'
+
+import roleInfoCom from './roleInfoCom'
+import addRoleCom from './addRoleCom'
+import { useStore } from 'vuex'
+
+export default defineComponent({
+  components: { roleInfoCom, addRoleCom },
+  setup() {
+    const store = useStore()
+    const radio1 = ref('1')
+    const showDialog = ref(false)
+    const roleData = ref([])
+    const menuData = ref([])
+    const menuData2 = ref([])
+    const newMenuData = ref([])
+    const checkedKeys = ref([])
+    const objItem = ref({})
+
+    const dialogTitle = ref('')
+
+    // 删除左侧角色列表
+    function deleteRoleItem(item) {
+      // item
+      // console.log(radio1.value)
+      // console.log(item.roleId)
+      // this.roleData.splice(params, 1)
+
+      api.roleDelete({}, item.roleId).then((requset) => {
+        if (requset.status === 'SUCCESS') {
+          ElMessage.success({
+            message: '删除成功',
+            type: 'success',
+          })
+          roleList()
+        } else {
+          ElMessage.error(requset.msg)
+        }
+      })
+    }
+
+    // 新增角色
+    const tableItem = reactive([])
+
+    function addRole() {
+      // alert('新增')
+      tableItem.value = {
+        roleName: '',
+        roleKey: '',
+        status: '',
+        roleSort: 1,
+      }
+      dialogTitle.value = '角色新增'
+      showDialog.value = true
+    }
+
+    // 修改角色
+    function editRole() {
+      // alert('修改')
+      // console.log(radio1.value)
+      api.roleDetail({}, radio1.value).then((requset) => {
+        if (requset.status === 'SUCCESS') {
+          tableItem.value = {
+            roleName: requset.data.roleName,
+            roleKey: requset.data.roleKey,
+            status: requset.data.status,
+            roleSort: Number(requset.data.roleSort),
+            roleId: requset.data.roleId,
+          }
+
+          dialogTitle.value = '角色修改'
+          showDialog.value = true
+        } else {
+          ElMessage.error(requset.msg)
+        }
+      })
+    }
+
+    const listTabsChange = (value, item) => {
+      // console.log('value')
+      console.log(radio1.value)
+      radio1.value = value
+      objItem.value = item
+      // console.log('objItem.value')
+      // console.log(objItem.value)
+      roleMenuTreeselect()
+      getAuthorityTable()
+
+    }
+    
+
+    // 表格树结构渲染
+    function roleMenuTreeselect() {
+      menuData.value = []
+      api.roleMenuTreeselect({}, radio1.value).then((requset) => {
+        if (requset.code == 200) {
+          menuData.value = requset.data.menus
+          // getTreeData2(menuData.value) //对树结构返回值进行重组
+          checkedKeys.value = requset.data.checkedKeys
+
+          //当返回值没有选中菜单时,否
+          if (!checkedKeys.value.length) {
+            menuData.value.map((item) => {
+              item.authority2 = '0'
+            })
+
+            if (radio1.value == 1) {
+              menuData.value.map(function (item) {
+                checkedKeys.value.push(item.id)
+                checkedKeys.value.map(function (num) {
+                  if (JSON.stringify(item).indexOf(num) != -1) {
+                    item.authority2 = '1'
+                  }
+                })
+              })
+            }
+          } else {
+            menuData.value.map(function (item) {
+              item.authority2 = '0'
+              checkedKeys.value.map(function (num) {
+                if (JSON.stringify(item).indexOf(num) != -1) {
+                  item.authority2 = '1'
+                }
+              })
+            })
+          }
+        } else {
+          ElMessage.error(requset.msg)
+        }
+      })
+    }
+
+    //小吉新接口渲染右侧表格树数据
+    function getAuthorityTable() {
+      menuData2.value = []
+      api.getAuthorityTable({roleId:radio1.value}).then((requset) => {
+        if (requset.code == 200) {
+          menuData2.value = requset.data
+        } else {
+          ElMessage.error(requset.msg)
+        }
+      })
+    }
+
+
+    function getTreeData2(data) {
+      for (var i = 0; i < data.length; i++) {
+        if (data[i].label == data[i].children[0].label) {
+          // console.log(data[i].label)
+          data[i].children = data[i].children[0].children
+        }
+      }
+      return data
+    }
+
+    // 关闭弹框操作
+    const closeDialog = () => {
+      showDialog.value = false
+      roleList()
+      console.log('1111aaa'+radio1.value)
+    }
+    //角色列表
+    function roleList() {
+
+      api.roleList().then((requset) => {
+        if (requset.code === 200) {
+          roleData.value = requset.rows
+          // var item = requset.rows[0]
+          // objItem.value = {
+          //   roleSort: item.roleSort,
+          //   roleKey: item.roleKey,
+          //   roleName: item.roleName,
+          // }
+        } else {
+          ElMessage.error(requset.msg)
+        }
+      })
+    }
+
+ 
+    onMounted(() => {
+
+      roleList()
+      roleMenuTreeselect()
+      getAuthorityTable()
+    })
+
+    return {
+      radio1,
+      showDialog,
+      roleData,
+      dialogTitle,
+      tableItem,
+      menuData,
+      menuData2,
+      newMenuData,
+      checkedKeys,
+      listTabsChange,
+      roleMenuTreeselect,
+      getAuthorityTable,
+      deleteRoleItem,
+      addRole,
+      editRole,
+      closeDialog,
+      objItem,
+      getTreeData2,
+      store,
+      
+    }
+  },
+})
+</script>
+
+<style scoped lang="scss">
+.el-button + .el-button {
+  margin-left: 0;
+}
+.app-container.page-nesting {
+  padding: 0;
+  background: rgba(0, 0, 0, 0);
+}
+.grid-content {
+  background: #fff;
+  height: calc(100vh - 140px);
+  overflow-y: auto;
+}
+.el-input__inner {
+  border-radius: 20px !important;
+}
+.treeDom {
+  width: 270px;
+  position: absolute;
+  left: 0;
+  // margin-left: 20px;
+  padding: 15px;
+  // min-height: calc(100vh - 130px);
+  height: calc(100vh - 140px);
+
+}
+.nestingDom {
+  margin-left: 285px;
+}
+</style>

+ 122 - 0
src/views/tenantManage/rolePermission1/roleInfoCom/index-old.vue

@@ -0,0 +1,122 @@
+<template>
+  <div class="siteManage-main roleInfoPage">
+    <div style="text-align: right; margin-bottom: 20px">
+      <!-- <el-button type="success" >新增</el-button> -->
+      <el-button type="primary" @click="saveMenu()">保存</el-button>
+    </div>
+
+    <el-table :data="menuData" border stripe>
+      <el-table-column prop="label" label="菜单" width="180"></el-table-column>
+      <el-table-column prop="authority2" label="权限" class="roleLeft">
+        <template #default="scope">
+          <el-radio-group
+            v-model="scope.row.authority2"
+            @change="listTabsChange(scope.row)"
+          >
+            <el-radio label="1" :disabled="radio1 == 1 ? true : false">
+              是
+            </el-radio>
+            <el-radio label="0" :disabled="radio1 == 1 ? true : false">
+              否
+            </el-radio>
+          </el-radio-group>
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+import { defineComponent, ref, onMounted, watch } from 'vue'
+import * as api from '@/api/systemManage/rolePermission.js'
+import { ElMessage } from 'element-plus'
+
+export default defineComponent({
+  name: 'RoleInfoCom',
+  props: ['menuData', 'objItem', 'radio1'],
+
+  // props: {
+  //   menuData: Object,
+  //   objItem: Object,
+  //   radio1: String,
+  // },
+
+  setup(props) {
+    const aa = ref([])
+    const saveArr = ref([])
+
+    function saveMenu() {
+   
+
+
+
+      api
+        .saveMenu({
+          menuIds: saveArr.value,
+          roleId: props.radio1,
+          roleKey: props.objItem.roleKey,
+          roleName: props.objItem.roleName,
+          roleSort: props.objItem.roleSort,
+        })
+        .then((requset) => {
+          if (requset.status === 'SUCCESS') {
+            ElMessage.success({
+              message: '权限修改成功',
+              type: 'success',
+            })
+          } else {
+            ElMessage.error(requset.msg)
+          }
+        })
+    }
+
+    const listTabsChange = (value) => {
+      saveArr.value = []
+      value
+
+
+      props.menuData.forEach(function (item) {
+        if (item.authority2 == '1') {
+          saveArr.value.push(item.id)
+          var aa = item.children
+          aa.forEach(function (item) {
+              saveArr.value.push(item.id)
+            
+          })
+        }
+      })
+   
+    }
+
+    onMounted(() => {})
+    //监听变化
+    watch(
+      () => props.radio1,
+      (newVal) => {
+        newVal
+
+     
+        // if (newVal == '1') {
+        //   alert(1)
+        //   props.menuData.forEach(function (item) {
+        //     item.authority2 = '1'
+        //     saveArr.value.push(item.id)
+        //   })
+        //   console.log(' 22props.menuData')
+        //   console.log(props.menuData)
+        // }
+      }
+    )
+
+    return {
+      saveMenu,
+      aa,
+      listTabsChange,
+      saveArr,
+    }
+  },
+})
+</script>
+
+<style  lang="scss">
+</style>

+ 129 - 0
src/views/tenantManage/rolePermission1/roleInfoCom/index-old2.vue

@@ -0,0 +1,129 @@
+<template>
+  <div class="siteManage-main roleInfoPage">
+    <div style="text-align: right; margin-bottom: 20px">
+      <!-- <el-button type="success" >新增</el-button> -->
+      <el-button
+        type="primary"
+        @click="saveMenu()"
+        :disabled="radio1 == 1 ? true : false"
+      >
+        保存
+      </el-button>
+    </div>
+
+  
+
+    <!-- 带复选框的树结构 start -->
+
+    <el-tree
+      ref="box"
+      :data="menuData"
+      show-checkbox
+      node-key="id"
+      :default-checked-keys="checkedKeys"
+      :props="defaultProps"
+      check-strictly="false"
+      @check="currentChecked"
+    />
+
+    <!-- 带复选框的树结构 end -->
+  </div>
+</template>
+
+<script>
+import { defineComponent, ref, onMounted, watch } from 'vue'
+import * as api from '@/api/systemManage/rolePermission.js'
+import { ElMessage } from 'element-plus'
+
+export default defineComponent({
+  name: 'RoleInfoCom',
+  props: ['menuData', 'objItem', 'radio1', 'checkedKeys'],
+
+  setup(props) {
+    let box = ref(null)
+    const aa = ref([])
+    const saveArr = ref([])
+    function currentChecked(nodeObj, SelectedObj) {
+      saveArr.value = SelectedObj.checkedKeys
+      console.log('saveArr.value')
+      console.log(saveArr.value)
+      // console.log(SelectedObj.checkedNodes)  // 这是选中的节点数组
+    }
+
+    function saveMenu() {
+      api
+        .saveMenu({
+          menuIds: saveArr.value,
+          roleId: props.radio1,
+          roleKey: props.objItem.roleKey,
+          roleName: props.objItem.roleName,
+          roleSort: props.objItem.roleSort,
+        })
+        .then((requset) => {
+          if (requset.status === 'SUCCESS') {
+            ElMessage.success({
+              message: '权限修改成功',
+              type: 'success',
+            })
+          } else {
+            ElMessage.error(requset.msg)
+          }
+        })
+    }
+
+  
+
+    // start
+
+    function getTreeData(data) {
+      // 第二种 修改涉及级联选择器 最后一个空白的情况
+      // 循环遍历json数据
+      for (var i = 0; i < data.length; i++) {
+        data[i]['disabled'] = true
+        if (!data[i].children) {
+          // children若为空数组,则不作操作
+        } else {
+          // children若不为空数组,则继续 递归调用 本方法
+          getTreeData(data[i].children)
+        }
+      }
+      return data
+    }
+
+ 
+
+    // end
+
+    onMounted(() => {
+      saveArr.value = props.checkedKeys
+      if (props.radio1 == 1) {
+        getTreeData(props.menuData)
+        console.log('box.value', box.value)
+        // box.value.setCheckedNodes(props.menuData)   //全选
+      }
+    })
+    //监听变化
+    watch(
+      () => props.radio1,
+      (newVal) => {
+        newVal
+
+        
+      }
+    )
+
+    return {
+      saveMenu,
+      aa,
+      saveArr,
+
+      currentChecked,
+      getTreeData,
+      box,
+    }
+  },
+})
+</script>
+
+<style  lang="scss">
+</style>

+ 177 - 0
src/views/tenantManage/rolePermission1/roleInfoCom/index.vue

@@ -0,0 +1,177 @@
+<template>
+  <div class="siteManage-main roleInfoPage">
+    <el-table
+      :data="menuData2"
+      border
+      stripe
+      :cell-style="cellStyle"
+      row-key="id"
+      default-expand-all
+    >
+      <el-table-column prop="menu" label="菜单" width="180"></el-table-column>
+      <el-table-column
+        prop="authority"
+        label="权限  (不勾选查询按钮,此菜单无法查看)"
+        align="left"
+        class="roleLeft"
+      >
+        <template #default="scope">
+          <el-checkbox
+            v-for="item in scope.row.authority"
+            :label="item.name"
+            :key="item.actionid"
+            v-model="item.checked"
+            :disabled="
+              radio1 == 1 || scope.row.menu == '权限管理' ? true : false
+            "
+            @change="handleCheckedChange"
+          ></el-checkbox>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <div style="text-align: right; margin-top: 20px">
+      <el-button
+        type="primary"
+        @click="saveMenu()"
+        :disabled="radio1 == 1 ? true : false"
+      >
+        保存
+      </el-button>
+    </div>
+  </div>
+</template>
+
+
+<script>
+import { defineComponent, ref, onMounted, watch } from 'vue'
+import * as api from '@/api/systemManage/rolePermission.js'
+import { ElMessage } from 'element-plus'
+export default defineComponent({
+  name: 'RoleInfoCom',
+  props: ['menuData', 'menuData2', 'objItem', 'radio1', 'checkedKeys'],
+
+  setup(props) {
+    const saveArr = ref([])
+    const checkedArr = ref([])
+
+    function cellStyle({ row, column, rowIndex, columnIndex }) {
+      row, column, rowIndex
+      if (columnIndex) {
+        return `text-align:left!important;cursor:pointer;`
+      }
+    }
+
+    function saveMenu() {
+      console.log('checkedArr')
+      console.log(checkedArr.value)
+
+      if (checkedArr.value.length == 0) {
+        ElMessage.warning('菜单权限不能为空! 请至少选择一个菜单查询权限')
+        return
+      }
+      api
+        .saveMenu({
+          menuIds: checkedArr.value,
+          roleId: props.radio1,
+          roleKey: props.objItem.roleKey,
+          roleName: props.objItem.roleName,
+          roleSort: props.objItem.roleSort,
+        })
+        .then((requset) => {
+          if (requset.status === 'SUCCESS') {
+            ElMessage.success({
+              message: '权限修改成功',
+              type: 'success',
+            })
+          } else {
+            ElMessage.error(requset.msg)
+          }
+        })
+    }
+
+    function getTreeData(data) {
+      // 循环遍历json数据
+      for (var i = 0; i < data.length; i++) {
+        data[i]['disabled'] = true
+        if (!data[i].children) {
+          // children若为空数组,则不作操作
+        } else {
+          // children若不为空数组,则继续 递归调用 本方法
+          getTreeData(data[i].children)
+        }
+      }
+      return data
+    }
+    function handleCheckedChange() {
+      checkedArr.value = []
+      getCheckedArr()
+    }
+
+    // 复选框选中的数组集合start
+    function getCheckedArr() {
+      props.menuData2.forEach(function (item) {
+        if (item.children) {
+          item.children.forEach(function (a) {
+            if (a.authority[0].checked) {
+              a.authority.forEach(function (i) {
+                 if (i.checked) {
+                  checkedArr.value.push(i.id)
+                }
+              })
+            }
+          })
+        } else {
+          // 如果查询的id被选中,那么塞入数组
+          if (item.authority[0].checked) {
+            item.authority.forEach(function (i) {
+              if (i.checked) {
+                checkedArr.value.push(i.id)
+              }
+            })
+          }
+        }
+      })
+      console.log('checkedArr.value')
+      console.log(checkedArr.value)
+    }
+
+    onMounted(() => {
+      getCheckedArr()
+    })
+
+    //监听变化
+    watch(
+      () => props.radio1,
+      (newVal) => {
+        newVal
+        // checkedArr.value=[]
+      }
+    )
+
+    return {
+      cellStyle,
+      saveMenu,
+      saveArr,
+      getCheckedArr,
+      getTreeData,
+      checkedArr,
+      handleCheckedChange,
+    }
+  },
+})
+</script>
+
+
+<style  lang="scss" >
+.roleInfoPage .el-table .cell {
+  text-align: left !important;
+}
+
+.el-table [class*='el-table__row--level'] .el-table__expand-icon {
+  display: none !important;
+}
+.el-table__indent {
+  padding-left: 10px !important;
+}
+</style>

+ 331 - 0
src/views/tenantManage/userManage/dialogComponent.vue

@@ -0,0 +1,331 @@
+<template>
+  <el-dialog
+    :title="dialogTitle"
+    v-model="dialogVisible"
+    width="640px"
+    @close="closeDialog()"
+    @open="open"
+  >
+    <el-form
+      ref="formInfo"
+      :model="form"
+      class="demo-form-inline userManageDialog"
+      label-width="100px"
+      :rules="rules"
+    >
+      <el-form-item label="用户名:" prop="nickName">
+        <el-input
+          v-model="form.nickName"
+          :disabled="dialogTitle === '查看'"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="账号:" prop="userName">
+        <el-input
+          v-model="form.userName"
+          :disabled="dialogTitle === '查看'"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="性别:" prop="sex">
+        <el-radio-group v-model="form.sex" :disabled="dialogTitle === '查看'">
+          <el-radio label="1" value="1">男</el-radio>
+          <el-radio label="2" value="2">女</el-radio>
+        </el-radio-group>
+      </el-form-item>
+
+      <el-form-item label="手机号码:" prop="phonenumber">
+        <el-input
+          v-model="form.phonenumber"
+          :disabled="dialogTitle === '查看'"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="密码" prop="password" v-if="dialogTitle == '新增'">
+        <el-input
+          v-model="form.password"
+          :disabled="dialogTitle === '查看'"
+        ></el-input>
+      </el-form-item>
+
+      <!-- <el-form-item
+        label="创建时间:"
+        prop="createTime"
+        style="margin-top: 0px"
+      >
+        <el-date-picker
+          v-model="form.createTime"
+          width="100%"
+          type="datetime"
+          placeholder="选择日期时间"
+          :disabled="dialogTitle === '查看'"
+        ></el-date-picker>
+      </el-form-item> -->
+
+      <el-form-item label="角色名称:" prop="roleId">
+        <!-- <el-input v-model="form.roleName"></el-input> -->
+        <el-select
+          v-model="form.roleId"
+          placeholder="请选择"
+          clearable
+          :disabled="dialogTitle === '查看'"
+        >
+          <el-option
+            v-for="(item, index) in roleSelectData"
+            :key="index"
+            :label="item.roleName"
+            :value="item.roleId"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+
+      <el-form-item label="所属站点:" prop="siteId">
+         <el-select
+              v-model="form.siteId"
+              placeholder="请选择"
+              clearable
+               multiple
+              filterable
+              collapse-tags
+               @change="linkChange()"
+              
+            >
+              <el-option
+                v-for="site in store.state.siteList"
+                :key="site"
+                :label="site.siteName"
+                :value="site.id"
+                
+              ></el-option>
+            </el-select>
+      </el-form-item>
+
+
+      <br />
+      <br />
+      <br />
+      <div style="text-align: right">
+        <el-button @click="closeDialog(0)">取消</el-button>
+        <el-button
+          type="primary"
+          @click="submitForm('formInfo')"
+          :disabled="isDisable"
+          v-if="dialogTitle !== '查看'"
+        >
+          确定
+        </el-button>
+      </div>
+    </el-form>
+  </el-dialog>
+</template>
+
+<script>
+import { defineComponent, ref, onMounted, watchEffect,watch } from 'vue'
+import * as api from '@/api/systemManage/userManage.js'
+import { ElMessage } from 'element-plus'
+import { parseTime, validatorPhone } from '@/utils'
+import { useStore } from 'vuex'
+
+export default defineComponent({
+  name: 'DialogComponent',
+  emits: ['closeDialog'],
+  props: {
+    flag: Boolean,
+    dialogTitle: String,
+    itemInfo: Object,
+  },
+  setup(props, context) {
+    context
+    const store = useStore()
+    const dialogVisible = ref(false)
+    const formInfo = ref(null)
+    const isDisable = ref(false)
+
+    const form = ref([])
+    const roleSelectData = ref([])
+
+    // open(): Dialog弹窗打开之前做的事
+    const open = () => {
+    
+      form.value = props.itemInfo.value
+       console.log('form.value')
+       console.log(form.value)
+      console.log(form.value.siteId)
+    }
+
+  
+
+    // 关闭弹框
+    const closeDialog = () => {
+      resetForm()
+      context.emit('closeDialog', false)
+      dialogVisible.value = false
+    }
+
+    watchEffect((fn, options) => {
+      fn, options
+      dialogVisible.value = props.flag
+    })
+
+    const roleValid = (rule, value, callback) => {
+      rule
+      if (value.length === 0) {
+        callback(new Error('角色不能为空'))
+      } else {
+        callback()
+      }
+    }
+
+    // 保存-修改操作
+    const submitForm = () => {
+      form.value.createTime = parseTime(new Date())
+
+      formInfo.value.validate((valid) => {
+        if (valid) {
+          isDisable.value = true
+           setTimeout(() => {
+                  isDisable.value = false //点击一次时隔两秒后才能再次点击
+                }, 2000)
+          form.value.roleIds = [form.value.roleId] //roleIds 传给后台
+          if (props.dialogTitle === '新增') {
+            api.userAdd(form.value).then((requset) => {
+              if (requset.status === 'SUCCESS') {
+                ElMessage.success({
+                  message: '新增成功',
+                  type: 'success',
+                })
+                setTimeout(() => {
+                  isDisable.value = false //点击一次时隔两秒后才能再次点击
+                }, 2000)
+
+                closeDialog()
+              } else {
+                alert(requset.msg)
+                // ElMessage.error(requset.msg)
+              }
+            })
+          } else {
+            api.userUpdate(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
+        }
+      })
+    }
+
+    //角色下拉请求
+    function optionselect() {
+      api.optionselect().then((requset) => {
+        if (requset.status === 'SUCCESS') {
+     
+          roleSelectData.value = requset.data
+        } else {
+          ElMessage.error(requset.msg)
+        }
+      })
+    }
+
+    function resetForm() {
+      formInfo.value.resetFields()
+      
+      
+     
+    }
+    function linkChange(){
+
+
+    }
+
+     //监听变化
+    watch(
+      () => props.siteIdArr,
+      (newVal) => {
+        alert(1)
+        newVal
+       
+      }
+    )
+
+    onMounted(() => {
+      optionselect()
+    })
+
+    return {
+      store,
+      linkChange,
+      closeDialog,
+      dialogVisible,
+      roleValid,
+      formInfo,
+      form,
+      roleSelectData,
+      open,
+      submitForm,
+      resetForm,
+      isDisable,
+      rules: {
+       
+        nickName: [
+          { required: true, message: '请输入用户名', trigger: 'blur' },
+          {
+            min: 2,
+
+            message: '用户名长度至少2个字符',
+            trigger: 'blur',
+          },
+        ],
+        userName: [
+          { required: true, message: '请输入账号', trigger: 'blur' },
+          {
+            max: 10,
+            message: '账号最多输入 10 个字符',
+            trigger: 'blur',
+          },
+        ],
+        sex: [{ required: true, message: '请选择性别', trigger: 'change' }],
+        phonenumber: [
+          { required: true, message: '请输入手机号码', trigger: 'blur' },
+          {
+            validator: validatorPhone,
+            message: '输入的电话号码不正确',
+            trigger: 'blur',
+          },
+        ],
+        createTime: [
+          { required: true, message: '请输入创建时间', trigger: 'blur' },
+        ],
+        roleId: [
+          { required: true, message: '请选择角色名称', trigger: 'blur' },
+        ],
+         siteId:  [{ required: true, message: '请选择站点', trigger: 'blur' }],
+        password: [
+          { required: true, message: '请输入密码', trigger: 'blur' },
+          {
+            min: 3,
+            max: 6,
+            message: '长度在 3 到 6 个字符',
+            trigger: 'blur',
+          },
+        ],
+      },
+    }
+  },
+})
+</script>
+ 
+<style scoped lang="scss">
+.el-input,
+.el-select {
+  width: 240px;
+}
+</style>
+<style lang="scss">
+</style>

+ 320 - 0
src/views/tenantManage/userManage/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <!-- 筛选start -->
+    <div class="filter-container mb-10">
+      <div class="left">
+        <div>
+          <span class="" style="margin-right: 30px">用户管理列表</span>
+          <el-button :disabled="store.state.authorities.indexOf('新增')==-1" icon="el-icon-plus" type="success" @click="addItem()">
+            新增
+          </el-button>
+        </div>
+        <div style="margin-top: 20px">
+          <div class="filter-item">
+            账号:
+            <el-input
+              v-model="userName"
+              placeholder="请输入内容"
+              style="width: 180px"
+               :disabled="store.state.authorities.indexOf('查询')==-1"
+            ></el-input>
+          </div>
+
+          <div class="filter-item">
+            账号状态:
+            <el-select
+              v-model="status"
+              placeholder="请选择"
+              style="width: 150px"
+              clearable
+               :disabled="store.state.authorities.indexOf('查询')==-1"
+            >
+              <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"
+               :disabled="store.state.authorities.indexOf('查询')==-1"
+            ></el-date-picker>
+          </div>
+          <el-button
+          :disabled="store.state.authorities.indexOf('查询')==-1"
+            type="primary"
+            icon="el-icon-search"
+            class="search-button"
+            @click="list()"
+          >
+            查询
+          </el-button>
+        </div>
+      </div>
+
+      <!-- <div class="right">
+        <el-button type="primary">导出</el-button>
+      </div> -->
+    </div>
+    <!-- 筛选end -->
+
+    <!-- 表格start -->
+    <el-table :data="tableData" border stripe :header-cell-style="headClass">
+      <!-- <el-table-column prop="xh" label="序号" width="70">
+      </el-table-column> -->
+      <el-table-column prop="nickName" label="用户名"></el-table-column>
+      <el-table-column prop="userName" label="账号"></el-table-column>
+      <el-table-column prop="sex" label="性别" width="100">
+        <template #default="scope">
+          <span>{{ scope.row.sex == 1 ? '男' : '女' }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="phonenumber" label="手机号码" min-width="120"></el-table-column>
+      <el-table-column prop="createTime" label="创建时间" min-width="160"></el-table-column>
+      <!-- <el-table-column
+        prop="roles.roleName"
+        label="角色名称"
+       
+      ></el-table-column> -->
+      <el-table-column fixed="right" label="操作" width="180">
+        <template #default="scope">
+          <el-button
+            @click="checkItem(scope.row)"
+            type="text"
+            size="small"
+            class="delete-text"
+          >
+            查看
+          </el-button>
+          <el-button
+          :disabled="store.state.authorities.indexOf('修改')==-1"
+            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="currentPage"
+        :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
+      :dialogTitle="dialogTitle"
+      :itemInfo="tableItem"
+      @closeDialog="closeDialog"
+      :flag="showDialog"
+      v-if="tableItem"
+    ></dialog-component>
+    <!--弹框组件开始-----------------------end-->
+  </div>
+</template>
+
+<script>
+import { useStore } from 'vuex'
+import { defineComponent, ref, reactive, onMounted } from 'vue'
+import * as api from '@/api/systemManage/userManage.js'
+import { ElMessage } from 'element-plus'
+
+import DialogComponent from './dialogComponent'
+
+export default defineComponent({
+  components: { DialogComponent },
+  setup() {
+    const store = useStore()
+    const total = ref(0)
+    const pageSize = ref(10)
+    const currentPage = ref(1)
+
+    const dateTime = ref('')
+
+    const userName = ref('')
+    const phone = ref('')
+    const status = ref('')
+    const role = ref('')
+    const currentPage4 = ref(4)
+    const dialogTitle = ref('')
+    const showDialog = ref(false)
+    const tableData = ref([])
+    const siteIdArr=ref([])
+
+    // // 表头样式设置
+    const headClass = () => {
+      return 'background:#FAFAFA;'
+    }
+
+    const handleSizeChange = (val) => {
+      pageSize.value = val
+      list()
+    }
+    const handleCurrentChange = (val) => {
+      currentPage.value = val
+      list()
+    }
+
+    //用户列表
+    function list() {
+      store.commit('TimeAll_function', dateTime.value)
+      const time = store.state.Time_Data
+      api
+        .list({
+          pageSize: pageSize.value,
+          pageNum: currentPage.value,
+          status: status.value,
+          userName: userName.value,
+          beginTime: time[0],
+          endTime: time[1],
+          // platformAreaName: platformAreaName.value,
+        })
+        .then((requset) => {
+          if (requset.status === 'SUCCESS') {
+            tableData.value = requset.data.rows
+            total.value = requset.data.total
+          } else {
+            ElMessage.error(requset.msg)
+          }
+        })
+    }
+
+    const tableItem = reactive([])
+    // 添加操作
+    const addItem = () => {
+      tableItem.value = {
+        nickName: '',
+        userName: '',
+        sex: '1',
+        phonenumber: '',
+        createTime: '',
+        roleName: '',
+        password: '',
+      }
+      dialogTitle.value = '新增'
+      showDialog.value = true
+    }
+
+    // 查看
+    const checkItem = (row) => {
+      siteIdArr.value=[]
+      console.log(row)
+      api.authRole({}, row.userId).then((requset) => {
+        if (requset.status === 'SUCCESS') {
+          tableItem.value.roleId= requset.data.user.roles[0].roleId
+          var newArray= requset.data.userSite
+           newArray.forEach(function(item){
+             siteIdArr.value.push(item.siteId)
+
+           })
+           tableItem.value.siteId= siteIdArr.value
+        } else {
+          ElMessage.error(requset.msg)
+        }
+      })
+      tableItem.value = row
+      dialogTitle.value = '查看'
+      showDialog.value = true
+    }
+
+    // 编辑操作
+    const editRow = (row) => {
+      siteIdArr.value=[]
+      console.log(row)
+      api.authRole({}, row.userId).then((requset) => {
+        if (requset.status === 'SUCCESS') {
+          tableItem.value.roleId= requset.data.user.roles[0].roleId
+
+           var newArray= requset.data.userSite
+           newArray.forEach(function(item){
+             siteIdArr.value.push(item.siteId)
+
+           })
+           tableItem.value.siteId= siteIdArr.value
+            
+        } else {
+          ElMessage.error(requset.msg)
+        }
+      })
+
+
+      // tableItem.value = row
+      tableItem.value={
+        nickName:row.nickName,
+        userName:row.userName,
+        sex:row.sex,
+        phonenumber:row.phonenumber,
+        password:row.password,
+        createTime:row.createTime,
+        roleId:row.roleId,
+        userId:row.userId
+      }
+
+      dialogTitle.value = '编辑'
+      showDialog.value = true
+    }
+
+    // 关闭操作
+    const closeDialog = () => {
+      showDialog.value = false
+      
+      list()
+    }
+
+    onMounted(() => {
+      list()
+    })
+
+    return {
+      userName,
+      phone,
+      status,
+      role,
+      tableItem,
+      currentPage4,
+      dialogTitle,
+      showDialog,
+      tableData,
+      total,
+      pageSize,
+      currentPage,
+
+      dateTime,
+      store,
+      siteIdArr,
+      list,
+      handleSizeChange,
+      handleCurrentChange,
+      headClass,
+      checkItem,
+      addItem,
+      editRow,
+      closeDialog,
+    }
+  },
+})
+</script>
+
+
+<style lang="scss" scoped>
+</style>