diff --git a/src/api/rule-engine/scene.ts b/src/api/rule-engine/scene.ts new file mode 100644 index 00000000..28cd4b71 --- /dev/null +++ b/src/api/rule-engine/scene.ts @@ -0,0 +1,8 @@ +import server from '@/utils/request'; + + +export const modify = (id: string, data: any) => server.put(`/scene/${id}`, data) + +export const save = (data: any) => server.post(`/scene`, data) + +export const detail = (id: string) => server.get(`/scene/${id}`) \ No newline at end of file diff --git a/src/store/menu.ts b/src/store/menu.ts index 6d77d988..44c0d9fe 100644 --- a/src/store/menu.ts +++ b/src/store/menu.ts @@ -2,6 +2,7 @@ import { defineStore } from 'pinia' import { queryOwnThree } from '@/api/system/menu' import { filterAsnycRouter, MenuItem } from '@/utils/menu' import { isArray } from 'lodash-es' +import { usePermissionStore } from './permission' import router from '@/router' const defaultOwnParams = [ @@ -45,26 +46,15 @@ export const useMenuStore = defineStore({ }), getters: { hasPermission(state) { - return (code: string | string[]) => { - if (!code) { + return (menuCode: string | string[]) => { + if (!menuCode) { return true } if (!!Object.keys(state.menus).length) { - let codes: string[] = [] - - if (typeof code === 'string') { - codes.push(code) - } else { - codes = code + if (typeof menuCode === 'string') { + return !!this.menus[menuCode] } - - return codes.some(_c => { - const menu_code = _c.split(':') - if (menu_code.length > 1) { - return !!this.menus[menu_code[0]]?.buttons?.includes(menu_code[1]) - } - return false - }) + return menuCode.some(code => !!this.menus[code]) } return false } @@ -95,6 +85,8 @@ export const useMenuStore = defineStore({ //过滤非集成的菜单 const resp = await queryOwnThree({ paging: false, terms: defaultOwnParams }) if (resp.success) { + const permission = usePermissionStore() + permission.permissions = {} const { menusData, silderMenus } = filterAsnycRouter(resp.result) this.menus = {} const handleMenuItem = (menu: any) => { @@ -104,6 +96,7 @@ export const useMenuStore = defineStore({ path: menuItem.path, buttons: menuItem.meta.buttons } + permission.permissions[menuItem.name] = menuItem.meta.buttons if (menuItem.children && menuItem.children.length) { handleMenuItem(menuItem.children) } diff --git a/src/store/scene.ts b/src/store/scene.ts new file mode 100644 index 00000000..3a57aaa2 --- /dev/null +++ b/src/store/scene.ts @@ -0,0 +1,132 @@ +import { defineStore } from 'pinia' +import type { BranchesType, FormModelType, SceneItem } from '@/views/rule-engine/Scene/typings' +import { detail } from '@/api/rule-engine/scene' +import { cloneDeep, isArray } from 'lodash-es' +import { randomString } from '@/utils/utils' + +type DataType = { + data: FormModelType | any + productCache: any +} + +const assignmentKey = (data: any[]): any[] => { + const onlyKey = ['when', 'then', 'terms', 'actions']; + if (!data) return []; + + return data.map((item: any) => { + if (item) { + item.key = randomString(); + Object.keys(item).some((key) => { + if (onlyKey.includes(key) && isArray(item[key])) { + item[key] = assignmentKey(item[key]); + } + }); + } + return item; + }); +}; + +export const defaultBranches = [ + { + when: [ + { + terms: [ + { + column: undefined, + value: undefined, + termType: undefined, + key: 'params_1', + type: 'and', + }, + ], + type: 'and', + key: 'terms_1', + }, + ], + key: 'branches_1', + shakeLimit: { + enabled: false, + time: 1, + threshold: 1, + alarmFirst: false, + }, + then: [], + }, +]; + +const defaultOptions = { + trigger: {}, + when: [ + { + terms: [ + { + terms: [], + }, + ], + }, + ], +}; + +export const useSceneStore = defineStore({ + id: 'scene', + state: (): DataType => { + return { + data: { + trigger: { type: ''}, + options: defaultOptions, + branches: defaultBranches, + description: '' + }, + productCache: {} + } + }, + actions: { + /** + * 初始化数据 + */ + initData() { + + }, + /** + * 获取详情 + * @param id + */ + async getDetail(id: string) { + const resp = await detail(id) + if (resp.success) { + const result = resp.result as SceneItem + const triggerType = result.triggerType + let branches: any[] = result.branches + + if (!branches) { + branches = cloneDeep(defaultBranches) + if (triggerType === 'device') { + branches.push(null) + } + } else { + const branchesLength = branches.length; + if ( + triggerType === 'device' && + ((branchesLength === 1 && !!branches[0]?.when?.length) || // 有一组数据并且when有值 + (branchesLength > 1 && !branches[branchesLength - 1]?.when?.length)) // 有多组否则数据,并且最后一组when有值 + ) { + branches.push(null); + } + } + + this.data = { + ...result, + trigger: result.trigger || {}, + branches: cloneDeep(assignmentKey(branches)), + options: {...defaultOptions, ...result.options }, + } + } + }, + getProduct() { + + } + }, + getters: { + + } +}) \ No newline at end of file diff --git a/src/views/rule-engine/Scene/Save/components/TriggerWay.vue b/src/views/rule-engine/Scene/Save/components/TriggerWay.vue new file mode 100644 index 00000000..51d4aa5f --- /dev/null +++ b/src/views/rule-engine/Scene/Save/components/TriggerWay.vue @@ -0,0 +1,119 @@ + + + + + \ No newline at end of file diff --git a/src/views/rule-engine/Scene/Save/index.vue b/src/views/rule-engine/Scene/Save/index.vue index 593b1d44..9d91153f 100644 --- a/src/views/rule-engine/Scene/Save/index.vue +++ b/src/views/rule-engine/Scene/Save/index.vue @@ -1,13 +1,35 @@ - - \ No newline at end of file diff --git a/src/views/rule-engine/Scene/Save/save.vue b/src/views/rule-engine/Scene/Save/save.vue new file mode 100644 index 00000000..ffb36c4f --- /dev/null +++ b/src/views/rule-engine/Scene/Save/save.vue @@ -0,0 +1,104 @@ + + + + + \ No newline at end of file diff --git a/src/views/rule-engine/Scene/index.vue b/src/views/rule-engine/Scene/index.vue index 71ae1f6c..e317f0ce 100644 --- a/src/views/rule-engine/Scene/index.vue +++ b/src/views/rule-engine/Scene/index.vue @@ -5,13 +5,24 @@ /> + > + + +