Commit f9a9f15782f704a2def42c6f95db143c5980a1b1

Authored by xp.Huang
2 parents 906f2771 a60fcfe8

Merge branch 'ft-dev' into 'main'

style:设备配置样式修改,feat:设备配置详情优化代码

See merge request huang/yun-teng-iot-front!44
... ... @@ -11,9 +11,12 @@ import {
11 11 import { defHttp } from '/@/utils/http/axios';
12 12 import { BasicPageParams } from '/@/api/model/baseModel';
13 13 export type QueryTenantProfilesParam = BasicPageParams & OtherParams;
  14 +export type DeleteTenantProfilesParam = OtherParams;
14 15 export type OtherParams = {
15 16 sortProperty?: string;
16 17 sortOrder?: string;
  18 + tenantProfield?: string;
  19 + textSearch?: any;
17 20 };
18 21
19 22 enum Api {
... ... @@ -28,13 +31,14 @@ enum Api {
28 31 getTenantRoles = '/admin/tenant/roles/',
29 32 postAddTenantProfile = '/tenantProfile',
30 33 getTenantProfile = '/tenantProfiles',
31   - deleteTenantProfile = '/tenantProfiles',
  34 + deleteTenantProfile = '/tenantProfile/',
32 35 }
33 36
34   -export async function deleteTenantProfileApi(tenantIds) {
  37 +export async function deleteTenantProfileApi(params?: DeleteTenantProfilesParam) {
35 38 await defHttp.delete(
36 39 {
37   - url: `${Api.deleteTenantProfile}/${tenantIds}`,
  40 + params: params,
  41 + url: Api.deleteTenantProfile,
38 42 },
39 43 {
40 44 joinPrefix: false,
... ... @@ -43,15 +47,10 @@ export async function deleteTenantProfileApi(tenantIds) {
43 47 }
44 48
45 49 export const getTableTenantProfileApi = (params?: QueryTenantProfilesParam) => {
46   - return defHttp.get(
47   - {
48   - params: params,
49   - url: Api.getTenantProfile,
50   - },
51   - {
52   - joinPrefix: false,
53   - }
54   - );
  50 + return defHttp.get({
  51 + params: params,
  52 + url: Api.getTenantProfile,
  53 + });
55 54 };
56 55
57 56 export async function saveTenantProfileApi(params: tenantProfileDTO) {
... ...
  1 +// 时间戳转时间
  2 +export const transformTime = (timestamp = +new Date()) => {
  3 + if (timestamp) {
  4 + const time = new Date(timestamp);
  5 + const y = time.getFullYear(); //getFullYear方法以四位数字返回年份
  6 + const M = time.getMonth() + 1; // getMonth方法从 Date 对象返回月份 (0 ~ 11),返回结果需要手动加一
  7 + const d = time.getDate(); // getDate方法从 Date 对象返回一个月中的某一天 (1 ~ 31)
  8 + // const h = time.getHours(); // getHours方法返回 Date 对象的小时 (0 ~ 23)
  9 + // const m = time.getMinutes(); // getMinutes方法返回 Date 对象的分钟 (0 ~ 59)
  10 + // const s = time.getSeconds(); // getSeconds方法返回 Date 对象的秒数 (0 ~ 59)
  11 + // h + ':' + m + ':' + s
  12 + return y + '-' + M + '-' + d;
  13 + } else {
  14 + return '';
  15 + }
  16 +};
... ...
... ... @@ -18,29 +18,23 @@
18 18 <div class="mt-5">
19 19 <DeviceProfileStep1
20 20 ref="DeviceProfileStep1Ref"
21   - :echoStep1="editEchoData"
22 21 @next="handleStepNext1"
23 22 v-if="current === 0"
24 23 />
25 24 <DeviceProfileStep2
26   - :echoStep2="editEchoData"
  25 + ref="DeviceProfileStep2Ref"
27 26 @prev="handleStepPrev"
28 27 @next="handleStep2Next"
29 28 v-if="current === 1"
30 29 />
31 30 <DeviceProfileStep3
32   - :echoStep3="editEchoData"
  31 + ref="DeviceProfileStep3Ref"
33 32 @prev="handleStepPrev"
34 33 @next="handleStep3Next"
35 34 @redo="handleRedo"
36 35 v-if="current === 2"
37 36 />
38   - <DeviceProfileStep4
39   - :echoStep4="editEchoData"
40   - ref="getStepData"
41   - @prev="handleStepPrev"
42   - v-if="current === 3"
43   - />
  37 + <DeviceProfileStep4 ref="DeviceProfileStep4Ref" @prev="handleStepPrev" v-if="current === 3" />
44 38 </div>
45 39 </BasicModal>
46 40 </template>
... ... @@ -72,16 +66,18 @@
72 66 emits: ['success', 'register'],
73 67 setup(_, { emit }) {
74 68 const DeviceProfileStep1Ref = ref(null);
  69 + const DeviceProfileStep2Ref = ref(null);
  70 + const DeviceProfileStep3Ref = ref(null);
  71 + const DeviceProfileStep4Ref = ref(null);
75 72 const { createMessage } = useMessage();
76   - const getStepData = ref(null);
  73 + // const getStepData = ref(null);
77 74 const { proxy } = getCurrentInstance();
78 75 const postDeviceConfogData: any = ref({});
79 76 const getStepOneData: any = ref({});
80 77 const getStepTwoData: any = ref({});
81 78 const getStepThreeData: any = ref({});
82   - const editEchoData: any = ref({});
  79 + const editEchoData: any = ref(null);
83 80 const alarmProfileData: any = ref({});
84   - // const isGetStepThreeData: any = ref({});
85 81 const isGetStepThreeData: any = ref({});
86 82 const postEditId = ref('');
87 83 const current = ref(0);
... ... @@ -90,16 +86,40 @@
90 86 const [register, { closeModal }] = useModalInner((data) => {
91 87 isUpdate.value = !!data?.isUpdate;
92 88 if (!unref(isUpdate)) {
93   - console.log('新增');
94 89 current.value = 0;
95   - postDeviceConfogData.value = {};
96   - proxy.$refs.DeviceProfileStep1Ref.customResetFunc();
  90 + switch (current.value) {
  91 + case 0:
  92 + proxy.$refs.DeviceProfileStep1Ref.customResetFunc();
  93 + break;
  94 + case 1:
  95 + proxy.$refs.DeviceProfileStep2Ref.customResetAndFunc();
  96 + break;
  97 + case 2:
  98 + // proxy.$refs.DeviceProfileStep3Ref.customResetFunc();
  99 + // break;
  100 + case 3:
  101 + proxy.$refs.DeviceProfileStep4Ref.customResetAndFunc();
  102 + break;
  103 + }
97 104 }
98 105 if (unref(isUpdate)) {
99   - console.log('编辑');
100 106 current.value = 0;
101 107 postEditId.value = data.record.id;
102 108 editEchoData.value = data.record;
  109 + switch (current.value) {
  110 + case 0:
  111 + proxy.$refs.DeviceProfileStep1Ref.resetFieldsFunc(editEchoData.value);
  112 + break;
  113 + case 1:
  114 + proxy.$refs.DeviceProfileStep2Ref.resetFieldsFunc(editEchoData.value);
  115 + break;
  116 + case 2:
  117 + // proxy.$refs.DeviceProfileStep3Ref.resetFieldsFunc(editEchoData.value);
  118 + // break;
  119 + case 3:
  120 + proxy.$refs.DeviceProfileStep4Ref.resetFieldsFunc(editEchoData.value);
  121 + break;
  122 + }
103 123 }
104 124 });
105 125 function handleStepPrev() {
... ... @@ -123,7 +143,8 @@
123 143 const handleSubmit = async () => {
124 144 if (!unref(isUpdate)) {
125 145 isGetStepThreeData.value.profileData = getStepThreeData.value;
126   - alarmProfileData.value.alarmProfile = await proxy.$refs.getStepData.getAllFields();
  146 + alarmProfileData.value.alarmProfile =
  147 + await proxy.$refs.DeviceProfileStep4Ref.getAllFields();
127 148 Object.assign(
128 149 postDeviceConfogData.value,
129 150 getStepOneData.value,
... ... @@ -139,7 +160,8 @@
139 160 if (unref(isUpdate)) {
140 161 postDeviceConfogData.value.id = postEditId.value;
141 162 isGetStepThreeData.value.alarmProfile = getStepThreeData.value;
142   - alarmProfileData.value.alarmProfile = await proxy.$refs.getStepData.getAllFields();
  163 + alarmProfileData.value.alarmProfile =
  164 + await proxy.$refs.DeviceProfileStep4Ref.getAllFields();
143 165 Object.assign(
144 166 postDeviceConfogData.value,
145 167 getStepOneData.value,
... ... @@ -157,9 +179,12 @@
157 179 return;
158 180 };
159 181 return {
  182 + DeviceProfileStep2Ref,
  183 + DeviceProfileStep3Ref,
  184 + DeviceProfileStep4Ref,
160 185 DeviceProfileStep1Ref,
161 186 editEchoData,
162   - getStepData,
  187 + // getStepData,
163 188 handleStep3Next,
164 189 handleSubmit,
165 190 handleCancel,
... ...
1 1 <template>
2   - <BasicModal v-bind="$attrs" width="55rem" @register="register" :title="getTitle">
3   - <PageWrapper title="设备配置详情">
4   - <Description @register="register1" class="mt-4" />
5   - </PageWrapper>
6   - </BasicModal>
  2 + <div>
  3 + <BasicModal
  4 + :showCancelBtn="true"
  5 + :showOkBtn="false"
  6 + v-bind="$attrs"
  7 + width="55rem"
  8 + @register="register"
  9 + :title="getTitle"
  10 + >
  11 + <Tabs v-model:activeKey="activeKey">
  12 + <TabPane key="1" tab="详情">
  13 + <BasicForm
  14 + :showSubmitButton="false"
  15 + :showResetButton="false"
  16 + @register="registerDetail"
  17 + />
  18 + </TabPane>
  19 + <TabPane key="2" tab="传输配置" force-render>
  20 + <BasicForm :showSubmitButton="false" :showResetButton="false" @register="registerTrans"
  21 + /></TabPane>
  22 + <TabPane key="3" tab="报警规则">
  23 + <BasicForm
  24 + :showSubmitButton="false"
  25 + :showResetButton="false"
  26 + @register="registerStep3Schemas"
  27 + />
  28 + <BasicForm
  29 + :showSubmitButton="false"
  30 + :showResetButton="false"
  31 + @register="registerStep3HighSetting"
  32 + />
  33 + <BasicForm
  34 + :showSubmitButton="false"
  35 + :showResetButton="false"
  36 + @register="registerStep3CreateAlarm"
  37 + />
  38 + <BasicForm
  39 + :showSubmitButton="false"
  40 + :showResetButton="false"
  41 + @register="registerStep3RuleAlarm"
  42 + />
  43 + </TabPane>
  44 + <TabPane key="4" tab="告警管理">
  45 + <BasicForm :showSubmitButton="false" :showResetButton="false" @register="registerContact"
  46 + /></TabPane>
  47 + </Tabs>
  48 + </BasicModal>
  49 + </div>
7 50 </template>
8 51 <script lang="ts">
9   - import { defineComponent, ref, computed, unref } from 'vue';
  52 + import { defineComponent, ref, computed, watch } from 'vue';
10 53 import { BasicModal, useModalInner } from '/@/components/Modal';
11   - import { Description, DescItem, useDescription } from '/@/components/Description/index';
12   - import { PageWrapper } from '/@/components/Page';
  54 + import { Tabs, TabPane } from 'ant-design-vue';
13 55 import { deviceConfigGetDetail } from '/@/api/device/deviceConfigApi';
  56 + import { BasicForm, useForm } from '/@/components/Form/index';
  57 + import {
  58 + step1Schemas,
  59 + step2Schemas,
  60 + step3Schemas,
  61 + step3HighSetting,
  62 + step3CreateAlarm,
  63 + alertContactsSchemas,
  64 + } from './step/data';
14 65
15   - const schema: DescItem[] = [
16   - {
17   - field: 'description',
18   - label: '描述',
19   - },
20   - {
21   - field: 'enabled',
22   - label: '禁用',
23   - },
24   - {
25   - field: 'name',
26   - label: '设备配置名称',
27   - },
28   - {
29   - field: 'transportType',
30   - label: '传输类型',
31   - },
32   - ];
33 66 export default defineComponent({
34 67 name: 'ConfigDrawer',
35   - components: { BasicModal, Description, PageWrapper },
  68 + components: { Tabs, TabPane, BasicModal, BasicForm },
36 69 emits: ['success', 'register'],
37 70 setup() {
38   - let descInfo = ref(null);
  71 + const activeKey = ref('1');
39 72 const isUpdate = ref(true);
  73 + const descInfo: any = ref(null);
  74 + const dataInfo: any = ref('');
  75 + watch(
  76 + () => activeKey.value,
  77 + (v) => {
  78 + dataInfo.value = v;
  79 + }
  80 + );
  81 + const [registerDetail, { setFieldsValue }] = useForm({
  82 + schemas: step1Schemas,
  83 + actionColOptions: {
  84 + span: 24,
  85 + },
  86 + });
  87 + const [registerTrans, { setFieldsValue }] = useForm({
  88 + schemas: step2Schemas,
  89 + actionColOptions: {
  90 + span: 24,
  91 + },
  92 + });
  93 + const [registerStep3Schemas, { setFieldsValue }] = useForm({
  94 + schemas: step3Schemas,
  95 + actionColOptions: {
  96 + span: 24,
  97 + },
  98 + });
  99 + const [registerStep3HighSetting, { setFieldsValue }] = useForm({
  100 + schemas: step3HighSetting,
  101 + actionColOptions: {
  102 + span: 24,
  103 + },
  104 + });
  105 + const [registerStep3CreateAlarm, { setFieldsValue }] = useForm({
  106 + schemas: step3CreateAlarm,
  107 + actionColOptions: {
  108 + span: 24,
  109 + },
  110 + });
  111 + const [registerContact, { setFieldsValue }] = useForm({
  112 + schemas: alertContactsSchemas,
  113 + actionColOptions: {
  114 + span: 24,
  115 + },
  116 + });
  117 + const [registerStep3RuleAlarm, { setFieldsValue }] = useForm({
  118 + schemas: alertContactsSchemas,
  119 + actionColOptions: {
  120 + span: 24,
  121 + },
  122 + });
40 123 const [register] = useModalInner(async (data) => {
  124 + activeKey.value = '1';
41 125 isUpdate.value = !!data?.isUpdate;
42   - let getDescInfo = await deviceConfigGetDetail(data.record.id);
43   - descInfo.value = getDescInfo;
  126 + descInfo.value = await deviceConfigGetDetail(data.record.id);
  127 + console.log(descInfo.value);
  128 + switch (dataInfo.value) {
  129 + case '1':
  130 + // await setRegisterDetail({ ...descInfo.value });
  131 + setFieldsFunc(descInfo.value);
  132 + break;
  133 + case '2':
  134 + // await setRegisterTrans({ ...descInfo.value });
  135 + setFieldsFunc(descInfo.value);
  136 +
  137 + break;
  138 + case '3':
  139 + // await setRegisterStep3Schemas({ ...descInfo.value });
  140 + // await setRegisterStep3HighSetting({ ...descInfo.value });
  141 + // await setRegisterStep3CreateAlarm({ ...descInfo.value });
  142 + // await setRegisterStep3RuleAlarm({ ...descInfo.value });
  143 + setFieldsFunc(descInfo.value);
  144 +
  145 + break;
  146 + case '4':
  147 + // await setRegisterContact({ ...descInfo.value });
  148 + setFieldsFunc(descInfo.value);
  149 +
  150 + break;
  151 + deault: break;
  152 + }
44 153 });
45   - const getTitle = computed(() => (!unref(isUpdate) ? '查看设备配置' : '查看设备配置'));
46   - const [register1] = useDescription({
47   - title: '详情',
48   - bordered: false,
49   - data: descInfo,
50   - schema: schema,
  154 + const setFieldsFunc = (v) => {
  155 + setFieldsValue(v);
  156 + };
  157 + const getTitle = computed(() => {
  158 + return '设备配置详情';
51 159 });
  160 +
52 161 return {
  162 + registerStep3RuleAlarm,
  163 + registerContact,
  164 + registerStep3HighSetting,
  165 + registerStep3CreateAlarm,
  166 + registerStep3Schemas,
  167 + registerTrans,
  168 + activeKey,
  169 + registerDetail,
53 170 register,
54   - register1,
55 171 getTitle,
56 172 };
57 173 },
... ...
... ... @@ -44,7 +44,7 @@
44 44 </template>
45 45 </BasicTable>
46 46 <DeviceProfileModal v-if="isJudgeStatus" @register="registerModal" @success="handleSuccess" />
47   - <DeviceConfigDetail v-if="!isJudgeStatus" @register="registerModal" @success="handleSuccess" />
  47 + <DeviceConfigDetail @register="registerModalDetail" @success="handleSuccess" />
48 48 <ExpExcelModal @register="register1" @success="defaultHeader" />
49 49 </div>
50 50 </template>
... ... @@ -68,6 +68,7 @@
68 68 let isJudgeStatus = ref(true);
69 69 const { createMessage } = useMessage();
70 70 const [registerModal, { openModal }] = useModal();
  71 + const [registerModalDetail, { openModal: openModalDetail }] = useModal();
71 72 const [registerTable, { reload, getSelectRowKeys }] = useTable({
72 73 title: '设备配置列表',
73 74 clickToRowSelect: false,
... ... @@ -147,7 +148,7 @@
147 148 }
148 149
149 150 async function handleDetailView(record: Recordable) {
150   - openModal(true, {
  151 + openModalDetail(true, {
151 152 record,
152 153 isUpdate: false,
153 154 });
... ... @@ -179,6 +180,7 @@
179 180 reload();
180 181 }
181 182 return {
  183 + registerModalDetail,
182 184 register1,
183 185 defaultHeader,
184 186 useSelectionChange,
... ...
... ... @@ -6,7 +6,7 @@
6 6 </div>
7 7 </template>
8 8 <script lang="ts">
9   - import { defineComponent, watch, onMounted } from 'vue';
  9 + import { defineComponent } from 'vue';
10 10 import { BasicForm, useForm } from '/@/components/Form';
11 11 import { step1Schemas } from './data';
12 12 import { Select, Input, Divider } from 'ant-design-vue';
... ... @@ -20,10 +20,7 @@
20 20 [Divider.name]: Divider,
21 21 },
22 22 emits: ['next', 'resetFunc'],
23   - props: {
24   - echoStep1: Object,
25   - },
26   - setup(props, { emit }) {
  23 + setup(_, { emit }) {
27 24 const [register, { validate, setFieldsValue, resetFields }] = useForm({
28 25 labelWidth: 100,
29 26 schemas: step1Schemas,
... ... @@ -35,33 +32,20 @@
35 32 text: '下一步',
36 33 },
37 34 submitFunc: customSubmitFunc,
38   - // resetFunc: customResetFunc,
39   - });
40   - onMounted(() => {
41   - setFieldsValue({ ...props.echoStep1 });
42 35 });
43   -
44   - watch(
45   - () => props.echoStep1,
46   - (newV) => {
47   - setFieldsValue({ ...newV });
48   - }
49   - );
  36 + const resetFieldsFunc = (v) => {
  37 + setFieldsValue(v);
  38 + };
50 39 async function customSubmitFunc() {
51 40 try {
52 41 const values = await validate();
53 42 emit('next', values);
54 43 } catch (error) {}
55 44 }
56   -
57 45 const customResetFunc = async () => {
58 46 await resetFields();
59   - // try {
60   - // emit('resetFunc', resetValue);
61   - // } catch (error) {}
62 47 };
63   -
64   - return { register, customResetFunc };
  48 + return { register, customResetFunc, resetFieldsFunc };
65 49 },
66 50 });
67 51 </script>
... ...
... ... @@ -4,7 +4,7 @@
4 4 </div>
5 5 </template>
6 6 <script lang="ts">
7   - import { defineComponent, watch } from 'vue';
  7 + import { defineComponent } from 'vue';
8 8 import { BasicForm, useForm } from '/@/components/Form';
9 9 import { step2Schemas } from './data';
10 10 import { Alert, Divider, Descriptions } from 'ant-design-vue';
... ... @@ -18,10 +18,7 @@
18 18 [Descriptions.Item.name]: Descriptions.Item,
19 19 },
20 20 emits: ['next', 'prev'],
21   - props: {
22   - echoStep2: Object,
23   - },
24   - setup(props, { emit }) {
  21 + setup(_, { emit }) {
25 22 const [register, { validate, setFieldsValue, resetFields }] = useForm({
26 23 labelWidth: 80,
27 24 schemas: step2Schemas,
... ... @@ -37,16 +34,12 @@
37 34 resetFunc: customResetFunc,
38 35 submitFunc: customSubmitFunc,
39 36 });
40   - watch(
41   - () => props.echoStep2,
42   - (newV) => {
43   - if (newV?.key == 'edit') {
44   - setFieldsValue({ ...newV });
45   - } else {
46   - resetFields();
47   - }
48   - }
49   - );
  37 + const resetFieldsFunc = (v) => {
  38 + setFieldsValue(v);
  39 + };
  40 + const customResetAndFunc = async () => {
  41 + await resetFields();
  42 + };
50 43 async function customResetFunc() {
51 44 emit('prev');
52 45 }
... ... @@ -56,7 +49,7 @@
56 49 emit('next', values);
57 50 } catch (error) {}
58 51 }
59   - return { register };
  52 + return { register, resetFieldsFunc, customResetAndFunc };
60 53 },
61 54 });
62 55 </script>
... ...
1   -<template>
2   - <div class="step3">
3   - <template v-for="(item, index) in alarmList" :key="item.id">
4   - <CollapseContainer class="border mb-8">
5   - <template #action>
6   - <div @click="deleteAlarmRule(index)" class="cursor-pointer">
7   - <DeleteOutlined style="font-size: 20px" class="mr-2" />
8   - </div>
9   - </template>
10   - <BasicForm @register="registerForm" />
11   - <CollapseContainer>
12   - <template #action> 高级设置 </template>
13   - <BasicForm @register="registerFormHighSetting">
14   - <template #checkBox="{ model, field }">
15   - <Checkbox v-model:checked="model[field]">传递报警</Checkbox>
16   - </template>
17   - </BasicForm>
18   - </CollapseContainer>
19   - <p>创建报警规则</p>
20   - <template v-for="(childItem, createIndex) in item.createRule" :key="childItem.id">
21   - <div class="aic mb-4" style="border: 1px solid #bfbfbf">
22   - <div class="w-3/4">
23   - <BasicForm @register="registerFormCreateAlarm" />
24   - <div>
25   - <p style="color: #f5594e" class="mt-4 ml-4"
26   - >请添加报警规则条件
27   - <PlusOutlined class="cursor-pointer ml-4" style="font-size: 20px"
28   - /></p>
29   - <p class="mt-4 ml-4"
30   - >启用规则:始终启用
31   - <EditOutlined class="cursor-pointer ml-4" style="font-size: 20px"
32   - /></p>
33   - <p class="mt-4 ml-4"
34   - >详情:<EditOutlined class="cursor-pointer ml-4" style="font-size: 20px"
35   - /></p>
36   - <p class="mt-4 ml-4">dashboard:</p>
37   - </div>
38   - </div>
39   - <div class="w-1/4 flex justify-center">
40   - <Tooltip title="移除">
41   - <MinusCircleOutlined
42   - style="font-size: 25px; color: #305680"
43   - class="cursor-pointer"
44   - @click="deleteCondition(index, createIndex)"
45   - />
46   - </Tooltip>
47   - </div>
48   - </div>
49   - </template>
50   - <a-button class="mt-5" @click="addCreateRole(index)"
51   - ><PlusCircleOutlined />添加创建条件</a-button
52   - >
53   - <p>清除报警规则</p>
54   - <BasicForm @register="registerFormClearAlarm">
55   - <template #formHeader> </template>
56   - </BasicForm>
57   - </CollapseContainer>
58   - </template>
59   - <div class="flex justify-start">
60   - <a-button class="mr-5" @click="prevStep">上一步</a-button>
61   - <a-button type="primary" @click="addAlarmRule">添加报警规则</a-button>
62   - <a-button style="margin-left: 14px" @click="handleClickAddAlertContacts">下一步</a-button>
63   - </div>
64   - <BasicModal
65   - v-if="statusModel"
66   - @register="registerAlert"
67   - v-bind="$attrs"
68   - :showCancelBtn="true"
69   - :showOkBtn="true"
70   - :canFullscreen="false"
71   - :closable="false"
72   - :height="900"
73   - :width="500"
74   - :maskClosable="false"
75   - title="告警通知"
76   - :helpMessage="['告警通知']"
77   - @ok="handleModal"
78   - >
79   - <div>
80   - <span>请选择告警通知联系人:</span>
81   - <Tag v-for="(item, index) in 10" closable @close="log" :key="index"> 冯涛+{{ item }}</Tag>
82   - </div>
83   - <AlertContacts ref="getAlertContactRef" />
84   - </BasicModal>
85   - </div>
86   -</template>
87   -
88   -<script lang="ts">
89   - import { defineComponent, ref, unref } from 'vue';
90   - import type { alarmListItem } from '../types/index';
91   - import { CollapseContainer } from '/@/components/Container/index';
92   - import { BasicForm, useForm } from '/@/components/Form';
93   - import { step3Schemas, step3HighSetting, step3CreateAlarm, step3ClearAlarm } from './data';
94   - import {
95   - DeleteOutlined,
96   - MinusCircleOutlined,
97   - PlusCircleOutlined,
98   - PlusOutlined,
99   - EditOutlined,
100   - } from '@ant-design/icons-vue';
101   - import { Tooltip, Checkbox, Tag } from 'ant-design-vue';
102   - import AlertContacts from '../cpns/index.vue';
103   - import { BasicModal, useModal } from '/@/components/Modal';
104   -
105   - export default defineComponent({
106   - components: {
107   - BasicForm,
108   - CollapseContainer,
109   - DeleteOutlined,
110   - MinusCircleOutlined,
111   - PlusCircleOutlined,
112   - PlusOutlined,
113   - EditOutlined,
114   - Checkbox,
115   - Tooltip,
116   - BasicModal,
117   - AlertContacts,
118   - Tag,
119   - },
120   - emits: ['prev'],
121   - setup(_, { emit }) {
122   - //告警列表
123   - let alarmList = ref<alarmListItem[]>([]);
124   - const log = (e) => {
125   - console.log(e);
126   - };
127   - // 添加和删除告警配置
128   - const deleteAlarmRule = (index: number) => {
129   - unref(alarmList).splice(index, 1);
130   - };
131   - // 上一步
132   - const prevStep = () => {
133   - emit('prev');
134   - };
135   - const addAlarmRule = () => {
136   - unref(alarmList).push({
137   - id: Date.now(),
138   - alarmType: '',
139   - isPass: false,
140   - createRule: [
141   - {
142   - id: Date.now() + Math.random(),
143   - alarmVisible: false,
144   - addKeyFilterVisible: false,
145   - detailVisible: false,
146   - detail: '',
147   - filterList: [],
148   - },
149   - ],
150   - clearRule: [],
151   - });
152   - };
153   -
154   - // 表单部分 报警类型
155   - const [registerForm] = useForm({
156   - labelWidth: 120,
157   - schemas: step3Schemas,
158   - showResetButton: false,
159   - showSubmitButton: false,
160   - });
161   -
162   - // 高级设置
163   - const [registerFormHighSetting] = useForm({
164   - labelWidth: 120,
165   - schemas: step3HighSetting,
166   - showResetButton: false,
167   - showSubmitButton: false,
168   - actionColOptions: {
169   - span: 24,
170   - },
171   - });
172   -
173   - // 添加创建条件表单
174   - const [registerFormCreateAlarm] = useForm({
175   - labelWidth: 120,
176   - schemas: step3CreateAlarm,
177   - showResetButton: false,
178   - showSubmitButton: false,
179   - actionColOptions: {
180   - span: 24,
181   - },
182   - });
183   -
184   - // 清除条件表单
185   - const [registerFormClearAlarm] = useForm({
186   - labelWidth: 120,
187   - schemas: step3ClearAlarm,
188   - showResetButton: false,
189   - showSubmitButton: false,
190   - actionColOptions: {
191   - span: 24,
192   - },
193   - });
194   -
195   - // 添加‘创建条件’
196   - const addCreateRole = (index: number) => {
197   - unref(alarmList)[index].createRule.push({
198   - id: Date.now() + Math.random(),
199   - alarmVisible: false,
200   - addKeyFilterVisible: false,
201   - detailVisible: false,
202   - detail: '',
203   - filterList: [],
204   - });
205   - };
206   - // 删除‘创建条件’
207   - const deleteCondition = (index: number, createIndex: number) => {
208   - alarmList.value[index].createRule.splice(createIndex, 1);
209   - };
210   -
211   - const statusModel = ref(false);
212   - const [registerAlert, { openModal }] = useModal();
213   - const handleClickAddAlertContacts = () => {
214   - statusModel.value = true;
215   - openModal(statusModel.value);
216   - };
217   - const handleModal = () => {
218   - console.log(1);
219   - };
220   -
221   - return {
222   - handleModal,
223   - log,
224   - statusModel,
225   - registerAlert,
226   - handleClickAddAlertContacts,
227   - alarmList,
228   - deleteAlarmRule,
229   - prevStep,
230   - addAlarmRule,
231   - registerForm,
232   - registerFormHighSetting,
233   - registerFormCreateAlarm,
234   - addCreateRole,
235   - deleteCondition,
236   - registerFormClearAlarm,
237   - };
238   - },
239   - });
240   -</script>
241   -
242   -<style lang="less" scoped>
243   - .step3 {
244   - width: 100%;
245   - }
246   - .border {
247   - border: 1px solid #bfbfbf;
248   - }
249   -
250   - .aic {
251   - display: flex;
252   - align-items: center;
253   - }
254   -
255   - :deep(.vben-collapse-container__header) {
256   - border: none;
257   - }
258   -</style>
... ... @@ -7,42 +7,51 @@
7 7 <DeleteOutlined style="font-size: 20px" class="mr-2" />
8 8 </div>
9 9 </template>
10   - <BasicForm @register="registerForm" />
  10 + <div style="margin-left: -30px"> <BasicForm @register="registerForm" /></div>
11 11 <CollapseContainer>
12 12 <template #action> 高级设置 </template>
13   - <BasicForm @register="registerFormHighSetting">
14   - <template #checkBox="{ model, field }">
15   - <Checkbox v-model:checked="model[field]">传递报警</Checkbox>
16   - </template>
17   - </BasicForm>
  13 + <div style="margin-left: 10px">
  14 + <BasicForm @register="registerFormHighSetting">
  15 + <template #checkBox="{ model, field }">
  16 + <Checkbox v-model:checked="model[field]">传递报警</Checkbox>
  17 + </template>
  18 + </BasicForm>
  19 + </div>
18 20 </CollapseContainer>
19 21 <p>创建报警规则</p>
20 22 <template v-for="(childItem, createIndex) in item.alarms" :key="childItem.id">
21 23 <div class="aic mb-4" style="border: 1px solid #bfbfbf">
22 24 <div class="w-3/4">
23   - <BasicForm @register="registerFormCreateAlarm" />
24   - <div>
  25 + <div style="margin-left: -30px"
  26 + ><BasicForm @register="registerFormCreateAlarm"
  27 + /></div>
  28 + <div style="margin-left: 5px">
25 29 <p style="color: #f5594e" class="mt-4 ml-4"
26 30 >请添加报警规则条件
27 31 <PlusOutlined
28 32 @click="handleOpenAlaramRuleConditions"
29 33 class="cursor-pointer ml-4"
30 34 style="font-size: 20px"
31   - /></p>
32   - <p class="mt-4 ml-4"
  35 + />{{ ruleTemplateData }}
  36 + </p>
  37 + <p style="white-space: wrap" class="mt-4 ml-4"
33 38 >启用规则:始终启用
34 39 <EditOutlined
35 40 @click="handleOpenEnableRule"
36 41 class="cursor-pointer ml-4"
37 42 style="font-size: 20px"
38   - /></p>
  43 + />{{ enableTemplateData }}
  44 + </p>
39 45 <p class="mt-4 ml-4"
40 46 >详情模板:<EditOutlined
41 47 @click="handleOpenDetailTemplate"
42 48 class="cursor-pointer ml-4"
43 49 style="font-size: 20px"
44   - /></p>
45   - <BasicForm @register="dashboardForm" />
  50 + />{{ detailTemplateData }}
  51 + </p>
  52 + <div style="margin-left: 16px">
  53 + <BasicForm @register="dashboardForm" />
  54 + </div>
46 55 </div>
47 56 </div>
48 57 <div class="w-1/4 flex justify-center">
... ... @@ -59,11 +68,12 @@
59 68 <a-button class="mt-5" @click="addCreateRole(index)"
60 69 ><PlusCircleOutlined />添加创建条件</a-button
61 70 >
  71 + <div style="height: 20px"></div>
62 72 <p>清除报警规则</p>
63 73 <template v-for="(childItem, createIndex) in item.alarms" :key="childItem.id">
64 74 <div class="aic mb-4" style="border: 1px solid #bfbfbf">
65 75 <div class="w-3/4">
66   - <div>
  76 + <div style="margin-left: 5px">
67 77 <p style="color: #f5594e" class="mt-4 ml-4"
68 78 >请添加报警规则条件
69 79 <PlusOutlined
... ... @@ -84,7 +94,9 @@
84 94 class="cursor-pointer ml-4"
85 95 style="font-size: 20px"
86 96 /></p>
87   - <BasicForm @register="dashboardForm" />
  97 + <div style="margin-left: 16px">
  98 + <BasicForm @register="dashboardForm" />
  99 + </div>
88 100 </div>
89 101 </div>
90 102 <div class="w-1/4 flex justify-center">
... ... @@ -183,9 +195,13 @@
183 195 const emptyObj: any = ref({});
184 196 const detailObj: any = ref({});
185 197 const ruleObj: any = ref({});
  198 + const ruleLastObj: any = ref({});
186 199 const enableObj: any = ref({});
187 200 const additionalObj: any = ref({});
188 201 const isWhereTypeValue = ref(null);
  202 + const ruleTemplateData: any = ref(null);
  203 + const enableTemplateData: any = ref(null);
  204 + const detailTemplateData: any = ref(null);
189 205 //告警列表
190 206 let profileData = ref<alarmListItem[]>([]);
191 207 const log = (e) => {
... ... @@ -273,29 +289,102 @@
273 289 watch(isWhereType, (nV) => {
274 290 isWhereTypeValue.value = nV;
275 291 });
  292 + //详情模板
276 293 const getAllFieldsFunc = (v) => {
277 294 detailObj.value = v;
  295 + detailTemplateData.value = `
  296 + 报警详细信息:${v.alarmDetails}
  297 + `;
278 298 };
  299 + //启用规则
279 300 const getAllFieldsEnabFunc = (v) => {
280 301 enableObj.value = v;
  302 + const findDay = [
  303 + {
  304 + label: '星期一',
  305 + value: '1',
  306 + },
  307 + {
  308 + label: '星期二',
  309 + value: '2',
  310 + },
  311 + {
  312 + label: '星期三',
  313 + value: '3',
  314 + },
  315 + {
  316 + label: '星期四',
  317 + value: '4',
  318 + },
  319 + {
  320 + label: '星期五',
  321 + value: '5',
  322 + },
  323 + {
  324 + label: '星期六',
  325 + value: '6',
  326 + },
  327 + {
  328 + label: '星期七',
  329 + value: '7',
  330 + },
  331 + ];
  332 + const findDayByValue = findDay.map((f, i) => {
  333 + console.log(i);
  334 + if (f.value == v.daysOfWeek[i]) {
  335 + return f.label;
  336 + }
  337 + });
  338 +
  339 + enableTemplateData.value = `
  340 + 开始时间:${v.startsOn}结束时间:${v.endsOn}天数:${findDayByValue}
  341 + `;
281 342 };
282   - const getAllFieldsRuleFunc = (v) => {
  343 + //规则条件
  344 + const getAllFieldsRuleFunc = (v, v1) => {
283 345 ruleObj.value = v;
284   - const value = {
285   - value: ruleObj.value?.value,
286   - };
  346 + const findDay = [
  347 + { label: '等于', value: 'EQUAL' },
  348 + { label: '不等于', value: 'NOT_EQUAL' },
  349 + { label: '开始于', value: 'STARTS_WITH' },
  350 + { label: '结束于', value: 'ENDS_WITH' },
  351 + { label: '包含', value: 'CONTAINS' },
  352 + { label: '不包含', value: 'NOT_CONTAINS' },
  353 + { label: '等于', value: 'EQUAL' },
  354 + { label: '不等于', value: 'NOT_EQUAL' },
  355 + { label: '大于', value: 'GREATER' },
  356 + { label: '小于', value: 'LESS' },
  357 + { label: '大于或等于', value: 'GREATER_OR_EQUAL' },
  358 + { label: '小于或等于', value: 'LESS_OR_EQUAL' },
  359 + ];
  360 + const findRuleByValue = findDay.find((f) => {
  361 + if (f.value == v.operation) {
  362 + return f.label;
  363 + }
  364 + });
  365 + ruleTemplateData.value = `
  366 + 键名:${v.key}...操作:${findRuleByValue?.label}...值:${v.value1}
  367 + `;
  368 + ruleLastObj.value = v1;
287 369 const predicate = {
288   - operation: 'GREATER_OR_EQUAL',
  370 + operation: ruleObj.value.operation,
289 371 value: {
290   - defaultValue: 12,
  372 + defaultValue: Number(ruleObj.value.value1),
291 373 },
292   - type: 'NUMERIC',
  374 + type: ruleObj.value.type1,
293 375 };
294   - const spec = {
295   - // type: ruleObj.value?.spec,
296   - type: 'SIMPLE',
  376 + const spec1 = {
  377 + type: ruleLastObj.value.conditionType,
  378 + // unit: ruleLastObj.value.unit,
  379 + // predicate: {
  380 + // defaultValue: Number(ruleLastObj.value.defaultValue),
  381 + // dynamicValue: {
  382 + // sourceType: ruleLastObj.value.sourceType,
  383 + // sourceAttribute: ruleLastObj.value.sourceAttribute,
  384 + // inherit: ruleLastObj.value.inherit,
  385 + // },
  386 + // },
297 387 };
298   -
299 388 const getCondition = {
300 389 condition: [
301 390 {
... ... @@ -303,20 +392,13 @@
303 392 type: ruleObj.value?.type,
304 393 key: ruleObj.value?.key,
305 394 },
306   - valueType: ruleObj.value?.valueType,
307   - value,
  395 + valueType: ruleObj.value.type1,
308 396 predicate,
309 397 },
310 398 ],
311   - spec,
  399 + spec: spec1,
312 400 };
313   -
314   - // const spec = {
315   - // spec: ruleObj.value?.spec,
316   - // };
317   -
318 401 const getValueConditon = {
319   - // spec,
320 402 condition: getCondition,
321 403 };
322 404 Object.assign(additionalObj.value, getValueConditon);
... ... @@ -327,8 +409,8 @@
327 409 const scheduleValue = {
328 410 type: enableObj.value.schedule,
329 411 daysOfWeek: enableObj.value.daysOfWeek,
330   - endsOn: enableObj.value.endsOn,
331   - startsOn: enableObj.value.startOn,
  412 + // endsOn: enableObj.value.endsOn,
  413 + // startsOn: enableObj.value.startOn,
332 414 timezone: enableObj.value.timezone,
333 415 };
334 416 const getSchedule = {
... ... @@ -353,7 +435,7 @@
353 435 };
354 436
355 437 const valueRegisterFormHighSetting = await validateRegisterFormHighSetting();
356   - const valueRegisterFormCreateAlarm = await validateRegisterFormCreateAlarm();
  438 + // const valueRegisterFormCreateAlarm = await validateRegisterFormCreateAlarm();
357 439 const getValueRegisterFormHighSetting = {
358 440 propagate: valueRegisterFormHighSetting?.propagate,
359 441 propagateRelationTypes: [valueRegisterFormHighSetting?.propagateRelationTypes],
... ... @@ -398,6 +480,9 @@
398 480 };
399 481
400 482 return {
  483 + detailTemplateData,
  484 + enableTemplateData,
  485 + ruleTemplateData,
401 486 dashboardForm,
402 487 getAllFieldsRuleFunc,
403 488 getAllFieldsEnabFunc,
... ...
... ... @@ -18,7 +18,7 @@
18 18 emits: ['prev'],
19 19 setup(_, { emit }) {
20 20 const getValueData: any = ref({});
21   - const [register, { setProps, validate }] = useForm({
  21 + const [register, { setProps, validate, setFieldsValue, resetFields }] = useForm({
22 22 schemas: alertContactsSchemas,
23 23 actionColOptions: {
24 24 span: 24,
... ... @@ -28,16 +28,24 @@
28 28 },
29 29 resetFunc: customResetFunc,
30 30 });
  31 + const resetFieldsFunc = (v) => {
  32 + setFieldsValue(v);
  33 + };
  34 + const customResetAndFunc = async () => {
  35 + await resetFields();
  36 + };
31 37 async function customResetFunc() {
32 38 emit('prev');
33 39 }
34   - async function getAllFields(getV) {
  40 + const getAllFields = async (getV) => {
35 41 const values = await validate();
36 42 getValueData.value = values;
37 43 getV = getValueData.value;
38 44 return getV;
39   - }
  45 + };
40 46 return {
  47 + customResetAndFunc,
  48 + resetFieldsFunc,
41 49 customResetFunc,
42 50 getAllFields,
43 51 register,
... ...
1   -<template>
2   - <div class="step3">
3   - <h1 v-if="alarmList.length === 0" style="font-size: 24px" class="text-center"
4   - >未配置报警规则</h1
5   - >
6   -
7   - <template v-else v-for="(item, index) in alarmList" :key="item">
8   - <CollapseContainer :title="item.alarmType" style="border: 1px solid #bfbfbf" class="mb-6">
9   - <template #action>
10   - <div @click="handleDeleteAlarm(index)" class="cursor-pointer">
11   - <DeleteOutlined style="font-size: 20px" class="mr-2" />
12   - </div>
13   - </template>
14   - <a-form :wrapper-col="wrapperCol" labelAlign="left" :model="item" :rules="rules">
15   - <a-form-item label="报警类型" :labelCol="{ style: { width: '80px' } }" name="alarmType">
16   - <a-input v-model:value="item.alarmType" />
17   - </a-form-item>
18   - </a-form>
19   -
20   - <CollapseContainer>
21   - <template #action> 高级设置 </template>
22   - <div class="flex" style="align-items: center">
23   - <input type="checkbox" v-model="item.isPass" /> <div class="ml-2">传递警报</div>
24   - </div>
25   -
26   - <a-form :wrapper-col="wrapperCol" labelAlign="left" v-if="item.isPass">
27   - <a-form-item label="传递的关联类型" :labelCol="{ style: { width: '120px' } }">
28   - <a-input />
29   - </a-form-item>
30   - </a-form>
31   - </CollapseContainer>
32   - <p style="color: #3c3c3c">创建报警规则</p>
33   - <template v-for="(item1, index1) in item.alarmRule" :key="item1">
34   - <div class="alarm-rule mb-4">
35   - <div style="width: 90%; border: 2px solid #8c8c8c; border-radius: 5px" class="flex">
36   - <div style="width: 30%; height: 100%; border-right: 1px solid #e0e0e0">
37   - <span style="color: #305680; margin-left: 10px">严重程度</span>
38   - <a-select :options="options" style="width: 100px; margin-left: 10px" />
39   - </div>
40   - <div style="width: 70%; height: 100%">
41   - <p style="color: #f5594e" class="mt-4 ml-4"
42   - >请添加报警规则条件
43   - <PlusOutlined
44   - class="cursor-pointer ml-4"
45   - style="font-size: 20px"
46   - @click="editAlarmCondition(index, index1)"
47   - /></p>
48   - <p class="mt-4 ml-4"
49   - >启用规则:始终启用
50   - <EditOutlined class="cursor-pointer ml-4" style="font-size: 20px"
51   - /></p>
52   - <p class="mt-4 ml-4"
53   - >详情:{{ item1.detail }}
54   - <EditOutlined
55   - @click="item1.detailVisible = true"
56   - class="cursor-pointer ml-4"
57   - style="font-size: 20px"
58   - /></p>
59   - <p class="mt-4 ml-4">dashboard: <a-select style="width: 180px" /></p>
60   - </div>
61   - </div>
62   - <div style="width: 10%" class="alarm-remove">
63   - <a-tooltip title="移除">
64   - <MinusCircleOutlined
65   - style="font-size: 25px color:#305680"
66   - class="cursor-pointer"
67   - @click="handleDeleteCondition(index, index1)"
68   - />
69   - </a-tooltip>
70   - </div>
71   - </div>
72   - <!-- 编辑报警规则条件 -->
73   - <a-modal
74   - v-model:visible="item1.alarmVisible"
75   - title="编辑报警规则条件"
76   - centered
77   - width="800px"
78   - @cancel="handleAlarmCancel(index, index1)"
79   - @ok="item1.alarmVisible = false"
80   - >
81   - <CollapseContainer title="键名筛选器" style="border: 1px solid #bfbfbf" class="mb-6">
82   - <a-modal
83   - v-model:visible="item1.addKeyFilterVisible"
84   - title="添加键名筛选器"
85   - centered
86   - width="600px"
87   - @ok="item1.addKeyFilterVisible = false"
88   - >
89   - <a-form
90   - :wrapper-col="wrapperCol"
91   - :labelCol="{ style: { width: '80px' } }"
92   - labelAlign="right"
93   - >
94   - <a-form-item label="键类型">
95   - <a-select :options="keyTypeOptions" default-value="Timeseries" />
96   - </a-form-item>
97   - <a-form-item label="键名">
98   - <a-input />
99   - </a-form-item>
100   - <a-form-item label="值类型">
101   - <a-select :options="valueTypeOptions" />
102   - </a-form-item>
103   - </a-form>
104   - <collapseContainer title="筛选器">
105   - <template v-for="filterItem in item1.filterList" :key="filterItem">
106   - <div class="flex justify-between mb-4" style="align-items: center">
107   - <a-select
108   - style="width: 150px"
109   - :options="operatorOptions"
110   - default-value="="
111   - /><a-input style="width: 350px" />
112   - <a-tooltip title="删除筛选器">
113   - <CloseOutlined @click="deleteFilter(index, index1)" />
114   - </a-tooltip>
115   - </div>
116   - </template>
117   - <div class="flex">
118   - <a-button type="primary" class="mr-4" @click="addFilter(index, index1)"
119   - >添加</a-button
120   - >
121   - <a-button type="primary">添加复合</a-button>
122   - </div>
123   - </collapseContainer>
124   - </a-modal>
125   - <div class="flex justify-start">
126   - <a-button type="primary" @click="item1.addKeyFilterVisible = true"
127   - >添加键名筛选器</a-button
128   - >
129   - </div>
130   - </CollapseContainer>
131   - <CollapseContainer title="筛选器预览" style="border: 1px solid #bfbfbf" class="mb-6" />
132   - </a-modal>
133   - <!-- 启用规则-->
134   - <!-- <a-modal
135   - v-model:visible="visible"
136   - title="编辑报警规则条件"
137   - centered
138   - @cancel="handleCancel(index, index1)"
139   - @ok="visible = false"
140   - >
141   - 编辑报警规则条件123
142   - </a-modal> -->
143   -
144   - <!-- 创建报警规则详情的弹框 -->
145   - <a-modal
146   - v-model:visible="item1.detailVisible"
147   - title="详情"
148   - centered
149   - @cancel="handleCancel(index, index1)"
150   - @ok="item1.detailVisible = false"
151   - >
152   - <a-textarea v-model:value="item1.detail" placeholder="报警详细信息" :rows="4" />
153   - </a-modal>
154   - </template>
155   - <a-button class="mt-5" @click="addCreateRole(index)"
156   - ><PlusCircleOutlined />添加创建条件</a-button
157   - >
158   - <p style="color: #3c3c3c">清除报警规则</p>
159   - <template v-for="(item2, index2) in item.removeRule" :key="item2">
160   - <div class="alarm-rule mb-4">
161   - <div style="width: 90%; border: 2px solid #8c8c8c; border-radius: 5px" class="flex">
162   - <div style="width: 70%; height: 100%">
163   - <p style="color: #f5594e" class="mt-4 ml-4"
164   - >请添加报警规则条件
165   - <PlusOutlined class="cursor-pointer ml-4" style="font-size: 20px"
166   - /></p>
167   - <p class="mt-4 ml-4"
168   - >启用规则:始终启用
169   - <EditOutlined class="cursor-pointer ml-4" style="font-size: 20px"
170   - /></p>
171   - <p class="mt-4 ml-4"
172   - >详情:{{ item2.detail }}
173   - <EditOutlined
174   - class="cursor-pointer ml-4"
175   - style="font-size: 20px"
176   - @click="editRemoveVisible = true"
177   - />
178   - </p>
179   -
180   - <p class="mt-4 ml-4">Mobile dashboard: <a-select style="width: 150px" /></p>
181   - </div>
182   - </div>
183   - <div style="width: 10%" class="alarm-remove">
184   - <a-tooltip title="移除">
185   - <MinusCircleOutlined
186   - style="font-size: 25px color:#305680"
187   - class="cursor-pointer"
188   - @click="handleDeleteRemoveCondition(index, index2)"
189   - />
190   - </a-tooltip>
191   - </div>
192   - </div>
193   - <a-modal
194   - v-model:visible="editRemoveVisible"
195   - title="详情"
196   - centered
197   - @cancel="handleCancel1(index, index2)"
198   - @ok="editRemoveVisible = false"
199   - >
200   - <a-textarea v-model:value="item2.detail" placeholder="报警详细信息" :rows="4" />
201   - </a-modal>
202   - </template>
203   - <a-button class="mt-5" @click="addRemoveRule(index)"
204   - ><PlusCircleOutlined />添加清除条件</a-button
205   - >
206   - </CollapseContainer>
207   - </template>
208   - <div class="flex justify-start">
209   - <a-button class="mr-5" @click="prevStep">上一步</a-button>
210   - <a-button type="primary" @click="addAlarmRule">添加报警规则</a-button>
211   - </div>
212   - </div>
213   -</template>
214   -<script lang="ts">
215   - import { defineComponent, ref } from 'vue';
216   - import {
217   - Alert,
218   - Divider,
219   - Descriptions,
220   - Input,
221   - Form,
222   - FormItem,
223   - Button,
224   - Select,
225   - Tooltip,
226   - Textarea,
227   - Modal,
228   - } from 'ant-design-vue';
229   - import {
230   - DeleteOutlined,
231   - MinusCircleOutlined,
232   - PlusCircleOutlined,
233   - PlusOutlined,
234   - EditOutlined,
235   - CloseOutlined,
236   - } from '@ant-design/icons-vue';
237   - import { CollapseContainer } from '/@/components/Container/index';
238   - import { alarmListItem } from '../types/index';
239   - export default defineComponent({
240   - components: {
241   - DeleteOutlined,
242   - MinusCircleOutlined,
243   - PlusCircleOutlined,
244   - CollapseContainer,
245   - EditOutlined,
246   - PlusOutlined,
247   - CloseOutlined,
248   - [Form.name]: Form,
249   - [FormItem.name]: FormItem,
250   - [Modal.name]: Modal,
251   - [Textarea.name]: Textarea,
252   - [Tooltip.name]: Tooltip,
253   - [Button.name]: Button,
254   - [Input.name]: Input,
255   - [Select.name]: Select,
256   - [Form.name]: Form,
257   - [Form.Item.name]: Form.Item,
258   - [Alert.name]: Alert,
259   - [Divider.name]: Divider,
260   - [Descriptions.name]: Descriptions,
261   - [Descriptions.Item.name]: Descriptions.Item,
262   - },
263   - emits: ['prev'],
264   - setup(_, { emit }) {
265   - const alarmList = ref<alarmListItem[]>([]);
266   -
267   - const options = ref([
268   - {
269   - value: '1',
270   - label: '危险',
271   - },
272   -
273   - {
274   - value: '2',
275   - label: '重要',
276   - },
277   - {
278   - value: '3',
279   - label: '次要',
280   - },
281   - {
282   - value: '4',
283   - label: '警告',
284   - },
285   - {
286   - value: '5',
287   - label: '不确定',
288   - },
289   - ]);
290   - const keyTypeOptions = ref([
291   - {
292   - value: 'properties',
293   - label: '属性',
294   - },
295   -
296   - {
297   - value: 'Timeseries',
298   - label: 'Timeseries',
299   - },
300   - {
301   - value: 'constant',
302   - label: '常量',
303   - },
304   - ]);
305   - const valueTypeOptions = ref([
306   - {
307   - value: 'string',
308   - label: '字符串',
309   - },
310   - {
311   - value: 'number',
312   - label: '数字',
313   - },
314   - {
315   - value: 'boolean',
316   - label: '布尔值',
317   - },
318   - {
319   - value: 'dateTime',
320   - label: '日期时间',
321   - },
322   - ]);
323   - const operatorOptions = ref([
324   - {
325   - value: '=',
326   - label: '等于',
327   - },
328   - {
329   - value: '!=',
330   - label: '不等于',
331   - },
332   - {
333   - value: '>',
334   - label: '大于',
335   - },
336   - {
337   - value: '<',
338   - label: '小于',
339   - },
340   - {
341   - value: '>=',
342   - label: '大于或等于',
343   - },
344   - {
345   - value: '<=',
346   - label: '小于或等于',
347   - },
348   - ]);
349   - const rules = {
350   - alarmType: [
351   - {
352   - required: true,
353   - message: '报警类型必填',
354   - trigger: 'blur',
355   - },
356   - ],
357   - };
358   -
359   - const prevStep = () => {
360   - emit('prev');
361   - };
362   - // 添加报警规则
363   - const addAlarmRule = () => {
364   - alarmList.value.push({
365   - alarmType: '',
366   - isPass: false,
367   - createRule: [],
368   - clearRule: [],
369   - });
370   - };
371   - const handleDeleteAlarm = (index: number) => {
372   - alarmList.value.splice(index, 1);
373   - };
374   - // 添加‘创建条件’
375   - const addCreateRole = (index: number) => {
376   - alarmList.value[index].createRule.push({
377   - alarmVisible: false,
378   - addKeyFilterVisible: false,
379   - detailVisible: false,
380   - detail: '',
381   - filterList: [],
382   - });
383   - };
384   - const handleDeleteCondition = (index: number, index1: number) => {
385   - alarmList.value[index].createRule.splice(index1, 1);
386   - };
387   -
388   - // 添加‘清除报警规则’
389   - const addRemoveRule = (index: number) => {
390   - alarmList.value[index].clearRule.push({
391   - detail: '',
392   - });
393   - };
394   - const handleDeleteRemoveCondition = (index: number, index1: number) => {
395   - alarmList.value[index].clearRule.splice(index1, 1);
396   - };
397   -
398   - // 弹框取消事件 --2个
399   - const visible = ref(false);
400   - const editRemoveVisible = ref(false);
401   - const handleCancel = (index: number, index1: number) => {
402   - alarmList.value[index].createRule[index1].detail = '';
403   - alarmList.value[index].createRule[index1].detailVisible = false;
404   - };
405   -
406   - const handleCancel1 = (index: number, index2: number) => {
407   - alarmList.value[index].clearRule[index2].detail = '';
408   - editRemoveVisible.value = false;
409   - };
410   -
411   - const handleAlarmCancel = (index, index1) => {
412   - alarmList.value[index].createRule[index1].alarmVisible = false;
413   - console.log('object---');
414   - };
415   - const editAlarmCondition = (index, index1) => {
416   - alarmList.value[index].createRule[index1].alarmVisible = true;
417   - console.log('object');
418   - };
419   - // 添加键名筛选器
420   - const addFilter = (index, index1) => {
421   - console.log(index, index1);
422   - alarmList.value[index].createRule[index1].filterList?.push({
423   - operator: '=',
424   - value: '',
425   - });
426   - };
427   - const deleteFilter = (index: number, index1: number) => {
428   - alarmList.value[index].createRule[index1].filterList?.splice(index1, 1);
429   - };
430   - return {
431   - rules,
432   - alarmList,
433   - options,
434   - visible,
435   - editRemoveVisible,
436   - prevStep,
437   - addAlarmRule,
438   - addCreateRole,
439   - handleDeleteAlarm,
440   - handleDeleteCondition,
441   - addRemoveRule,
442   - handleDeleteRemoveCondition,
443   - handleCancel,
444   - handleCancel1,
445   - handleAlarmCancel,
446   - editAlarmCondition,
447   - keyTypeOptions,
448   - valueTypeOptions,
449   - operatorOptions,
450   - deleteFilter,
451   - addFilter,
452   - labelCol: { style: { width: '150px' } },
453   - wrapperCol: { span: 18 },
454   - };
455   - },
456   - });
457   -</script>
458   -<style lang="less" scoped>
459   - .step3 {
460   - width: 500px;
461   - margin: 0 auto;
462   - }
463   - .alarm-rule {
464   - height: 200px;
465   - display: flex;
466   - .alarm-remove {
467   - display: flex;
468   - justify-content: center;
469   - align-items: center;
470   - }
471   - }
472   -</style>
1 1 {
  2 + "name": "测试2",
  3 + "description": "测试2",
  4 + "transportType": "COAP",
2 5 "profileData": {
3   - "configuration": {
4   - "maxDevices": "1",
5   - "maxAssets": "1",
6   - "maxCustomers": "1",
7   - "maxUsers": "1",
8   - "maxDashboards": "1",
9   - "maxRuleChains": "1",
10   - "maxResourcesInBytes": "1",
11   - "maxOtaPackagesInBytes": "1",
12   - "maxTransportMessages": "1",
13   - "maxTransportDataPoints": "1",
14   - "maxREExecutions": "1",
15   - "maxJSExecutions": "1",
16   - "maxDPStorageDays": "1",
17   - "defaultStorageTtlDays": "1",
18   - "alarmsTtlDays": "1",
19   - "rpcTtlDays": "1",
20   - "maxRuleNodeExecutionsPerMessage": "1",
21   - "maxEmails": "1",
22   - "maxSms": "1",
23   - "maxCreatedAlarms": "1",
24   - "transportTenantMsgRateLimit": "1",
25   - "transportTenantTelemetryMsgRateLimit": "1",
26   - "transportTenantTelemetryDataPointsRateLimit": "1",
27   - "transportDeviceMsgRateLimit": "1",
28   - "transportDeviceTelemetryMsgRateLimit": "1",
29   - "transportDeviceTelemetryDataPointsRateLimit": "1"
30   - }
  6 + "alarms": [
  7 + {
  8 + "alarmType": "测试2",
  9 + "propagate": true,
  10 + "propagateRelationTypes": [
  11 + "测试2"
  12 + ],
  13 + "createRules": {
  14 + "MAJOR": {
  15 + "alarmDetails": "测试2",
  16 + "schedule": {
  17 + "type": "SPECIFIC_TIME",
  18 + "daysOfWeek": [
  19 + "1",
  20 + "2",
  21 + "3"
  22 + ],
  23 + "endsOn": "14:11:27",
  24 + "timezone": "Africa/Abidjan (UTC+00:00)"
  25 + },
  26 + "condition": {
  27 + "condition": [
  28 + {
  29 + "key": {
  30 + "type": "TIME_SERIES",
  31 + "key": "CO2"
  32 + },
  33 + "valueType": "NUMERIC",
  34 + "predicate": {
  35 + "operation": "LESS",
  36 + "value": {
  37 + "defaultValue": 2
  38 + },
  39 + "type": "NUMERIC"
  40 + }
  41 + }
  42 + ],
  43 + "spec": {
  44 + "type": "DURATION",
  45 + "unit": "DAYS",
  46 + "predicate": {
  47 + "defaultValue": 3,
  48 + "dynamicValue": {
  49 + "sourceType": "CURRENT_TENANT",
  50 + "sourceAttribute": "测试2"
  51 + }
  52 + }
  53 + }
  54 + }
  55 + }
  56 + }
  57 + }
  58 + ]
31 59 },
32   - "name": "1",
33   - "isolatedTbRuleEngine": true,
34   - "description": "1"
  60 + "alarmProfile": {
  61 + "messageMode": "PHONE_MESSAGE"
  62 + }
35 63 }
... ...
1   -{
2   - "name": "租户配置测试1",
3   - "isolatedTbCore": true,
4   - "isolatedTbRuleEngine": null,
5   - "profileData": {
6   - "configuration": {
7   - "maxDevices": 1,
8   - "maxAssets": 1,
9   - "maxCustomers": 1,
10   - "maxUsers": 1,
11   - "maxDashboards": 1,
12   - "maxRuleChains": 1,
13   - "maxResourcesInBytes": 1,
14   - "maxOtaPackagesInBytes": 1,
15   - "transportTenantMsgRateLimit": "1",
16   - "transportTenantTelemetryMsgRateLimit": "1",
17   - "transportTenantTelemetryDataPointsRateLimit": "1",
18   - "transportDeviceMsgRateLimit": "当前客户",
19   - "transportDeviceTelemetryMsgRateLimit": "1",
20   - "transportDeviceTelemetryDataPointsRateLimit": "d",
21   - "maxTransportMessages": 1,
22   - "maxTransportDataPoints": 1,
23   - "maxREExecutions": 1,
24   - "maxJSExecutions": 1,
25   - "maxDPStorageDays": 1,
26   - "maxRuleNodeExecutionsPerMessage": 1,
27   - "maxEmails": 1,
28   - "maxSms": 1,
29   - "maxCreatedAlarms": 1,
30   - "defaultStorageTtlDays": 1,
31   - "alarmsTtlDays": 1,
32   - "rpcTtlDays": 1,
33   - "type": "DEFAULT"
34   - }
35   - },
36   - "description": "1"
37   -}
... ... @@ -6,9 +6,9 @@ import { DescItem } from '/@/components/Description/index';
6 6 */
7 7
8 8 export enum TriggerEnum {
9   - IS_DEVICE_ACT = '',
10   - IS_TIME_ACT = 'TIME_SERIES',
11   - IS_SCENE_ACT = 'CONSTANT',
  9 + IS_DEVICE_ACT = 'SIMPLE',
  10 + IS_TIME_ACT = 'DURATION',
  11 + IS_SCENE_ACT = 'REPEATING',
12 12 IS_CURRENT_CUSTOMER = 'CURRENT_CUSTOMER',
13 13 IS_CURRENT_DEVICE = 'CURRENT_DEVICE',
14 14 }
... ... @@ -68,88 +68,88 @@ export const DescDetailSchema: DescItem[] = [
68 68
69 69 export const formSchema: FormSchema[] = [
70 70 {
71   - field: 'type1',
  71 + field: 'conditionType',
72 72 label: '条件类型',
73 73 colProps: { span: 24 },
74 74 component: 'Select',
75 75 componentProps: {
76 76 placeholder: '请选择报警日程表',
77 77 options: [
78   - { label: '简单', value: '' },
79   - { label: '持续时间', value: 'TIME_SERIES' },
80   - { label: '重复', value: 'CONSTANT' },
  78 + { label: '简单', value: 'SIMPLE' },
  79 + { label: '持续时间', value: 'DURATION' },
  80 + { label: '重复', value: 'REPEATING' },
81 81 ],
82 82 },
83 83 },
84 84 {
85   - field: 'valueType1',
  85 + field: 'sourceType',
86 86 label: '动态源类型',
87 87 colProps: { span: 24 },
88 88 component: 'Select',
89 89 componentProps: {
90 90 placeholder: '请选择动态源类型',
91 91 options: [
92   - { label: '无动态值', value: 'STRING' },
93   - { label: '当前租户', value: 'NUMERIC' },
94   - { label: '当前客户', value: 'BOOLEAN' },
95   - { label: '当前设备', value: 'NUMERIC' },
  92 + { label: '无动态值', value: '' },
  93 + { label: '当前租户', value: 'CURRENT_TENANT' },
  94 + { label: '当前客户', value: 'CURRENT_CUSTOMER' },
  95 + { label: '当前设备', value: 'CURRENT_DEVICE' },
96 96 ],
97 97 },
98   - ifShow: ({ values }) => isWenDu(Reflect.get(values, 'type')),
  98 + ifShow: ({ values }) => isWenDu(Reflect.get(values, 'conditionType')),
99 99 },
100 100 {
101   - field: 'value1',
  101 + field: 'sourceAttribute',
102 102 label: '源属性',
103 103 colProps: { span: 24 },
104 104 component: 'Input',
105 105 componentProps: {
106 106 placeholder: '源属性',
107 107 },
108   - ifShow: ({ values }) => isWenDu(Reflect.get(values, 'type')),
  108 + ifShow: ({ values }) => isWenDu(Reflect.get(values, 'conditionType')),
109 109 },
110 110 {
111   - field: 'valueType1',
  111 + field: 'sourceType',
112 112 label: '动态源类型',
113 113 colProps: { span: 24 },
114 114 component: 'Select',
115 115 componentProps: {
116 116 placeholder: '请选择动态源类型',
117 117 options: [
118   - { label: '无动态值', value: 'BOOLEAN' },
119   - { label: '当前租户', value: 'STRING' },
120   - { label: '当前客户', value: 'NUMERIC' },
121   - { label: '当前设备', value: 'COMPLEX' },
  118 + { label: '无动态值', value: '' },
  119 + { label: '当前租户', value: 'CURRENT_TENANT' },
  120 + { label: '当前客户', value: 'CURRENT_CUSTOMER' },
  121 + { label: '当前设备', value: 'CURRENT_DEVICE' },
122 122 ],
123 123 },
124   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
  124 + ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'conditionType')),
125 125 },
126 126 {
127   - field: 'value1',
  127 + field: 'sourceAttribute',
128 128 label: '源属性',
129 129 colProps: { span: 24 },
130 130 component: 'Input',
131 131 componentProps: {
132 132 placeholder: '源属性',
133 133 },
134   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
  134 + ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'conditionType')),
135 135 },
136 136 {
137   - field: 'predicate1',
  137 + field: 'defaultValue',
138 138 label: '持续时间值',
139 139 colProps: { span: 24 },
140 140 component: 'Input',
141 141 componentProps: {
142   - placeholder: '请输入持续时间值',
  142 + placeholder: '请输入持续时间值(请输入数字)',
143 143 },
144   - ifShow: ({ values }) => isWenDu(Reflect.get(values, 'type')),
  144 + ifShow: ({ values }) => isWenDu(Reflect.get(values, 'conditionType')),
145 145 },
146 146 {
147   - field: 'spec1',
  147 + field: 'unit',
148 148 label: '时间单位',
149 149 colProps: { span: 24 },
150 150 component: 'Select',
151 151 componentProps: {
152   - placeholder: '请选择报警日程表',
  152 + placeholder: '请选择时间单位',
153 153 options: [
154 154 { label: '秒', value: 'SECONDS' },
155 155 { label: '分钟', value: 'MINUTES' },
... ... @@ -157,26 +157,26 @@ export const formSchema: FormSchema[] = [
157 157 { label: '天', value: 'DAYS' },
158 158 ],
159 159 },
160   - ifShow: ({ values }) => isWenDu(Reflect.get(values, 'type')),
  160 + ifShow: ({ values }) => isWenDu(Reflect.get(values, 'conditionType')),
161 161 },
162 162 {
163   - field: '',
  163 + field: 'defaultValue',
164 164 label: '事件计数值必填',
165 165 colProps: { span: 24 },
166 166 component: 'Input',
167 167 componentProps: {
168   - placeholder: '请输入事件计数值必填',
  168 + placeholder: '请输入事件计数值必填(请输入数字)',
169 169 },
170 170 rules: [{ message: '事件计数应在1到2147483637之间', trigger: 'blur' }],
171   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
  171 + ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'conditionType')),
172 172 },
173 173 {
174   - field: '',
  174 + field: 'inherit',
175 175 label: '',
176 176 component: 'Checkbox',
177 177 renderComponentContent: 'Inherit from owner',
178 178 ifShow: ({ values }) =>
179   - isCurrentCus(Reflect.get(values, 'valueType')) ||
180   - isCurrentDev(Reflect.get(values, 'valueType')),
  179 + isCurrentCus(Reflect.get(values, 'sourceType')) ||
  180 + isCurrentDev(Reflect.get(values, 'sourceType')),
181 181 },
182 182 ];
... ...
... ... @@ -8,6 +8,10 @@ export enum TriggerEnum {
8 8 IS_DEVICE_ACT = '属性',
9 9 IS_TIME_ACT = 'TIME_SERIES',
10 10 IS_SCENE_ACT = '常量',
  11 + IS_STRING = 'STRING',
  12 + IS_NUMERIC = 'NUMERIC',
  13 + IS_BOOLEAN = 'BOOLEAN',
  14 + IS_COMPLEX = 'COMPLEX',
11 15 }
12 16
13 17 export const isShiDu = (type: string) => {
... ... @@ -21,6 +25,22 @@ export const isTimeAll = (type: string) => {
21 25 return type === TriggerEnum.IS_SCENE_ACT;
22 26 };
23 27
  28 +export const isString = (type: string) => {
  29 + return type === TriggerEnum.IS_STRING;
  30 +};
  31 +
  32 +export const isNumeric = (type: string) => {
  33 + return type === TriggerEnum.IS_NUMERIC;
  34 +};
  35 +
  36 +export const isBoolean = (type: string) => {
  37 + return type === TriggerEnum.IS_BOOLEAN;
  38 +};
  39 +
  40 +export const isComplex = (type: string) => {
  41 + return type === TriggerEnum.IS_COMPLEX;
  42 +};
  43 +
24 44 export const formSchema: FormSchema[] = [
25 45 {
26 46 field: 'type',
... ... @@ -79,7 +99,7 @@ export const formSchema: FormSchema[] = [
79 99 ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
80 100 },
81 101 {
82   - field: 'valueType',
  102 + field: 'type1',
83 103 label: '值类型',
84 104 colProps: { span: 24 },
85 105 component: 'Select',
... ... @@ -93,4 +113,81 @@ export const formSchema: FormSchema[] = [
93 113 ],
94 114 },
95 115 },
  116 + {
  117 + field: 'operation',
  118 + label: '操作',
  119 + colProps: { span: 24 },
  120 + component: 'Select',
  121 + componentProps: {
  122 + placeholder: '请选择操作',
  123 + options: [
  124 + { label: '等于', value: 'EQUAL' },
  125 + { label: '不等于', value: 'NOT_EQUAL' },
  126 + { label: '开始于', value: 'STARTS_WITH' },
  127 + { label: '结束于', value: 'ENDS_WITH' },
  128 + { label: '包含', value: 'CONTAINS' },
  129 + { label: '不包含', value: 'NOT_CONTAINS' },
  130 + ],
  131 + },
  132 + ifShow: ({ values }) => isString(Reflect.get(values, 'type1')),
  133 + },
  134 + {
  135 + field: 'operation',
  136 + label: '操作',
  137 + colProps: { span: 24 },
  138 + component: 'Select',
  139 + componentProps: {
  140 + placeholder: '请选择操作',
  141 + options: [
  142 + { label: '等于', value: 'EQUAL' },
  143 + { label: '不等于', value: 'NOT_EQUAL' },
  144 + { label: '大于', value: 'GREATER' },
  145 + { label: '小于', value: 'LESS' },
  146 + { label: '大于或等于', value: 'GREATER_OR_EQUAL' },
  147 + { label: '小于或等于', value: 'LESS_OR_EQUAL' },
  148 + ],
  149 + },
  150 + ifShow: ({ values }) => isNumeric(Reflect.get(values, 'type1')),
  151 + },
  152 + {
  153 + field: 'operation',
  154 + label: '操作',
  155 + colProps: { span: 24 },
  156 + component: 'Select',
  157 + componentProps: {
  158 + placeholder: '请选择操作',
  159 + options: [
  160 + { label: '等于', value: 'EQUAL' },
  161 + { label: '不等于', value: 'NOT_EQUAL' },
  162 + ],
  163 + },
  164 + ifShow: ({ values }) => isBoolean(Reflect.get(values, 'type1')),
  165 + },
  166 + {
  167 + field: 'operation',
  168 + label: '操作',
  169 + colProps: { span: 24 },
  170 + component: 'Select',
  171 + componentProps: {
  172 + placeholder: '请选择操作',
  173 + options: [
  174 + { label: '等于', value: 'EQUAL' },
  175 + { label: '不等于', value: 'NOT_EQUAL' },
  176 + { label: '大于', value: 'GREATER' },
  177 + { label: '小于', value: 'LESS' },
  178 + { label: '大于或等于', value: 'GREATER_OR_EQUAL' },
  179 + { label: '小于或等于', value: 'LESS_OR_EQUAL' },
  180 + ],
  181 + },
  182 + ifShow: ({ values }) => isComplex(Reflect.get(values, 'type1')),
  183 + },
  184 + {
  185 + field: 'value1',
  186 + label: '默认值',
  187 + colProps: { span: 24 },
  188 + component: 'Input',
  189 + componentProps: {
  190 + placeholder: '请输入默认值(数字)',
  191 + },
  192 + },
96 193 ];
... ...
... ... @@ -41,7 +41,7 @@
41 41 <KeyValueModal @register="registerModal" @success="handleSuccess" />
42 42 </template>
43 43 <script lang="ts">
44   - import { defineComponent, ref, computed, unref, onMounted } from 'vue';
  44 + import { defineComponent, ref, computed, unref } from 'vue';
45 45 import { BasicModal, useModalInner } from '/@/components/Modal';
46 46 import { BasicForm, useForm } from '/@/components/Form';
47 47 import { formSchema, columns, DescDetailSchema, columnsView } from './config';
... ... @@ -60,11 +60,12 @@
60 60 BasicTable,
61 61 TableAction,
62 62 },
63   - emits: ['success', 'register', 'getAllFieldsRule'],
  63 + emits: ['success', 'register', 'getAllFieldsRule', 'getLastAllFieldsRule'],
64 64 setup(_, { emit }) {
65 65 const getTableApiData: any = ref([]);
66 66 const detailData: any = ref([]);
67 67 const receiveData: any = ref(null);
  68 + const lastValues: any = ref(null);
68 69 const isUpdate = ref(true);
69 70 const [registerForm, { getFieldsValue }] = useForm({
70 71 labelWidth: 120,
... ... @@ -90,13 +91,12 @@
90 91
91 92 const handleSubmit = () => {
92 93 if (unref(isUpdate.value)) {
93   - console.log(1);
94 94 const values = getFieldsValue();
95 95 getTableApiData.value.push(values);
96 96 detailData.value.push(values);
97 97 }
98   - // const values = getFieldsValue();
99   - emit('getAllFieldsRule', receiveData.value);
  98 + lastValues.value = getFieldsValue();
  99 + emit('getAllFieldsRule', receiveData.value, lastValues.value);
100 100 closeModal();
101 101 };
102 102 const handleAddKey = () => {
... ... @@ -118,7 +118,6 @@
118 118 };
119 119 const handleSuccess = (v) => {
120 120 receiveData.value = v;
121   - console.log(receiveData.value);
122 121 setTimeout(() => {
123 122 doFunc();
124 123 }, 10);
... ... @@ -127,9 +126,6 @@
127 126 getTableApiData.value.push(receiveData.value);
128 127 detailData.value.push(receiveData.value);
129 128 };
130   - onMounted(() => {
131   - console.log(1);
132   - });
133 129 return {
134 130 columnsView,
135 131 DescDetailSchema,
... ...
... ... @@ -308,6 +308,9 @@ export const formSchema: FormSchema[] = [
308 308 colProps: {
309 309 span: 8,
310 310 },
  311 + componentProps: {
  312 + valueFormat: 'HH:mm:ss',
  313 + },
311 314 ifShow: ({ values }) => isWenDu(Reflect.get(values, 'schedule')),
312 315 },
313 316 {
... ... @@ -317,6 +320,9 @@ export const formSchema: FormSchema[] = [
317 320 colProps: {
318 321 span: 8,
319 322 },
  323 + componentProps: {
  324 + valueFormat: 'HH:mm:ss',
  325 + },
320 326 ifShow: ({ values }) => isWenDu(Reflect.get(values, 'schedule')),
321 327 },
322 328 ];
... ...
1 1 import { FormSchema } from '/@/components/Form';
2   -import { findDictItemByCode } from '/@/api/system/dict';
3 2 // import { getOrganizationList } from '/@/api/system/system';
4 3 // import { copyTransFun } from '/@/utils/fnUtils';
5 4 import { deviceConfigGetRuleChain } from '/@/api/device/deviceConfigApi';
6 5 import { ref } from 'vue';
  6 +import { findDictItemByCode } from '/@/api/system/dict';
  7 +import { alarmContactGetPage } from '/@/api/device/deviceConfigApi';
7 8
8 9 export const step1Schemas: FormSchema[] = [
9 10 {
... ... @@ -74,7 +75,6 @@ export const step2Schemas: FormSchema[] = [
74 75 field: 'transportType',
75 76 component: 'Select',
76 77 label: '传输方式',
77   - defaultValue: 'COAP',
78 78 componentProps: {
79 79 options: [
80 80 { label: 'MQTT', value: 'MQTT' },
... ... @@ -184,3 +184,175 @@ export const dashboardFormScheme: FormSchema[] = [
184 184 },
185 185 },
186 186 ];
  187 +
  188 +export const alertContactsSchemas: FormSchema[] = [
  189 + {
  190 + field: 'alarmContactId',
  191 + label: '告警通知联系人',
  192 + component: 'ApiSelect',
  193 + componentProps: {
  194 + api: alarmContactGetPage,
  195 + labelField: 'username',
  196 + valueField: 'id',
  197 + resultField: 'items',
  198 + },
  199 + },
  200 + {
  201 + field: 'messageMode',
  202 + label: '告警通知方式',
  203 + required: true,
  204 + component: 'ApiSelect',
  205 + componentProps: {
  206 + api: findDictItemByCode,
  207 + params: {
  208 + dictCode: 'message_type',
  209 + },
  210 + labelField: 'itemText',
  211 + valueField: 'itemValue',
  212 + },
  213 + },
  214 +];
  215 +
  216 +export const echoFormSchema: FormSchema[] = [
  217 + {
  218 + field: 'type',
  219 + label: '键类型',
  220 + colProps: { span: 24 },
  221 + component: 'Select',
  222 + componentProps: {
  223 + placeholder: '请选择键类型',
  224 + options: [
  225 + { label: '属性', value: '属性' },
  226 + { label: 'Timeseries', value: 'TIME_SERIES' },
  227 + { label: '常量', value: '常量' },
  228 + ],
  229 + },
  230 + },
  231 + {
  232 + field: 'key',
  233 + label: '键名',
  234 + colProps: { span: 24 },
  235 + component: 'Select',
  236 + componentProps: {
  237 + placeholder: '请选择键名',
  238 + options: [
  239 + { label: 'active', value: 'active' },
  240 + { label: 'inactivityAlarmTime', value: 'inactivityAlarmTime' },
  241 + { label: 'lastActivityTime', value: 'lastActivityTime' },
  242 + { label: 'lastConnectTime', value: 'lastConnectTime' },
  243 + { label: 'lastDisconnectTime', value: 'lastDisconnectTime' },
  244 + ],
  245 + },
  246 + },
  247 + {
  248 + field: 'key',
  249 + label: '键名',
  250 + colProps: { span: 24 },
  251 + component: 'Select',
  252 + componentProps: {
  253 + placeholder: '请选择键名',
  254 + options: [
  255 + { label: 'CO2', value: 'CO2' },
  256 + { label: 'temp', value: 'temp' },
  257 + { label: 'wet', value: 'wet' },
  258 + ],
  259 + },
  260 + },
  261 + {
  262 + field: 'key',
  263 + label: '键名',
  264 + colProps: { span: 24 },
  265 + component: 'Input',
  266 + componentProps: {
  267 + placeholder: '请输入键名',
  268 + },
  269 + },
  270 + {
  271 + field: 'type1',
  272 + label: '值类型',
  273 + colProps: { span: 24 },
  274 + component: 'Select',
  275 + componentProps: {
  276 + placeholder: '请选择值类型',
  277 + options: [
  278 + { label: '字符串', value: 'STRING' },
  279 + { label: '数字', value: 'NUMERIC' },
  280 + { label: '布尔值', value: 'BOOLEAN' },
  281 + { label: '日期时间', value: 'COMPLEX' },
  282 + ],
  283 + },
  284 + },
  285 + {
  286 + field: 'operation',
  287 + label: '操作',
  288 + colProps: { span: 24 },
  289 + component: 'Select',
  290 + componentProps: {
  291 + placeholder: '请选择操作',
  292 + options: [
  293 + { label: '等于', value: 'EQUAL' },
  294 + { label: '不等于', value: 'NOT_EQUAL' },
  295 + { label: '开始于', value: 'STARTS_WITH' },
  296 + { label: '结束于', value: 'ENDS_WITH' },
  297 + { label: '包含', value: 'CONTAINS' },
  298 + { label: '不包含', value: 'NOT_CONTAINS' },
  299 + ],
  300 + },
  301 + },
  302 + {
  303 + field: 'operation',
  304 + label: '操作',
  305 + colProps: { span: 24 },
  306 + component: 'Select',
  307 + componentProps: {
  308 + placeholder: '请选择操作',
  309 + options: [
  310 + { label: '等于', value: 'EQUAL' },
  311 + { label: '不等于', value: 'NOT_EQUAL' },
  312 + { label: '大于', value: 'GREATER' },
  313 + { label: '小于', value: 'LESS' },
  314 + { label: '大于或等于', value: 'GREATER_OR_EQUAL' },
  315 + { label: '小于或等于', value: 'LESS_OR_EQUAL' },
  316 + ],
  317 + },
  318 + },
  319 + {
  320 + field: 'operation',
  321 + label: '操作',
  322 + colProps: { span: 24 },
  323 + component: 'Select',
  324 + componentProps: {
  325 + placeholder: '请选择操作',
  326 + options: [
  327 + { label: '等于', value: 'EQUAL' },
  328 + { label: '不等于', value: 'NOT_EQUAL' },
  329 + ],
  330 + },
  331 + },
  332 + {
  333 + field: 'operation',
  334 + label: '操作',
  335 + colProps: { span: 24 },
  336 + component: 'Select',
  337 + componentProps: {
  338 + placeholder: '请选择操作',
  339 + options: [
  340 + { label: '等于', value: 'EQUAL' },
  341 + { label: '不等于', value: 'NOT_EQUAL' },
  342 + { label: '大于', value: 'GREATER' },
  343 + { label: '小于', value: 'LESS' },
  344 + { label: '大于或等于', value: 'GREATER_OR_EQUAL' },
  345 + { label: '小于或等于', value: 'LESS_OR_EQUAL' },
  346 + ],
  347 + },
  348 + },
  349 + {
  350 + field: 'value1',
  351 + label: '默认值',
  352 + colProps: { span: 24 },
  353 + component: 'Input',
  354 + componentProps: {
  355 + placeholder: '请输入默认值(数字)',
  356 + },
  357 + },
  358 +];
... ...
1 1 import { BasicColumn, FormSchema } from '/@/components/Table';
  2 +import { transformTime } from '/@/hooks/web/useDateToLocaleString';
2 3
3 4 export const columns: BasicColumn[] = [
4 5 {
5 6 title: '创建时间',
6 7 dataIndex: 'createdTime',
7 8 width: 200,
  9 + format: (_text: string, record: Recordable) => {
  10 + return transformTime(record.createdTime);
  11 + },
8 12 },
9 13 {
10 14 title: '名称',
... ... @@ -20,9 +24,23 @@ export const columns: BasicColumn[] = [
20 24 title: '默认',
21 25 dataIndex: 'default',
22 26 width: 200,
  27 + format: (_text: string, record: Recordable) => {
  28 + return record.default == false ? '否' : '是';
  29 + },
23 30 },
24 31 ];
25 32
  33 +export const searchFormSchema: FormSchema[] = [
  34 + {
  35 + field: 'textSearch',
  36 + label: '租户配置名称',
  37 + colProps: { span: 8 },
  38 + component: 'Input',
  39 + componentProps: {
  40 + placeholder: '请输入租户配置名称',
  41 + },
  42 + },
  43 +];
26 44 export const formSchema: FormSchema[] = [
27 45 {
28 46 field: 'name',
... ...
1 1 import { FormSchema } from '/@/components/Table';
2   -import { numberRule } from '/@/utils/rules';
  2 +// import { numberRule } from '/@/utils/rules';
3 3
4 4 export const formSchema: FormSchema[] = [
5 5 {
... ... @@ -12,233 +12,233 @@ export const formSchema: FormSchema[] = [
12 12 placeholder: '请选择类型',
13 13 options: [{ label: '默认', value: 'DEFAULT' }],
14 14 },
15   - rules: numberRule,
16 15 },
17 16 {
18 17 field: 'maxDevices',
  18 + required: true,
  19 +
19 20 label: '最大设备数(0-无限制)',
20 21 component: 'Input',
21 22 colProps: { span: 24 },
22 23 componentProps: {
23   - placeholder: '请输入最大设备数',
  24 + placeholder: '请输入最大设备数(请输入数字)',
24 25 },
25   - rules: numberRule,
26 26 },
27 27 {
28 28 field: 'maxAssets',
  29 + required: true,
  30 +
29 31 label: '最大资产数(0-无限制)',
30 32 colProps: { span: 24 },
31 33 component: 'Input',
32   - rules: numberRule,
33   -
34 34 componentProps: {
35   - placeholder: '请输入最大资产',
  35 + placeholder: '请输入最大资产(请输入数字)',
36 36 },
37 37 },
38 38 {
39 39 field: 'maxCustomers',
  40 + required: true,
  41 +
40 42 label: '最大客户数(0-无限制)',
41 43 colProps: { span: 24 },
42 44 component: 'Input',
43   - rules: numberRule,
44   -
45 45 componentProps: {
46   - placeholder: '请输入最大客户数',
  46 + placeholder: '请输入最大客户数(请输入数字)',
47 47 },
48 48 },
49 49 {
50 50 field: 'maxUsers',
  51 + required: true,
  52 +
51 53 label: '最大用户数(0-无限制)',
52 54 colProps: { span: 24 },
53 55 component: 'Input',
54   - rules: numberRule,
55   -
56 56 componentProps: {
57   - placeholder: '请输入最大用户数',
  57 + placeholder: '请输入最大用户数(请输入数字)',
58 58 },
59 59 },
60 60 {
61 61 field: 'maxDashboards',
  62 + required: true,
  63 +
62 64 label: '仪表板的最大数量(0-无限制)',
63 65 colProps: { span: 24 },
64 66 component: 'Input',
65   - rules: numberRule,
66   -
67 67 componentProps: {
68   - placeholder: '请输入仪表板的最大数量',
  68 + placeholder: '请输入仪表板的最大数量(请输入数字)',
69 69 },
70 70 },
71 71 {
72 72 field: 'maxRuleChains',
  73 + required: true,
  74 +
73 75 label: '最大规则链数(0-无限制)',
74 76 colProps: { span: 24 },
75 77 component: 'Input',
76   - rules: numberRule,
77   -
78 78 componentProps: {
79   - placeholder: '请输入最大规则链数',
  79 + placeholder: '请输入最大规则链数(请输入数字)',
80 80 },
81 81 },
82 82 {
83 83 field: 'maxResourcesInBytes',
  84 + required: true,
  85 +
84 86 label: '以字节为单位的资源文件的最大总和(0-无限制)',
85 87 colProps: { span: 24 },
86 88 component: 'Input',
87   - rules: numberRule,
88   -
89 89 componentProps: {
90   - placeholder: '请输入',
  90 + placeholder: '请输入(请输入数字)',
91 91 },
92 92 },
93 93 {
94 94 field: 'maxOtaPackagesInBytes',
  95 + required: true,
  96 +
95 97 label: 'Ota包文件大小的最大总和(字节)(0-无限制)',
96 98 colProps: { span: 24 },
97 99 component: 'Input',
98   - rules: numberRule,
99   -
100 100 componentProps: {
101   - placeholder: '请输入',
  101 + placeholder: '请输入(请输入数字)',
102 102 },
103 103 },
104 104 {
105 105 field: 'maxTransportMessages',
  106 + required: true,
  107 +
106 108 label: '最大传输消息数(0-无限制)',
107 109 colProps: { span: 24 },
108 110 component: 'Input',
109   - rules: numberRule,
110   -
111 111 componentProps: {
112   - placeholder: '请输入最大传输消息数',
  112 + placeholder: '请输入最大传输消息数(请输入数字)',
113 113 },
114 114 },
115 115 {
116 116 field: 'maxTransportDataPoints',
  117 + required: true,
  118 +
117 119 label: '传输数据点的最大数量(0-无限制)',
118 120 colProps: { span: 24 },
119 121 component: 'Input',
120   - rules: numberRule,
121   -
122 122 componentProps: {
123   - placeholder: '请输入传输数据点的最大数量',
  123 + placeholder: '请输入传输数据点的最大数量(请输入数字)',
124 124 },
125 125 },
126 126 {
127 127 field: 'maxREExecutions',
  128 + required: true,
  129 +
128 130 label: '最大规则引擎数(0-无限制)',
129 131 colProps: { span: 24 },
130 132 component: 'Input',
131   - rules: numberRule,
132   -
133 133 componentProps: {
134   - placeholder: '请输入最大规则引擎数',
  134 + placeholder: '请输入最大规则引擎数(请输入数字)',
135 135 },
136 136 },
137 137
138 138 {
139 139 field: 'maxJSExecutions',
  140 + required: true,
  141 +
140 142 label: '最大JavaScript执行数(0-不受限制)',
141 143 colProps: { span: 24 },
142 144 component: 'Input',
143   - rules: numberRule,
144   -
145 145 componentProps: {
146   - placeholder: '请输入最大JavaScript执行数',
  146 + placeholder: '请输入最大JavaScript执行数(请输入数字)',
147 147 },
148 148 },
149 149 {
150 150 field: 'maxDPStorageDays',
  151 + required: true,
  152 +
151 153 label: '最大日存储数据点数(0-无限制)',
152 154 colProps: { span: 24 },
153 155 component: 'Input',
154   - rules: numberRule,
155   -
156 156 componentProps: {
157   - placeholder: '请输入最大日存储数据点数',
  157 + placeholder: '请输入最大日存储数据点数(请输入数字)',
158 158 },
159 159 },
160 160 {
161 161 field: 'defaultStorageTtlDays',
  162 + required: true,
  163 +
162 164 label: '默认存储 TTL 天数(0-无限制)',
163 165 colProps: { span: 24 },
164 166 component: 'Input',
165   - rules: numberRule,
166   -
167 167 componentProps: {
168   - placeholder: '请输入默认存储 TTL 天数',
  168 + placeholder: '请输入默认存储 TTL 天数(请输入数字)',
169 169 },
170 170 },
171 171 {
172 172 field: 'alarmsTtlDays',
  173 + required: true,
  174 +
173 175 label: 'Alams TTL days(0-无限制)',
174 176 colProps: { span: 24 },
175 177 component: 'Input',
176   - rules: numberRule,
177   -
178 178 componentProps: {
179   - placeholder: '请输入Alams TTL days',
  179 + placeholder: '请输入Alams TTL days(请输入数字)',
180 180 },
181 181 },
182 182 {
183 183 field: 'rpcTtlDays',
  184 + required: true,
  185 +
184 186 label: 'RPC TTL days(0-无限制)',
185 187 colProps: { span: 24 },
186 188 component: 'Input',
187   - rules: numberRule,
188   -
189 189 componentProps: {
190   - placeholder: '请输入RPC TTL days',
  190 + placeholder: '请输入RPC TTL days(请输入数字)',
191 191 },
192 192 },
193 193 {
194 194 field: 'maxRuleNodeExecutionsPerMessage',
  195 + required: true,
  196 +
195 197 label: '每条消息的最大规则节点执行数(0-无限制)',
196 198 colProps: { span: 24 },
197 199 component: 'Input',
198   - rules: numberRule,
199   -
200 200 componentProps: {
201   - placeholder: '请输入每条消息的最大规则节点执行数',
  201 + placeholder: '请输入每条消息的最大规则节点执行数(请输入数字)',
202 202 },
203 203 },
204 204 {
205 205 field: 'maxEmails',
  206 + required: true,
206 207 label: '发送的最大电子邮件数(0-无限制)',
207 208 colProps: { span: 24 },
208 209 component: 'Input',
209   - rules: numberRule,
210   -
211 210 componentProps: {
212   - placeholder: '请输入发送的最大电子邮件数',
  211 + placeholder: '请输入发送的最大电子邮件数(请输入数字)',
213 212 },
214 213 },
215 214 {
216 215 field: 'maxSms',
  216 + required: true,
  217 +
217 218 label: '发送的最大短信数(0-无限制)',
218 219 colProps: { span: 24 },
219 220 component: 'Input',
220   - rules: numberRule,
221   -
222 221 componentProps: {
223   - placeholder: '请输入发送的最大短信数',
  222 + placeholder: '请输入发送的最大短信数(请输入数字)',
224 223 },
225 224 },
226 225 {
227 226 field: 'maxCreatedAlarms',
  227 + required: true,
  228 +
228 229 label: '创建的最大报警数 (0 - 无限制)',
229 230 colProps: { span: 24 },
230 231 component: 'Input',
231   - rules: numberRule,
232 232 componentProps: {
233   - placeholder: '请输入maxCreatedAlarms',
  233 + placeholder: '请输入maxCreatedAlarms(请输入数字)',
234 234 },
235 235 },
236 236 {
237 237 field: 'transportTenantMsgRateLimit',
  238 +
238 239 label: '传输租户消息速率限制',
239 240 colProps: { span: 24 },
240 241 component: 'Input',
241   -
242 242 componentProps: {
243 243 placeholder: '请输入传输租户消息速率限制',
244 244 },
... ... @@ -248,7 +248,6 @@ export const formSchema: FormSchema[] = [
248 248 label: '租户遥测消息速率限制',
249 249 colProps: { span: 24 },
250 250 component: 'Input',
251   -
252 251 componentProps: {
253 252 placeholder: '请输入租户遥测消息速率限制',
254 253 },
... ... @@ -258,7 +257,6 @@ export const formSchema: FormSchema[] = [
258 257 label: '租户遥测数据点速率限制',
259 258 colProps: { span: 24 },
260 259 component: 'Input',
261   -
262 260 componentProps: {
263 261 placeholder: '请输入租户遥测数据点速率限制',
264 262 },
... ... @@ -268,7 +266,6 @@ export const formSchema: FormSchema[] = [
268 266 label: '传输设备消息速率限制',
269 267 colProps: { span: 24 },
270 268 component: 'Input',
271   -
272 269 componentProps: {
273 270 placeholder: '请输入传输设备消息速率限制',
274 271 },
... ... @@ -278,7 +275,6 @@ export const formSchema: FormSchema[] = [
278 275 label: '设备遥测消息速率限制',
279 276 colProps: { span: 24 },
280 277 component: 'Input',
281   -
282 278 componentProps: {
283 279 placeholder: '请输入设备遥测消息速率限制',
284 280 },
... ...
1 1 <template>
2   - <CollapseContainer title="配置设置">
  2 + <CollapseContainer title="租户配置设置">
3 3 <BasicForm @register="registerForm" />
4 4 </CollapseContainer>
5 5 </template>
... ... @@ -15,11 +15,13 @@
15 15 emits: ['success', 'register', 'funcResetFields'],
16 16 setup() {
17 17 const getValueData: any = ref({});
18   - const [registerForm, { getFieldsValue, resetFields }] = useForm({
  18 + const [registerForm, { getFieldsValue, resetFields, setFieldsValue }] = useForm({
19 19 schemas: formSchema,
20 20 showActionButtonGroup: false,
21 21 });
22   -
  22 + const setFieldsValueFunc = (v) => {
  23 + setFieldsValue(v);
  24 + };
23 25 function getAllFields(getV) {
24 26 const values = getFieldsValue();
25 27 getValueData.value = values;
... ... @@ -30,6 +32,7 @@
30 32 resetFields();
31 33 }
32 34 return {
  35 + setFieldsValueFunc,
33 36 funcResetFields,
34 37 getAllFields,
35 38 registerForm,
... ...
1 1 <template>
2 2 <div>
3   - <BasicTable
4   - :rowSelection="{ type: 'checkbox' }"
5   - @selection-change="useSelectionChange"
6   - @register="registerTable"
7   - >
  3 + <BasicTable @register="registerTable">
8 4 <template #toolbar>
9 5 <a-button type="primary" @click="handleAdd"> 新增租户配置 </a-button>
10   - <!-- <a-button type="error" @click="handleToolbarDel"> 删除 </a-button> -->
11 6 </template>
12 7 <template #action="{ record }">
13 8 <TableAction
... ... @@ -42,7 +37,7 @@
42 37 import { BasicTable, useTable, TableAction } from '/@/components/Table';
43 38 import { useDrawer } from '/@/components/Drawer';
44 39 import TenantSettingDrawer from './useDrawer.vue';
45   - import { columns } from './config';
  40 + import { columns, searchFormSchema } from './config';
46 41 import { useMessage } from '/@/hooks/web/useMessage';
47 42 import { getTableTenantProfileApi, deleteTenantProfileApi } from '/@/api/tenant/tenantApi';
48 43
... ... @@ -50,7 +45,6 @@
50 45 name: 'Index',
51 46 components: { BasicTable, TenantSettingDrawer, TableAction },
52 47 setup() {
53   - // let selectedRowKeys: Array<string> = [];
54 48 let echoEditData = reactive({});
55 49 const [registerDrawer, { openDrawer }] = useDrawer();
56 50 const { createMessage } = useMessage();
... ... @@ -59,6 +53,10 @@
59 53 clickToRowSelect: false,
60 54 api: getTableTenantProfileApi,
61 55 columns,
  56 + formConfig: {
  57 + labelWidth: 120,
  58 + schemas: searchFormSchema,
  59 + },
62 60 useSearchForm: true,
63 61 showTableSetting: true,
64 62 bordered: true,
... ... @@ -78,17 +76,6 @@
78 76 });
79 77 }
80 78
81   - const useSelectionChange = () => {
82   - console.log(1);
83   - // selectedRowKeys = getSelectRowKeys();
84   - };
85   -
86   - async function handleToolbarDel() {
87   - // await screenLinkPageDeleteApi(selectedRowKeys);
88   - // createMessage.success('删除成功');
89   - reload();
90   - }
91   -
92 79 function handleEdit(record: Recordable) {
93 80 openDrawer(true, {
94 81 record,
... ... @@ -97,7 +84,8 @@
97 84 echoEditData = record;
98 85 }
99 86 async function handleDelete(record: Recordable) {
100   - let ids = record.id;
  87 + let ids = record.id.id;
  88 + console.log(record);
101 89 await deleteTenantProfileApi(ids);
102 90 createMessage.success('删除成功');
103 91 reload();
... ... @@ -106,12 +94,10 @@
106 94 reload();
107 95 }
108 96 return {
109   - useSelectionChange,
110 97 echoEditData,
111 98 registerTable,
112 99 registerDrawer,
113 100 handleAdd,
114   - handleToolbarDel,
115 101 handleEdit,
116 102 handleDelete,
117 103 handleSuccess,
... ...
... ... @@ -9,7 +9,7 @@
9 9 @ok="handleSubmit"
10 10 >
11 11 <BasicForm @register="registerForm" />
12   - <CpnsTenantSet ref="getChildData" />
  12 + <CpnsTenantSet ref="getChildData" :parentData="parentSetData" />
13 13 </BasicDrawer>
14 14 </div>
15 15 </template>
... ... @@ -30,6 +30,7 @@
30 30 const { createMessage } = useMessage();
31 31 const isUpdate = ref(true);
32 32 let postAllData: any = reactive({});
  33 + const parentSetData: any = ref(null);
33 34 let getValuesFormData: any = reactive({});
34 35 const { proxy } = getCurrentInstance();
35 36 const getChildData = ref(null);
... ... @@ -47,6 +48,8 @@
47 48 isUpdate.value = !!data?.isUpdate;
48 49 //编辑
49 50 if (unref(isUpdate)) {
  51 + parentSetData.value = { ...data.record.profileData.configuration };
  52 + proxy.$refs.getChildData.setFieldsValueFunc(parentSetData.value);
50 53 editGetId.value = data.record.id;
51 54 await setFieldsValue({
52 55 ...data.record,
... ... @@ -56,25 +59,27 @@
56 59 const getTitle = computed(() => (!unref(isUpdate) ? '新增租户配置' : '编辑租户配置'));
57 60
58 61 async function handleSubmit() {
59   - let res = validateFields();
60   - if (!res) return;
61   - getValuesFormData = getFieldsValue();
62   - let getChildValues = proxy.$refs.getChildData.getAllFields();
63   - let profileData1 = {
64   - configuration: getChildValues,
65   - };
66   - Object.assign(
67   - postAllData,
68   - {
69   - profileData: profileData1,
70   - },
71   - getValuesFormData
72   - );
73   - await saveTenantProfileApi(postAllData);
74   - createMessage.success('租户配置新增成功');
75   - closeDrawer();
76   - emit('success');
77   - resetFields();
  62 + if (!unref(isUpdate)) {
  63 + let res = validateFields();
  64 + if (!res) return;
  65 + getValuesFormData = getFieldsValue();
  66 + let getChildValues = proxy.$refs.getChildData.getAllFields();
  67 + let profileData1 = {
  68 + configuration: getChildValues,
  69 + };
  70 + Object.assign(
  71 + postAllData,
  72 + {
  73 + profileData: profileData1,
  74 + },
  75 + getValuesFormData
  76 + );
  77 + await saveTenantProfileApi(postAllData);
  78 + createMessage.success('租户配置新增成功');
  79 + closeDrawer();
  80 + emit('success');
  81 + resetFields();
  82 + }
78 83 if (unref(isUpdate)) {
79 84 let res = validateFields();
80 85 if (!res) return;
... ... @@ -98,6 +103,7 @@
98 103 }
99 104 }
100 105 return {
  106 + parentSetData,
101 107 getChildData,
102 108 registerDrawer,
103 109 registerForm,
... ...