浏览代码

预警周期

yusheng 10 月之前
父节点
当前提交
088f2d8ef9

+ 122 - 4
src/views/rulesManagement/earlyWarningRules/components/matter-add.vue

@@ -53,7 +53,7 @@
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="8">
+          <!-- <el-col :span="8">
             <el-form-item label="周期" prop="alertCycleValue">
               <el-col :span="16">
                 <el-input
@@ -76,7 +76,7 @@
                 </el-form-item>
               </el-col>
             </el-form-item>
-          </el-col>
+          </el-col> -->
 
           <el-col :span="8">
             <el-form-item label="状态" prop="enabled">
@@ -144,6 +144,36 @@
               </el-form-item>
             </template>
           </el-table-column>
+          <el-table-column prop="matterRuleId" label="预警规则" width="260">
+            <template slot-scope="scope">
+              <el-form-item
+                :prop="'actionList.' + scope.$index + '.matterRuleId'"
+                label-width="0"
+                :rules="contentConfigFormRules.matterRuleId"
+              >
+                <el-link
+                  type="primary"
+                  :underline="false"
+                  @click="
+                    detailsDialog = true;
+                    currentId = scope.row.matterRuleId;
+                  "
+                >
+                  {{ scope.row.matterRuleName }}
+                </el-link>
+                <el-button
+                  type="primary"
+                  size="mini"
+                  @click="
+                    currentIndex = scope.$index;
+                    addDialog = true;
+                  "
+                >
+                  选择
+                </el-button>
+              </el-form-item>
+            </template>
+          </el-table-column>
           <el-table-column prop="thresholdValue" label="阈值" width="100">
             <template slot-scope="scope">
               <el-form-item
@@ -245,6 +275,49 @@
       ref="selectPersonDialogRef"
       @changeParent="changeParent"
     ></select-person-dialog>
+
+    <!-- 添加规则 -->
+    <ele-modal
+      width="800px"
+      :visible="addDialog"
+      :append-to-body="true"
+      title="规则配置"
+      :close-on-click-modal="false"
+      @update:visible="addDialog = false"
+      :maxable="true"
+    >
+      <el-select v-model="ruleId" size="small" style="width: 100%" filterable>
+        <el-option
+          v-for="item in ruleNameList"
+          :key="item.id"
+          :value="item.id"
+          :label="item.code + '-' + item.name"
+          @click.native="ruleChange(item)"
+        ></el-option>
+      </el-select>
+      <template v-slot:footer>
+        <el-button @click="addDialog = false">取消</el-button>
+        <el-button type="primary" @click="addRule"> 添加 </el-button>
+      </template>
+    </ele-modal>
+
+    <!-- 规则详情 -->
+    <ele-modal
+      width="80%"
+      :visible="detailsDialog"
+      :append-to-body="true"
+      title="规则详情"
+      :close-on-click-modal="false"
+      @update:visible="detailsDialog = false"
+      :maxable="true"
+    >
+      <ruleDetails
+        :isModal="true"
+        :id="currentId"
+        v-if="detailsDialog"
+      ></ruleDetails>
+    </ele-modal>
+    <!-- ruleDetails -->
   </div>
 </template>
 <script>
@@ -262,9 +335,11 @@
   import { notifyTemplatePageAPI } from '@/api/notifyManage';
   import { getUserPage } from '@/api/system/organization';
   import selectPersonDialog from './user-select/user-select.vue';
+  import ruleDetails from '@/views/rulesManagement/matterRules/details.vue';
+  import { getRule } from '@/api/ruleManagement/plan';
 
   export default {
-    components: { selectPersonDialog },
+    components: { selectPersonDialog, ruleDetails },
     props: {
       dialogTitle: {
         type: String,
@@ -280,6 +355,13 @@
     data() {
       return {
         addMatterDialog: false,
+        addDialog: false,
+        detailsDialog: false,
+        ruleId: '',
+        ruleName: '',
+        currentIndex: '',
+        ruleNameList: [],
+        currentId: '',
         formData: {
           ruleCode: '',
           ruleName: '',
@@ -309,6 +391,10 @@
           ruleObjCode: [
             { required: true, message: '请选择预警对象', trigger: 'blur' }
           ],
+          // matterRuleId: [
+          //   { required: true, message: '请选择预警规则', trigger: 'blur' }
+          // ],
+
           alertCycleUnit: [
             { required: true, message: '请输入周期单位', trigger: 'blur' }
           ],
@@ -347,9 +433,36 @@
       this.getAllData();
       this.gettemplateList();
       this.getInfo();
+      this.getRule();
     },
 
     methods: {
+      async getRule() {
+        const res = await getRule({
+          status: 1,
+          type: 8,
+          pageNum: 1,
+          size: -1
+        });
+        this.ruleNameList = res?.list || [];
+      },
+      ruleChange(item) {
+        this.ruleId = item.id;
+        this.ruleName = item.name;
+      },
+      addRule() {
+        this.$set(
+          this.formData.actionList[this.currentIndex],
+          'matterRuleId',
+          this.ruleId
+        );
+        this.$set(
+          this.formData.actionList[this.currentIndex],
+          'matterRuleName',
+          this.ruleName
+        );
+        this.addDialog = false;
+      },
       handleInput(value) {
         this.formData.alertCycleValue = this.$handleInputPublic(value);
       },
@@ -389,7 +502,7 @@
       changeParent(list, index) {
         if (list.length > 10) {
           this.$message.warning('最多选择10个通知人!');
-           return
+          return;
         }
         this.NumberOfPeople = list.length;
         console.log(list.length, 'list', this.isBindPlan);
@@ -531,6 +644,11 @@
         if (form.actionList.length < 1) {
           this.$message.error('请添加事项内容!');
         }
+        let actionListLen = form.actionList.filter((item) => item.matterRuleId);
+        if (actionListLen?.length != form.actionList.length) {
+          this.$message.error('预警规则不能为空!');
+          return;
+        }
         this.$refs.contentConfigForm.validate(async (valid) => {
           if (valid) {
             let request =

+ 36 - 4
src/views/rulesManagement/earlyWarningRules/details.vue

@@ -26,7 +26,7 @@
                 </template>
               </el-form-item>
             </el-col>
-            <el-col :span="6">
+            <!-- <el-col :span="6">
               <el-form-item label="周期">
                 <span> {{ infoData.alertCycleValue || '' }}</span>
                 <template v-if="infoData.alertCycleValue">
@@ -37,7 +37,7 @@
                   </span>
                 </template>
               </el-form-item>
-            </el-col>
+            </el-col> -->
             <el-col :span="6">
               <el-form-item label="状态">
                 <span>
@@ -92,6 +92,20 @@
               label="预警级别"
               width="120"
             />
+            <el-table-column prop="matterRuleId" label="预警规则" width="260">
+              <template slot-scope="scope">
+                <el-link
+                  type="primary"
+                  :underline="false"
+                  @click="
+                    detailsDialog = true;
+                    currentId = scope.row.matterRuleId;
+                  "
+                >
+                  {{ scope.row.matterRuleName }}
+                </el-link>
+              </template>
+            </el-table-column>
             <el-table-column
               align="center"
               prop="thresholdValue"
@@ -108,8 +122,9 @@
               align="center"
               prop="alertMessageTempateCodeName"
               label="模板编码"
-              width="320"
+              width="380"
             />
+            <el-table-column align="center" prop="nextExecuteTime"   width="160" label="下次预警时间" />
             <el-table-column align="center" prop="content" label="内容" />
           </el-table>
         </template>
@@ -117,6 +132,19 @@
 
       <div class="content-detail" v-show="num == 2"></div>
     </el-form>
+        <!-- 规则详情 -->
+        <ele-modal
+      width="80%"
+      :visible="detailsDialog"
+      :append-to-body="true"
+      title="规则详情"
+      :close-on-click-modal="false"
+      @update:visible="detailsDialog = false"
+      :maxable="true"
+    >
+    {{ currentId }}
+      <ruleDetails :isModal="true" :id="currentId" v-if="detailsDialog"></ruleDetails>
+    </ele-modal>
   </div>
 </template>
 <script>
@@ -130,13 +158,17 @@
     listAllAlertLevel
   } from '@/api/ruleManagement/earlyWarning';
   import { notifyTemplatePageAPI } from '@/api/notifyManage';
+  import ruleDetails from '@/views/rulesManagement/matterRules/details.vue';
+
   export default {
     mixins: [dictMixins],
-    components: { RuleCycle },
+    components: { RuleCycle,ruleDetails },
     data() {
       return {
         num: 1,
         dialogVisible: false,
+        detailsDialog:false,
+        currentId:'',
         infoData: {},
         tableData: [],
 

+ 13 - 2
src/views/rulesManagement/matterRules/details.vue

@@ -10,6 +10,7 @@
               type="primary"
               class="ele-btn-icon"
               @click="back()"
+              v-if="!isModal"
             >
               返回
             </el-button>
@@ -51,7 +52,7 @@
               </el-form-item>
             </el-col>
             <el-col :span="24">
-              <el-form-item label="巡点检周期">
+              <el-form-item label="周期">
                 <rule-cycle :formData="infoData" />
               </el-form-item>
             </el-col>
@@ -98,6 +99,15 @@
   export default {
     mixins: [dictMixins],
     components: { RuleCycle },
+    props:{
+      isModal:{
+        default:false,
+        type:Boolean,
+      },
+      id:{
+        default:'',
+      }
+    },
     data() {
       return {
         num: 1,
@@ -105,6 +115,7 @@
         infoData: {},
         form: {},
         type: [],
+        
         tableData: [],
         ruleTypeObj: {
           1: '巡点检规则',
@@ -130,7 +141,7 @@
       },
       // 表格数据
       async getInfo() {
-        const data = await getDetail(this.$route.query.id);
+        const data = await getDetail(this.id||this.$route.query.id);
         this.tableData = data.ruleItems;
         this.infoData = data;
       }