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,9 +11,12 @@ import {
11 import { defHttp } from '/@/utils/http/axios'; 11 import { defHttp } from '/@/utils/http/axios';
12 import { BasicPageParams } from '/@/api/model/baseModel'; 12 import { BasicPageParams } from '/@/api/model/baseModel';
13 export type QueryTenantProfilesParam = BasicPageParams & OtherParams; 13 export type QueryTenantProfilesParam = BasicPageParams & OtherParams;
  14 +export type DeleteTenantProfilesParam = OtherParams;
14 export type OtherParams = { 15 export type OtherParams = {
15 sortProperty?: string; 16 sortProperty?: string;
16 sortOrder?: string; 17 sortOrder?: string;
  18 + tenantProfield?: string;
  19 + textSearch?: any;
17 }; 20 };
18 21
19 enum Api { 22 enum Api {
@@ -28,13 +31,14 @@ enum Api { @@ -28,13 +31,14 @@ enum Api {
28 getTenantRoles = '/admin/tenant/roles/', 31 getTenantRoles = '/admin/tenant/roles/',
29 postAddTenantProfile = '/tenantProfile', 32 postAddTenantProfile = '/tenantProfile',
30 getTenantProfile = '/tenantProfiles', 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 await defHttp.delete( 38 await defHttp.delete(
36 { 39 {
37 - url: `${Api.deleteTenantProfile}/${tenantIds}`, 40 + params: params,
  41 + url: Api.deleteTenantProfile,
38 }, 42 },
39 { 43 {
40 joinPrefix: false, 44 joinPrefix: false,
@@ -43,15 +47,10 @@ export async function deleteTenantProfileApi(tenantIds) { @@ -43,15 +47,10 @@ export async function deleteTenantProfileApi(tenantIds) {
43 } 47 }
44 48
45 export const getTableTenantProfileApi = (params?: QueryTenantProfilesParam) => { 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 export async function saveTenantProfileApi(params: tenantProfileDTO) { 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,29 +18,23 @@
18 <div class="mt-5"> 18 <div class="mt-5">
19 <DeviceProfileStep1 19 <DeviceProfileStep1
20 ref="DeviceProfileStep1Ref" 20 ref="DeviceProfileStep1Ref"
21 - :echoStep1="editEchoData"  
22 @next="handleStepNext1" 21 @next="handleStepNext1"
23 v-if="current === 0" 22 v-if="current === 0"
24 /> 23 />
25 <DeviceProfileStep2 24 <DeviceProfileStep2
26 - :echoStep2="editEchoData" 25 + ref="DeviceProfileStep2Ref"
27 @prev="handleStepPrev" 26 @prev="handleStepPrev"
28 @next="handleStep2Next" 27 @next="handleStep2Next"
29 v-if="current === 1" 28 v-if="current === 1"
30 /> 29 />
31 <DeviceProfileStep3 30 <DeviceProfileStep3
32 - :echoStep3="editEchoData" 31 + ref="DeviceProfileStep3Ref"
33 @prev="handleStepPrev" 32 @prev="handleStepPrev"
34 @next="handleStep3Next" 33 @next="handleStep3Next"
35 @redo="handleRedo" 34 @redo="handleRedo"
36 v-if="current === 2" 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 </div> 38 </div>
45 </BasicModal> 39 </BasicModal>
46 </template> 40 </template>
@@ -72,16 +66,18 @@ @@ -72,16 +66,18 @@
72 emits: ['success', 'register'], 66 emits: ['success', 'register'],
73 setup(_, { emit }) { 67 setup(_, { emit }) {
74 const DeviceProfileStep1Ref = ref(null); 68 const DeviceProfileStep1Ref = ref(null);
  69 + const DeviceProfileStep2Ref = ref(null);
  70 + const DeviceProfileStep3Ref = ref(null);
  71 + const DeviceProfileStep4Ref = ref(null);
75 const { createMessage } = useMessage(); 72 const { createMessage } = useMessage();
76 - const getStepData = ref(null); 73 + // const getStepData = ref(null);
77 const { proxy } = getCurrentInstance(); 74 const { proxy } = getCurrentInstance();
78 const postDeviceConfogData: any = ref({}); 75 const postDeviceConfogData: any = ref({});
79 const getStepOneData: any = ref({}); 76 const getStepOneData: any = ref({});
80 const getStepTwoData: any = ref({}); 77 const getStepTwoData: any = ref({});
81 const getStepThreeData: any = ref({}); 78 const getStepThreeData: any = ref({});
82 - const editEchoData: any = ref({}); 79 + const editEchoData: any = ref(null);
83 const alarmProfileData: any = ref({}); 80 const alarmProfileData: any = ref({});
84 - // const isGetStepThreeData: any = ref({});  
85 const isGetStepThreeData: any = ref({}); 81 const isGetStepThreeData: any = ref({});
86 const postEditId = ref(''); 82 const postEditId = ref('');
87 const current = ref(0); 83 const current = ref(0);
@@ -90,16 +86,40 @@ @@ -90,16 +86,40 @@
90 const [register, { closeModal }] = useModalInner((data) => { 86 const [register, { closeModal }] = useModalInner((data) => {
91 isUpdate.value = !!data?.isUpdate; 87 isUpdate.value = !!data?.isUpdate;
92 if (!unref(isUpdate)) { 88 if (!unref(isUpdate)) {
93 - console.log('新增');  
94 current.value = 0; 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 if (unref(isUpdate)) { 105 if (unref(isUpdate)) {
99 - console.log('编辑');  
100 current.value = 0; 106 current.value = 0;
101 postEditId.value = data.record.id; 107 postEditId.value = data.record.id;
102 editEchoData.value = data.record; 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 function handleStepPrev() { 125 function handleStepPrev() {
@@ -123,7 +143,8 @@ @@ -123,7 +143,8 @@
123 const handleSubmit = async () => { 143 const handleSubmit = async () => {
124 if (!unref(isUpdate)) { 144 if (!unref(isUpdate)) {
125 isGetStepThreeData.value.profileData = getStepThreeData.value; 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 Object.assign( 148 Object.assign(
128 postDeviceConfogData.value, 149 postDeviceConfogData.value,
129 getStepOneData.value, 150 getStepOneData.value,
@@ -139,7 +160,8 @@ @@ -139,7 +160,8 @@
139 if (unref(isUpdate)) { 160 if (unref(isUpdate)) {
140 postDeviceConfogData.value.id = postEditId.value; 161 postDeviceConfogData.value.id = postEditId.value;
141 isGetStepThreeData.value.alarmProfile = getStepThreeData.value; 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 Object.assign( 165 Object.assign(
144 postDeviceConfogData.value, 166 postDeviceConfogData.value,
145 getStepOneData.value, 167 getStepOneData.value,
@@ -157,9 +179,12 @@ @@ -157,9 +179,12 @@
157 return; 179 return;
158 }; 180 };
159 return { 181 return {
  182 + DeviceProfileStep2Ref,
  183 + DeviceProfileStep3Ref,
  184 + DeviceProfileStep4Ref,
160 DeviceProfileStep1Ref, 185 DeviceProfileStep1Ref,
161 editEchoData, 186 editEchoData,
162 - getStepData, 187 + // getStepData,
163 handleStep3Next, 188 handleStep3Next,
164 handleSubmit, 189 handleSubmit,
165 handleCancel, 190 handleCancel,
1 <template> 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 </template> 50 </template>
8 <script lang="ts"> 51 <script lang="ts">
9 - import { defineComponent, ref, computed, unref } from 'vue'; 52 + import { defineComponent, ref, computed, watch } from 'vue';
10 import { BasicModal, useModalInner } from '/@/components/Modal'; 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 import { deviceConfigGetDetail } from '/@/api/device/deviceConfigApi'; 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 export default defineComponent({ 66 export default defineComponent({
34 name: 'ConfigDrawer', 67 name: 'ConfigDrawer',
35 - components: { BasicModal, Description, PageWrapper }, 68 + components: { Tabs, TabPane, BasicModal, BasicForm },
36 emits: ['success', 'register'], 69 emits: ['success', 'register'],
37 setup() { 70 setup() {
38 - let descInfo = ref(null); 71 + const activeKey = ref('1');
39 const isUpdate = ref(true); 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 const [register] = useModalInner(async (data) => { 123 const [register] = useModalInner(async (data) => {
  124 + activeKey.value = '1';
41 isUpdate.value = !!data?.isUpdate; 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 return { 161 return {
  162 + registerStep3RuleAlarm,
  163 + registerContact,
  164 + registerStep3HighSetting,
  165 + registerStep3CreateAlarm,
  166 + registerStep3Schemas,
  167 + registerTrans,
  168 + activeKey,
  169 + registerDetail,
53 register, 170 register,
54 - register1,  
55 getTitle, 171 getTitle,
56 }; 172 };
57 }, 173 },
@@ -44,7 +44,7 @@ @@ -44,7 +44,7 @@
44 </template> 44 </template>
45 </BasicTable> 45 </BasicTable>
46 <DeviceProfileModal v-if="isJudgeStatus" @register="registerModal" @success="handleSuccess" /> 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 <ExpExcelModal @register="register1" @success="defaultHeader" /> 48 <ExpExcelModal @register="register1" @success="defaultHeader" />
49 </div> 49 </div>
50 </template> 50 </template>
@@ -68,6 +68,7 @@ @@ -68,6 +68,7 @@
68 let isJudgeStatus = ref(true); 68 let isJudgeStatus = ref(true);
69 const { createMessage } = useMessage(); 69 const { createMessage } = useMessage();
70 const [registerModal, { openModal }] = useModal(); 70 const [registerModal, { openModal }] = useModal();
  71 + const [registerModalDetail, { openModal: openModalDetail }] = useModal();
71 const [registerTable, { reload, getSelectRowKeys }] = useTable({ 72 const [registerTable, { reload, getSelectRowKeys }] = useTable({
72 title: '设备配置列表', 73 title: '设备配置列表',
73 clickToRowSelect: false, 74 clickToRowSelect: false,
@@ -147,7 +148,7 @@ @@ -147,7 +148,7 @@
147 } 148 }
148 149
149 async function handleDetailView(record: Recordable) { 150 async function handleDetailView(record: Recordable) {
150 - openModal(true, { 151 + openModalDetail(true, {
151 record, 152 record,
152 isUpdate: false, 153 isUpdate: false,
153 }); 154 });
@@ -179,6 +180,7 @@ @@ -179,6 +180,7 @@
179 reload(); 180 reload();
180 } 181 }
181 return { 182 return {
  183 + registerModalDetail,
182 register1, 184 register1,
183 defaultHeader, 185 defaultHeader,
184 useSelectionChange, 186 useSelectionChange,
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 </div> 6 </div>
7 </template> 7 </template>
8 <script lang="ts"> 8 <script lang="ts">
9 - import { defineComponent, watch, onMounted } from 'vue'; 9 + import { defineComponent } from 'vue';
10 import { BasicForm, useForm } from '/@/components/Form'; 10 import { BasicForm, useForm } from '/@/components/Form';
11 import { step1Schemas } from './data'; 11 import { step1Schemas } from './data';
12 import { Select, Input, Divider } from 'ant-design-vue'; 12 import { Select, Input, Divider } from 'ant-design-vue';
@@ -20,10 +20,7 @@ @@ -20,10 +20,7 @@
20 [Divider.name]: Divider, 20 [Divider.name]: Divider,
21 }, 21 },
22 emits: ['next', 'resetFunc'], 22 emits: ['next', 'resetFunc'],
23 - props: {  
24 - echoStep1: Object,  
25 - },  
26 - setup(props, { emit }) { 23 + setup(_, { emit }) {
27 const [register, { validate, setFieldsValue, resetFields }] = useForm({ 24 const [register, { validate, setFieldsValue, resetFields }] = useForm({
28 labelWidth: 100, 25 labelWidth: 100,
29 schemas: step1Schemas, 26 schemas: step1Schemas,
@@ -35,33 +32,20 @@ @@ -35,33 +32,20 @@
35 text: '下一步', 32 text: '下一步',
36 }, 33 },
37 submitFunc: customSubmitFunc, 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 async function customSubmitFunc() { 39 async function customSubmitFunc() {
51 try { 40 try {
52 const values = await validate(); 41 const values = await validate();
53 emit('next', values); 42 emit('next', values);
54 } catch (error) {} 43 } catch (error) {}
55 } 44 }
56 -  
57 const customResetFunc = async () => { 45 const customResetFunc = async () => {
58 await resetFields(); 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 </script> 51 </script>
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 </div> 4 </div>
5 </template> 5 </template>
6 <script lang="ts"> 6 <script lang="ts">
7 - import { defineComponent, watch } from 'vue'; 7 + import { defineComponent } from 'vue';
8 import { BasicForm, useForm } from '/@/components/Form'; 8 import { BasicForm, useForm } from '/@/components/Form';
9 import { step2Schemas } from './data'; 9 import { step2Schemas } from './data';
10 import { Alert, Divider, Descriptions } from 'ant-design-vue'; 10 import { Alert, Divider, Descriptions } from 'ant-design-vue';
@@ -18,10 +18,7 @@ @@ -18,10 +18,7 @@
18 [Descriptions.Item.name]: Descriptions.Item, 18 [Descriptions.Item.name]: Descriptions.Item,
19 }, 19 },
20 emits: ['next', 'prev'], 20 emits: ['next', 'prev'],
21 - props: {  
22 - echoStep2: Object,  
23 - },  
24 - setup(props, { emit }) { 21 + setup(_, { emit }) {
25 const [register, { validate, setFieldsValue, resetFields }] = useForm({ 22 const [register, { validate, setFieldsValue, resetFields }] = useForm({
26 labelWidth: 80, 23 labelWidth: 80,
27 schemas: step2Schemas, 24 schemas: step2Schemas,
@@ -37,16 +34,12 @@ @@ -37,16 +34,12 @@
37 resetFunc: customResetFunc, 34 resetFunc: customResetFunc,
38 submitFunc: customSubmitFunc, 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 async function customResetFunc() { 43 async function customResetFunc() {
51 emit('prev'); 44 emit('prev');
52 } 45 }
@@ -56,7 +49,7 @@ @@ -56,7 +49,7 @@
56 emit('next', values); 49 emit('next', values);
57 } catch (error) {} 50 } catch (error) {}
58 } 51 }
59 - return { register }; 52 + return { register, resetFieldsFunc, customResetAndFunc };
60 }, 53 },
61 }); 54 });
62 </script> 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,42 +7,51 @@
7 <DeleteOutlined style="font-size: 20px" class="mr-2" /> 7 <DeleteOutlined style="font-size: 20px" class="mr-2" />
8 </div> 8 </div>
9 </template> 9 </template>
10 - <BasicForm @register="registerForm" /> 10 + <div style="margin-left: -30px"> <BasicForm @register="registerForm" /></div>
11 <CollapseContainer> 11 <CollapseContainer>
12 <template #action> 高级设置 </template> 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 </CollapseContainer> 20 </CollapseContainer>
19 <p>创建报警规则</p> 21 <p>创建报警规则</p>
20 <template v-for="(childItem, createIndex) in item.alarms" :key="childItem.id"> 22 <template v-for="(childItem, createIndex) in item.alarms" :key="childItem.id">
21 <div class="aic mb-4" style="border: 1px solid #bfbfbf"> 23 <div class="aic mb-4" style="border: 1px solid #bfbfbf">
22 <div class="w-3/4"> 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 <p style="color: #f5594e" class="mt-4 ml-4" 29 <p style="color: #f5594e" class="mt-4 ml-4"
26 >请添加报警规则条件 30 >请添加报警规则条件
27 <PlusOutlined 31 <PlusOutlined
28 @click="handleOpenAlaramRuleConditions" 32 @click="handleOpenAlaramRuleConditions"
29 class="cursor-pointer ml-4" 33 class="cursor-pointer ml-4"
30 style="font-size: 20px" 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 <EditOutlined 39 <EditOutlined
35 @click="handleOpenEnableRule" 40 @click="handleOpenEnableRule"
36 class="cursor-pointer ml-4" 41 class="cursor-pointer ml-4"
37 style="font-size: 20px" 42 style="font-size: 20px"
38 - /></p> 43 + />{{ enableTemplateData }}
  44 + </p>
39 <p class="mt-4 ml-4" 45 <p class="mt-4 ml-4"
40 >详情模板:<EditOutlined 46 >详情模板:<EditOutlined
41 @click="handleOpenDetailTemplate" 47 @click="handleOpenDetailTemplate"
42 class="cursor-pointer ml-4" 48 class="cursor-pointer ml-4"
43 style="font-size: 20px" 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 </div> 55 </div>
47 </div> 56 </div>
48 <div class="w-1/4 flex justify-center"> 57 <div class="w-1/4 flex justify-center">
@@ -59,11 +68,12 @@ @@ -59,11 +68,12 @@
59 <a-button class="mt-5" @click="addCreateRole(index)" 68 <a-button class="mt-5" @click="addCreateRole(index)"
60 ><PlusCircleOutlined />添加创建条件</a-button 69 ><PlusCircleOutlined />添加创建条件</a-button
61 > 70 >
  71 + <div style="height: 20px"></div>
62 <p>清除报警规则</p> 72 <p>清除报警规则</p>
63 <template v-for="(childItem, createIndex) in item.alarms" :key="childItem.id"> 73 <template v-for="(childItem, createIndex) in item.alarms" :key="childItem.id">
64 <div class="aic mb-4" style="border: 1px solid #bfbfbf"> 74 <div class="aic mb-4" style="border: 1px solid #bfbfbf">
65 <div class="w-3/4"> 75 <div class="w-3/4">
66 - <div> 76 + <div style="margin-left: 5px">
67 <p style="color: #f5594e" class="mt-4 ml-4" 77 <p style="color: #f5594e" class="mt-4 ml-4"
68 >请添加报警规则条件 78 >请添加报警规则条件
69 <PlusOutlined 79 <PlusOutlined
@@ -84,7 +94,9 @@ @@ -84,7 +94,9 @@
84 class="cursor-pointer ml-4" 94 class="cursor-pointer ml-4"
85 style="font-size: 20px" 95 style="font-size: 20px"
86 /></p> 96 /></p>
87 - <BasicForm @register="dashboardForm" /> 97 + <div style="margin-left: 16px">
  98 + <BasicForm @register="dashboardForm" />
  99 + </div>
88 </div> 100 </div>
89 </div> 101 </div>
90 <div class="w-1/4 flex justify-center"> 102 <div class="w-1/4 flex justify-center">
@@ -183,9 +195,13 @@ @@ -183,9 +195,13 @@
183 const emptyObj: any = ref({}); 195 const emptyObj: any = ref({});
184 const detailObj: any = ref({}); 196 const detailObj: any = ref({});
185 const ruleObj: any = ref({}); 197 const ruleObj: any = ref({});
  198 + const ruleLastObj: any = ref({});
186 const enableObj: any = ref({}); 199 const enableObj: any = ref({});
187 const additionalObj: any = ref({}); 200 const additionalObj: any = ref({});
188 const isWhereTypeValue = ref(null); 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 let profileData = ref<alarmListItem[]>([]); 206 let profileData = ref<alarmListItem[]>([]);
191 const log = (e) => { 207 const log = (e) => {
@@ -273,29 +289,102 @@ @@ -273,29 +289,102 @@
273 watch(isWhereType, (nV) => { 289 watch(isWhereType, (nV) => {
274 isWhereTypeValue.value = nV; 290 isWhereTypeValue.value = nV;
275 }); 291 });
  292 + //详情模板
276 const getAllFieldsFunc = (v) => { 293 const getAllFieldsFunc = (v) => {
277 detailObj.value = v; 294 detailObj.value = v;
  295 + detailTemplateData.value = `
  296 + 报警详细信息:${v.alarmDetails}
  297 + `;
278 }; 298 };
  299 + //启用规则
279 const getAllFieldsEnabFunc = (v) => { 300 const getAllFieldsEnabFunc = (v) => {
280 enableObj.value = v; 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 ruleObj.value = v; 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 const predicate = { 369 const predicate = {
288 - operation: 'GREATER_OR_EQUAL', 370 + operation: ruleObj.value.operation,
289 value: { 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 const getCondition = { 388 const getCondition = {
300 condition: [ 389 condition: [
301 { 390 {
@@ -303,20 +392,13 @@ @@ -303,20 +392,13 @@
303 type: ruleObj.value?.type, 392 type: ruleObj.value?.type,
304 key: ruleObj.value?.key, 393 key: ruleObj.value?.key,
305 }, 394 },
306 - valueType: ruleObj.value?.valueType,  
307 - value, 395 + valueType: ruleObj.value.type1,
308 predicate, 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 const getValueConditon = { 401 const getValueConditon = {
319 - // spec,  
320 condition: getCondition, 402 condition: getCondition,
321 }; 403 };
322 Object.assign(additionalObj.value, getValueConditon); 404 Object.assign(additionalObj.value, getValueConditon);
@@ -327,8 +409,8 @@ @@ -327,8 +409,8 @@
327 const scheduleValue = { 409 const scheduleValue = {
328 type: enableObj.value.schedule, 410 type: enableObj.value.schedule,
329 daysOfWeek: enableObj.value.daysOfWeek, 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 timezone: enableObj.value.timezone, 414 timezone: enableObj.value.timezone,
333 }; 415 };
334 const getSchedule = { 416 const getSchedule = {
@@ -353,7 +435,7 @@ @@ -353,7 +435,7 @@
353 }; 435 };
354 436
355 const valueRegisterFormHighSetting = await validateRegisterFormHighSetting(); 437 const valueRegisterFormHighSetting = await validateRegisterFormHighSetting();
356 - const valueRegisterFormCreateAlarm = await validateRegisterFormCreateAlarm(); 438 + // const valueRegisterFormCreateAlarm = await validateRegisterFormCreateAlarm();
357 const getValueRegisterFormHighSetting = { 439 const getValueRegisterFormHighSetting = {
358 propagate: valueRegisterFormHighSetting?.propagate, 440 propagate: valueRegisterFormHighSetting?.propagate,
359 propagateRelationTypes: [valueRegisterFormHighSetting?.propagateRelationTypes], 441 propagateRelationTypes: [valueRegisterFormHighSetting?.propagateRelationTypes],
@@ -398,6 +480,9 @@ @@ -398,6 +480,9 @@
398 }; 480 };
399 481
400 return { 482 return {
  483 + detailTemplateData,
  484 + enableTemplateData,
  485 + ruleTemplateData,
401 dashboardForm, 486 dashboardForm,
402 getAllFieldsRuleFunc, 487 getAllFieldsRuleFunc,
403 getAllFieldsEnabFunc, 488 getAllFieldsEnabFunc,
@@ -18,7 +18,7 @@ @@ -18,7 +18,7 @@
18 emits: ['prev'], 18 emits: ['prev'],
19 setup(_, { emit }) { 19 setup(_, { emit }) {
20 const getValueData: any = ref({}); 20 const getValueData: any = ref({});
21 - const [register, { setProps, validate }] = useForm({ 21 + const [register, { setProps, validate, setFieldsValue, resetFields }] = useForm({
22 schemas: alertContactsSchemas, 22 schemas: alertContactsSchemas,
23 actionColOptions: { 23 actionColOptions: {
24 span: 24, 24 span: 24,
@@ -28,16 +28,24 @@ @@ -28,16 +28,24 @@
28 }, 28 },
29 resetFunc: customResetFunc, 29 resetFunc: customResetFunc,
30 }); 30 });
  31 + const resetFieldsFunc = (v) => {
  32 + setFieldsValue(v);
  33 + };
  34 + const customResetAndFunc = async () => {
  35 + await resetFields();
  36 + };
31 async function customResetFunc() { 37 async function customResetFunc() {
32 emit('prev'); 38 emit('prev');
33 } 39 }
34 - async function getAllFields(getV) { 40 + const getAllFields = async (getV) => {
35 const values = await validate(); 41 const values = await validate();
36 getValueData.value = values; 42 getValueData.value = values;
37 getV = getValueData.value; 43 getV = getValueData.value;
38 return getV; 44 return getV;
39 - } 45 + };
40 return { 46 return {
  47 + customResetAndFunc,
  48 + resetFieldsFunc,
41 customResetFunc, 49 customResetFunc,
42 getAllFields, 50 getAllFields,
43 register, 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 "profileData": { 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,9 +6,9 @@ import { DescItem } from '/@/components/Description/index';
6 */ 6 */
7 7
8 export enum TriggerEnum { 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 IS_CURRENT_CUSTOMER = 'CURRENT_CUSTOMER', 12 IS_CURRENT_CUSTOMER = 'CURRENT_CUSTOMER',
13 IS_CURRENT_DEVICE = 'CURRENT_DEVICE', 13 IS_CURRENT_DEVICE = 'CURRENT_DEVICE',
14 } 14 }
@@ -68,88 +68,88 @@ export const DescDetailSchema: DescItem[] = [ @@ -68,88 +68,88 @@ export const DescDetailSchema: DescItem[] = [
68 68
69 export const formSchema: FormSchema[] = [ 69 export const formSchema: FormSchema[] = [
70 { 70 {
71 - field: 'type1', 71 + field: 'conditionType',
72 label: '条件类型', 72 label: '条件类型',
73 colProps: { span: 24 }, 73 colProps: { span: 24 },
74 component: 'Select', 74 component: 'Select',
75 componentProps: { 75 componentProps: {
76 placeholder: '请选择报警日程表', 76 placeholder: '请选择报警日程表',
77 options: [ 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 label: '动态源类型', 86 label: '动态源类型',
87 colProps: { span: 24 }, 87 colProps: { span: 24 },
88 component: 'Select', 88 component: 'Select',
89 componentProps: { 89 componentProps: {
90 placeholder: '请选择动态源类型', 90 placeholder: '请选择动态源类型',
91 options: [ 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 label: '源属性', 102 label: '源属性',
103 colProps: { span: 24 }, 103 colProps: { span: 24 },
104 component: 'Input', 104 component: 'Input',
105 componentProps: { 105 componentProps: {
106 placeholder: '源属性', 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 label: '动态源类型', 112 label: '动态源类型',
113 colProps: { span: 24 }, 113 colProps: { span: 24 },
114 component: 'Select', 114 component: 'Select',
115 componentProps: { 115 componentProps: {
116 placeholder: '请选择动态源类型', 116 placeholder: '请选择动态源类型',
117 options: [ 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 label: '源属性', 128 label: '源属性',
129 colProps: { span: 24 }, 129 colProps: { span: 24 },
130 component: 'Input', 130 component: 'Input',
131 componentProps: { 131 componentProps: {
132 placeholder: '源属性', 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 label: '持续时间值', 138 label: '持续时间值',
139 colProps: { span: 24 }, 139 colProps: { span: 24 },
140 component: 'Input', 140 component: 'Input',
141 componentProps: { 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 label: '时间单位', 148 label: '时间单位',
149 colProps: { span: 24 }, 149 colProps: { span: 24 },
150 component: 'Select', 150 component: 'Select',
151 componentProps: { 151 componentProps: {
152 - placeholder: '请选择报警日程表', 152 + placeholder: '请选择时间单位',
153 options: [ 153 options: [
154 { label: '秒', value: 'SECONDS' }, 154 { label: '秒', value: 'SECONDS' },
155 { label: '分钟', value: 'MINUTES' }, 155 { label: '分钟', value: 'MINUTES' },
@@ -157,26 +157,26 @@ export const formSchema: FormSchema[] = [ @@ -157,26 +157,26 @@ export const formSchema: FormSchema[] = [
157 { label: '天', value: 'DAYS' }, 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 label: '事件计数值必填', 164 label: '事件计数值必填',
165 colProps: { span: 24 }, 165 colProps: { span: 24 },
166 component: 'Input', 166 component: 'Input',
167 componentProps: { 167 componentProps: {
168 - placeholder: '请输入事件计数值必填', 168 + placeholder: '请输入事件计数值必填(请输入数字)',
169 }, 169 },
170 rules: [{ message: '事件计数应在1到2147483637之间', trigger: 'blur' }], 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 label: '', 175 label: '',
176 component: 'Checkbox', 176 component: 'Checkbox',
177 renderComponentContent: 'Inherit from owner', 177 renderComponentContent: 'Inherit from owner',
178 ifShow: ({ values }) => 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,6 +8,10 @@ export enum TriggerEnum {
8 IS_DEVICE_ACT = '属性', 8 IS_DEVICE_ACT = '属性',
9 IS_TIME_ACT = 'TIME_SERIES', 9 IS_TIME_ACT = 'TIME_SERIES',
10 IS_SCENE_ACT = '常量', 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 export const isShiDu = (type: string) => { 17 export const isShiDu = (type: string) => {
@@ -21,6 +25,22 @@ export const isTimeAll = (type: string) => { @@ -21,6 +25,22 @@ export const isTimeAll = (type: string) => {
21 return type === TriggerEnum.IS_SCENE_ACT; 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 export const formSchema: FormSchema[] = [ 44 export const formSchema: FormSchema[] = [
25 { 45 {
26 field: 'type', 46 field: 'type',
@@ -79,7 +99,7 @@ export const formSchema: FormSchema[] = [ @@ -79,7 +99,7 @@ export const formSchema: FormSchema[] = [
79 ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')), 99 ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
80 }, 100 },
81 { 101 {
82 - field: 'valueType', 102 + field: 'type1',
83 label: '值类型', 103 label: '值类型',
84 colProps: { span: 24 }, 104 colProps: { span: 24 },
85 component: 'Select', 105 component: 'Select',
@@ -93,4 +113,81 @@ export const formSchema: FormSchema[] = [ @@ -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,7 +41,7 @@
41 <KeyValueModal @register="registerModal" @success="handleSuccess" /> 41 <KeyValueModal @register="registerModal" @success="handleSuccess" />
42 </template> 42 </template>
43 <script lang="ts"> 43 <script lang="ts">
44 - import { defineComponent, ref, computed, unref, onMounted } from 'vue'; 44 + import { defineComponent, ref, computed, unref } from 'vue';
45 import { BasicModal, useModalInner } from '/@/components/Modal'; 45 import { BasicModal, useModalInner } from '/@/components/Modal';
46 import { BasicForm, useForm } from '/@/components/Form'; 46 import { BasicForm, useForm } from '/@/components/Form';
47 import { formSchema, columns, DescDetailSchema, columnsView } from './config'; 47 import { formSchema, columns, DescDetailSchema, columnsView } from './config';
@@ -60,11 +60,12 @@ @@ -60,11 +60,12 @@
60 BasicTable, 60 BasicTable,
61 TableAction, 61 TableAction,
62 }, 62 },
63 - emits: ['success', 'register', 'getAllFieldsRule'], 63 + emits: ['success', 'register', 'getAllFieldsRule', 'getLastAllFieldsRule'],
64 setup(_, { emit }) { 64 setup(_, { emit }) {
65 const getTableApiData: any = ref([]); 65 const getTableApiData: any = ref([]);
66 const detailData: any = ref([]); 66 const detailData: any = ref([]);
67 const receiveData: any = ref(null); 67 const receiveData: any = ref(null);
  68 + const lastValues: any = ref(null);
68 const isUpdate = ref(true); 69 const isUpdate = ref(true);
69 const [registerForm, { getFieldsValue }] = useForm({ 70 const [registerForm, { getFieldsValue }] = useForm({
70 labelWidth: 120, 71 labelWidth: 120,
@@ -90,13 +91,12 @@ @@ -90,13 +91,12 @@
90 91
91 const handleSubmit = () => { 92 const handleSubmit = () => {
92 if (unref(isUpdate.value)) { 93 if (unref(isUpdate.value)) {
93 - console.log(1);  
94 const values = getFieldsValue(); 94 const values = getFieldsValue();
95 getTableApiData.value.push(values); 95 getTableApiData.value.push(values);
96 detailData.value.push(values); 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 closeModal(); 100 closeModal();
101 }; 101 };
102 const handleAddKey = () => { 102 const handleAddKey = () => {
@@ -118,7 +118,6 @@ @@ -118,7 +118,6 @@
118 }; 118 };
119 const handleSuccess = (v) => { 119 const handleSuccess = (v) => {
120 receiveData.value = v; 120 receiveData.value = v;
121 - console.log(receiveData.value);  
122 setTimeout(() => { 121 setTimeout(() => {
123 doFunc(); 122 doFunc();
124 }, 10); 123 }, 10);
@@ -127,9 +126,6 @@ @@ -127,9 +126,6 @@
127 getTableApiData.value.push(receiveData.value); 126 getTableApiData.value.push(receiveData.value);
128 detailData.value.push(receiveData.value); 127 detailData.value.push(receiveData.value);
129 }; 128 };
130 - onMounted(() => {  
131 - console.log(1);  
132 - });  
133 return { 129 return {
134 columnsView, 130 columnsView,
135 DescDetailSchema, 131 DescDetailSchema,
@@ -308,6 +308,9 @@ export const formSchema: FormSchema[] = [ @@ -308,6 +308,9 @@ export const formSchema: FormSchema[] = [
308 colProps: { 308 colProps: {
309 span: 8, 309 span: 8,
310 }, 310 },
  311 + componentProps: {
  312 + valueFormat: 'HH:mm:ss',
  313 + },
311 ifShow: ({ values }) => isWenDu(Reflect.get(values, 'schedule')), 314 ifShow: ({ values }) => isWenDu(Reflect.get(values, 'schedule')),
312 }, 315 },
313 { 316 {
@@ -317,6 +320,9 @@ export const formSchema: FormSchema[] = [ @@ -317,6 +320,9 @@ export const formSchema: FormSchema[] = [
317 colProps: { 320 colProps: {
318 span: 8, 321 span: 8,
319 }, 322 },
  323 + componentProps: {
  324 + valueFormat: 'HH:mm:ss',
  325 + },
320 ifShow: ({ values }) => isWenDu(Reflect.get(values, 'schedule')), 326 ifShow: ({ values }) => isWenDu(Reflect.get(values, 'schedule')),
321 }, 327 },
322 ]; 328 ];
1 import { FormSchema } from '/@/components/Form'; 1 import { FormSchema } from '/@/components/Form';
2 -import { findDictItemByCode } from '/@/api/system/dict';  
3 // import { getOrganizationList } from '/@/api/system/system'; 2 // import { getOrganizationList } from '/@/api/system/system';
4 // import { copyTransFun } from '/@/utils/fnUtils'; 3 // import { copyTransFun } from '/@/utils/fnUtils';
5 import { deviceConfigGetRuleChain } from '/@/api/device/deviceConfigApi'; 4 import { deviceConfigGetRuleChain } from '/@/api/device/deviceConfigApi';
6 import { ref } from 'vue'; 5 import { ref } from 'vue';
  6 +import { findDictItemByCode } from '/@/api/system/dict';
  7 +import { alarmContactGetPage } from '/@/api/device/deviceConfigApi';
7 8
8 export const step1Schemas: FormSchema[] = [ 9 export const step1Schemas: FormSchema[] = [
9 { 10 {
@@ -74,7 +75,6 @@ export const step2Schemas: FormSchema[] = [ @@ -74,7 +75,6 @@ export const step2Schemas: FormSchema[] = [
74 field: 'transportType', 75 field: 'transportType',
75 component: 'Select', 76 component: 'Select',
76 label: '传输方式', 77 label: '传输方式',
77 - defaultValue: 'COAP',  
78 componentProps: { 78 componentProps: {
79 options: [ 79 options: [
80 { label: 'MQTT', value: 'MQTT' }, 80 { label: 'MQTT', value: 'MQTT' },
@@ -184,3 +184,175 @@ export const dashboardFormScheme: FormSchema[] = [ @@ -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 import { BasicColumn, FormSchema } from '/@/components/Table'; 1 import { BasicColumn, FormSchema } from '/@/components/Table';
  2 +import { transformTime } from '/@/hooks/web/useDateToLocaleString';
2 3
3 export const columns: BasicColumn[] = [ 4 export const columns: BasicColumn[] = [
4 { 5 {
5 title: '创建时间', 6 title: '创建时间',
6 dataIndex: 'createdTime', 7 dataIndex: 'createdTime',
7 width: 200, 8 width: 200,
  9 + format: (_text: string, record: Recordable) => {
  10 + return transformTime(record.createdTime);
  11 + },
8 }, 12 },
9 { 13 {
10 title: '名称', 14 title: '名称',
@@ -20,9 +24,23 @@ export const columns: BasicColumn[] = [ @@ -20,9 +24,23 @@ export const columns: BasicColumn[] = [
20 title: '默认', 24 title: '默认',
21 dataIndex: 'default', 25 dataIndex: 'default',
22 width: 200, 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 export const formSchema: FormSchema[] = [ 44 export const formSchema: FormSchema[] = [
27 { 45 {
28 field: 'name', 46 field: 'name',
1 import { FormSchema } from '/@/components/Table'; 1 import { FormSchema } from '/@/components/Table';
2 -import { numberRule } from '/@/utils/rules'; 2 +// import { numberRule } from '/@/utils/rules';
3 3
4 export const formSchema: FormSchema[] = [ 4 export const formSchema: FormSchema[] = [
5 { 5 {
@@ -12,233 +12,233 @@ export const formSchema: FormSchema[] = [ @@ -12,233 +12,233 @@ export const formSchema: FormSchema[] = [
12 placeholder: '请选择类型', 12 placeholder: '请选择类型',
13 options: [{ label: '默认', value: 'DEFAULT' }], 13 options: [{ label: '默认', value: 'DEFAULT' }],
14 }, 14 },
15 - rules: numberRule,  
16 }, 15 },
17 { 16 {
18 field: 'maxDevices', 17 field: 'maxDevices',
  18 + required: true,
  19 +
19 label: '最大设备数(0-无限制)', 20 label: '最大设备数(0-无限制)',
20 component: 'Input', 21 component: 'Input',
21 colProps: { span: 24 }, 22 colProps: { span: 24 },
22 componentProps: { 23 componentProps: {
23 - placeholder: '请输入最大设备数', 24 + placeholder: '请输入最大设备数(请输入数字)',
24 }, 25 },
25 - rules: numberRule,  
26 }, 26 },
27 { 27 {
28 field: 'maxAssets', 28 field: 'maxAssets',
  29 + required: true,
  30 +
29 label: '最大资产数(0-无限制)', 31 label: '最大资产数(0-无限制)',
30 colProps: { span: 24 }, 32 colProps: { span: 24 },
31 component: 'Input', 33 component: 'Input',
32 - rules: numberRule,  
33 -  
34 componentProps: { 34 componentProps: {
35 - placeholder: '请输入最大资产', 35 + placeholder: '请输入最大资产(请输入数字)',
36 }, 36 },
37 }, 37 },
38 { 38 {
39 field: 'maxCustomers', 39 field: 'maxCustomers',
  40 + required: true,
  41 +
40 label: '最大客户数(0-无限制)', 42 label: '最大客户数(0-无限制)',
41 colProps: { span: 24 }, 43 colProps: { span: 24 },
42 component: 'Input', 44 component: 'Input',
43 - rules: numberRule,  
44 -  
45 componentProps: { 45 componentProps: {
46 - placeholder: '请输入最大客户数', 46 + placeholder: '请输入最大客户数(请输入数字)',
47 }, 47 },
48 }, 48 },
49 { 49 {
50 field: 'maxUsers', 50 field: 'maxUsers',
  51 + required: true,
  52 +
51 label: '最大用户数(0-无限制)', 53 label: '最大用户数(0-无限制)',
52 colProps: { span: 24 }, 54 colProps: { span: 24 },
53 component: 'Input', 55 component: 'Input',
54 - rules: numberRule,  
55 -  
56 componentProps: { 56 componentProps: {
57 - placeholder: '请输入最大用户数', 57 + placeholder: '请输入最大用户数(请输入数字)',
58 }, 58 },
59 }, 59 },
60 { 60 {
61 field: 'maxDashboards', 61 field: 'maxDashboards',
  62 + required: true,
  63 +
62 label: '仪表板的最大数量(0-无限制)', 64 label: '仪表板的最大数量(0-无限制)',
63 colProps: { span: 24 }, 65 colProps: { span: 24 },
64 component: 'Input', 66 component: 'Input',
65 - rules: numberRule,  
66 -  
67 componentProps: { 67 componentProps: {
68 - placeholder: '请输入仪表板的最大数量', 68 + placeholder: '请输入仪表板的最大数量(请输入数字)',
69 }, 69 },
70 }, 70 },
71 { 71 {
72 field: 'maxRuleChains', 72 field: 'maxRuleChains',
  73 + required: true,
  74 +
73 label: '最大规则链数(0-无限制)', 75 label: '最大规则链数(0-无限制)',
74 colProps: { span: 24 }, 76 colProps: { span: 24 },
75 component: 'Input', 77 component: 'Input',
76 - rules: numberRule,  
77 -  
78 componentProps: { 78 componentProps: {
79 - placeholder: '请输入最大规则链数', 79 + placeholder: '请输入最大规则链数(请输入数字)',
80 }, 80 },
81 }, 81 },
82 { 82 {
83 field: 'maxResourcesInBytes', 83 field: 'maxResourcesInBytes',
  84 + required: true,
  85 +
84 label: '以字节为单位的资源文件的最大总和(0-无限制)', 86 label: '以字节为单位的资源文件的最大总和(0-无限制)',
85 colProps: { span: 24 }, 87 colProps: { span: 24 },
86 component: 'Input', 88 component: 'Input',
87 - rules: numberRule,  
88 -  
89 componentProps: { 89 componentProps: {
90 - placeholder: '请输入', 90 + placeholder: '请输入(请输入数字)',
91 }, 91 },
92 }, 92 },
93 { 93 {
94 field: 'maxOtaPackagesInBytes', 94 field: 'maxOtaPackagesInBytes',
  95 + required: true,
  96 +
95 label: 'Ota包文件大小的最大总和(字节)(0-无限制)', 97 label: 'Ota包文件大小的最大总和(字节)(0-无限制)',
96 colProps: { span: 24 }, 98 colProps: { span: 24 },
97 component: 'Input', 99 component: 'Input',
98 - rules: numberRule,  
99 -  
100 componentProps: { 100 componentProps: {
101 - placeholder: '请输入', 101 + placeholder: '请输入(请输入数字)',
102 }, 102 },
103 }, 103 },
104 { 104 {
105 field: 'maxTransportMessages', 105 field: 'maxTransportMessages',
  106 + required: true,
  107 +
106 label: '最大传输消息数(0-无限制)', 108 label: '最大传输消息数(0-无限制)',
107 colProps: { span: 24 }, 109 colProps: { span: 24 },
108 component: 'Input', 110 component: 'Input',
109 - rules: numberRule,  
110 -  
111 componentProps: { 111 componentProps: {
112 - placeholder: '请输入最大传输消息数', 112 + placeholder: '请输入最大传输消息数(请输入数字)',
113 }, 113 },
114 }, 114 },
115 { 115 {
116 field: 'maxTransportDataPoints', 116 field: 'maxTransportDataPoints',
  117 + required: true,
  118 +
117 label: '传输数据点的最大数量(0-无限制)', 119 label: '传输数据点的最大数量(0-无限制)',
118 colProps: { span: 24 }, 120 colProps: { span: 24 },
119 component: 'Input', 121 component: 'Input',
120 - rules: numberRule,  
121 -  
122 componentProps: { 122 componentProps: {
123 - placeholder: '请输入传输数据点的最大数量', 123 + placeholder: '请输入传输数据点的最大数量(请输入数字)',
124 }, 124 },
125 }, 125 },
126 { 126 {
127 field: 'maxREExecutions', 127 field: 'maxREExecutions',
  128 + required: true,
  129 +
128 label: '最大规则引擎数(0-无限制)', 130 label: '最大规则引擎数(0-无限制)',
129 colProps: { span: 24 }, 131 colProps: { span: 24 },
130 component: 'Input', 132 component: 'Input',
131 - rules: numberRule,  
132 -  
133 componentProps: { 133 componentProps: {
134 - placeholder: '请输入最大规则引擎数', 134 + placeholder: '请输入最大规则引擎数(请输入数字)',
135 }, 135 },
136 }, 136 },
137 137
138 { 138 {
139 field: 'maxJSExecutions', 139 field: 'maxJSExecutions',
  140 + required: true,
  141 +
140 label: '最大JavaScript执行数(0-不受限制)', 142 label: '最大JavaScript执行数(0-不受限制)',
141 colProps: { span: 24 }, 143 colProps: { span: 24 },
142 component: 'Input', 144 component: 'Input',
143 - rules: numberRule,  
144 -  
145 componentProps: { 145 componentProps: {
146 - placeholder: '请输入最大JavaScript执行数', 146 + placeholder: '请输入最大JavaScript执行数(请输入数字)',
147 }, 147 },
148 }, 148 },
149 { 149 {
150 field: 'maxDPStorageDays', 150 field: 'maxDPStorageDays',
  151 + required: true,
  152 +
151 label: '最大日存储数据点数(0-无限制)', 153 label: '最大日存储数据点数(0-无限制)',
152 colProps: { span: 24 }, 154 colProps: { span: 24 },
153 component: 'Input', 155 component: 'Input',
154 - rules: numberRule,  
155 -  
156 componentProps: { 156 componentProps: {
157 - placeholder: '请输入最大日存储数据点数', 157 + placeholder: '请输入最大日存储数据点数(请输入数字)',
158 }, 158 },
159 }, 159 },
160 { 160 {
161 field: 'defaultStorageTtlDays', 161 field: 'defaultStorageTtlDays',
  162 + required: true,
  163 +
162 label: '默认存储 TTL 天数(0-无限制)', 164 label: '默认存储 TTL 天数(0-无限制)',
163 colProps: { span: 24 }, 165 colProps: { span: 24 },
164 component: 'Input', 166 component: 'Input',
165 - rules: numberRule,  
166 -  
167 componentProps: { 167 componentProps: {
168 - placeholder: '请输入默认存储 TTL 天数', 168 + placeholder: '请输入默认存储 TTL 天数(请输入数字)',
169 }, 169 },
170 }, 170 },
171 { 171 {
172 field: 'alarmsTtlDays', 172 field: 'alarmsTtlDays',
  173 + required: true,
  174 +
173 label: 'Alams TTL days(0-无限制)', 175 label: 'Alams TTL days(0-无限制)',
174 colProps: { span: 24 }, 176 colProps: { span: 24 },
175 component: 'Input', 177 component: 'Input',
176 - rules: numberRule,  
177 -  
178 componentProps: { 178 componentProps: {
179 - placeholder: '请输入Alams TTL days', 179 + placeholder: '请输入Alams TTL days(请输入数字)',
180 }, 180 },
181 }, 181 },
182 { 182 {
183 field: 'rpcTtlDays', 183 field: 'rpcTtlDays',
  184 + required: true,
  185 +
184 label: 'RPC TTL days(0-无限制)', 186 label: 'RPC TTL days(0-无限制)',
185 colProps: { span: 24 }, 187 colProps: { span: 24 },
186 component: 'Input', 188 component: 'Input',
187 - rules: numberRule,  
188 -  
189 componentProps: { 189 componentProps: {
190 - placeholder: '请输入RPC TTL days', 190 + placeholder: '请输入RPC TTL days(请输入数字)',
191 }, 191 },
192 }, 192 },
193 { 193 {
194 field: 'maxRuleNodeExecutionsPerMessage', 194 field: 'maxRuleNodeExecutionsPerMessage',
  195 + required: true,
  196 +
195 label: '每条消息的最大规则节点执行数(0-无限制)', 197 label: '每条消息的最大规则节点执行数(0-无限制)',
196 colProps: { span: 24 }, 198 colProps: { span: 24 },
197 component: 'Input', 199 component: 'Input',
198 - rules: numberRule,  
199 -  
200 componentProps: { 200 componentProps: {
201 - placeholder: '请输入每条消息的最大规则节点执行数', 201 + placeholder: '请输入每条消息的最大规则节点执行数(请输入数字)',
202 }, 202 },
203 }, 203 },
204 { 204 {
205 field: 'maxEmails', 205 field: 'maxEmails',
  206 + required: true,
206 label: '发送的最大电子邮件数(0-无限制)', 207 label: '发送的最大电子邮件数(0-无限制)',
207 colProps: { span: 24 }, 208 colProps: { span: 24 },
208 component: 'Input', 209 component: 'Input',
209 - rules: numberRule,  
210 -  
211 componentProps: { 210 componentProps: {
212 - placeholder: '请输入发送的最大电子邮件数', 211 + placeholder: '请输入发送的最大电子邮件数(请输入数字)',
213 }, 212 },
214 }, 213 },
215 { 214 {
216 field: 'maxSms', 215 field: 'maxSms',
  216 + required: true,
  217 +
217 label: '发送的最大短信数(0-无限制)', 218 label: '发送的最大短信数(0-无限制)',
218 colProps: { span: 24 }, 219 colProps: { span: 24 },
219 component: 'Input', 220 component: 'Input',
220 - rules: numberRule,  
221 -  
222 componentProps: { 221 componentProps: {
223 - placeholder: '请输入发送的最大短信数', 222 + placeholder: '请输入发送的最大短信数(请输入数字)',
224 }, 223 },
225 }, 224 },
226 { 225 {
227 field: 'maxCreatedAlarms', 226 field: 'maxCreatedAlarms',
  227 + required: true,
  228 +
228 label: '创建的最大报警数 (0 - 无限制)', 229 label: '创建的最大报警数 (0 - 无限制)',
229 colProps: { span: 24 }, 230 colProps: { span: 24 },
230 component: 'Input', 231 component: 'Input',
231 - rules: numberRule,  
232 componentProps: { 232 componentProps: {
233 - placeholder: '请输入maxCreatedAlarms', 233 + placeholder: '请输入maxCreatedAlarms(请输入数字)',
234 }, 234 },
235 }, 235 },
236 { 236 {
237 field: 'transportTenantMsgRateLimit', 237 field: 'transportTenantMsgRateLimit',
  238 +
238 label: '传输租户消息速率限制', 239 label: '传输租户消息速率限制',
239 colProps: { span: 24 }, 240 colProps: { span: 24 },
240 component: 'Input', 241 component: 'Input',
241 -  
242 componentProps: { 242 componentProps: {
243 placeholder: '请输入传输租户消息速率限制', 243 placeholder: '请输入传输租户消息速率限制',
244 }, 244 },
@@ -248,7 +248,6 @@ export const formSchema: FormSchema[] = [ @@ -248,7 +248,6 @@ export const formSchema: FormSchema[] = [
248 label: '租户遥测消息速率限制', 248 label: '租户遥测消息速率限制',
249 colProps: { span: 24 }, 249 colProps: { span: 24 },
250 component: 'Input', 250 component: 'Input',
251 -  
252 componentProps: { 251 componentProps: {
253 placeholder: '请输入租户遥测消息速率限制', 252 placeholder: '请输入租户遥测消息速率限制',
254 }, 253 },
@@ -258,7 +257,6 @@ export const formSchema: FormSchema[] = [ @@ -258,7 +257,6 @@ export const formSchema: FormSchema[] = [
258 label: '租户遥测数据点速率限制', 257 label: '租户遥测数据点速率限制',
259 colProps: { span: 24 }, 258 colProps: { span: 24 },
260 component: 'Input', 259 component: 'Input',
261 -  
262 componentProps: { 260 componentProps: {
263 placeholder: '请输入租户遥测数据点速率限制', 261 placeholder: '请输入租户遥测数据点速率限制',
264 }, 262 },
@@ -268,7 +266,6 @@ export const formSchema: FormSchema[] = [ @@ -268,7 +266,6 @@ export const formSchema: FormSchema[] = [
268 label: '传输设备消息速率限制', 266 label: '传输设备消息速率限制',
269 colProps: { span: 24 }, 267 colProps: { span: 24 },
270 component: 'Input', 268 component: 'Input',
271 -  
272 componentProps: { 269 componentProps: {
273 placeholder: '请输入传输设备消息速率限制', 270 placeholder: '请输入传输设备消息速率限制',
274 }, 271 },
@@ -278,7 +275,6 @@ export const formSchema: FormSchema[] = [ @@ -278,7 +275,6 @@ export const formSchema: FormSchema[] = [
278 label: '设备遥测消息速率限制', 275 label: '设备遥测消息速率限制',
279 colProps: { span: 24 }, 276 colProps: { span: 24 },
280 component: 'Input', 277 component: 'Input',
281 -  
282 componentProps: { 278 componentProps: {
283 placeholder: '请输入设备遥测消息速率限制', 279 placeholder: '请输入设备遥测消息速率限制',
284 }, 280 },
1 <template> 1 <template>
2 - <CollapseContainer title="配置设置"> 2 + <CollapseContainer title="租户配置设置">
3 <BasicForm @register="registerForm" /> 3 <BasicForm @register="registerForm" />
4 </CollapseContainer> 4 </CollapseContainer>
5 </template> 5 </template>
@@ -15,11 +15,13 @@ @@ -15,11 +15,13 @@
15 emits: ['success', 'register', 'funcResetFields'], 15 emits: ['success', 'register', 'funcResetFields'],
16 setup() { 16 setup() {
17 const getValueData: any = ref({}); 17 const getValueData: any = ref({});
18 - const [registerForm, { getFieldsValue, resetFields }] = useForm({ 18 + const [registerForm, { getFieldsValue, resetFields, setFieldsValue }] = useForm({
19 schemas: formSchema, 19 schemas: formSchema,
20 showActionButtonGroup: false, 20 showActionButtonGroup: false,
21 }); 21 });
22 - 22 + const setFieldsValueFunc = (v) => {
  23 + setFieldsValue(v);
  24 + };
23 function getAllFields(getV) { 25 function getAllFields(getV) {
24 const values = getFieldsValue(); 26 const values = getFieldsValue();
25 getValueData.value = values; 27 getValueData.value = values;
@@ -30,6 +32,7 @@ @@ -30,6 +32,7 @@
30 resetFields(); 32 resetFields();
31 } 33 }
32 return { 34 return {
  35 + setFieldsValueFunc,
33 funcResetFields, 36 funcResetFields,
34 getAllFields, 37 getAllFields,
35 registerForm, 38 registerForm,
1 <template> 1 <template>
2 <div> 2 <div>
3 - <BasicTable  
4 - :rowSelection="{ type: 'checkbox' }"  
5 - @selection-change="useSelectionChange"  
6 - @register="registerTable"  
7 - > 3 + <BasicTable @register="registerTable">
8 <template #toolbar> 4 <template #toolbar>
9 <a-button type="primary" @click="handleAdd"> 新增租户配置 </a-button> 5 <a-button type="primary" @click="handleAdd"> 新增租户配置 </a-button>
10 - <!-- <a-button type="error" @click="handleToolbarDel"> 删除 </a-button> -->  
11 </template> 6 </template>
12 <template #action="{ record }"> 7 <template #action="{ record }">
13 <TableAction 8 <TableAction
@@ -42,7 +37,7 @@ @@ -42,7 +37,7 @@
42 import { BasicTable, useTable, TableAction } from '/@/components/Table'; 37 import { BasicTable, useTable, TableAction } from '/@/components/Table';
43 import { useDrawer } from '/@/components/Drawer'; 38 import { useDrawer } from '/@/components/Drawer';
44 import TenantSettingDrawer from './useDrawer.vue'; 39 import TenantSettingDrawer from './useDrawer.vue';
45 - import { columns } from './config'; 40 + import { columns, searchFormSchema } from './config';
46 import { useMessage } from '/@/hooks/web/useMessage'; 41 import { useMessage } from '/@/hooks/web/useMessage';
47 import { getTableTenantProfileApi, deleteTenantProfileApi } from '/@/api/tenant/tenantApi'; 42 import { getTableTenantProfileApi, deleteTenantProfileApi } from '/@/api/tenant/tenantApi';
48 43
@@ -50,7 +45,6 @@ @@ -50,7 +45,6 @@
50 name: 'Index', 45 name: 'Index',
51 components: { BasicTable, TenantSettingDrawer, TableAction }, 46 components: { BasicTable, TenantSettingDrawer, TableAction },
52 setup() { 47 setup() {
53 - // let selectedRowKeys: Array<string> = [];  
54 let echoEditData = reactive({}); 48 let echoEditData = reactive({});
55 const [registerDrawer, { openDrawer }] = useDrawer(); 49 const [registerDrawer, { openDrawer }] = useDrawer();
56 const { createMessage } = useMessage(); 50 const { createMessage } = useMessage();
@@ -59,6 +53,10 @@ @@ -59,6 +53,10 @@
59 clickToRowSelect: false, 53 clickToRowSelect: false,
60 api: getTableTenantProfileApi, 54 api: getTableTenantProfileApi,
61 columns, 55 columns,
  56 + formConfig: {
  57 + labelWidth: 120,
  58 + schemas: searchFormSchema,
  59 + },
62 useSearchForm: true, 60 useSearchForm: true,
63 showTableSetting: true, 61 showTableSetting: true,
64 bordered: true, 62 bordered: true,
@@ -78,17 +76,6 @@ @@ -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 function handleEdit(record: Recordable) { 79 function handleEdit(record: Recordable) {
93 openDrawer(true, { 80 openDrawer(true, {
94 record, 81 record,
@@ -97,7 +84,8 @@ @@ -97,7 +84,8 @@
97 echoEditData = record; 84 echoEditData = record;
98 } 85 }
99 async function handleDelete(record: Recordable) { 86 async function handleDelete(record: Recordable) {
100 - let ids = record.id; 87 + let ids = record.id.id;
  88 + console.log(record);
101 await deleteTenantProfileApi(ids); 89 await deleteTenantProfileApi(ids);
102 createMessage.success('删除成功'); 90 createMessage.success('删除成功');
103 reload(); 91 reload();
@@ -106,12 +94,10 @@ @@ -106,12 +94,10 @@
106 reload(); 94 reload();
107 } 95 }
108 return { 96 return {
109 - useSelectionChange,  
110 echoEditData, 97 echoEditData,
111 registerTable, 98 registerTable,
112 registerDrawer, 99 registerDrawer,
113 handleAdd, 100 handleAdd,
114 - handleToolbarDel,  
115 handleEdit, 101 handleEdit,
116 handleDelete, 102 handleDelete,
117 handleSuccess, 103 handleSuccess,
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 @ok="handleSubmit" 9 @ok="handleSubmit"
10 > 10 >
11 <BasicForm @register="registerForm" /> 11 <BasicForm @register="registerForm" />
12 - <CpnsTenantSet ref="getChildData" /> 12 + <CpnsTenantSet ref="getChildData" :parentData="parentSetData" />
13 </BasicDrawer> 13 </BasicDrawer>
14 </div> 14 </div>
15 </template> 15 </template>
@@ -30,6 +30,7 @@ @@ -30,6 +30,7 @@
30 const { createMessage } = useMessage(); 30 const { createMessage } = useMessage();
31 const isUpdate = ref(true); 31 const isUpdate = ref(true);
32 let postAllData: any = reactive({}); 32 let postAllData: any = reactive({});
  33 + const parentSetData: any = ref(null);
33 let getValuesFormData: any = reactive({}); 34 let getValuesFormData: any = reactive({});
34 const { proxy } = getCurrentInstance(); 35 const { proxy } = getCurrentInstance();
35 const getChildData = ref(null); 36 const getChildData = ref(null);
@@ -47,6 +48,8 @@ @@ -47,6 +48,8 @@
47 isUpdate.value = !!data?.isUpdate; 48 isUpdate.value = !!data?.isUpdate;
48 //编辑 49 //编辑
49 if (unref(isUpdate)) { 50 if (unref(isUpdate)) {
  51 + parentSetData.value = { ...data.record.profileData.configuration };
  52 + proxy.$refs.getChildData.setFieldsValueFunc(parentSetData.value);
50 editGetId.value = data.record.id; 53 editGetId.value = data.record.id;
51 await setFieldsValue({ 54 await setFieldsValue({
52 ...data.record, 55 ...data.record,
@@ -56,25 +59,27 @@ @@ -56,25 +59,27 @@
56 const getTitle = computed(() => (!unref(isUpdate) ? '新增租户配置' : '编辑租户配置')); 59 const getTitle = computed(() => (!unref(isUpdate) ? '新增租户配置' : '编辑租户配置'));
57 60
58 async function handleSubmit() { 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 if (unref(isUpdate)) { 83 if (unref(isUpdate)) {
79 let res = validateFields(); 84 let res = validateFields();
80 if (!res) return; 85 if (!res) return;
@@ -98,6 +103,7 @@ @@ -98,6 +103,7 @@
98 } 103 }
99 } 104 }
100 return { 105 return {
  106 + parentSetData,
101 getChildData, 107 getChildData,
102 registerDrawer, 108 registerDrawer,
103 registerForm, 109 registerForm,