Commit 1eab6b9709cb624c949f945224699107f3fb54a0
Merge branch 'f-dev' into 'main'
fix:DEFECT-432 修复超级管理员分配菜单权限和按钮权限问题和修改场景联动 See merge request huang/yun-teng-iot-front!230
Showing
5 changed files
with
203 additions
and
83 deletions
| @@ -17,9 +17,10 @@ enum ScreenManagerApi { | @@ -17,9 +17,10 @@ enum ScreenManagerApi { | ||
| 17 | SCREEN_UPDATE_URL = '/sceneLinkage/update', | 17 | SCREEN_UPDATE_URL = '/sceneLinkage/update', |
| 18 | SCREEN_ORGANIZATION_URL = '/organization/me/list', | 18 | SCREEN_ORGANIZATION_URL = '/organization/me/list', |
| 19 | SCREEN_CHANGE_STATUS = '/convert/update/scene', | 19 | SCREEN_CHANGE_STATUS = '/convert/update/scene', |
| 20 | - SCREEN_GET_BY_DEPTID = '/sceneLinkage/device/', | ||
| 21 | - GET_ATTRBUTELIST = '/deviceProfile/devices/keys/timeseries', | 20 | + SCREEN_GET_BY_DEPTID = '/sceneLinkage/device', |
| 21 | + GET_ATTRBUTELIST = '/device/keys', | ||
| 22 | ALARM_PROFILE = '/alarm/profile/', | 22 | ALARM_PROFILE = '/alarm/profile/', |
| 23 | + MASTER_GET_DEVICE = '/device/list/master', | ||
| 23 | } | 24 | } |
| 24 | 25 | ||
| 25 | /** | 26 | /** |
| @@ -55,6 +56,16 @@ export const screenLinkPageAddApi = (params: ScreenAddModel, isUpdate: boolean) | @@ -55,6 +56,16 @@ export const screenLinkPageAddApi = (params: ScreenAddModel, isUpdate: boolean) | ||
| 55 | }; | 56 | }; |
| 56 | 57 | ||
| 57 | /** | 58 | /** |
| 59 | + * 获取主设备列表(exclude子设备) | ||
| 60 | + * @param params organizationId | ||
| 61 | + */ | ||
| 62 | +export const byOganizationIdGetMasterDevice = (params) => { | ||
| 63 | + return defHttp.get({ | ||
| 64 | + url: ScreenManagerApi.MASTER_GET_DEVICE + '/' + params, | ||
| 65 | + }); | ||
| 66 | +}; | ||
| 67 | + | ||
| 68 | +/** | ||
| 58 | * 删除场景联动 | 69 | * 删除场景联动 |
| 59 | * @param params pageSize page name | 70 | * @param params pageSize page name |
| 60 | */ | 71 | */ |
| @@ -99,13 +110,8 @@ export const getOrganizationAlarmConfig = (params: { organizationId }) => { | @@ -99,13 +110,8 @@ export const getOrganizationAlarmConfig = (params: { organizationId }) => { | ||
| 99 | /** | 110 | /** |
| 100 | * 获取设备属性列表 | 111 | * 获取设备属性列表 |
| 101 | */ | 112 | */ |
| 102 | -export const getAttribute = () => { | ||
| 103 | - return defHttp.get( | ||
| 104 | - { | ||
| 105 | - url: ScreenManagerApi.GET_ATTRBUTELIST, | ||
| 106 | - }, | ||
| 107 | - { | ||
| 108 | - joinPrefix: false, | ||
| 109 | - } | ||
| 110 | - ); | 113 | +export const getAttribute = (orgId, deviceIds) => { |
| 114 | + return defHttp.get({ | ||
| 115 | + url: ScreenManagerApi.GET_ATTRBUTELIST + '/' + orgId + '?' + deviceIds, | ||
| 116 | + }); | ||
| 111 | }; | 117 | }; |
| @@ -11,12 +11,11 @@ import projectSetting from '/@/settings/projectSetting'; | @@ -11,12 +11,11 @@ import projectSetting from '/@/settings/projectSetting'; | ||
| 11 | import { PermissionModeEnum } from '/@/enums/appEnum'; | 11 | import { PermissionModeEnum } from '/@/enums/appEnum'; |
| 12 | import { asyncRoutes } from '/@/router/routes'; | 12 | import { asyncRoutes } from '/@/router/routes'; |
| 13 | import { ERROR_LOG_ROUTE, PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'; | 13 | import { ERROR_LOG_ROUTE, PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'; |
| 14 | -import { filter } from '/@/utils/helper/treeHelper'; | ||
| 15 | -import { getMenuList } from '/@/api/sys/menu'; | 14 | +import { filter, forEach } from '/@/utils/helper/treeHelper'; |
| 15 | +import { getMenuList, getMenusIdsByRoleId } from '/@/api/sys/menu'; | ||
| 16 | import { getPermCode } from '/@/api/sys/user'; | 16 | import { getPermCode } from '/@/api/sys/user'; |
| 17 | import { useMessage } from '/@/hooks/web/useMessage'; | 17 | import { useMessage } from '/@/hooks/web/useMessage'; |
| 18 | import { PageEnum } from '/@/enums/pageEnum'; | 18 | import { PageEnum } from '/@/enums/pageEnum'; |
| 19 | -import { router as navRouter } from '/@/router'; | ||
| 20 | import { MENU_LIST, USER_INFO_KEY } from '/@/enums/cacheEnum'; | 19 | import { MENU_LIST, USER_INFO_KEY } from '/@/enums/cacheEnum'; |
| 21 | import { getAuthCache, setAuthCache } from '/@/utils/auth'; | 20 | import { getAuthCache, setAuthCache } from '/@/utils/auth'; |
| 22 | import { createStorage } from '/@/utils/cache/index'; | 21 | import { createStorage } from '/@/utils/cache/index'; |
| @@ -90,8 +89,48 @@ export const usePermissionStore = defineStore({ | @@ -90,8 +89,48 @@ export const usePermissionStore = defineStore({ | ||
| 90 | this.lastBuildMenuTime = 0; | 89 | this.lastBuildMenuTime = 0; |
| 91 | }, | 90 | }, |
| 92 | async changePermissionCode() { | 91 | async changePermissionCode() { |
| 92 | + const filterMenu = (allMenuList, menuIdsList) => { | ||
| 93 | + return allMenuList | ||
| 94 | + .filter((item) => { | ||
| 95 | + return menuIdsList.indexOf(item.id) > -1; | ||
| 96 | + }) | ||
| 97 | + .map((subItem) => { | ||
| 98 | + subItem = Object.assign({}, subItem); | ||
| 99 | + if (subItem.children) { | ||
| 100 | + subItem.children = filterMenu(subItem.children, menuIdsList); | ||
| 101 | + } | ||
| 102 | + return subItem; | ||
| 103 | + }); | ||
| 104 | + }; | ||
| 105 | + const userInfo: any = getAuthCache(USER_INFO_KEY); | ||
| 106 | + const isSysAdmin = 'SYS_ADMIN'; | ||
| 107 | + const routeList = (await getMenuList(2)) as AppRouteRecordRaw[]; | ||
| 108 | + let getSysPermission = []; | ||
| 109 | + /** | ||
| 110 | + * 否则不是超级管理员-获取对应角色的权限列表 | ||
| 111 | + */ | ||
| 93 | const codeList = await getPermCode(); | 112 | const codeList = await getPermCode(); |
| 94 | this.setPermCodeList(codeList); | 113 | this.setPermCodeList(codeList); |
| 114 | + /** | ||
| 115 | + * 如果是超级管理员则获取对应权限列表 | ||
| 116 | + */ | ||
| 117 | + if (userInfo.roles.includes(isSysAdmin) || userInfo.realName == '超级管理员') { | ||
| 118 | + const getMenuIds = await getMenusIdsByRoleId(userInfo.plainRoles[0].roleId); | ||
| 119 | + //根据对应的使用者的菜单数组和所有菜单数组对象进行过滤,返回最终需要的菜单 | ||
| 120 | + const newMenu = filterMenu(routeList, getMenuIds); | ||
| 121 | + /** | ||
| 122 | + * 递归获取对应所有菜单的权限列表 | ||
| 123 | + */ | ||
| 124 | + function lookForAllId(data = [], arr = []) { | ||
| 125 | + for (const item of data) { | ||
| 126 | + arr.push(item.permission); | ||
| 127 | + if (item.children && item.children.length) lookForAllId(item.children, arr); | ||
| 128 | + } | ||
| 129 | + return arr; | ||
| 130 | + } | ||
| 131 | + getSysPermission = lookForAllId(newMenu); | ||
| 132 | + this.setPermCodeList(getSysPermission); | ||
| 133 | + } | ||
| 95 | }, | 134 | }, |
| 96 | async buildRoutesAction(): Promise<AppRouteRecordRaw[]> { | 135 | async buildRoutesAction(): Promise<AppRouteRecordRaw[]> { |
| 97 | const { t } = useI18n(); | 136 | const { t } = useI18n(); |
| @@ -183,70 +222,87 @@ export const usePermissionStore = defineStore({ | @@ -183,70 +222,87 @@ export const usePermissionStore = defineStore({ | ||
| 183 | // !Simulate to obtain permission codes from the background, | 222 | // !Simulate to obtain permission codes from the background, |
| 184 | // this function may only need to be executed once, and the actual project can be put at the right time by itself | 223 | // this function may only need to be executed once, and the actual project can be put at the right time by itself |
| 185 | let routeList: AppRouteRecordRaw[] = []; | 224 | let routeList: AppRouteRecordRaw[] = []; |
| 186 | - try { | ||
| 187 | - const userInfo = getAuthCache(USER_INFO_KEY); | ||
| 188 | - if (userInfo?.needSetPwd == true) { | ||
| 189 | - routeList = [ | ||
| 190 | - { | ||
| 191 | - name: 'routes.common.system.system', | ||
| 192 | - parentId: '', | ||
| 193 | - children: [ | ||
| 194 | - { | ||
| 195 | - id: 'a8ffa8c5-637e-476b-a9e6-b60cebe95718', | ||
| 196 | - createTime: '2021-09-10 20:50:55', | ||
| 197 | - updateTime: '2021-11-16 18:58:24', | ||
| 198 | - name: 'routes.common.system.modifyPassword', | ||
| 199 | - parentId: 'a8ffa8c5-637e-471b-a9e6-b60cebe95713', | ||
| 200 | - children: [], | ||
| 201 | - path: '/system/changePassword', | ||
| 202 | - type: 'SYSADMIN', | ||
| 203 | - permission: 'system:password:view', | ||
| 204 | - sort: 6, | ||
| 205 | - component: '/system/changePassword/index', | ||
| 206 | - meta: { | ||
| 207 | - icon: 'bx:bx-home', | ||
| 208 | - title: 'routes.common.system.modifyPassword', | ||
| 209 | - menuType: '1', | ||
| 210 | - ignoreKeepAlive: true, | ||
| 211 | - hideMenu: false, | ||
| 212 | - status: '0', | ||
| 213 | - }, | ||
| 214 | - redirect: '', | 225 | + const userInfo: any = getAuthCache(USER_INFO_KEY); |
| 226 | + const filterMenu = (allMenuList, menuIdsList) => { | ||
| 227 | + return allMenuList | ||
| 228 | + .filter((item) => { | ||
| 229 | + return menuIdsList.indexOf(item.id) > -1; | ||
| 230 | + }) | ||
| 231 | + .map((subItem) => { | ||
| 232 | + subItem = Object.assign({}, subItem); | ||
| 233 | + if (subItem.children) { | ||
| 234 | + subItem.children = filterMenu(subItem.children, menuIdsList); | ||
| 235 | + } | ||
| 236 | + return subItem; | ||
| 237 | + }); | ||
| 238 | + }; | ||
| 239 | + if (userInfo?.needSetPwd == true) { | ||
| 240 | + routeList = [ | ||
| 241 | + { | ||
| 242 | + name: 'routes.common.system.system', | ||
| 243 | + parentId: '', | ||
| 244 | + children: [ | ||
| 245 | + { | ||
| 246 | + id: 'a8ffa8c5-637e-476b-a9e6-b60cebe95718', | ||
| 247 | + createTime: '2021-09-10 20:50:55', | ||
| 248 | + updateTime: '2021-11-16 18:58:24', | ||
| 249 | + name: 'routes.common.system.modifyPassword', | ||
| 250 | + parentId: 'a8ffa8c5-637e-471b-a9e6-b60cebe95713', | ||
| 251 | + children: [], | ||
| 252 | + path: '/system/changePassword', | ||
| 253 | + type: 'SYSADMIN', | ||
| 254 | + permission: 'system:password:view', | ||
| 255 | + sort: 6, | ||
| 256 | + component: '/system/changePassword/index', | ||
| 257 | + meta: { | ||
| 258 | + icon: 'bx:bx-home', | ||
| 259 | + title: 'routes.common.system.modifyPassword', | ||
| 260 | + menuType: '1', | ||
| 261 | + ignoreKeepAlive: true, | ||
| 262 | + hideMenu: false, | ||
| 263 | + status: '0', | ||
| 215 | }, | 264 | }, |
| 216 | - ], | ||
| 217 | - path: '/system', | ||
| 218 | - type: 'SYSADMIN', | ||
| 219 | - permission: '', | ||
| 220 | - sort: 6, | ||
| 221 | - component: 'LAYOUT', | ||
| 222 | - meta: { | ||
| 223 | - icon: 'bx:bx-home', | ||
| 224 | - title: 'routes.common.system.system', | ||
| 225 | - status: '0', | ||
| 226 | - menuType: '0', | 265 | + redirect: '', |
| 227 | }, | 266 | }, |
| 228 | - redirect: '/system/systemManagement', | 267 | + ], |
| 268 | + path: '/system', | ||
| 269 | + type: 'SYSADMIN', | ||
| 270 | + permission: '', | ||
| 271 | + sort: 6, | ||
| 272 | + component: 'LAYOUT', | ||
| 273 | + meta: { | ||
| 274 | + icon: 'bx:bx-home', | ||
| 275 | + title: 'routes.common.system.system', | ||
| 276 | + status: '0', | ||
| 277 | + menuType: '0', | ||
| 229 | }, | 278 | }, |
| 230 | - ] as AppRouteRecordRaw[]; | ||
| 231 | - } else { | ||
| 232 | - this.changePermissionCode(); | ||
| 233 | - routeList = (await getMenuList(1)) as AppRouteRecordRaw[]; | ||
| 234 | - createStorage('MENU_LIST', JSON.stringify(routeList)); | ||
| 235 | - setAuthCache('MENU_LIST', routeList); | 279 | + redirect: '/system/systemManagement', |
| 280 | + }, | ||
| 281 | + ] as AppRouteRecordRaw[]; | ||
| 282 | + } else { | ||
| 283 | + this.changePermissionCode(); | ||
| 284 | + routeList = (await getMenuList(1)) as AppRouteRecordRaw[]; | ||
| 285 | + const isSysAdmin = 'SYS_ADMIN'; | ||
| 286 | + /** | ||
| 287 | + * 解决超级管理员分配菜单权限问题 | ||
| 288 | + */ | ||
| 289 | + if (userInfo.roles.includes(isSysAdmin) || userInfo.realName == '超级管理员') { | ||
| 290 | + const getMenuIds = await getMenusIdsByRoleId(userInfo.plainRoles[0].roleId); | ||
| 291 | + //根据对应的使用者的菜单数组和所有菜单数组对象进行过滤,返回最终需要的菜单 | ||
| 292 | + const newMenu = filterMenu(routeList, getMenuIds); | ||
| 293 | + routeList = newMenu; | ||
| 236 | } | 294 | } |
| 237 | - } catch (error) { | ||
| 238 | - console.error(error); | ||
| 239 | - } // Dynamically introduce components | 295 | + createStorage('MENU_LIST', JSON.stringify(routeList)); |
| 296 | + setAuthCache('MENU_LIST', routeList); | ||
| 297 | + } | ||
| 298 | + // Dynamically introduce components | ||
| 240 | routeList = transformObjToRoute(routeList); | 299 | routeList = transformObjToRoute(routeList); |
| 241 | - | ||
| 242 | // Background routing to menu structure | 300 | // Background routing to menu structure |
| 243 | const backMenuList = transformRouteToMenu(routeList); | 301 | const backMenuList = transformRouteToMenu(routeList); |
| 244 | this.setBackMenuList(backMenuList); | 302 | this.setBackMenuList(backMenuList); |
| 245 | - | ||
| 246 | // remove meta.ignoreRoute item | 303 | // remove meta.ignoreRoute item |
| 247 | routeList = filter(routeList, routeRemoveIgnoreFilter); | 304 | routeList = filter(routeList, routeRemoveIgnoreFilter); |
| 248 | routeList = routeList.filter(routeRemoveIgnoreFilter); | 305 | routeList = routeList.filter(routeRemoveIgnoreFilter); |
| 249 | - | ||
| 250 | routeList = flatMultiLevelRoutes(routeList); | 306 | routeList = flatMultiLevelRoutes(routeList); |
| 251 | routes = [PAGE_NOT_FOUND_ROUTE, ...routeList]; | 307 | routes = [PAGE_NOT_FOUND_ROUTE, ...routeList]; |
| 252 | break; | 308 | break; |
| @@ -21,6 +21,7 @@ | @@ -21,6 +21,7 @@ | ||
| 21 | class="mt-4" | 21 | class="mt-4" |
| 22 | title="触发器" | 22 | title="触发器" |
| 23 | :index="index" | 23 | :index="index" |
| 24 | + :provideOrgid="provideOrgid" | ||
| 24 | :ref="skipUnwrap.triggerItemRefs" | 25 | :ref="skipUnwrap.triggerItemRefs" |
| 25 | @delete="deleteTriggerOrCondition" | 26 | @delete="deleteTriggerOrCondition" |
| 26 | /> | 27 | /> |
| @@ -42,6 +43,7 @@ | @@ -42,6 +43,7 @@ | ||
| 42 | class="mt-4" | 43 | class="mt-4" |
| 43 | title="执行条件" | 44 | title="执行条件" |
| 44 | :index="index" | 45 | :index="index" |
| 46 | + :provideOrgid="provideOrgid" | ||
| 45 | :ref="skipUnwrap.conditionItemRefs" | 47 | :ref="skipUnwrap.conditionItemRefs" |
| 46 | @delete="deleteTriggerOrCondition" | 48 | @delete="deleteTriggerOrCondition" |
| 47 | /> | 49 | /> |
| @@ -94,8 +96,10 @@ | @@ -94,8 +96,10 @@ | ||
| 94 | import { useMessage } from '/@/hooks/web/useMessage'; | 96 | import { useMessage } from '/@/hooks/web/useMessage'; |
| 95 | import { | 97 | import { |
| 96 | screenLinkPageAddApi, | 98 | screenLinkPageAddApi, |
| 97 | - screenLinkPageByDeptIdGetDevice, | 99 | + // screenLinkPageByDeptIdGetDevice, |
| 98 | getOrganizationAlarmConfig, | 100 | getOrganizationAlarmConfig, |
| 101 | + byOganizationIdGetMasterDevice, | ||
| 102 | + getAttribute, | ||
| 99 | } from '/@/api/ruleengine/ruleengineApi'; | 103 | } from '/@/api/ruleengine/ruleengineApi'; |
| 100 | import TriggerOrCondition from './cpns/Trigger-Condition.vue'; | 104 | import TriggerOrCondition from './cpns/Trigger-Condition.vue'; |
| 101 | import Action from './cpns/Action.vue'; | 105 | import Action from './cpns/Action.vue'; |
| @@ -104,6 +108,7 @@ | @@ -104,6 +108,7 @@ | ||
| 104 | 108 | ||
| 105 | const emit = defineEmits(['register', 'success']); | 109 | const emit = defineEmits(['register', 'success']); |
| 106 | 110 | ||
| 111 | + const provideOrgid = ref(''); | ||
| 107 | const { createMessage } = useMessage(); | 112 | const { createMessage } = useMessage(); |
| 108 | const triggerData = ref([]); | 113 | const triggerData = ref([]); |
| 109 | const conditionData = ref([]); | 114 | const conditionData = ref([]); |
| @@ -120,6 +125,7 @@ | @@ -120,6 +125,7 @@ | ||
| 120 | let getConditionFormValue = ref([]); | 125 | let getConditionFormValue = ref([]); |
| 121 | let getActionFormValue = ref([]); | 126 | let getActionFormValue = ref([]); |
| 122 | const editEntryIdData = ref([]); | 127 | const editEntryIdData = ref([]); |
| 128 | + let editAttrIdData = []; | ||
| 123 | const editAlarmConfigData = ref([]); | 129 | const editAlarmConfigData = ref([]); |
| 124 | const isUpdate = ref(false); | 130 | const isUpdate = ref(false); |
| 125 | const id = ref(undefined); | 131 | const id = ref(undefined); |
| @@ -151,21 +157,25 @@ | @@ -151,21 +157,25 @@ | ||
| 151 | await setFieldsValue(data.record); | 157 | await setFieldsValue(data.record); |
| 152 | id.value = recordId; | 158 | id.value = recordId; |
| 153 | tenantId.value = recordTenantId; | 159 | tenantId.value = recordTenantId; |
| 160 | + provideOrgid.value = organizationId; | ||
| 154 | // 获取当前组织下的设备列表 | 161 | // 获取当前组织下的设备列表 |
| 155 | - const options = await screenLinkPageByDeptIdGetDevice({ | ||
| 156 | - organizationId, | ||
| 157 | - }); | 162 | + const options = await byOganizationIdGetMasterDevice(organizationId); |
| 158 | // 获取当前组织下的告警配置 | 163 | // 获取当前组织下的告警配置 |
| 159 | const alarmConfig = await getOrganizationAlarmConfig({ organizationId }); | 164 | const alarmConfig = await getOrganizationAlarmConfig({ organizationId }); |
| 165 | + // 获取当前组织下的属性列表 | ||
| 166 | + const attrList = await getAttribute( | ||
| 167 | + organizationId, | ||
| 168 | + triggers.map((m) => m.entityId).join(',') | ||
| 169 | + ); | ||
| 160 | 170 | ||
| 161 | // 生成回显时对应得组件数量 | 171 | // 生成回显时对应得组件数量 |
| 162 | triggerData.value = [...new Array(triggers.length).keys()]; | 172 | triggerData.value = [...new Array(triggers.length).keys()]; |
| 163 | conditionData.value = [...new Array(doConditions.length).keys()]; | 173 | conditionData.value = [...new Array(doConditions.length).keys()]; |
| 164 | actionData.value = [...new Array(doActions.length).keys()]; | 174 | actionData.value = [...new Array(doActions.length).keys()]; |
| 165 | // 回显设备列表 | 175 | // 回显设备列表 |
| 166 | - editEntryIdData.value = options.items.map((item) => { | 176 | + editEntryIdData.value = options.map((item) => { |
| 167 | return { | 177 | return { |
| 168 | - value: item.tbDeviceId, | 178 | + value: item.id, |
| 169 | label: item.name, | 179 | label: item.name, |
| 170 | }; | 180 | }; |
| 171 | }); | 181 | }); |
| @@ -176,11 +186,15 @@ | @@ -176,11 +186,15 @@ | ||
| 176 | }; | 186 | }; |
| 177 | }); | 187 | }); |
| 178 | deviceList.value = editEntryIdData.value; | 188 | deviceList.value = editEntryIdData.value; |
| 189 | + //回显属性列表 | ||
| 190 | + editAttrIdData = attrList; | ||
| 179 | nextTick(() => { | 191 | nextTick(() => { |
| 180 | setEditFields(skipUnwrap.triggerItemRefs, editEntryIdData); | 192 | setEditFields(skipUnwrap.triggerItemRefs, editEntryIdData); |
| 181 | setEditFields(skipUnwrap.conditionItemRefs, editEntryIdData); | 193 | setEditFields(skipUnwrap.conditionItemRefs, editEntryIdData); |
| 182 | setEditFields(skipUnwrap.actionItemRefs, editEntryIdData); | 194 | setEditFields(skipUnwrap.actionItemRefs, editEntryIdData); |
| 183 | setEditAlarmConfig(skipUnwrap.actionItemRefs, editAlarmConfigData); | 195 | setEditAlarmConfig(skipUnwrap.actionItemRefs, editAlarmConfigData); |
| 196 | + setEditAttr(skipUnwrap.triggerItemRefs, editAttrIdData); | ||
| 197 | + setEditAttr(skipUnwrap.conditionItemRefs, editAttrIdData); | ||
| 184 | }); | 198 | }); |
| 185 | 199 | ||
| 186 | const map = { | 200 | const map = { |
| @@ -198,12 +212,15 @@ | @@ -198,12 +212,15 @@ | ||
| 198 | unref(skipUnwrap.triggerItemRefs)[index].isUpdate = true; | 212 | unref(skipUnwrap.triggerItemRefs)[index].isUpdate = true; |
| 199 | unref(skipUnwrap.triggerItemRefs)[index].alarmScheduleRef.scheduleData = | 213 | unref(skipUnwrap.triggerItemRefs)[index].alarmScheduleRef.scheduleData = |
| 200 | trigger.triggerCondition.schedule; | 214 | trigger.triggerCondition.schedule; |
| 215 | + const getAttrKeyOption = trigger?.triggerCondition?.condition?.condition.map( | ||
| 216 | + (m) => m.key.key | ||
| 217 | + ); | ||
| 201 | unref(skipUnwrap.triggerItemRefs)[index].setFieldsFormValueFun({ | 218 | unref(skipUnwrap.triggerItemRefs)[index].setFieldsFormValueFun({ |
| 202 | triggered: trigger?.triggerCondition?.condition?.spec?.type, | 219 | triggered: trigger?.triggerCondition?.condition?.spec?.type, |
| 203 | device: trigger?.entityType, | 220 | device: trigger?.entityType, |
| 204 | triggerType: trigger?.triggerType, | 221 | triggerType: trigger?.triggerType, |
| 205 | type1: trigger?.triggerCondition?.condition?.condition[0]?.key?.type, | 222 | type1: trigger?.triggerCondition?.condition?.condition[0]?.key?.type, |
| 206 | - type2: trigger?.triggerCondition?.condition?.condition[0]?.key?.key, | 223 | + type2: getAttrKeyOption, |
| 207 | operationType: trigger?.triggerCondition?.condition?.condition[0]?.valueType, | 224 | operationType: trigger?.triggerCondition?.condition?.condition[0]?.valueType, |
| 208 | detail: trigger?.triggerCondition?.alarmDetails, | 225 | detail: trigger?.triggerCondition?.alarmDetails, |
| 209 | entityId: trigger?.entityId, | 226 | entityId: trigger?.entityId, |
| @@ -270,12 +287,15 @@ | @@ -270,12 +287,15 @@ | ||
| 270 | unref(skipUnwrap.conditionItemRefs)[index].isUpdate = true; | 287 | unref(skipUnwrap.conditionItemRefs)[index].isUpdate = true; |
| 271 | unref(skipUnwrap.conditionItemRefs)[index].alarmScheduleRef.scheduleData = | 288 | unref(skipUnwrap.conditionItemRefs)[index].alarmScheduleRef.scheduleData = |
| 272 | condition.triggerCondition.schedule; | 289 | condition.triggerCondition.schedule; |
| 290 | + const getAttrKeyOption = condition?.triggerCondition?.condition?.condition.map( | ||
| 291 | + (m) => m.key.key | ||
| 292 | + ); | ||
| 273 | unref(skipUnwrap.conditionItemRefs)[index].setFieldsFormValueFun({ | 293 | unref(skipUnwrap.conditionItemRefs)[index].setFieldsFormValueFun({ |
| 274 | triggered: condition?.triggerCondition?.condition?.spec?.type, | 294 | triggered: condition?.triggerCondition?.condition?.spec?.type, |
| 275 | device: condition?.entityType, | 295 | device: condition?.entityType, |
| 276 | triggerType: condition?.triggerType, | 296 | triggerType: condition?.triggerType, |
| 277 | type1: condition?.triggerCondition?.condition?.condition[0]?.key?.type, | 297 | type1: condition?.triggerCondition?.condition?.condition[0]?.key?.type, |
| 278 | - type2: condition?.triggerCondition?.condition?.condition[0]?.key?.key, | 298 | + type2: getAttrKeyOption, |
| 279 | operationType: condition?.triggerCondition?.condition?.condition[0]?.valueType, | 299 | operationType: condition?.triggerCondition?.condition?.condition[0]?.valueType, |
| 280 | detail: condition?.triggerCondition?.alarmDetails, | 300 | detail: condition?.triggerCondition?.alarmDetails, |
| 281 | entityId: condition?.entityId, | 301 | entityId: condition?.entityId, |
| @@ -471,17 +491,26 @@ | @@ -471,17 +491,26 @@ | ||
| 471 | item.updateEditFieldAlarmConfig(alarmConfigList); | 491 | item.updateEditFieldAlarmConfig(alarmConfigList); |
| 472 | }); | 492 | }); |
| 473 | }; | 493 | }; |
| 494 | + //设置设备属性的options | ||
| 495 | + const setEditAttr = (linkAge, attrList) => { | ||
| 496 | + unref(linkAge).map((item) => { | ||
| 497 | + item.updateFieldAttr(attrList); | ||
| 498 | + }); | ||
| 499 | + }; | ||
| 500 | + | ||
| 474 | // 监听组织变化更新设备列表 | 501 | // 监听组织变化更新设备列表 |
| 475 | const deviceList = ref([]); | 502 | const deviceList = ref([]); |
| 476 | const alarmConfigList = ref([]); | 503 | const alarmConfigList = ref([]); |
| 504 | + let watchAttrList = []; | ||
| 477 | watch(organizationId, async (newValue: string) => { | 505 | watch(organizationId, async (newValue: string) => { |
| 478 | if (!newValue) return; | 506 | if (!newValue) return; |
| 479 | - const { items } = await screenLinkPageByDeptIdGetDevice({ organizationId: newValue }); | ||
| 480 | - deviceList.value = items.map((item) => ({ label: item.name, value: item.tbDeviceId })); | 507 | + provideOrgid.value = newValue; |
| 508 | + const items = await byOganizationIdGetMasterDevice(newValue); | ||
| 509 | + deviceList.value = items.map((item) => ({ label: item.name, value: item.id })); | ||
| 510 | + watchAttrList = await getAttribute(newValue, null); | ||
| 481 | setFields(skipUnwrap.triggerItemRefs, true); | 511 | setFields(skipUnwrap.triggerItemRefs, true); |
| 482 | setFields(skipUnwrap.conditionItemRefs, true); | 512 | setFields(skipUnwrap.conditionItemRefs, true); |
| 483 | setFields(skipUnwrap.actionItemRefs, true); | 513 | setFields(skipUnwrap.actionItemRefs, true); |
| 484 | - | ||
| 485 | const data = await getOrganizationAlarmConfig({ organizationId: newValue }); | 514 | const data = await getOrganizationAlarmConfig({ organizationId: newValue }); |
| 486 | alarmConfigList.value = data.map((item) => ({ label: item.name, value: item.id })); | 515 | alarmConfigList.value = data.map((item) => ({ label: item.name, value: item.id })); |
| 487 | setAlarmConfig(skipUnwrap.actionItemRefs, true); | 516 | setAlarmConfig(skipUnwrap.actionItemRefs, true); |
| @@ -492,6 +521,7 @@ | @@ -492,6 +521,7 @@ | ||
| 492 | unref(linkAge).map((item) => { | 521 | unref(linkAge).map((item) => { |
| 493 | isOrganizationChange && item.resetFieldsValueFunc(); | 522 | isOrganizationChange && item.resetFieldsValueFunc(); |
| 494 | item.updateFieldDeviceId(deviceList); | 523 | item.updateFieldDeviceId(deviceList); |
| 524 | + item.updateFieldAttr(watchAttrList); | ||
| 495 | }); | 525 | }); |
| 496 | } | 526 | } |
| 497 | function setAlarmConfig(linkAge, isOrganizationChange = false) { | 527 | function setAlarmConfig(linkAge, isOrganizationChange = false) { |
| @@ -602,3 +632,10 @@ | @@ -602,3 +632,10 @@ | ||
| 602 | }); | 632 | }); |
| 603 | }; | 633 | }; |
| 604 | </script> | 634 | </script> |
| 635 | + | ||
| 636 | +<style lang="less" scoped> | ||
| 637 | + ///统一下拉选择框宽度,否则超出默认宽度会造成页面样式错乱 | ||
| 638 | + :deep(.ant-select-selector) { | ||
| 639 | + max-width: 14.2rem; | ||
| 640 | + } | ||
| 641 | +</style> |
| @@ -257,7 +257,7 @@ export const trigger_condition_schema: FormSchema[] = [ | @@ -257,7 +257,7 @@ export const trigger_condition_schema: FormSchema[] = [ | ||
| 257 | { | 257 | { |
| 258 | field: 'type2', | 258 | field: 'type2', |
| 259 | label: '', | 259 | label: '', |
| 260 | - component: 'AutoComplete', | 260 | + component: 'Select', |
| 261 | componentProps: { | 261 | componentProps: { |
| 262 | placeholder: '请选择属性', | 262 | placeholder: '请选择属性', |
| 263 | }, | 263 | }, |
| @@ -69,7 +69,7 @@ | @@ -69,7 +69,7 @@ | ||
| 69 | import AlarmSchedule from './AlarmSchedule.vue'; | 69 | import AlarmSchedule from './AlarmSchedule.vue'; |
| 70 | import { useModal } from '/@/components/Modal'; | 70 | import { useModal } from '/@/components/Modal'; |
| 71 | 71 | ||
| 72 | - defineProps({ | 72 | + const props = defineProps({ |
| 73 | title: { | 73 | title: { |
| 74 | type: String, | 74 | type: String, |
| 75 | required: true, | 75 | required: true, |
| @@ -78,6 +78,10 @@ | @@ -78,6 +78,10 @@ | ||
| 78 | type: Number, | 78 | type: Number, |
| 79 | required: true, | 79 | required: true, |
| 80 | }, | 80 | }, |
| 81 | + provideOrgid: { | ||
| 82 | + type: String, | ||
| 83 | + default: '', | ||
| 84 | + }, | ||
| 81 | }); | 85 | }); |
| 82 | const emit = defineEmits(['delete']); | 86 | const emit = defineEmits(['delete']); |
| 83 | const isUpdate = ref(false); | 87 | const isUpdate = ref(false); |
| @@ -101,19 +105,35 @@ | @@ -101,19 +105,35 @@ | ||
| 101 | options: deviceList, | 105 | options: deviceList, |
| 102 | onChange(e) { | 106 | onChange(e) { |
| 103 | if (e) { | 107 | if (e) { |
| 104 | - updateFieldAttributeFunc(); | 108 | + updateFieldAttributeFunc(e); |
| 105 | } | 109 | } |
| 106 | }, | 110 | }, |
| 107 | }, | 111 | }, |
| 108 | }); | 112 | }); |
| 109 | }; | 113 | }; |
| 114 | + const updateFieldAttr = (attrList: any[]) => { | ||
| 115 | + const attrMapList = attrList?.map((m) => { | ||
| 116 | + return { | ||
| 117 | + label: m, | ||
| 118 | + value: m, | ||
| 119 | + }; | ||
| 120 | + }); | ||
| 121 | + updateSchema({ | ||
| 122 | + field: 'type2', | ||
| 123 | + componentProps: { | ||
| 124 | + placeholder: '请选择属性', | ||
| 125 | + options: attrMapList, | ||
| 126 | + }, | ||
| 127 | + }); | ||
| 128 | + }; | ||
| 110 | const resetFieldsValueFunc = () => resetFields(); | 129 | const resetFieldsValueFunc = () => resetFields(); |
| 111 | // 回显数据函数 | 130 | // 回显数据函数 |
| 112 | const setFieldsFormValueFun = (fieldsValue) => { | 131 | const setFieldsFormValueFun = (fieldsValue) => { |
| 113 | setFieldsValue(fieldsValue); | 132 | setFieldsValue(fieldsValue); |
| 114 | }; | 133 | }; |
| 115 | - const updateFieldAttributeFunc = async () => { | ||
| 116 | - const data = await getAttribute(); | 134 | + const updateFieldAttributeFunc = async (e) => { |
| 135 | + const joinDeviceIds = e.join(','); | ||
| 136 | + const data = await getAttribute(props.provideOrgid, joinDeviceIds); | ||
| 117 | const options = data.map((m) => { | 137 | const options = data.map((m) => { |
| 118 | return { | 138 | return { |
| 119 | label: m, | 139 | label: m, |
| @@ -178,6 +198,7 @@ | @@ -178,6 +198,7 @@ | ||
| 178 | defineExpose({ | 198 | defineExpose({ |
| 179 | getFieldsValueFunc, | 199 | getFieldsValueFunc, |
| 180 | updateFieldDeviceId, | 200 | updateFieldDeviceId, |
| 201 | + updateFieldAttr, | ||
| 181 | resetFieldsValueFunc, | 202 | resetFieldsValueFunc, |
| 182 | setFieldsFormValueFun, | 203 | setFieldsFormValueFun, |
| 183 | childGetFieldsValue, | 204 | childGetFieldsValue, |