zhangzengfei
2022-12-07 0dbf19e9f92f5cb1d5ca9a06fd268d3b16e466e3
src/views/personalCenter/components/SubAccount.vue
@@ -1,6 +1,6 @@
<template>
  <div class="sub-account" v-if="!isShowAdd && !isShowRelate">
    <div class="head-name">子账户管理</div>
    <div class="head-name" v-show="showHeadName">子账号管理</div>
    <div class="search">
      <div class="left">
        <div class="id">
@@ -41,6 +41,7 @@
        :data="dataList"
        :fit="true"
        :default-sort="{ prop: 'createTime', order: 'descending' }"
        v-loading="tbLoading"
      >
        <el-table-column label="序号" width="55" class-name="index">
          <template slot-scope="scope">{{ scope.$index + 1 + (page - 1) * size }}</template>
@@ -94,10 +95,11 @@
    </div>
  </div>
  <div class="sub-account" v-else-if="isShowAdd">
    <div class="add-title" @click="isShowAdd = false">
    <!-- <div class="add-title" @click="isShowAdd = false">
      <span class="iconfont">&#xe614;</span>
      <span>添加子账户</span>
    </div>
      <span>子账户管理</span>
    </div> -->
    <div class="head-name" style="margin-bottom:20px">子账户编辑</div>
    <el-form
      :model="ruleForm"
      :rules="rules"
@@ -194,9 +196,32 @@
          />
        </div>
      </el-form-item>
      <el-form-item label="短信推送" v-show="isEditing">
        <el-select v-model="smsSceneConfig" multiple collapse-tags style="width: 250px" placeholder="请选择">
          <el-option
            v-for="item in taskOptions"
            style="font-size: 12px"
            :key="item.value"
            :value="item.value"
            :label="item.value"
            :title="item.value"
          ></el-option>
        </el-select>
        <el-select
          v-model="smsLevelConfig"
          multiple
          collapse-tags
          style="margin-left:10px;width: 150px"
          placeholder="请选择"
        >
          <el-option v-for="item in levelOptions" :key="item.value" :label="item.label" :value="item.value">
          </el-option>
        </el-select>
        <el-checkbox v-model="smsEnable" style="margin-left:20px">启用</el-checkbox>
      </el-form-item>
    </el-form>
    <div class="right">
      <div class="button searchBtn" @click="saveSubUser">保存</div>
      <div class="button searchBtn" @click="saveUser">保存</div>
      <div class="button resetBtn" @click="resetUser">重置</div>
      <div class="button resetBtn" style="margin-left:20px" @click="goback">返回</div>
    </div>
@@ -213,6 +238,7 @@
<script>
import { findUserList, saveSubUser, getMenu, getDataTree, deleteUser } from "@/api/user"
import { findTaskById, updateTask } from "@/api/report"
import { getAreas, getDic } from "@/api/login"
import Steps from "./Steps"
@@ -224,6 +250,59 @@
    Steps,
    StepsCard,
    TreeMenu
  },
  computed: {
    taskOptions() {
      return [
        {
          value: "明火",
          label: "明火"
        },
        {
          value: "烟雾",
          label: "烟雾"
        },
        {
          value: "翻越围栏",
          label: "翻越围栏"
        },
        {
          value: "区域入侵",
          label: "区域入侵"
        },
        {
          value: "人员离岗",
          label: "人员离岗"
        },
        {
          value: "人员聚集",
          label: "人员聚集"
        },
        {
          value: "打电话",
          label: "打电话"
        },
        {
          value: "抽烟",
          label: "抽烟"
        },
        {
          value: "未佩戴安全帽",
          label: "未佩戴安全帽"
        },
        {
          value: "未穿工装",
          label: "未穿工装"
        },
        {
          value: "睡岗",
          label: "睡岗"
        }
      ]
    },
    showHeadName() {
      return this.$route.path === "/personalCenter"
    }
  },
  data() {
    const validateTree = (rule, value, callback) => {
@@ -239,14 +318,15 @@
      }
    }
    return {
      tbLoading: false,
      searchTime: [this.$moment().format("YYYY-MM-DD 00:00:00"), this.$moment().format("YYYY-MM-DD HH:mm:ss")], //搜索时间
      page: 1,
      size: 10, //分页相关
      total: 0, //总数,
      inputText: "", //输入框内容
      activeStep: 0,
      activeIndex: 0,
      industrys: [],
      total: 0, //总数,
      treeHeight: 750,
      treeData: [],
      treeSettings: {
@@ -329,12 +409,22 @@
      },
      sysMenus: [],
      DataTree: [],
      smsSceneConfig: [],
      smsLevelConfig: [],
      smsEnable: false,
      userInfo: {},
      curEditId: "",
      defaultProp: {
        children: "children",
        label: "name"
      }
      },
      levelOptions: [
        { value: "一级", label: "一级" },
        { value: "二级", label: "二级" },
        { value: "三级", label: "三级" },
        { value: "四级", label: "四级" },
        { value: "五级", label: "五级" }
      ]
    }
  },
  created() {
@@ -347,6 +437,7 @@
  mounted() {
    this.TreeDataPool.reset()
    this.TreeDataPool.multiple = true
    this.VideoPhotoData.queryTaskList()
  },
  methods: {
    fetchDataTree() {
@@ -396,11 +487,27 @@
      this.checkedMenu = row.menuIds
      this.checkedData = row.dataIds
      this.smsSceneConfig = []
      this.smsLevelConfig = []
      this.smsEnable = false
      findTaskById({ id: row.id }).then((rsp) => {
        if (rsp && rsp.success && rsp.data != "") {
          if (rsp.data.taskName != "") {
            this.smsSceneConfig = rsp.data.taskName.split(",")
          }
          if (rsp.data.level != "") {
            this.smsLevelConfig = rsp.data.level.split(",")
          }
          this.smsEnable = rsp.data.enable
        }
      })
      // 查询当前用户权限下所有可管理的摄像机
      if (row.dataIds) {
        sessionStorage.setItem("clusterId", row.dataIds[0])
        await this.TreeDataPool.fetchTreeData()
      }
      // 用email字段暂时代替摄像机集合字段
      let checkedCameras = row.email
@@ -449,6 +556,9 @@
        provinceId: "",
        authDuration: 1
      }
      this.smsSceneConfig = []
      this.smsLevelConfig = []
      this.smsEnable = false
      this.$nextTick(() => {
        this.$refs.treeMenus.setCheckedKeys([])
        this.$refs.treeData.setCheckedKeys([])
@@ -462,7 +572,7 @@
        console.log("查询行业列表失败!")
      }
    },
    saveSubUser() {
    saveUser() {
      let _this = this
      this.ruleForm.menuIds = this.$refs.treeMenus.getCheckedKeys()
      this.ruleForm.dataIds = this.$refs.treeData.getCheckedKeys()
@@ -495,6 +605,7 @@
          // 编辑不提交密码
          if (this.isEditing) {
            delete json.password
            json.isChangePwd = false
          }
          if (typeof json.areaId === "string") {
@@ -509,16 +620,34 @@
          saveSubUser(json)
            .then((res) => {
              if (res.success) {
                this.$notify.success(res.data)
                this.isShowAdd = false
                this.isEditing = false
                this.findUserList()
                // 保存消息推送
                if (_this.isEditing) {
                  let smsTaskInfo = {
                    id: _this.ruleForm.id,
                    taskName: _this.smsSceneConfig.join(","),
                    level: _this.smsLevelConfig.join(","),
                    cameras: json.email,
                    person: json.trueName,
                    tel: json.phoneNum,
                    enable: _this.smsEnable,
                    IsDel: "0"
                  }
                  updateTask(smsTaskInfo).then((rsp) => {
                    // console.log(rsp)
                  })
                }
                _this.$notify.success(res.data)
                _this.isShowAdd = false
                _this.isEditing = false
                _this.findUserList()
              } else {
                this.$notify.error(res.msg)
                _this.$notify.error(res.msg)
              }
            })
            .catch((err) => {
              this.$notify.error(err.data.msg)
              _this.$notify.error(err.data.msg)
            })
        } else {
          return false
@@ -526,6 +655,11 @@
      })
    },
    findUserList() {
      this.tbLoading = true
      if (this.inputText.length) {
        this.inputText = this.inputText.trim()
      }
      findUserList({
        inputText: this.inputText,
        page: this.page,
@@ -539,9 +673,12 @@
          } else {
            this.$notify.error("加载子账户列表失败")
          }
          this.tbLoading = false
        })
        .catch((e) => {
          this.$notify.error(e.msg)
          this.tbLoading = false
        })
    },
    goback() {
@@ -557,34 +694,7 @@
      this.inputText = ""
      this.timeLength = null
    },
    // 跳到设备详情
    checkDetail(row) {
      this.$router.push({
        path: "/equipmentDetail",
        query: {
          id: row.devId,
          ip: row.devIp,
          port: row.serverPort,
          ndid: row.id
        }
      })
    },
    // 跳到算法详情
    algorithmDetail(row) {
      this.$router.push({
        path: "/algorithmDetail",
        query: {
          id: row.devId,
          ip: row.devIp,
          port: row.serverPort
        }
      })
    },
    // 查询列表
    save() {},
    //分页功能
    handleSizeChange(size) {
      this.size = size
@@ -596,53 +706,14 @@
      this.findUserList()
    },
    //解绑按钮
    Untying(row) {
      console.log(row)
      this.unbindId = row.id
      this.isShowUnbind = true
    },
    //获得默认时间
    getDateInit() {
      // 要求 默认一个月
      const end = new Date()
      const start = new Date()
      const nowDate = new Date()
      nowDate.setHours(0)
      nowDate.setMinutes(0)
      nowDate.setSeconds(0)
      nowDate.setMilliseconds(0)
      start.setTime(nowDate.getTime() - 3600 * 1000 * 24 * 30)
      end.setTime(nowDate.getTime() + 3600 * 1000 * 24 - 1)
      return [this.$moment(start).format("YYYY-MM-DD HH:mm:ss"), this.$moment(end).format("YYYY-MM-DD HH:mm:ss")]
    },
    // 关闭解绑弹窗
    closeUnbindBox() {
      this.isShowUnbind = false
    },
    //解绑成功回调
    reflash() {
      this.isShowUnbind = false
    },
    clearSearch() {
      this.searchTime = this.getDateInit()
      this.inputText = ""
    },
    //退出集群
    quitCluster(equipment) {
      this.activeEquipment = equipment
      this.showQuit = true
    },
    //加入集群
    joinCluster(equipment) {
      this.activeEquipment = equipment
      this.showJoin = true
    // 生成uuid
    getUuid() {
      let originStr = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      let originChar = "0123456789abcdef"
      let len = originChar.length
      return originStr.replace(/x/g, function(match) {
        return originChar.charAt(Math.floor(Math.random() * len))
      })
    }
  }
}
@@ -708,9 +779,10 @@
    }
  }
  .searchBtn {
    width: 60px;
    height: 32px;
    line-height: 32px;
    width: 50px;
    height: 25px;
    line-height: 25px;
    font-size: 14px;
    text-align: center;
    color: #fff;
    background: #0065ff;
@@ -720,9 +792,10 @@
    display: flex;
  }
  .resetBtn {
    width: 60px;
    height: 32px;
    line-height: 32px;
    width: 50px;
    height: 25px;
    line-height: 25px;
    font-size: 14px;
    text-align: center;
    color: #0065ff;
    box-sizing: border-box;
@@ -931,6 +1004,12 @@
      }
    }
  }
  .el-select ::v-deep {
    .el-select__tags-text {
      color: #3d3d3d;
    }
  }
}
</style>