Răsfoiți Sursa

feat:报警规则弹窗下拉框推送用户接口修改

huang, kai (Contractor) 1 săptămână în urmă
părinte
comite
63c74bd58e

+ 15 - 0
admin.ui.plus-master/src/api/admin/AlarmService/alarmRulesApi.ts

@@ -91,5 +91,20 @@ export class alarmRulesApi<SecurityDataType = unknown> extends HttpClient<Securi
   static addForm: any;
   static updateForm: any;
 
+  /**
+   * 获取绑定微信公众号的用户与角色
+   * @request POST:/api/app/push/get-wx-user-role
+   */
+  getWxUserRole = (data: any = {}, params: RequestParams = {}) =>
+    this.request<{ success: boolean; code: string; msg: string; data: any }, any>({
+      path: '/api/app/push/get-wx-user-role',
+      method: 'POST',
+      body: data,
+      secure: true,
+      type: ContentType.Json, // 使用 Json 类型
+      format: 'json',
+      ...params
+    });
+
 }
 

+ 5 - 3
admin.ui.plus-master/src/api/admin/AlarmService/alarmRulesDto.ts

@@ -72,10 +72,12 @@ export interface PageInputAlarmRluesFilterModel {
 
 // /@/api/admin/AlarmService/alarmRulesDto.ts
 export interface UserListItem {
-  userPhone: any;
-  userId: any;
   id: number; // 用户ID
-  userName: string; // 用户名
   nickname?: string; // 昵称(可选)
   phone?: string; // 手机号(可选)
+  roleName: string; // 新增字段,用于存储角色名称
+  name?:string
+  names?:string
+
 }
+

+ 17 - 1
admin.ui.plus-master/src/api/admin/reportManagement/alarm/alarmApi.ts

@@ -1,6 +1,6 @@
 import axios, { AxiosResponse } from 'axios'
 import {ContentType, HttpClient, RequestParams} from "/@/api/admin/http-client";
-import {PageInputAlarmFilterModel,alarmFilterModel,PushRulesQuery, ResultOutputBoolean} from "/@/api/admin/reportManagement/alarm/alarmDto";
+import {PageInputAlarmFilterModel,alarmFilterModel,PushRulesQuery, ResultOutputBoolean, WxUserRoleResult} from "/@/api/admin/reportManagement/alarm/alarmDto";
 import request from '/@/utils/request';
 
 export class AlarmApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType>{
@@ -57,7 +57,23 @@ export class PushRulesApi<SecurityDataType = unknown> extends HttpClient<Securit
   };
 }
 
+// alarmApi.ts
 
+export class PushApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
+  /**
+   * 获取绑定微信公众号的用户与角色
+   */
+  getWxUserAndRole = (params: RequestParams = {}): Promise<WxUserRoleResult> => {
+    return this.request<WxUserRoleResult>({
+      path: '/api/app/push/get-wx-user-role',
+      method: 'POST',
+      secure: true,
+      type: ContentType.UrlEncoded, // 表单格式
+      format: 'json',
+      ...params,
+    });
+  };
+}
 
 
 

+ 17 - 1
admin.ui.plus-master/src/views/admin/statement/alarmManagement/index.vue

@@ -23,7 +23,11 @@
               </el-col>
               <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6" class="mb20">
                 <el-form-item label="报警类型">
-                  <el-input v-model="Data.Filter.alarmType" placeholder="请输入报警类型" clearable></el-input>
+                  <!-- <el-input v-model="Data.Filter.alarmType" placeholder="请输入报警类型" clearable></el-input> -->
+                   <el-select v-model="Data.Filter.alarmType">
+                      <el-option label="所有" :value="''"></el-option>
+                    <el-option v-for="(value, key) in FuelDispenserEnum" :key="key" :label="value" :value="key" />
+                   </el-select>
                 </el-form-item>
               </el-col>
               <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6" class="mb20">
@@ -177,6 +181,18 @@ const Data = reactive({
   total: 0,
 })
 
+enum FuelDispenserEnum {
+  加油机离线 = '加油机离线',
+  通信异常 = '通信异常',
+  非法部件 = '非法部件',
+  厂商不符 = '厂商不符',
+  绑定错误 = '绑定错误',
+  监控微处理器报警 = '监控微处理器报警',
+  安全装置报警 = '安全装置报警',
+  加油机报警 = '加油机报警',
+  检定 = '检定'
+}
+
 /**初始化 */
 const init = async () => {
   Data.loading = true

+ 37 - 35
admin.ui.plus-master/src/views/admin/yujing/alarmRules/components/add-alarmRules.vue

@@ -29,17 +29,24 @@
         <el-form :inline="true" @submit.stop.prevent>
           <el-form-item label="推送用户:" style="width: 100%;" prop="pushUserid">
             <el-select
-              v-model="Data.Filter.pushUserid" 
+              v-model="Data.Filter.pushUserid"
               placeholder="请选择用户"
               multiple
               style="width: 100%;"
-            > 
-              <el-option
-                v-for="user in Data.userList"
-                :key="user.id"
-                :label="`${user.userName} - ${user.nickname || user.phone}`" 
-                :value="user.id" 
-              />
+            >
+              <el-option-group
+                v-for="(group, index) in Data.userList"
+                :key="index"
+                :label="`角色:${group.roleName}`"
+              >
+                <el-option
+                  v-for="user in group.users"
+                  :key="user.id"
+                  :label="`${user.name}`"
+                  :value="user.id"
+                >
+                </el-option>
+              </el-option-group>
             </el-select>
           </el-form-item>
         </el-form>
@@ -286,7 +293,7 @@ import { TemplateFilterDto } from "/@/api/admin/AlarmService/pushTemplateDto";
 import eventBus from "/@/utils/mitt";
 import { ElMessage, type FormRules } from 'element-plus'
 import { UserListItem } from "/@/api/admin/AlarmService/alarmRulesDto"; // 用户数据类型
-
+import { URLSearchParams } from 'url';
 
 // 条件验证规则
 const conditionRules = reactive<FormRules>({
@@ -357,40 +364,35 @@ const Data = reactive({
 
 const getUserList = async () => {
   try {
-    const res = await new alarmRulesApi().getList({
-      currentPage: 1, 
-      pageSize: 100,
-      filter: {
-        userName: "",
-      },
-    });
-    
-    // 去重逻辑
-    const userSet = new Set<number>();
-    const uniqueUsers = res.data.list
-      .map((user: UserListItem) => ({
-        id: user.userId,
-        userName: user.userName,
-        value: user.userId,
-        nickname: user.nickname,
-        phone: user.userPhone,
-      }))
-      .filter((user: { id: number; }) => {
-        if (userSet.has(user.id)) {
-          return false;
+    const res = await new alarmRulesApi().getWxUserRole({});
+    console.log('getWxUserRole接口返回数据:', res);
+    const userDataArray = res.data || [];
+    const userMap = new Map<string, UserListItem[]>();
+    userDataArray.forEach((roleObj) => {
+      const roleName = roleObj.roleName;
+      roleObj.users.forEach((userObj) => {
+        if (!userMap.has(roleName)) {
+          userMap.set(roleName, []);
         }
-        userSet.add(user.id);
-        return true;
+        userMap.get(roleName).push({
+          id: userObj.id,
+          name: userObj.name,
+          roleName: roleName
+        });
       });
-    
-    Data.userList = uniqueUsers;
+    });
+    const groupedUsers = Array.from(userMap.entries()).map(([role, users]) => ({
+      roleName: role,
+      users: users
+    }));
+    Data.userList = groupedUsers;
+    console.log('处理后的用户列表:', Data.userList);
   } catch (error) {
     console.error("获取用户列表失败:", error);
     ElMessage.error("用户列表加载失败");
   }
 };
 
-
 const templateData = reactive({
   Filter: {
     currentPage: 0,