Commit b2ad4d171a23135cc939234a14e19a363ca54f95

Authored by xp.Huang
2 parents 4ebea6ec 61ab426c

Merge branch 'dev-fix-ww' into 'main_dev'

fix: 修复teambition中BUG

See merge request yunteng/thingskit-front!569
@@ -27,30 +27,14 @@ export const step1Schemas: FormSchema[] = [ @@ -27,30 +27,14 @@ export const step1Schemas: FormSchema[] = [
27 component: 'Input', 27 component: 'Input',
28 componentProps: { 28 componentProps: {
29 maxLength: 255, 29 maxLength: 255,
  30 + placeholder: '请输入别名',
30 }, 31 },
31 }, 32 },
32 { 33 {
33 field: 'name', 34 field: 'name',
34 label: '设备名称', 35 label: '设备名称',
35 component: 'Input', 36 component: 'Input',
36 - dynamicRules: () => {  
37 - return [  
38 - {  
39 - required: true,  
40 - validator: (_, value) => {  
41 - // 支持英文字母、数字、下划线(_)、中划线(-)、点号(.)、半角冒号(:)和特殊字符@,长度限制为4~32个字符  
42 - const reg = /^[A-Za-z0-9_\( \)\-\@\:\.]+$/;  
43 - const strLength = String(value).length as number;  
44 - if (!reg.test(value) || strLength > 32 || strLength < 4) {  
45 - return Promise.reject(  
46 - '请输入支持英文字母、数字、下划线(_)、中划线(-)、点号(.)、半角冒号(:)和特殊字符@,长度限制为4~32个字符'  
47 - );  
48 - }  
49 - return Promise.resolve();  
50 - },  
51 - },  
52 - ];  
53 - }, 37 + rules: [{ required: true, message: '设备名称为必填项' }],
54 slot: 'snCode', 38 slot: 'snCode',
55 }, 39 },
56 { 40 {
@@ -97,6 +81,7 @@ export const step1Schemas: FormSchema[] = [ @@ -97,6 +81,7 @@ export const step1Schemas: FormSchema[] = [
97 }); 81 });
98 }, 82 },
99 showSearch: true, 83 showSearch: true,
  84 + placeholder: '请选择产品',
100 filterOption: (inputValue: string, option: Record<'label' | 'value', string>) => 85 filterOption: (inputValue: string, option: Record<'label' | 'value', string>) =>
101 option.label.includes(inputValue), 86 option.label.includes(inputValue),
102 }; 87 };
@@ -120,6 +105,17 @@ export const step1Schemas: FormSchema[] = [ @@ -120,6 +105,17 @@ export const step1Schemas: FormSchema[] = [
120 }, 105 },
121 }, 106 },
122 { 107 {
  108 + field: 'code',
  109 + label: '设备标识',
  110 + required: true,
  111 + component: 'Input',
  112 + componentProps: {
  113 + maxLength: 255,
  114 + placeholder: '请输入设备标识',
  115 + },
  116 + ifShow: ({ values }) => values?.transportType === TransportTypeEnum.TCP,
  117 + },
  118 + {
123 field: 'brand', 119 field: 'brand',
124 component: 'ApiRadioGroup', 120 component: 'ApiRadioGroup',
125 label: '选择厂家', 121 label: '选择厂家',
@@ -28,15 +28,16 @@ export const columns: BasicColumn[] = [ @@ -28,15 +28,16 @@ export const columns: BasicColumn[] = [
28 slots: { customRender: 'name', title: 'deviceTitle' }, 28 slots: { customRender: 'name', title: 'deviceTitle' },
29 customRender: ({ record }) => { 29 customRender: ({ record }) => {
30 return h('div', { style: 'display:flex;flex-direction:column' }, [ 30 return h('div', { style: 'display:flex;flex-direction:column' }, [
  31 + record.alias &&
  32 + h(
  33 + 'div',
  34 + {
  35 + class: 'cursor-pointer',
  36 + },
  37 + `${record.alias}`
  38 + ),
31 h( 39 h(
32 - 'p',  
33 - {  
34 - class: 'cursor-pointer',  
35 - },  
36 - `${record.alias}`  
37 - ),  
38 - h(  
39 - 'p', 40 + 'div',
40 { 41 {
41 class: 'cursor-pointer text-blue-500', 42 class: 'cursor-pointer text-blue-500',
42 onClick: () => { 43 onClick: () => {
@@ -40,7 +40,7 @@ @@ -40,7 +40,7 @@
40 </template> 40 </template>
41 <template #snCode="{ model, field }"> 41 <template #snCode="{ model, field }">
42 <div class="flex"> 42 <div class="flex">
43 - <Input v-model:value="model[field]" /> 43 + <Input v-model:value="model[field]" placeholder="请输入设备名称" />
44 <a-button type="link" @click="generateSN">自动生成</a-button> 44 <a-button type="link" @click="generateSN">自动生成</a-button>
45 </div> 45 </div>
46 </template> 46 </template>
@@ -428,7 +428,7 @@ @@ -428,7 +428,7 @@
428 createMessage.success('删除成功'); 428 createMessage.success('删除成功');
429 handleReload(); 429 handleReload();
430 } catch (error) { 430 } catch (error) {
431 - createMessage.error('删除失败'); 431 + throw error;
432 } finally { 432 } finally {
433 setLoading(false); 433 setLoading(false);
434 } 434 }
@@ -138,7 +138,7 @@ const deviceTableColumn: BasicColumn[] = [ @@ -138,7 +138,7 @@ const deviceTableColumn: BasicColumn[] = [
138 }, 138 },
139 }, 139 },
140 [ 140 [
141 - h('div', { class: 'truncate' }, record.alias), 141 + record.alias && h('div', { class: 'truncate' }, record.alias),
142 h('div', { class: 'text-blue-400 truncate' }, record.name), 142 h('div', { class: 'text-blue-400 truncate' }, record.name),
143 ] 143 ]
144 ), 144 ),
@@ -294,8 +294,9 @@ @@ -294,8 +294,9 @@
294 watch( 294 watch(
295 () => props.frontId, 295 () => props.frontId,
296 async (target, oldTarget) => { 296 async (target, oldTarget) => {
297 - if (isControlComponent(oldTarget!) && isControlComponent(target!)) return;  
298 - await resetFormFields(); 297 + if ([isControlComponent(oldTarget!), isControlComponent(target!)].some(Boolean)) {
  298 + await resetFormFields();
  299 + }
299 } 300 }
300 ); 301 );
301 302
@@ -14,6 +14,7 @@ @@ -14,6 +14,7 @@
14 import { useCalcGridLayout } from '../../hook/useCalcGridLayout'; 14 import { useCalcGridLayout } from '../../hook/useCalcGridLayout';
15 import { FrontComponent } from '../../const/const'; 15 import { FrontComponent } from '../../const/const';
16 import { frontComponentMap } from '../../components/help'; 16 import { frontComponentMap } from '../../components/help';
  17 + import { ValidateErrorEntity } from 'ant-design-vue/es/form/interface';
17 18
18 interface DataComponentRouteParams extends RouteParams { 19 interface DataComponentRouteParams extends RouteParams {
19 id: string; 20 id: string;
@@ -75,7 +76,14 @@ @@ -75,7 +76,14 @@
75 unref(isEdit) ? handleUpdateComponent(value) : handleAddComponent(value); 76 unref(isEdit) ? handleUpdateComponent(value) : handleAddComponent(value);
76 resetForm(); 77 resetForm();
77 } catch (error: unknown) { 78 } catch (error: unknown) {
78 - window.console.error(error); 79 + if (
  80 + ((error || {}) as ValidateErrorEntity).errorFields &&
  81 + ((error || {}) as ValidateErrorEntity).errorFields.length
  82 + ) {
  83 + const tooltip = ((error || {}) as ValidateErrorEntity).errorFields[0];
  84 + createMessage.warning(tooltip.errors[0]);
  85 + }
  86 + throw error;
79 } 87 }
80 }; 88 };
81 89
@@ -97,7 +105,7 @@ @@ -97,7 +105,7 @@
97 closeModal(); 105 closeModal();
98 emit('create'); 106 emit('create');
99 } catch (error) { 107 } catch (error) {
100 - console.log(error); 108 + throw error;
101 // createMessage.error('创建失败'); 109 // createMessage.error('创建失败');
102 } finally { 110 } finally {
103 changeOkLoading(false); 111 changeOkLoading(false);
@@ -289,6 +289,7 @@ export const dataSourceSchema = (isEdit: boolean, frontId?: FrontComponent): For @@ -289,6 +289,7 @@ export const dataSourceSchema = (isEdit: boolean, frontId?: FrontComponent): For
289 component: 'ApiSelect', 289 component: 'ApiSelect',
290 label: '命令类型', 290 label: '命令类型',
291 defaultValue: CommandTypeEnum.CUSTOM.toString(), 291 defaultValue: CommandTypeEnum.CUSTOM.toString(),
  292 + rules: [{ required: true, message: '请选择命令类型' }],
292 colProps: { span: 8 }, 293 colProps: { span: 8 },
293 ifShow: ({ model }) => 294 ifShow: ({ model }) =>
294 isControlComponent(frontId!) && isTcpProfile(model[DataSourceField.TRANSPORT_TYPE]), 295 isControlComponent(frontId!) && isTcpProfile(model[DataSourceField.TRANSPORT_TYPE]),
@@ -347,6 +348,7 @@ export const dataSourceSchema = (isEdit: boolean, frontId?: FrontComponent): For @@ -347,6 +348,7 @@ export const dataSourceSchema = (isEdit: boolean, frontId?: FrontComponent): For
347 component: 'Input', 348 component: 'Input',
348 label: '命令', 349 label: '命令',
349 colProps: { span: 8 }, 350 colProps: { span: 8 },
  351 + rules: [{ required: true, message: '请输入下发命令' }],
350 // 是控制组件 && 自定义命令 && 传输协议为TCP 352 // 是控制组件 && 自定义命令 && 传输协议为TCP
351 ifShow: ({ model }) => 353 ifShow: ({ model }) =>
352 isControlComponent(frontId!) && 354 isControlComponent(frontId!) &&