ming 3 年 前
コミット
c30c080c30

+ 1 - 0
package.json

@@ -18,6 +18,7 @@
     "clipboard": "^2.0.6",
     "core-js": "^3.8.3",
     "dayjs": "^1.10.4",
+    "default-passive-events": "^2.0.0",
     "echarts": "^5.2.1",
     "element-plus": "^1.1.0-beta.20",
     "js-cookie": "^3.0.0-rc.1",

+ 50 - 0
src/assets/css/index.scss

@@ -1004,4 +1004,54 @@ ul li {
             height: 365px;
         }
     }
+}
+
+// 角色权限
+.roleLeft {
+    .addBox {
+        text-align: center;
+        display: flex;
+        justify-content: space-around;
+        line-height: 36px
+    }
+    .el-radio-button {
+        width: 100%
+    }
+    .el-radio-button__inner {
+        width: 100%;
+        // line-height: 40px;
+        padding: 13px 15px
+    }
+    .el-radio-button__inner {
+        border-left: 1px solid #dcdfe6;
+        text-align: left;
+        position: relative; // border-bottom: none;
+        img {
+            margin-right: 5px
+        }
+        i {
+            position: absolute;
+            right: 10px;
+            font-size: 15px;
+            color: #F80000;
+            opacity: 0
+        }
+    }
+    .el-radio-button__inner:hover {
+        color: #444;
+        background: #f1f7fc;
+        // border-color: #f1f7fc;
+        i {
+            opacity: 1;
+        }
+    }
+    .el-radio-button:last-child .el-radio-button__inner {
+        // border-bottom: 1px solid #dcdfe6;
+    }
+    .el-radio-button__original-radio:checked+.el-radio-button__inner {
+        background: #BDE5FF;
+        border-color: #BDE5FF;
+        color: #444;
+        box-shadow: none
+    }
 }

+ 7 - 0
src/assets/images/userIcon.svg

@@ -0,0 +1,7 @@
+<svg 
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ width="16px" height="14px">
+<path fill-rule="evenodd"  opacity="0.851" fill="rgb(0, 0, 0)"
+ d="M15.432,12.189 C15.119,12.189 14.865,11.926 14.865,11.602 C14.865,11.575 14.863,11.547 14.860,11.521 C14.646,9.314 13.046,8.013 10.529,7.808 C10.217,7.783 9.984,7.500 10.008,7.176 C10.032,6.867 10.285,6.640 10.580,6.642 C11.948,6.229 12.748,4.757 12.368,3.331 C12.168,2.583 11.667,1.960 10.993,1.620 C10.705,1.490 10.574,1.144 10.700,0.847 C10.825,0.549 11.160,0.414 11.447,0.544 C11.462,0.550 11.476,0.557 11.490,0.565 C13.351,1.501 14.127,3.820 13.223,5.746 C12.999,6.222 12.682,6.634 12.305,6.973 C14.388,7.622 15.770,9.140 15.990,11.403 C15.997,11.469 16.000,11.535 16.000,11.602 C16.000,11.926 15.746,12.189 15.432,12.189 ZM12.364,11.865 C12.370,11.929 12.373,11.994 12.373,12.059 C12.373,13.130 11.533,13.999 10.499,13.999 L1.809,13.999 C0.809,13.999 -0.001,13.160 -0.000,12.126 C-0.000,12.074 0.002,12.022 0.006,11.969 C0.194,9.657 1.583,8.092 3.680,7.422 C2.630,6.695 1.938,5.458 1.938,4.053 C1.938,1.815 3.692,0.000 5.855,0.000 C8.018,0.000 9.771,1.815 9.771,4.053 C9.771,5.381 9.145,6.549 8.191,7.288 C10.538,7.846 12.126,9.417 12.364,11.865 ZM1.024,12.059 C0.988,12.507 1.310,12.901 1.743,12.939 C1.765,12.941 1.787,12.942 1.809,12.942 L10.499,12.942 C10.970,12.941 11.352,12.545 11.351,12.057 C11.351,12.028 11.350,11.999 11.347,11.970 C11.106,9.487 9.147,8.106 6.190,8.106 C3.207,8.106 1.229,9.532 1.024,12.059 ZM8.750,4.053 C8.750,2.399 7.454,1.058 5.855,1.057 C5.855,1.057 5.855,1.057 5.855,1.057 C4.256,1.058 2.960,2.399 2.960,4.053 C2.960,5.707 4.256,7.048 5.855,7.048 C7.453,7.049 8.750,5.708 8.750,4.053 Z"/>
+</svg>

+ 11 - 9
src/main.js

@@ -6,10 +6,12 @@ import store from './store'
 import 'ant-design-vue/dist/antd.css'
 import '@/vab'
 
+import 'default-passive-events'
+
 // 引入 ElementUI
 import ElementPlus from 'element-plus'
 import 'element-plus/dist/index.css'
-import zhCn from 'element-plus/lib/locale/lang/zh-cn'// 中文
+import zhCn from 'element-plus/lib/locale/lang/zh-cn' // 中文
 import '@/assets/css/index.scss'
 import '@/assets/css/global.scss'
 import * as echarts from 'echarts';
@@ -22,8 +24,8 @@ import SvgIcon from "@/components/SvgIcon"
  * @description 正式环境默认使用mock,正式项目记得注释后再打包
  */
 if (process.env.NODE_ENV === 'production') {
-  const { mockXHR } = require('@/utils/static')
-  mockXHR()
+    const { mockXHR } = require('@/utils/static')
+    mockXHR()
 }
 
 var app = createApp(App)
@@ -31,9 +33,9 @@ var app = createApp(App)
 app.config.globalProperties.$echarts = echarts
 
 app
-  .component("svg-icon", SvgIcon)
-  .use(store)
-  .use(router)
-  .use(ElementPlus, { locale: zhCn, size: 'small' })
-  .use(Antd)
-  .mount('#app')
+    .component("svg-icon", SvgIcon)
+    .use(store)
+    .use(router)
+    .use(ElementPlus, { locale: zhCn, size: 'small' })
+    .use(Antd)
+    .mount('#app')

+ 1 - 1
src/views/alarmManage/index.vue

@@ -263,7 +263,7 @@ export default {
         return `color:#0284E8;cursor:pointer`
       }
       if (columnIndex ) {
-        return `text-align:left;cursor:pointer;`
+        // return `text-align:left;cursor:pointer;`
       } else {
         return ''
       }

+ 1 - 6
src/views/stationManage/dialogComponent.vue

@@ -199,12 +199,7 @@ export default defineComponent({
       },
     }
   },
-  data() {
-    return {
-      // formInfo: JSON.parse(JSON.stringify(this.itemInfo)),
-    }
-  },
-  methods: {},
+
 })
 </script>
  

+ 0 - 1
src/views/stationManage/index.vue

@@ -163,7 +163,6 @@ export default defineComponent({
     const dialogTitle = ref('')
     // 添加操作
 
- 
     const addItem = () => {
       tableItem.value = {
         id: '',

+ 113 - 0
src/views/systemManage/rolePermission/addRoleCom.vue

@@ -0,0 +1,113 @@
+<template>
+  <transition name="dialog-fade">
+    <el-dialog
+      v-if="showDialog"
+      :title="dialogTitle"
+      class="add-group-com"
+      v-model="showDialog"
+      width="400px"
+      @close="closeDialog(0)"
+    >
+      <el-form
+        ref="formInfo"
+        :model="formInfo"
+        class="demo-form-inline"
+        label-width="100px"
+        :rules="rules"
+      >
+        <el-form-item label="角色名称:" prop="watchName">
+          <el-input v-model="formInfo.watchName"></el-input>
+        </el-form-item>
+         <el-form-item label="角色类型:" prop="watchName">
+          <el-input v-model="formInfo.watchName"></el-input>
+        </el-form-item>
+         <!-- <el-form-item label="选择模板:" prop="region">
+            <el-select v-model="formInfo.region" placeholder="请选择">
+              <el-option label="选择模板1" value="1"></el-option>
+              <el-option label="选择模板2" value="2"></el-option>
+            </el-select>
+          </el-form-item> -->
+      
+        <div style="text-align: right">
+          <el-button type="primary" @click="submitForm('formInfo')"
+            >保存</el-button
+          >
+        </div>
+      </el-form>
+    </el-dialog>
+  </transition>
+</template>
+<script>
+
+export default {
+  name: "AddRoleCom",
+  props: {
+    dialogTitle: {
+      type: String,
+    },
+    itemInfo: {
+      type: Object,
+      default: function () {
+        return {};
+      },
+    },
+  },
+  data() {
+    return {
+       checked: true,
+      showDialog: false,
+      formInfo: JSON.parse(JSON.stringify(this.itemInfo)),
+      rules: {
+        watchName: [
+          // required  是否为必填项, trigger:表单验证的触发时机,失去焦点进行验证
+          { required: true, message: "请输入角色名称", trigger: "blur" },
+          {
+            min: 3,
+            max: 6,
+            message: "用户名长度在 3 到 6 个字符",
+            trigger: "blur",
+          },
+        ],
+      },
+    };
+  },
+  methods: {
+    roleValid(rule, value, callback) {
+      rule
+      if (value.length === 0) {
+        callback(new Error("不能为空"));
+      } else {
+        callback();
+      }
+    },
+
+    // 保存操作
+    submitForm(formName) {
+      const params = Object.assign(this.formInfo, {});
+      params
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          // 走保存请求
+          this.$message({
+            message: "操作成功!",
+            type: "success",
+          });
+          this.closeDialog(1);
+        } else {
+          return false;
+        }
+      });
+    },
+    // 关闭弹框
+    closeDialog(flag) {
+      this.$refs["formInfo"].resetFields();
+      this.showDialog = false;
+      this.$emit("closeDialog", flag);
+    },
+  },
+};
+</script>
+ 
+<style scoped lang="scss">
+
+</style>

+ 199 - 2
src/views/systemManage/rolePermission/index.vue

@@ -1,5 +1,202 @@
 <template>
-  <div style="padding:30px;">
-   角色权限
+  <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()">新增</el-button>
+      </div>
+
+      <el-radio-group v-model="radio1">
+        <el-radio-button icon="el-icon-edit" label="1">
+          <img src="@/assets/images/userIcon.svg" />
+          普通用户
+          <i class="el-icon-delete"></i>
+        </el-radio-button>
+        <el-radio-button label="2">
+          <img src="@/assets/images/userIcon.svg" />
+          超级管理员
+          <i class="el-icon-delete"></i>
+        </el-radio-button>
+        <el-radio-button label="3">
+          <img src="@/assets/images/userIcon.svg" />
+          主管
+          <i class="el-icon-delete"></i>
+        </el-radio-button>
+        <el-radio-button label="4">
+          <img src="@/assets/images/userIcon.svg" />
+          电力
+          <i class="el-icon-delete"></i>
+        </el-radio-button>
+        <el-radio-button label="5">
+          <img src="@/assets/images/userIcon.svg" />
+          维保
+          <i class="el-icon-delete"></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"></role-info-com>
+
+      <!-- 新建站点start -->
+      <add-role-com
+        v-if="showDialog"
+        ref="addRoleCom"
+        :dialog-title="dialogTitle"
+        :item-info="tableItem"
+        @closeDialog="closeDialog"
+      ></add-role-com>
+      <!-- 新建站点end -->
+    </div>
+    <!-- 右侧表格end -->
   </div>
 </template>
+
+<script>
+import roleInfoCom from './roleInfoCom'
+
+import addRoleCom from './addRoleCom'
+
+export default {
+  components: {
+    roleInfoCom,
+
+    addRoleCom,
+  },
+  data() {
+    return {
+      radio1: '1',
+      deleteShow: false,
+      showDialog: false,
+      treeLevel: 0,
+      activeName: 'first',
+      filterText: '',
+ 
+      defaultProps: {
+        children: 'children',
+        label: 'label',
+      },
+    }
+  },
+  watch: {
+    success(res) {
+      res
+      alert(1)
+      // this.dialogCreate = res;
+      // this.activeName = res;
+    },
+    filterText(val) {
+      this.$refs.tree.filter(val)
+    },
+  },
+
+  methods: {
+    getMsgFormSon() {
+      this.activeName = 'third'
+    },
+    mouseenter(data) {
+      // console.log("移入");
+      // console.log(data);
+      data.show = true
+      // console.log(data.show);
+    },
+
+    mouseleave(data) {
+      // console.log("移出");
+      // console.log(data);
+      data.show = false
+    },
+
+    handleClick(tab, event) {
+      console.log(tab, event)
+    },
+    filterNode(value, data) {
+      if (!value) return true
+      return data.label.indexOf(value) !== -1
+    },
+    handleNodeClick(data, obj, node) {
+      data, node
+      this.treeLevel = obj.level
+      // console.log(this.treeLevel);
+      //  console.log(node);
+    },
+    // 关闭操作
+    closeDialog(flag) {
+      if (flag) {
+        // 重新刷新表格内容
+        this.fetchData()
+      }
+      this.showDialog = false
+    },
+
+    addRole() {
+      this.tableItem = {
+        id: '',
+        region: '',
+        stationName: '',
+        watchName: '',
+        watchCode: '',
+        RoleList: [],
+        done: '',
+        guaZai: '',
+        checked: true,
+        resource: '',
+      }
+      this.dialogTitle = '角色新增'
+      this.showDialog = true
+      this.$nextTick(() => {
+        this.$refs['addRoleCom'].showDialog = true
+      })
+    },
+    append(data) {
+      var id
+      const newChild = { id: id++, label: 'testtest', children: [] }
+      if (!data.children) {
+        this.$set(data, 'children', [])
+      }
+      data.children.push(newChild)
+    },
+
+    remove(node, data) {
+      const parent = node.parent
+      const children = parent.data.children || parent.data
+      const index = children.findIndex((d) => d.id === data.id)
+      children.splice(index, 1)
+      this.dataSource = [...this.dataSource]
+    },
+  },
+}
+</script>
+<style scoped lang="scss">
+.app-container.page-nesting {
+  padding: 0;
+  background: rgba(0, 0, 0, 0);
+}
+.grid-content {
+  background: #fff;
+  height: calc(100vh - 130px);
+  overflow-y: auto;
+}
+.el-input__inner {
+  border-radius: 20px !important;
+}
+.treeDom {
+  width: 270px;
+  position: absolute;
+  left: 0;
+  // margin-left: 20px;
+  padding: 20px;
+  min-height: calc(100vh - 130px);
+
+  
+}
+.nestingDom {
+  margin-left: 300px;
+}
+</style>
+<style lang="scss">
+
+</style>

+ 133 - 0
src/views/systemManage/rolePermission/roleInfoCom/index.vue

@@ -0,0 +1,133 @@
+<template>
+  <div class="siteManage-main roleInfoPage">
+    <el-table :data="tableData" border stripe :cell-style="cellStyle">
+      <el-table-column prop="xuhao" label="序号" width="80"></el-table-column>
+      <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"
+          ></el-checkbox>
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'RoleInfoCom',
+  data() {
+    return {
+      checked1: true,
+      checked2: true,
+      tableData: [
+        {
+          xuhao: '1',
+          menu: '首页',
+          authority: [{name: '全选', checked: true},{name: '查看', checked: true}],
+        },
+        {
+          xuhao: '2',
+          menu: '站点概览',
+          authority: [{name: '全选', checked: true},{name: '查看', checked: true}],
+        },
+        {
+          xuhao: '3',
+          menu: '配电系统图',
+          authority: [{name: '全选', checked: true},{name: '查看', checked: true},{name: '编辑', checked: true}],
+        },
+        {
+          xuhao: '4',
+          menu: '事件告警报表',
+          authority: [{name: '全选', checked: true},{name: '查看', checked: true},{name: '告警处理', checked: true}],
+        },
+        {
+          xuhao: '5',
+          menu: '告警管理',
+          authority: [{name: '全选', checked: true},{name: '查看', checked: true},{name: '告警处理', checked: true}],
+        },
+        {
+          xuhao: '6',
+          menu: '站点管理',
+          authority: [{name: '全选', checked: true},{name: '查看', checked: true},{name: '编辑', checked: true},{name: '新增', checked: true},{name: '删除', checked: true}],
+        },
+        {
+          xuhao: '7',
+          menu: '台区管理',
+          authority: [{name: '全选', checked: true},{name: '查看', checked: true},{name: '编辑', checked: true},{name: '新增', checked: true},{name: '删除', checked: true}],
+        },
+
+        {
+          xuhao: '8',
+          menu: '设备管理',
+          authority: [{name: '全选', checked: true},{name: '查看', checked: true},{name: '编辑', checked: true},{name: '新增', checked: true},{name: '删除', checked: true}],
+        },
+        {
+          xuhao: '9',
+          menu: '数据管理',
+          authority: [{name: '全选', checked: true},{name: '查看', checked: true},{name: '导出', checked: true}],
+        },
+        {
+          xuhao: '10',
+          menu: '电能质量',
+          authority: [{name: '全选', checked: true},{name: '查看', checked: true}],
+        },
+        {
+          xuhao: '11',
+          menu: '月度报告',
+          authority: [{name: '全选', checked: true},{name: '查看', checked: true},{name: '导出', checked: true},{name: '编辑模板', checked: true}],
+        },
+        {
+          xuhao: '12',
+          menu: '计划停电',
+          authority: [{name: '全选', checked: true},{name: '查看', checked: true},{name: '编辑', checked: true},{name: '新增', checked: true},{name: '删除', checked: true}],
+        },
+        {
+          xuhao: '13',
+          menu: '巡检管理',
+          authority: [{name: '全选', checked: true},{name: '查看', checked: true},{name: '编辑', checked: true},{name: '删除', checked: true},{name: '巡检处理', checked: true}],
+        },
+        {
+          xuhao: '14',
+          menu: '运维管理',
+          authority: [{name: '全选', checked: true},{name: '查看', checked: true},{name: '编辑', checked: true},{name: '新增', checked: true}],
+        },
+        {
+          xuhao: '15',
+          menu: '工单管理',
+          authority: [{name: '全选', checked: true},{name: '查看', checked: true},{name: '编辑', checked: true},{name: '新增', checked: true},{name: '删除', checked: true},{name: '工单处理', checked: true}],
+        },
+        {
+          xuhao: '16',
+          menu: '用户管理',
+          authority: [{name: '全选', checked: true},{name: '查看', checked: true},{name: '编辑', checked: true},{name: '新增', checked: true},{name: '删除', checked: true}],
+        },
+        {
+          xuhao: '17',
+          menu: '角色权限',
+          authority: [{name: '全选', checked: true},{name: '查看', checked: true},{name: '编辑', checked: true},{name: '新增', checked: true},{name: '删除', checked: true}],
+        },
+      ],
+    }
+  },
+  methods: {
+    //自定义列样式
+    cellStyle({ row, column, rowIndex, columnIndex }) {
+      row, column, rowIndex
+      if (columnIndex) {
+        return `text-align:left!important;cursor:pointer;`
+      }
+    },
+  },
+}
+</script>
+<style  lang="scss">
+
+.roleInfoPage .el-table .cell {
+    text-align: left!important;
+}
+</style>

+ 0 - 243
src/views/systemManage/userManage/checkVideo.vue

@@ -1,243 +0,0 @@
-<template>
-  <transition name="dialog-fade">
-    <el-dialog
-      v-if="showDialog"
-      :title="dialogTitle"
-      class="dialog-component"
-      v-model="showDialog"
-      width="800px"
-      @close="closeDialog(0)"
-    >
-      <el-form
-        ref="formInfo"
-        class="demo-form-inline alarmStatusDialog"
-        label-width="130px"
-  
-      >
-        <div class="topInfo underline">
-          <el-row :gutter="20">
-            <el-col :span="12">
-              <el-form-item label="户号:">2021-09-14 14:53:28</el-form-item>
-              <el-form-item label="站点名称:">测试222</el-form-item>
-              <el-form-item label="监察:">张三</el-form-item>
-              <el-form-item label="电试报告时间:">
-                <div>2021-09-14</div>
-                <div>距离电试超期还有 730 天</div>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <div class="grid-content">
-                <el-form-item label="流变变比:">11111</el-form-item>
-                <el-form-item label="单路电源容量:">11</el-form-item>
-                <el-form-item label="线路:">育11彭伟万众实业</el-form-item>
-              </div>
-            </el-col>
-          </el-row>
-        </div>
-
-        <el-row :gutter="20">
-          <el-col :span="12">
-            <div class="basicTit">现场问题:</div>
-            <el-form-item label="电缆空洞:">
-              <el-radio v-model="radio1" label="1">备选项</el-radio>
-              <div><img src="@/assets/images/archiveImg.png" alt="" /></div>
-            </el-form-item>
-            <el-form-item label="堆放杂物:">
-              <el-radio v-model="radio2" label="2">是</el-radio>
-              <div><img src="@/assets/images/archiveImg.png" alt="" /></div>
-            </el-form-item>
-            <el-form-item label="缺少模拟屏:">
-              <el-radio v-model="radio3" label="3">是</el-radio>
-              <div><img src="@/assets/images/archiveImg.png" alt="" /></div>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8" :offset="2">
-            <div class="grid-content">
-              <div class="basicTit">其他</div>
-              <div>
-                <el-radio v-model="radio1" label="1">屋顶墙壁渗漏水:</el-radio>
-              </div>
-              <div>
-                <el-radio v-model="radio1" label="1">门窗、墙壁破损:</el-radio>
-              </div>
-              <div>
-                <el-radio v-model="radio1" label="1">灭火器配置不足:</el-radio>
-              </div>
-              <div>
-                <el-radio v-model="radio1" label="1">灭火器超期:</el-radio>
-              </div>
-              <div>
-                <el-radio v-model="radio1" label="1">积灰严重:</el-radio>
-              </div>
-              <div>
-                <el-radio v-model="radio1" label="1">无电工:</el-radio>
-              </div>
-              <div>
-                <el-radio v-model="radio1" label="1">
-                  电工人数配置不足:
-                </el-radio>
-              </div>
-              <div>
-                <el-radio v-model="radio1" label="1">电工证超期:</el-radio>
-              </div>
-              <div>
-                <el-radio v-model="radio1" label="1">
-                  配置不足(绝缘体):
-                </el-radio>
-              </div>
-              <div  class="mb-10">
-                <el-radio v-model="radio1" label="1">
-                  缺少接地线与存放位置编号:
-                </el-radio>
-              </div>
-              <div>
-                备注:
-              
-                  <el-input v-model="formInfo.remark" style="width:160px"></el-input>
-               
-              </div>
-            </div>
-          </el-col>
-        </el-row>
-      </el-form>
-    </el-dialog>
-  </transition>
-</template>
-
-<script>
-export default {
-  name: 'CheckVideo',
-  props: {
-    dialogTitle: {
-      type: String,
-    },
-    itemInfo: {
-      type: Object,
-      default: function () {
-        return {}
-      },
-    },
-  },
-  data() {
-    return {
-      checked: true,
-      showDialog: false,
-      formInfo: JSON.parse(JSON.stringify(this.itemInfo)),
-      radio1: '1',
-      radio2: '2',
-      radio3: '3',
-
-      options: [
-        {
-          value: '选项1',
-          label: '站点一',
-        },
-        {
-          value: '选项2',
-          label: '站点二',
-        },
-        {
-          value: '选项3',
-          label: '站点三',
-        },
-        {
-          value: '选项4',
-          label: '站点四',
-        },
-        {
-          value: '选项5',
-          label: '站点五',
-        },
-      ],
-
-      rules: {
-        watchName: [
-          // required  是否为必填项, trigger:表单验证的触发时机,失去焦点进行验证
-          { required: true, message: '请输入设备名称', trigger: 'blur' },
-          {
-            min: 3,
-            max: 6,
-            message: '用户名长度在 3 到 6 个字符',
-            trigger: 'blur',
-          },
-        ],
-        watchCode: [
-          { required: true, message: '请输入设备编号', trigger: 'blur' },
-          {
-            min: 3,
-            max: 6,
-            message: '用户名长度在 3 到 6 个字符',
-            trigger: 'blur',
-          },
-        ],
-        routeAddress: [
-          { required: true, message: '请选则回路表记地址', trigger: 'change' },
-        ],
-        ratedVoltage: [
-          { required: true, message: '请选择站点列表', trigger: 'change' },
-        ],
-        ratedCurrent: [
-          { required: true, message: '请输入已选站点个数', trigger: 'blur' },
-          { trigger: 'blur' },
-        ],
-        fzlMx: [
-          { required: true, message: '请输入挂载设备个数', trigger: 'blur' },
-          { trigger: 'blur' },
-        ],
-      },
-    }
-  },
-  methods: {
-    roleValid(rule, value, callback) {
-      if (value.length === 0) {
-        callback(new Error('角色不能为空'))
-      } else {
-        callback()
-      }
-    },
-
-    // onSelectedDrug(event) {
-    //   this.routeAddress = event;
-    //   console.log(this.routeAddress);
-    // },
-    // 保存操作
-    submitForm(formName) {
-      const params = Object.assign(this.formInfo, {})
-      params
-      this.$refs[formName].validate((valid) => {
-        if (valid) {
-          // 走保存请求
-          this.$message({
-            message: '操作成功!',
-            type: 'success',
-          })
-          this.closeDialog(1)
-        } else {
-          return false
-        }
-      })
-    },
-    // 关闭弹框
-    closeDialog(flag) {
-      //   this.$refs["formInfo"].resetFields();
-      this.showDialog = false
-      this.$emit('closeDialog', flag)
-    },
-  },
-}
-</script>
- 
-<style scoped lang="scss">
-.el-input,
-.el-select {
-  width: 240px;
-}
-
-// label样式
-.el-form-item__label {
-  width: 150px;
-}
-.el-form-item__content {
-  margin-left: 150px;
-}
-</style>

+ 160 - 0
src/views/systemManage/userManage/dialogComponent copy.vue

@@ -0,0 +1,160 @@
+<template>
+    <el-dialog
+
+      :title="dialogTitle"
+      v-model="dialogVisible"
+      width="640px"
+      @close="closeDialog()"
+      @open="open"
+    >
+      <el-form
+        ref="formInfo"
+        :model="formInfo"
+        class="demo-form-inline"
+        label-width="100px"
+        :rules="rules"
+      >
+        <el-form-item label="账号:" prop="accountNumber">
+          <el-input v-model="formInfo.accountNumber"></el-input>
+        </el-form-item>
+        <el-form-item label="用户名:" prop="userName">
+          <el-input v-model="formInfo.userName"></el-input>
+        </el-form-item>
+        <el-form-item label="手机号码:" prop="phone">
+          <el-input v-model="formInfo.phone"></el-input>
+        </el-form-item>
+         <el-form-item label="告警短信" prop="phone">
+          <el-checkbox v-model="checked1" label="接收"></el-checkbox>
+        </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')"
+            >确定</el-button
+          >
+        </div>
+      </el-form>
+    </el-dialog>
+</template>
+
+<script>
+
+
+
+
+export default {
+  name: "DialogComponent",
+  // emits: ['closeDialog'],
+  props: {
+    dialogTitle:String,
+    itemInfo: Object,
+    flag: Boolean,
+
+  },
+  data() {
+    return {
+      showDialog: false,
+      formInfo: JSON.parse(JSON.stringify(this.itemInfo)),
+      options: [
+        {
+          value: "选项1",
+          label: "站点一",
+        },
+        {
+          value: "选项2",
+          label: "站点二",
+        },
+        {
+          value: "选项3",
+          label: "站点三",
+        },
+        {
+          value: "选项4",
+          label: "站点四",
+        },
+        {
+          value: "选项5",
+          label: "站点五",
+        },
+      ],
+
+      rules: {
+        accountNumber: [
+          // required  是否为必填项, trigger:表单验证的触发时机,失去焦点进行验证
+          { required: true, message: "请输入账号", trigger: "blur" },
+          {
+            min: 3,
+            max: 6,
+            message: "用户名长度在 3 到 6 个字符",
+            trigger: "blur",
+          },
+        ],
+        userName: [
+          { required: true, message: "请输入用户名", trigger: "blur" },
+          {
+            min: 3,
+            max: 6,
+            message: "用户名长度在 3 到 6 个字符",
+            trigger: "blur",
+          },
+        ],
+        phone: [
+          { required: false, message: "请输入编号", trigger: "blur" },
+          {
+            min: 3,
+            max: 6,
+            message: "用户名长度在 3 到 6 个字符",
+            trigger: "blur",
+          },
+        ],
+      },
+    };
+  },
+  methods: {
+    roleValid(rule, value, callback) {
+      if (value.length === 0) {
+        callback(new Error("角色不能为空"));
+      } else {
+        callback();
+      }
+    },
+
+    // 保存操作
+    submitForm(formName) {
+      alert(1)
+      const params = Object.assign(this.formInfo, {});
+      params
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          // 走保存请求
+          this.$message({
+            message: "操作成功!",
+            type: "success",
+          });
+          this.closeDialog(1);
+        } else {
+          return false;
+        }
+      });
+    },
+    // 关闭弹框
+    closeDialog(flag) {
+      this.$refs["formInfo"].resetFields();
+      this.showDialog = false;
+      this.$emit("closeDialog", flag);
+    },
+  },
+};
+</script>
+ 
+<style scoped lang="scss">
+.el-input,
+.el-select {
+  width: 240px;
+}
+</style>

+ 98 - 86
src/views/systemManage/userManage/dialogComponent.vue

@@ -1,35 +1,31 @@
 <template>
-  <transition name="dialog-fade">
     <el-dialog
-      v-if="showDialog"
       :title="dialogTitle"
-      class="dialog-component"
-      v-model="showDialog"
+      v-model="dialogVisible"
       width="640px"
-      @close="closeDialog(0)"
+      @close="closeDialog()"
+      @open="open"
     >
       <el-form
         ref="formInfo"
-        :model="formInfo"
+        :model="form"
         class="demo-form-inline"
         label-width="100px"
         :rules="rules"
       >
         <el-form-item label="账号:" prop="accountNumber">
-          <el-input v-model="formInfo.accountNumber"></el-input>
+          <el-input v-model="form.accountNumber"></el-input>
         </el-form-item>
         <el-form-item label="用户名:" prop="userName">
-          <el-input v-model="formInfo.userName"></el-input>
+          <el-input v-model="form.userName"></el-input>
         </el-form-item>
         <el-form-item label="手机号码:" prop="phone">
-          <el-input v-model="formInfo.phone"></el-input>
+          <el-input v-model="form.phone"></el-input>
         </el-form-item>
          <el-form-item label="告警短信" prop="phone">
           <el-checkbox v-model="checked1" label="接收"></el-checkbox>
         </el-form-item>
-       
 
-       
         <br />
         <br />
         <br />
@@ -41,55 +37,104 @@
         </div>
       </el-form>
     </el-dialog>
-  </transition>
 </template>
 
 <script>
+import { defineComponent, ref, watchEffect } from 'vue'
 
+export default defineComponent({
+  name: 'DialogComponent',
+  emits: ['closeDialog'],
+  props: {
+    flag: Boolean,
+    dialogTitle: String,
+    itemInfo: Object,
+  },
+  setup(props, context) {
+    context
 
+    const dialogVisible = ref(false)
+    const formInfo = ref(null)
 
+    const form = ref([])
 
-export default {
-  name: "DialogComponent",
-  props: {
-    dialogTitle: {
-      type: String,
-      default: "新增",
-    },
-    itemInfo: {
-      type: Object,
-      default: function () {
-        return {};
+    
+    // open(): Dialog弹窗打开之前做的事
+    const open = () => {
+      console.log('')
+      form.value = props.itemInfo.value
+    }
+
+    const options = [
+      {
+        value: '选项1',
+        label: '站点一',
       },
-    },
-  },
-  data() {
-    return {
-      showDialog: false,
-      formInfo: JSON.parse(JSON.stringify(this.itemInfo)),
-      options: [
-        {
-          value: "选项1",
-          label: "站点一",
-        },
-        {
-          value: "选项2",
-          label: "站点二",
-        },
-        {
-          value: "选项3",
-          label: "站点三",
-        },
-        {
-          value: "选项4",
-          label: "站点四",
-        },
-        {
-          value: "选项5",
-          label: "站点五",
-        },
-      ],
+      {
+        value: '选项2',
+        label: '站点二',
+      },
+      {
+        value: '选项3',
+        label: '站点三',
+      },
+      {
+        value: '选项4',
+        label: '站点四',
+      },
+      {
+        value: '选项5',
+        label: '站点五',
+      },
+    ]
+
+    // 关闭弹框
+    const closeDialog = () => {
+      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 = () => {
+      console.log(formInfo)
+      formInfo.value.validate((valid) => {
+        if (valid) {
+          // 走保存请求
+          this.$message({
+            message: '操作成功!',
+            type: 'success',
+          })
+          this.closeDialog(1)
+        } else {
+          console.log('error submit!!')
+          return false
+        }
+      })
+    }
+
+    return {
+      closeDialog,
+      dialogVisible,
+      options,
+      roleValid,
+      formInfo,
+      form,
+      open,
+      submitForm,
       rules: {
         accountNumber: [
           // required  是否为必填项, trigger:表单验证的触发时机,失去焦点进行验证
@@ -120,43 +165,10 @@ export default {
           },
         ],
       },
-    };
+    }
   },
-  methods: {
-    roleValid(rule, value, callback) {
-      if (value.length === 0) {
-        callback(new Error("角色不能为空"));
-      } else {
-        callback();
-      }
-    },
 
-    // 保存操作
-    submitForm(formName) {
-      alert(1)
-      const params = Object.assign(this.formInfo, {});
-      params
-      this.$refs[formName].validate((valid) => {
-        if (valid) {
-          // 走保存请求
-          this.$message({
-            message: "操作成功!",
-            type: "success",
-          });
-          this.closeDialog(1);
-        } else {
-          return false;
-        }
-      });
-    },
-    // 关闭弹框
-    closeDialog(flag) {
-      this.$refs["formInfo"].resetFields();
-      this.showDialog = false;
-      this.$emit("closeDialog", flag);
-    },
-  },
-};
+})
 </script>
  
 <style scoped lang="scss">

+ 277 - 0
src/views/systemManage/userManage/index oriange.vue

@@ -0,0 +1,277 @@
+<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 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"
+          ></el-input>
+        </div>
+        <div class="filter-item" >
+          手机号:
+          <el-input
+            v-model="phone"
+            placeholder="请输入内容"
+            style="width: 180px"
+          ></el-input>
+        </div>
+
+          <div class="filter-item">
+            所属企业:
+            <el-select
+              v-model="region"
+              placeholder="请选择"
+              style="width: 150px"
+            >
+              <el-option label="企业一" value="1"></el-option>
+              <el-option label="企业二" value="2"></el-option>
+            </el-select>
+          </div>
+
+          <div class="filter-item">
+            角色:
+            <el-select
+              v-model="role"
+              placeholder="请选择"
+              style="width: 200px"
+            >
+              <el-option label="角色1" value="1"></el-option>
+              <el-option label="角色2" value="2"></el-option>
+            </el-select>
+          </div>
+          <el-button type="primary" icon="el-icon-search" class="search-button"
+            >查询</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="userName" label="姓名" width="">
+      </el-table-column>
+      <el-table-column prop="sex" label="性别" width="">
+      </el-table-column>
+      <el-table-column prop="contact" label="联系方式" width="">
+      </el-table-column>
+      <el-table-column prop="password" label="密码" width="">
+      </el-table-column>
+      <el-table-column prop="ownerCompany" label="所属企业" width="">
+      </el-table-column>
+      <el-table-column prop="role" label="角色" width="">
+      </el-table-column>
+      <el-table-column fixed="right" label="操作" width="180">
+        <template #default="scope">
+          <el-button
+            @click="checkItem(scope.$index, scope.row)"
+            type="text"
+            size="small"
+            class="delete-text"
+            >查看</el-button
+          >
+          <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
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :current-page="currentPage4"
+        :page-sizes="[100, 200, 300, 400]"
+        :page-size="100"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="400"
+      >
+      </el-pagination>
+    </div>
+
+    <!-- 分页end -->
+
+    <!--弹框组件开始-----------------------start-->
+    <dialog-component
+      v-if="showDialog"
+      ref="dialogComponent"
+      :dialogTitle="dialogTitle"
+      :itemInfo="tableItem"
+      @closeDialog="closeDialog"
+    ></dialog-component>
+    <!--弹框组件开始-----------------------end-->
+
+
+
+
+  </div>
+</template>
+
+<script>
+import DialogComponent from "./dialogComponent";
+
+export default {
+  name: "VariableList",
+
+  components: { DialogComponent, },
+
+  data() {
+    return {
+
+      userName:'',
+      phone:'',
+      region: "",
+      role:'',
+      tableItem:{},
+      currentPage4: 4,
+      dialogTitle:'',
+      showDialog: true,
+
+      tableData: [
+        {
+           xh: "1",
+          userName: "张三",
+          sex: "男",
+          contact: "12345678989 ",
+          password: "123456",
+          role: "维保 ",
+          ownerCompany: "伍继",
+        },
+         {
+          xh: "1",
+          userName: "张三",
+          sex: "男",
+          contact: "12345678989 ",
+          password: "123456",
+          ownerCompany: "伍继",
+           role: "维保 ",
+        },
+         {
+          xh: "1",
+          userName: "张三",
+          sex: "男",
+          contact: "12345678989 ",
+          password: "123456",
+          ownerCompany: "伍继",
+           role: "维保 ",
+        },
+         {
+          xh: "1",
+          userName: "张三",
+          sex: "男",
+          contact: "12345678989 ",
+          password: "123456",
+          ownerCompany: "伍继",
+           role: "维保 ",
+        },
+        {
+          xh: "1",
+          userName: "张三",
+          sex: "男",
+          contact: "12345678989 ",
+          password: "123456",
+          ownerCompany: "伍继",
+           role: "维保 ",
+        },
+       
+      ],
+    };
+
+  },
+  methods: {
+
+    handleSizeChange(val) {
+      console.log(`每页 ${val} 条`);
+    },
+    handleCurrentChange(val) {
+      console.log(`当前页: ${val}`);
+    },
+
+    // 表头样式设置
+    headClass() {
+      return "background:#FAFAFA;";
+    },
+
+    // 查看视频
+    checkItem(row) {
+      console.log(row);
+      this.tableItem = row;
+      this.dialogTitle = "查看";
+      this.showDialog = true;
+      this.$nextTick(() => {
+        this.$refs["dialogComponent"].showDialog = true;
+      });
+    },
+
+    // 添加操作
+    addItem() {
+      this.tableItem = {
+        id: "",
+        stationName: "",
+        xh: "",
+        userName: "",
+        siteList: [],
+        done: "",
+        guaZai: "",
+        checked: true,
+      };
+      this.dialogTitle = "新增";
+      this.showDialog = true;
+      this.$nextTick(() => {
+        this.$refs["dialogComponent"].showDialog = true;
+      });
+    },
+
+    // 编辑操作
+    editRow(row) {
+      console.log(row);
+      this.tableItem = row;
+      this.dialogTitle = "编辑";
+      this.showDialog = true;
+      this.$nextTick(() => {
+        this.$refs["dialogComponent"].showDialog = true;
+      });
+    },
+
+    // 关闭操作
+    closeDialog(flag) {
+      if (flag) {
+        // 重新刷新表格内容
+        this.fetchData();
+      }
+      this.showDialog = false;
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 74 - 102
src/views/systemManage/userManage/index.vue

@@ -121,42 +121,36 @@
 
     <!--弹框组件开始-----------------------start-->
     <dialog-component
-      v-if="showDialog"
-      ref="dialogComponent"
-      :dialog-title="dialogTitle"
-      :item-info="tableItem"
+
+      :dialogTitle="dialogTitle"
+      :itemInfo="tableItem"
       @closeDialog="closeDialog"
+      :flag="showDialog"
     ></dialog-component>
     <!--弹框组件开始-----------------------end-->
 
 
-
-
   </div>
 </template>
 
 <script>
-import DialogComponent from "./dialogComponent";
-
-export default {
-  name: "VariableList",
-
-  components: { DialogComponent, },
 
-  data() {
-    return {
-
-      userName:'',
-      phone:'',
-      region: "",
-      role:'',
-
-      currentPage4: 4,
+import { defineComponent, ref,reactive} from 'vue'
 
-      showDialog: true,
+import DialogComponent from "./dialogComponent";
 
-      tableData: [
-        {
+export default defineComponent({
+  components: { DialogComponent},
+  setup() {
+    const userName = ref('')
+    const phone = ref('')
+    const region = ref('')
+    const role = ref('')
+    const currentPage4 = ref(4)
+    const dialogTitle = ref('')
+    const showDialog = ref(false)
+    const tableData = ref([
+      {
            xh: "1",
           userName: "张三",
           sex: "男",
@@ -173,67 +167,25 @@ export default {
           password: "123456",
           ownerCompany: "伍继",
            role: "维保 ",
-        },
-         {
-          xh: "1",
-          userName: "张三",
-          sex: "男",
-          contact: "12345678989 ",
-          password: "123456",
-          ownerCompany: "伍继",
-           role: "维保 ",
-        },
-         {
-          xh: "1",
-          userName: "张三",
-          sex: "男",
-          contact: "12345678989 ",
-          password: "123456",
-          ownerCompany: "伍继",
-           role: "维保 ",
-        },
-        {
-          xh: "1",
-          userName: "张三",
-          sex: "男",
-          contact: "12345678989 ",
-          password: "123456",
-          ownerCompany: "伍继",
-           role: "维保 ",
-        },
-       
-      ],
-    };
-
-  },
-  methods: {
+        }
+    ])
 
-    handleSizeChange(val) {
+    const handleSizeChange=(val)=> {
       console.log(`每页 ${val} 条`);
-    },
-    handleCurrentChange(val) {
+    }
+    const handleCurrentChange=(val)=> {
       console.log(`当前页: ${val}`);
-    },
+    }
 
-    // 表头样式设置
-    headClass() {
+    // // 表头样式设置
+    const headClass=()=> {
       return "background:#FAFAFA;";
-    },
-
-    // 查看视频
-    checkItem(row) {
-      console.log(row);
-      this.tableItem = row;
-      this.dialogTitle = "查看";
-      this.showDialog = true;
-      this.$nextTick(() => {
-        this.$refs["dialogComponent"].showDialog = true;
-      });
-    },
+    }
 
-    // 添加操作
-    addItem() {
-      this.tableItem = {
+    const tableItem = reactive([])
+     // 添加操作
+    const addItem=()=> {
+      tableItem.value = {
         id: "",
         stationName: "",
         xh: "",
@@ -243,35 +195,55 @@ export default {
         guaZai: "",
         checked: true,
       };
-      this.dialogTitle = "新增";
-      this.showDialog = true;
-      this.$nextTick(() => {
-        this.$refs["dialogComponent"].showDialog = true;
-      });
-    },
+      dialogTitle.value = "新增";
+      showDialog.value = true;
+
+    }
+
+     // 查看
+    const checkItem=(row)=> {
+      console.log(row)
+      tableItem.value = row
+      dialogTitle.value = '查看'
+      showDialog.value = true
+    }
 
     // 编辑操作
-    editRow(row) {
-      console.log(row);
-      this.tableItem = row;
-      this.dialogTitle = "编辑";
-      this.showDialog = true;
-      this.$nextTick(() => {
-        this.$refs["dialogComponent"].showDialog = true;
-      });
-    },
+    const editRow = (row) => {
+      console.log(row)
+      tableItem.value = row
+      dialogTitle.value = '编辑'
+      showDialog.value = true
+    }
 
     // 关闭操作
-    closeDialog(flag) {
-      if (flag) {
-        // 重新刷新表格内容
-        this.fetchData();
-      }
-      this.showDialog = false;
-    },
+    const closeDialog = () => {
+      showDialog.value = false
+    }
+
+    return {
+       userName,
+      phone,
+      region,
+      role,
+      tableItem,
+      currentPage4,
+      dialogTitle,
+      showDialog,
+      tableData,
+      handleSizeChange,
+      handleCurrentChange,
+      headClass,
+      checkItem,
+      addItem,
+      editRow,
+      closeDialog,
+    }
+
   },
-};
+})
 </script>
 
+
 <style lang="scss" scoped>
 </style>