Commit 350f551ec48e4c293319a1cc8a487ae2dd639134

Authored by fengtao
1 parent db597a08

pref:优化场景联动部分代码 根据产品获取对应设备

@@ -12,8 +12,10 @@ import { findDictItemByCode } from '/@/api/system/dict'; @@ -12,8 +12,10 @@ import { findDictItemByCode } from '/@/api/system/dict';
12 import { deviceProfile } from '/@/api/device/deviceManager'; 12 import { deviceProfile } from '/@/api/device/deviceManager';
13 import { getModelServices } from '/@/api/device/modelOfMatter'; 13 import { getModelServices } from '/@/api/device/modelOfMatter';
14 import { ModelOfMatterParams } from '/@/api/device/model/modelOfMatterModel'; 14 import { ModelOfMatterParams } from '/@/api/device/model/modelOfMatterModel';
  15 +import useCommonFun from '../hooks/useCommonFun';
15 16
16 -type TOption = { 17 +const { useByProductGetAttribute } = useCommonFun();
  18 +export type TOption = {
17 label: string; 19 label: string;
18 value: string; 20 value: string;
19 }; 21 };
@@ -217,27 +219,10 @@ export const trigger_condition_schema: FormSchema[] = [ @@ -217,27 +219,10 @@ export const trigger_condition_schema: FormSchema[] = [
217 onChange: async (e) => { 219 onChange: async (e) => {
218 if (e) { 220 if (e) {
219 setFieldsValue({ type2: '' }); 221 setFieldsValue({ type2: '' });
  222 + setFieldsValue({ entityId: [] });
220 const res = await getAttribute(e); 223 const res = await getAttribute(e);
221 const options = ref<TOption[]>([]); 224 const options = ref<TOption[]>([]);
222 - const obj = (options) =>  
223 - updateSchema({  
224 - field: 'type2',  
225 - componentProps: {  
226 - placeholder: '请选择属性',  
227 - options,  
228 - },  
229 - });  
230 - if (Array.isArray(res)) {  
231 - options.value = res.map((m) => {  
232 - return {  
233 - label: m?.identifier,  
234 - value: m?.identifier,  
235 - };  
236 - });  
237 - obj(options.value);  
238 - } else {  
239 - obj(options.value);  
240 - } 225 + useByProductGetAttribute(res, updateSchema, options);
241 } 226 }
242 }, 227 },
243 }; 228 };
@@ -260,10 +245,22 @@ export const trigger_condition_schema: FormSchema[] = [ @@ -260,10 +245,22 @@ export const trigger_condition_schema: FormSchema[] = [
260 { 245 {
261 field: 'entityId', 246 field: 'entityId',
262 label: '', 247 label: '',
263 - component: 'Select',  
264 - componentProps: {  
265 - placeholder: '请选择设备',  
266 - mode: 'multiple', 248 + component: 'ApiSelect',
  249 + componentProps: ({ formModel }) => {
  250 + const deviceProfileId = formModel['deviceProfileId'];
  251 + if (unref(organizationId)) {
  252 + return {
  253 + placeholder: '请选择设备',
  254 + mode: 'multiple',
  255 + api: byOrganizationIdGetMasterDevice,
  256 + params: {
  257 + organizationId: unref(organizationId),
  258 + deviceProfileId,
  259 + },
  260 + labelField: 'name',
  261 + valueField: 'id',
  262 + };
  263 + }
267 }, 264 },
268 ifShow: ({ values }) => isPart(values.device), 265 ifShow: ({ values }) => isPart(values.device),
269 colProps: { span: 6 }, 266 colProps: { span: 6 },
@@ -62,7 +62,7 @@ @@ -62,7 +62,7 @@
62 import { CollapseContainer } from '/@/components/Container/index'; 62 import { CollapseContainer } from '/@/components/Container/index';
63 import { BasicForm, useForm } from '/@/components/Form/index'; 63 import { BasicForm, useForm } from '/@/components/Form/index';
64 import { Card, Select, Input, Tooltip } from 'ant-design-vue'; 64 import { Card, Select, Input, Tooltip } from 'ant-design-vue';
65 - import { trigger_condition_schema } from '../config/config.data'; 65 + import { trigger_condition_schema, TOption } from '../config/config.data';
66 import { getAttribute } from '/@/api/ruleengine/ruleengineApi'; 66 import { getAttribute } from '/@/api/ruleengine/ruleengineApi';
67 import ConditionScreening from './ConditionScreening.vue'; 67 import ConditionScreening from './ConditionScreening.vue';
68 import { scheduleOptions, timeUnitOptions, options } from '../config/formatData'; 68 import { scheduleOptions, timeUnitOptions, options } from '../config/formatData';
@@ -70,7 +70,9 @@ @@ -70,7 +70,9 @@
70 import AlarmSchedule from './AlarmSchedule.vue'; 70 import AlarmSchedule from './AlarmSchedule.vue';
71 import { useModal } from '/@/components/Modal'; 71 import { useModal } from '/@/components/Modal';
72 import { cloneDeep } from 'lodash-es'; 72 import { cloneDeep } from 'lodash-es';
  73 + import useCommonFun from '../hooks/useCommonFun';
73 74
  75 + const { useByProductGetAttribute } = useCommonFun();
74 defineProps({ 76 defineProps({
75 index: { 77 index: {
76 type: Number, 78 type: Number,
@@ -100,40 +102,8 @@ @@ -100,40 +102,8 @@
100 }; 102 };
101 103
102 const updateFieldDeviceId = (deviceList: any[], _, isUpdate) => { 104 const updateFieldDeviceId = (deviceList: any[], _, isUpdate) => {
103 - if (isUpdate) {  
104 - updateSchema({  
105 - field: 'entityId',  
106 - componentProps: {  
107 - options: deviceList,  
108 - },  
109 - });  
110 - }  
111 - //新增、编辑都会触发onChang事件  
112 - updateSchema({  
113 - field: 'device',  
114 - componentProps: {  
115 - options: [  
116 - { label: '全部', value: 'ALL' },  
117 - { label: '部分', value: 'PART' },  
118 - ],  
119 - async onChange(e) {  
120 - setFieldsValue({ entityId: [] });  
121 - if (e) {  
122 - //fengtao  
123 - if (e == 'ALL') {  
124 - } else {  
125 - updateSchema({  
126 - field: 'entityId',  
127 - componentProps: {  
128 - options: deviceList,  
129 - },  
130 - });  
131 - }  
132 - //fengtao  
133 - }  
134 - },  
135 - },  
136 - }); 105 + console.log(deviceList);
  106 + console.log(isUpdate);
137 }; 107 };
138 108
139 const resetFieldsValueFunc = () => resetFields(); 109 const resetFieldsValueFunc = () => resetFields();
@@ -143,30 +113,8 @@ @@ -143,30 +113,8 @@
143 }; 113 };
144 const updateFieldAttributeFunc = async (e) => { 114 const updateFieldAttributeFunc = async (e) => {
145 const res = await getAttribute(e); 115 const res = await getAttribute(e);
146 - let options: any = [];  
147 - if (Array.isArray(res)) {  
148 - options = res.map((m) => {  
149 - return {  
150 - label: m?.identifier,  
151 - value: m?.identifier,  
152 - };  
153 - });  
154 - updateSchema({  
155 - field: 'type2',  
156 - componentProps: {  
157 - placeholder: '请选择属性',  
158 - options,  
159 - },  
160 - });  
161 - } else {  
162 - updateSchema({  
163 - field: 'type2',  
164 - componentProps: {  
165 - placeholder: '请选择属性',  
166 - options,  
167 - },  
168 - });  
169 - } 116 + const options = ref<TOption[]>([]);
  117 + useByProductGetAttribute(res, updateSchema, options);
170 }; 118 };
171 //TODO-fengtao 119 //TODO-fengtao
172 const schedule = ref('ANY_TIME'); 120 const schedule = ref('ANY_TIME');
@@ -62,7 +62,7 @@ @@ -62,7 +62,7 @@
62 import { BasicForm, useForm } from '/@/components/Form/index'; 62 import { BasicForm, useForm } from '/@/components/Form/index';
63 import { Icon } from '/@/components/Icon'; 63 import { Icon } from '/@/components/Icon';
64 import { Tooltip, Card, Select, Input } from 'ant-design-vue'; 64 import { Tooltip, Card, Select, Input } from 'ant-design-vue';
65 - import { trigger_condition_schema } from '../config/config.data'; 65 + import { trigger_condition_schema, TOption } from '../config/config.data';
66 import { getAttribute } from '/@/api/ruleengine/ruleengineApi'; 66 import { getAttribute } from '/@/api/ruleengine/ruleengineApi';
67 import ConditionScreening from './ConditionScreening.vue'; 67 import ConditionScreening from './ConditionScreening.vue';
68 import { scheduleOptions, timeUnitOptions, options } from '../config/formatData'; 68 import { scheduleOptions, timeUnitOptions, options } from '../config/formatData';
@@ -70,7 +70,9 @@ @@ -70,7 +70,9 @@
70 import { useModal } from '/@/components/Modal'; 70 import { useModal } from '/@/components/Modal';
71 import { cloneDeep } from 'lodash-es'; 71 import { cloneDeep } from 'lodash-es';
72 import { useMessage } from '/@/hooks/web/useMessage'; 72 import { useMessage } from '/@/hooks/web/useMessage';
  73 + import useCommonFun from '../hooks/useCommonFun';
73 74
  75 + const { useByProductGetAttribute } = useCommonFun();
74 defineProps({ 76 defineProps({
75 title: { 77 title: {
76 type: String, 78 type: String,
@@ -140,41 +142,8 @@ @@ -140,41 +142,8 @@
140 142
141 //TODO-fengtao 143 //TODO-fengtao
142 const updateFieldDeviceId = (deviceList: any[], _, isUpdate) => { 144 const updateFieldDeviceId = (deviceList: any[], _, isUpdate) => {
143 - //用于编辑回显  
144 - if (isUpdate.value) {  
145 - updateSchema({  
146 - field: 'entityId',  
147 - componentProps: {  
148 - options: deviceList,  
149 - },  
150 - });  
151 - }  
152 - //新增、编辑都会触发onChang事件  
153 - updateSchema({  
154 - field: 'device',  
155 - componentProps: {  
156 - options: [  
157 - { label: '全部', value: 'ALL' },  
158 - { label: '部分', value: 'PART' },  
159 - ],  
160 - async onChange(e) {  
161 - setFieldsValue({ entityId: [] });  
162 - if (e) {  
163 - //fengtao  
164 - if (e == 'ALL') {  
165 - } else {  
166 - updateSchema({  
167 - field: 'entityId',  
168 - componentProps: {  
169 - options: deviceList,  
170 - },  
171 - });  
172 - }  
173 - //fengtao  
174 - }  
175 - },  
176 - },  
177 - }); 145 + console.log(deviceList);
  146 + console.log(isUpdate);
178 }; 147 };
179 //TODO-fengtao 148 //TODO-fengtao
180 const resetFieldsValueFunc = () => { 149 const resetFieldsValueFunc = () => {
@@ -188,30 +157,8 @@ @@ -188,30 +157,8 @@
188 //TODO-fengtao 157 //TODO-fengtao
189 const updateFieldAttributeFunc = async (e) => { 158 const updateFieldAttributeFunc = async (e) => {
190 const res = await getAttribute(e); 159 const res = await getAttribute(e);
191 - let options: any = [];  
192 - if (Array.isArray(res)) {  
193 - options = res.map((m) => {  
194 - return {  
195 - label: m?.identifier,  
196 - value: m?.identifier,  
197 - };  
198 - });  
199 - updateSchema({  
200 - field: 'type2',  
201 - componentProps: {  
202 - placeholder: '请选择属性',  
203 - options,  
204 - },  
205 - });  
206 - } else {  
207 - updateSchema({  
208 - field: 'type2',  
209 - componentProps: {  
210 - placeholder: '请选择属性',  
211 - options,  
212 - },  
213 - });  
214 - } 160 + const options = ref<TOption[]>([]);
  161 + useByProductGetAttribute(res, updateSchema, options);
215 }; 162 };
216 //TODO-fengtao 163 //TODO-fengtao
217 const handleDelete = (params: { index: number; title: string }) => { 164 const handleDelete = (params: { index: number; title: string }) => {
  1 +export default () => {
  2 + //根据产品获取对应属性
  3 + const useByProductGetAttribute = (res, callback, opt) => {
  4 + const getAttr = (opt) =>
  5 + callback({
  6 + field: 'type2',
  7 + componentProps: {
  8 + placeholder: '请选择属性',
  9 + opt,
  10 + },
  11 + });
  12 + if (Array.isArray(res)) {
  13 + opt = res.map((m) => {
  14 + return {
  15 + label: m?.identifier,
  16 + value: m?.identifier,
  17 + };
  18 + });
  19 + getAttr(opt);
  20 + } else {
  21 + getAttr(opt);
  22 + }
  23 + };
  24 +
  25 + return {
  26 + useByProductGetAttribute,
  27 + };
  28 +};