Răsfoiți Sursa

通知规则页面

xujie 1 an în urmă
părinte
comite
be44f00657

+ 39 - 0
src/api/notice/notice.js

@@ -0,0 +1,39 @@
+import request from '@/utils/request'
+
+// 查询调度日志列表
+export function list(query) {
+  return request({
+    url: '/core/noticeRule/list',
+    method: 'get',
+    params: query
+  })
+}
+
+export function selectUserList(query) {
+  return request({
+    url: '/core/noticeRule/getSelectUser',
+    method: 'get',
+    params: query
+  })
+}
+
+export function selectProductTypeList() {
+  return request({
+    url: '/core/noticeRule/getSelectProductType',
+    method: 'get'
+  })
+}
+
+export function saveOrUpdate(data) {
+  return request({
+    url: '/core/noticeRule/saveOrUpdate',
+    method: 'post',
+    data: data
+  })
+}
+export function deleteNoticeRule(id) {
+  return request({
+    url: '/core/noticeRule/remove/'+id,
+    method: 'delete'
+  })
+}

+ 4 - 1
src/components/orgTreeSelect/index.vue

@@ -1,6 +1,6 @@
 <template>
   <!--  弹出框  -->
-  <el-popover placement="bottom-start" :trigger="trigger" :disabled="disabled" v-model="visible">
+  <el-popover placement="bottom-start" :trigger="trigger" :disabled="disabled" v-model="visible" @hide="handHide">
     <!--  tag盒子  -->
     <div slot="reference" class="tags-box" :class="{'tags-box-disabled':!disabled,'tags-box-mini':size === 'mini'}">
       <span v-show="sNodeList.length > 0" class="tags-num">{{sNodeList.length}}</span>
@@ -182,6 +182,9 @@ export default {
 
   },
   methods: {
+    handHide(){
+      this.$emit("handBeforeHide");
+    },
     clear() {
       this.queryForm.value=null;
       this.sNodeList = [];

+ 438 - 0
src/views/notice/index.vue

@@ -0,0 +1,438 @@
+<template>
+  <div class="app-container">
+    <div class="main-right-box">
+      <!--    搜索条件    -->
+      <div class="main-search-box">
+        <el-form v-show="showSearch" ref="queryForm" :inline="true" :model="queryParams" size="small">
+
+
+<!--          <el-form-item label="组织机构">-->
+<!--            <org-tree-->
+<!--              v-model="queryParams.orgId"-->
+<!--              @defaultOrg="getDefaultOrg"-->
+<!--              @checkChange="checkChange"-->
+<!--              @click="clickTreeNode"-->
+<!--              ref="orgTree"-->
+<!--            ></org-tree>-->
+<!--          </el-form-item>-->
+
+          <el-form-item label="规则名称" prop="name">
+            <el-input v-model="queryParams.name" :maxlength="50" clearable placeholder="请输入规则名称"/>
+          </el-form-item>
+
+        </el-form>
+
+
+        <el-row :gutter="10">
+          <el-col :span="1.5">
+            <el-button icon="el-icon-search" size="mini" type="primary" @click="handleQuery"
+            >搜索
+            </el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button icon="el-icon-refresh" size="mini" type="primary" @click="resetQuery"
+            >重置
+            </el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button icon="el-icon-plus" size="mini" type="primary" @click="showAddModel"
+            >新增
+            </el-button>
+          </el-col>
+          <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+        </el-row>
+      </div>
+
+      <el-table
+        v-loading="loading"
+        :data="logInfoList"
+        border
+        height="646" size="small" >
+        <el-table-column align="center" label="序号" width="60">
+          <template v-slot:default="scope">
+            <span v-text="getPageIndex(scope.$index)"> </span>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" label="规则名称" prop="name"/>
+        <el-table-column label="启用状态" align="center" key="enable" prop="enable">
+          <template slot-scope="scope">
+            <span>{{ scope.row.enable === 1 ? '启用' : '停用' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="发送短信" align="center" key="sendSms" prop="sendSms">
+          <template slot-scope="scope">
+            <span>{{ scope.row.sendSms === 1 ? '是' : '否' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" label="描述" prop="remark"/>
+        <el-table-column align="center" label="适用机构" prop="orgNames">
+          <template slot-scope="item">
+            <span style="white-space: pre-line">{{handleOrgNameShow(item.row)}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" label="传感器类型" prop="productTypes">
+          <template slot-scope="item">
+            <span style="white-space: pre-line">{{handleProductTypeShow(item.row)}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" fixed="right" style="width: 100px" align="center"
+                         class-name="small-padding fixed-width">
+          <template slot-scope="scope">
+            <el-button size="mini" type="text" icon="el-icon-edit" @click="editHandler(scope.row)"
+                       v-hasPermi="['core:task:query']">编辑</el-button>
+            <el-button size="mini" type="text" icon="el-icon-delete" @click="deleteHandler(scope.row)"
+                       v-hasPermi="['core:task:query']">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <pagination v-show="total > 0" :limit.sync="queryParams.pageSize" :page.sync="queryParams.pageNum" :total="total"
+                  @pagination="getList"/>
+    </div>
+
+    <DialogCom :title="title" :visible.sync="open" append-to-body width="780px">
+
+      <el-form ref="form" :model="form" :rules="rules" label-width="100px" :style="{height:'500px',margin:'35px'}">
+
+        <el-form-item label="规则名称" prop="name">
+          <el-input type="text" v-model="form.name" placeholder="请输入名称" maxlength="50" show-word-limit/>
+        </el-form-item>
+
+        <el-form-item label="通知机构" prop="orgIds" class="is-required">
+          <org-tree-select
+            v-model="form.orgIds"
+            :queryData="4"
+            ref="orgTreeSelect"
+            :checkShow="true"
+            @handBeforeHide="selectOpenUser"
+          >
+          </org-tree-select>
+        </el-form-item>
+
+        <el-form-item label="通知角色" prop="roleIds">
+          <el-select
+            :multiple="true"
+            style="width: 100%"
+            v-model="form.roleIds"
+            placeholder="请选择通知角色"
+            filterable
+          >
+            <el-option
+              v-for="item in roleList"
+              :key="item.id"
+              :label="item.roleName"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="通知人员" prop="userIds">
+          <el-select
+            :multiple="true"
+            style="width: 100%"
+            v-model="form.userIds"
+            placeholder="请选择通知人员"
+            filterable
+          >
+            <el-option
+              v-for="item in userList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="设备类型" prop="productTypes" class="is-required">
+          <el-select
+            :multiple="true"
+            style="width: 100%"
+            v-model="form.productTypes"
+            placeholder="请选择设备类型"
+            filterable
+          >
+            <el-option
+              v-for="item in productTypeList"
+              :key="item.productType"
+              :label="item.productName"
+              :value="item.productType"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="规则描述" prop="remark">
+          <el-input type="textarea" v-model="form.remark" :rows="3" maxlength="2000" placeholder="请输入描述" clearable/>
+        </el-form-item>
+
+        <el-form-item label="是否启用" prop="enable">
+          <el-switch
+            v-model="form.enable"
+            active-color="#13ce66"
+            inactive-color="#ff4949">
+          </el-switch>
+        </el-form-item>
+        <el-form-item label="发送短信" prop="sendSms">
+          <el-switch
+            v-model="form.sendSms"
+            active-color="#13ce66"
+            inactive-color="#ff4949">
+          </el-switch>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </DialogCom>
+  </div>
+</template>
+
+<script>
+import {
+  list,selectUserList,selectProductTypeList,saveOrUpdate,deleteNoticeRule
+} from "@/api/notice/notice";
+import OrgTree from "@/components/orgTree/orgQuerySelector.vue";
+import {allRole} from "@/api/system/role";
+import OrgTreeSelect from "@/components/orgTreeSelect/index.vue";
+import {delDrillDictionary} from "@/api/core/drill/drillDictionary";
+
+export default {
+  name: "noticeRule",
+  computed: {
+  },
+  components: {OrgTreeSelect, OrgTree},
+  dicts: [],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个停用
+      single: true,
+      // 非多个停用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 表数据
+      logInfoList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        name: [
+          {required: true, message: "请输入规则名称", trigger: "blur"}
+        ],
+      },
+      //角色列表
+      roleList: [],
+      //人员列表
+      userList: [],
+      //产品类型列表
+      productTypeList: [],
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        name: null,
+      },
+    };
+  },
+  watch: {
+
+  },
+  created() {
+    this.getList();
+    this.initProductTypeList();
+    this.initRoleList();
+  },
+  methods: {
+    initRoleList() {
+      allRole().then((response) => {
+        this.roleList = response.data;
+      });
+    },
+    getDefaultOrg(node) {
+      this.queryParams.orgId = node.id;
+      this.getList();
+    },
+    //单选框状态改变
+    checkChange(state) {
+      this.queryParams.checkSub = state;
+      this.getList();
+    },
+    // 节点单击事件
+    clickTreeNode(data) {
+      if(data==null){
+        return;
+      }
+      this.queryParams.orgId = data.id;
+      this.getList();
+    },
+    getPageIndex($index) {
+      //表格序号
+      return (this.queryParams.pageNum - 1) * this.queryParams.pageSize + $index + 1
+    },
+    /** 查询升级包列表 */
+    getList() {
+      this.loading = true;
+      console.log("123456")
+      list(this.queryParams).then(response => {
+          this.logInfoList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      ).catch((err) => {
+        this.loading = false;
+      });
+    },
+
+    editHandler(obj){
+      this.form = {
+        id:obj.id,
+        name: obj.name,
+        remark: obj.remark,
+        roleIds: obj.roleIds ? obj.roleIds.split(",") : [],
+        orgIds: obj.orgIds ? obj.orgIds.split(",") : [],
+        userIds: obj.userIds ? obj.userIds.split(",") : [],
+        productTypes: obj.productTypes ? obj.productTypes.split(",") : [],
+        enable: obj.enable === 1,
+        sendSms: obj.sendSms === 1,
+      };
+      this.selectOpenUser();
+      this.open = true;
+      this.title = "修改通知规则";
+      // selectUserList({orgIds:this.form.orgIds}).then(response => {
+      //     this.userList = response.data;
+      //     let resIds = this.userList ? this.userList.map(item => item.id) : [];
+      //     if (this.form.userIds && this.form.userIds.length > 0){
+      //       this.form.userIds = this.form.userIds.filter(item => resIds.includes(item));
+      //     }
+      //   }
+      // ).catch((err) => {
+      // });
+    },
+    deleteHandler(obj){
+      this.$modal
+        .confirm("是否确认删除?")
+        .then(function () {
+          return deleteNoticeRule(obj.id);
+        })
+        .then(() => {
+          this.getList();
+          this.$modal.msgSuccess("删除成功");
+        })
+        .catch(() => {});
+    },
+    handleOrgNameShow(row){
+      let text = "";
+      if (row.orgNames){
+        let res = row.orgNames.split(",");
+        res.forEach((item, index) => {
+          text += item + "\n";
+        });
+      }
+      return text;
+    },
+    handleProductTypeShow(row){
+      let text = "";
+      if (row.productTypeNames){
+        let res = row.productTypeNames.split(",");
+        res.forEach((item, index) => {
+          text += item + "\n";
+        });
+      }
+      return text;
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    showAddModel() {
+      this.reset();
+      this.open = true;
+      this.title = "新增通知规则";
+    },
+
+    initProductTypeList(){
+      selectProductTypeList().then(response => {
+          this.productTypeList = response.data;
+        }
+      ).catch((err) => {
+      });
+    },
+    submitForm(){
+      this.$refs["form"].validate((valid) => {
+        if (valid) {
+          if (!(this.form.orgIds && this.form.orgIds.length > 0)){
+            this.$modal.msgWarning("请选择通知机构");
+            return;
+          }
+          if (!((this.form.roleIds && this.form.roleIds.length > 0) || (this.form.userIds && this.form.userIds.length > 0))){
+            this.$modal.msgWarning("通知角色和通知人员至少选择一项");
+            return;
+          }
+          if (!(this.form.productTypes && this.form.productTypes.length > 0)){
+            this.$modal.msgWarning("请选择设备类型");
+            return;
+          }
+          saveOrUpdate(this.form).then(response => {
+            this.getList();
+            this.open = false;
+            if (this.form.id != null){
+              this.$modal.msgSuccess("修改成功");
+            }else {
+              this.$modal.msgSuccess("保存成功");
+            }
+          });
+        }
+      });
+    },
+    cancel(){
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id:null,
+        name: null,
+        remark: null,
+        roleIds: [],
+        orgIds: [],
+        userIds: [],
+        productTypes: [],
+        enable: true,
+        sendSms: false,
+      };
+      this.resetForm("form");
+    },
+    selectOpenUser(){
+      selectUserList({orgIds:this.form.orgIds}).then(response => {
+          this.userList = response.data;
+          let resIds = this.userList ? this.userList.map(item => item.id) : [];
+          if (this.form.userIds && this.form.userIds.length > 0){
+            this.form.userIds = this.form.userIds.filter(item => resIds.includes(item));
+          }
+        }
+      ).catch((err) => {
+      });
+    },
+  }
+};
+</script>
+<style lang="scss" scoped>
+</style>
+