-
\ No newline at end of file
diff --git a/src/views/rule-engine/Scene/Save/Timer/AddModal.vue b/src/views/rule-engine/Scene/Save/Timer/AddModal.vue
index db8b21a9..82631c0f 100644
--- a/src/views/rule-engine/Scene/Save/Timer/AddModal.vue
+++ b/src/views/rule-engine/Scene/Save/Timer/AddModal.vue
@@ -3,7 +3,7 @@
title='触发规则'
visible
:width='820'
- @click='save'
+ @ok='save'
@cancel='cancel'
>
import Timer from '../components/Timer'
import type { OperationTimer } from '@/views/rule-engine/Scene/typings'
-import {nextTick, PropType} from "vue";
-import {TriggerDevice} from "@/views/rule-engine/Scene/typings";
+import { PropType} from "vue";
import {handleTimerOptions} from "@/views/rule-engine/Scene/Save/components/Timer/util";
type Emit = {
(e: 'cancel'): void
- (e: 'save', data: TriggerDevice, options: Record): void
+ (e: 'save', data: OperationTimer, options: Record): void
}
const props = defineProps({
- timer: {
+ value: {
type: Object as PropType,
default: () => ({})
}
@@ -39,14 +38,14 @@ interface AddModelType {
}
const addModel = reactive({
- timer: props.timer
+ timer: props.value
})
const save = async () => {
const timerData = await timerRef.value?.validateFields()
if (timerData) {
- const options = handleTimerOptions(timerData)
- emit("save", timerData, options)
+ const options = handleTimerOptions(addModel.timer)
+ emit("save", addModel.timer, options)
}
}
@@ -54,9 +53,9 @@ const cancel = () => {
emit("cancel")
}
-nextTick(() => {
- Object.assign(addModel, props.timer)
-})
+// watchEffect(() => {
+// addModel.timer = props.value
+// })
diff --git a/src/views/rule-engine/Scene/Save/Timer/Title.vue b/src/views/rule-engine/Scene/Save/Timer/Title.vue
new file mode 100644
index 00000000..b37d035c
--- /dev/null
+++ b/src/views/rule-engine/Scene/Save/Timer/Title.vue
@@ -0,0 +1,58 @@
+
+
+
点击配置定时触发
+
+
+
+
+
+ {{ options.name }}
+
+
+
{{ options.extraName }}
+
+
+ {{ options.when }}
+
+
+ {{ options.time }}
+
+
+ {{ options.extraTime }}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/rule-engine/Scene/Save/Timer/index.vue b/src/views/rule-engine/Scene/Save/Timer/index.vue
index 6d750bb6..81d29554 100644
--- a/src/views/rule-engine/Scene/Save/Timer/index.vue
+++ b/src/views/rule-engine/Scene/Save/Timer/index.vue
@@ -2,7 +2,7 @@
@@ -29,8 +29,7 @@
v-if="visible"
@cancel='visible = false'
@save="save"
- :value="data.trigger.device"
- :options="data.options.trigger"
+ :value="data.trigger.timer"
/>
@@ -41,6 +40,7 @@ import { storeToRefs } from 'pinia';
import Action from '../action/index.vue';
import AddModel from './AddModal.vue'
import AddButton from '../components/AddButton.vue'
+import Title from './Title.vue'
import type { OperationTimer, BranchesThen } from '@/views/rule-engine/Scene/typings'
const sceneStore = useSceneStore();
@@ -49,6 +49,7 @@ const visible = ref(false)
const rules = [{
validator(_: any, v: any) {
+ console.log(v)
if (!v) {
return Promise.reject(new Error('请配置定时触发规则'));
}
@@ -85,5 +86,21 @@ const save = (_data: OperationTimer, options: Record) => {
}
-
\ No newline at end of file
diff --git a/src/views/rule-engine/Scene/Save/action/Device/Product.vue b/src/views/rule-engine/Scene/Save/action/Device/Product.vue
index a487395f..a59386ad 100644
--- a/src/views/rule-engine/Scene/Save/action/Device/Product.vue
+++ b/src/views/rule-engine/Scene/Save/action/Device/Product.vue
@@ -3,7 +3,7 @@
:columns="columns"
type="simple"
@search="handleSearch"
- class="search"
+ class="scene-search"
target="scene-trigger-device-product"
/>
diff --git a/src/views/rule-engine/Scene/Save/action/Device/actions/index.vue b/src/views/rule-engine/Scene/Save/action/Device/actions/index.vue
index ff7cdbb5..f935083e 100644
--- a/src/views/rule-engine/Scene/Save/action/Device/actions/index.vue
+++ b/src/views/rule-engine/Scene/Save/action/Device/actions/index.vue
@@ -22,6 +22,7 @@
showSearch
placeholder="请选择功能"
v-model:value="modelRef.message.functionId"
+ @select='functionSelect'
>
{
+ modelRef.message.inputs = []
+}
+
+const functionRules = [{
+ validator(_: string, value: any) {
+ if (!value?.length && functions.value.length) {
+ return Promise.reject('请输入功能值')
+ } else {
+ const hasValue = value.find((item: { name: string, value: any}) => !item.value)
+ if (hasValue) {
+ const functionItem = functions.value.find((item: any) => item.id === hasValue.name)
+ return Promise.reject(functionItem?.name ? `请输入${functionItem.name}值` : '请输入功能值')
+ }
+ }
+ return Promise.resolve();
+ }
+}]
+
const metadata = ref<{
functions: any[];
properties: any[];
diff --git a/src/views/rule-engine/Scene/Save/action/Device/device/Device.vue b/src/views/rule-engine/Scene/Save/action/Device/device/Device.vue
index b5d35ad2..d3a07b0e 100644
--- a/src/views/rule-engine/Scene/Save/action/Device/device/Device.vue
+++ b/src/views/rule-engine/Scene/Save/action/Device/device/Device.vue
@@ -3,7 +3,7 @@
:columns="columns"
type="simple"
@search="handleSearch"
- class="search"
+ class="scene-search"
target="scene-trigger-device-device"
/>
diff --git a/src/views/rule-engine/Scene/Save/components/FunctionCall/FunctionCall.vue b/src/views/rule-engine/Scene/Save/components/FunctionCall/FunctionCall.vue
index 25a9270a..1dda6f53 100644
--- a/src/views/rule-engine/Scene/Save/components/FunctionCall/FunctionCall.vue
+++ b/src/views/rule-engine/Scene/Save/components/FunctionCall/FunctionCall.vue
@@ -101,6 +101,7 @@ const valueChange = debounce(() => {
const _value = dataSource.value.map(item => ({
name: item.id, value: item.value
}))
+ console.log(_value)
emit('change', _value)
emit('update:value', _value)
}, 500)
diff --git a/src/views/rule-engine/Scene/Save/components/Timer/WhenOption.vue b/src/views/rule-engine/Scene/Save/components/Timer/WhenOption.vue
index 345f3fb1..f1adc12b 100644
--- a/src/views/rule-engine/Scene/Save/components/Timer/WhenOption.vue
+++ b/src/views/rule-engine/Scene/Save/components/Timer/WhenOption.vue
@@ -17,6 +17,7 @@ import { numberToString } from './util'
type Emit = {
(e: 'update:value', data: Array):void
+ (e: 'change', data: Array):void
}
const props = defineProps({
@@ -48,6 +49,7 @@ const change = (number: number) => {
}
rowKeys.value = [..._keys.values()]
emit('update:value', rowKeys.value)
+ emit('change', rowKeys.value)
}
const allActive = computed(() => {
@@ -57,7 +59,9 @@ const allActive = computed(() => {
watch(() => props.type, () => {
const isMonth = props.type === 'month'
const day = isMonth ? 31 : 7
- change(0)
+ if (!props.value.length) {
+ change(0)
+ }
timeOptions.value = new Array(day)
.fill(1)
.map((_, index) => {
diff --git a/src/views/rule-engine/Scene/Save/components/Timer/index.vue b/src/views/rule-engine/Scene/Save/components/Timer/index.vue
index 84eb7e26..7b902b18 100644
--- a/src/views/rule-engine/Scene/Save/components/Timer/index.vue
+++ b/src/views/rule-engine/Scene/Save/components/Timer/index.vue
@@ -15,6 +15,7 @@
]'
option-type='button'
button-style='solid'
+ @change='updateValue'
/>
-
+
-
+
-
+
执行一次
@@ -68,6 +75,7 @@
@change='(v) => {
formModel.period.from = v[0]
formModel.period.to = v[1]
+ updateValue()
}'
/>
@@ -83,6 +91,7 @@
:min='1'
:max='59'
v-model:value='formModel.period.every'
+ @change='updateValue'
>
@@ -103,7 +113,7 @@
diff --git a/src/views/rule-engine/Scene/Save/components/TriggerWay.vue b/src/views/rule-engine/Scene/Save/components/TriggerWay.vue
index 9f5401cc..a079509b 100644
--- a/src/views/rule-engine/Scene/Save/components/TriggerWay.vue
+++ b/src/views/rule-engine/Scene/Save/components/TriggerWay.vue
@@ -57,15 +57,17 @@ const classNames = computed(() => {
})
const handleClick = (type: string) => {
- emit('update:modelValue', type)
+ if (!props.disabled) {
+ emit('update:modelValue', type)
+ }
}
\ 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 d66d8a7c..12d93a3c 100644
--- a/src/views/rule-engine/Scene/Save/index.vue
+++ b/src/views/rule-engine/Scene/Save/index.vue
@@ -114,4 +114,7 @@ onUnmounted(() => {
}
}
}
+
+
\ No newline at end of file
diff --git a/src/views/rule-engine/Scene/Save/style.less b/src/views/rule-engine/Scene/Save/style.less
new file mode 100644
index 00000000..27da287d
--- /dev/null
+++ b/src/views/rule-engine/Scene/Save/style.less
@@ -0,0 +1,3 @@
+.scene-search {
+ padding: 24px 0 0 0;
+}
\ 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 535e7bf4..92f38c15 100644
--- a/src/views/rule-engine/Scene/index.vue
+++ b/src/views/rule-engine/Scene/index.vue
@@ -300,7 +300,7 @@ const getActions = (
];
if (data.triggerType === 'manual') {
const _item: ActionsType = {
- key: 'trigger',
+ key: 'tigger',
text: '手动触发',
disabled: data.state?.value === 'disable',
tooltip: {
diff --git a/src/views/system/Department/components/AddDeviceOrProductDialog.vue b/src/views/system/Department/components/AddDeviceOrProductDialog.vue
index 8603e42f..6481f03e 100644
--- a/src/views/system/Department/components/AddDeviceOrProductDialog.vue
+++ b/src/views/system/Department/components/AddDeviceOrProductDialog.vue
@@ -139,6 +139,7 @@ import {
getDeviceList_api,
getPermission_api,
bindDeviceOrProductList_api,
+ getBindingsPermission,
} from '@/api/system/department';
import { message } from 'jetlinks-ui-components';
import { dictType } from '../typing';
@@ -295,22 +296,17 @@ const table: any = {
const { pageIndex, pageSize, total, data } =
resp.result as resultType;
const ids = data.map((item) => item.id);
- getPermission_api(props.assetType, ids, parentId).then(
+ // fix: bug#10706
+ getBindingsPermission(props.assetType, ids).then(
(perResp: any) => {
- const permissionObj = {};
- perResp.result.forEach((item: any) => {
- permissionObj[item.assetId] = props.allPermission
- .filter((permission) =>
- item.allPermissions.includes(permission.id),
- )
- .map((item) => ({
- label: item.name,
- value: item.id,
+ data.forEach((item) => {
+ item.permissionList = perResp.result
+ .find((f: any) => f.assetId === item.id)
+ .permissionInfoList?.map((m: any) => ({
+ label: m.name,
+ value: m.id,
disabled: true,
}));
- });
- data.forEach((item) => {
- item.permissionList = permissionObj[item.id];
item.selectPermissions = ['read'];
// 产品的状态进行转换处理
@@ -331,11 +327,10 @@ const table: any = {
};
}
});
-
resolve({
code: 200,
result: {
- data: data,
+ data: data.sort((a, b) => a.createTime - b.createTime),
pageIndex,
pageSize,
total,
@@ -344,6 +339,57 @@ const table: any = {
});
},
);
+ // getPermission_api(props.assetType, ids, parentId).then(
+ // (perResp: any) => {
+ // console.log('perResp: ', perResp);
+ // console.log('props.allPermission: ', props.allPermission);
+ // const permissionObj = {};
+ // perResp.result.forEach((item: any) => {
+ // permissionObj[item.assetId] = props.allPermission
+ // .filter((permission) =>
+ // item.allPermissions.includes(permission.id),
+ // )
+ // .map((item) => ({
+ // label: item.name,
+ // value: item.id,
+ // disabled: true,
+ // }));
+ // });
+ // data.forEach((item) => {
+ // item.permissionList = permissionObj[item.id];
+ // item.selectPermissions = ['read'];
+
+ // // 产品的状态进行转换处理
+ // if (props.assetType === 'product') {
+ // item.state = {
+ // value:
+ // item.state === 1
+ // ? 'online'
+ // : item.state === 0
+ // ? 'offline'
+ // : '',
+ // text:
+ // item.state === 1
+ // ? '正常'
+ // : item.state === 0
+ // ? '禁用'
+ // : '',
+ // };
+ // }
+ // });
+
+ // resolve({
+ // code: 200,
+ // result: {
+ // data: data,
+ // pageIndex,
+ // pageSize,
+ // total,
+ // },
+ // status: 200,
+ // });
+ // },
+ // );
});
}),
// 整理参数并获取数据
@@ -398,10 +444,15 @@ const table: any = {
},
};
table.init();
-const selectRow = (keys:string[], rows:any[]) => {
- const okRows = rows.filter(item=>!!item.permissionList.find((permiss:any)=>permiss.value === 'share'));
+const selectRow = (keys: string[], rows: any[]) => {
+ const okRows = rows.filter(
+ (item) =>
+ !!item.permissionList.find(
+ (permiss: any) => permiss.value === 'share',
+ ),
+ );
table.selectedRows = okRows;
- table._selectedRowKeys.value = okRows.map(item=>item.id)
+ table._selectedRowKeys.value = okRows.map((item) => item.id);
};
diff --git a/src/views/system/Department/device/index.vue b/src/views/system/Department/device/index.vue
index 1d1f076e..4ca49771 100644
--- a/src/views/system/Department/device/index.vue
+++ b/src/views/system/Department/device/index.vue
@@ -70,7 +70,7 @@
:status="slotProps.state?.value"
:statusText="slotProps.state?.text"
:statusNames="{
- online: 'success',
+ online: 'processing',
offline: 'error',
notActive: 'warning',
}"
@@ -147,7 +147,7 @@
:status="slotProps.state.value"
:text="slotProps.state.text"
:statusNames="{
- online: 'success',
+ online: 'processing',
offline: 'error',
notActive: 'warning',
}"
@@ -247,6 +247,9 @@ const columns = [
search: {
rename: 'productId$product-info',
type: 'select',
+ handleValue(value: string) {
+ return `id is ${value}`
+ },
options: () =>
new Promise((resolve) => {
const params = {
@@ -288,14 +291,9 @@ const columns = [
search: {
type: 'select',
options: [
- {
- label: '正常',
- value: 1,
- },
- {
- label: '禁用',
- value: 0,
- },
+ { label: '禁用', value: 'notActive' },
+ { label: '离线', value: 'offline' },
+ { label: '在线', value: 'online' },
],
},
scopedSlots: true,
diff --git a/src/views/system/Department/product/index.vue b/src/views/system/Department/product/index.vue
index 9537f7ff..0a113a4c 100644
--- a/src/views/system/Department/product/index.vue
+++ b/src/views/system/Department/product/index.vue
@@ -68,9 +68,8 @@
:status="slotProps.state?.value"
:statusText="slotProps.state?.text"
:statusNames="{
- online: 'success',
- offline: 'error',
- notActive: 'warning',
+ 1: 'processing',
+ 0: 'error',
}"
>
@@ -172,9 +171,8 @@
:status="slotProps.state.value"
:text="slotProps.state.text"
:statusNames="{
- online: 'success',
- offline: 'error',
- notActive: 'warning',
+ 1: 'processing',
+ 0: 'error',
}"
>
diff --git a/src/views/system/User/index.vue b/src/views/system/User/index.vue
index 8fe8b0a6..2283af2d 100644
--- a/src/views/system/User/index.vue
+++ b/src/views/system/User/index.vue
@@ -4,7 +4,7 @@
queryParams = {...params}"
+ @search="handleParams"
/>
{
+
+ const newParams = (params?.terms as any[])?.map(item1 => {
+ item1.terms = item1.terms.map((item2: any) => {
+ if (['telephone', 'email'].includes(item2.column)) {
+ return {
+ column: 'id$user-detail',
+ value: [item2]
+ }
+ }
+ return item2
+ })
+ return item1
+ })
+ queryParams.value = { terms: newParams || [] }
+}