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 @@
+
+
+
+
+
{{ item.label }}
+
{{ item.tip}}
+
+
+
![]()
+
+
+
+
+
+
+
+
\ 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 @@
/>
+ >
+
+
+ 新增
+
+
+
+