Commit b2ad4d171a23135cc939234a14e19a363ca54f95
Merge branch 'dev-fix-ww' into 'main_dev'
fix: 修复teambition中BUG See merge request yunteng/thingskit-front!569
Showing
8 changed files
with
41 additions
and
33 deletions
@@ -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!) && |