Commit cbf9e17eafbede086634ccd8ffe6c776d0fea1a1

Authored by xp.Huang
2 parents 7c676bd0 a7614319

Merge branch 'ww' into 'main'

fix: BUG in teambition

See merge request huang/yun-teng-iot-front!300
... ... @@ -122,11 +122,11 @@ export const addDataComponent = (params: AddDataComponentParams) => {
122 122 * @param params
123 123 * @returns
124 124 */
125   -export const deleteDataComponent = (params: string[]) => {
  125 +export const deleteDataComponent = (params: string) => {
126 126 return defHttp.delete({
127   - url: DataComponentUrl.DELETE_DATA_COMPONENT,
  127 + url: `${DataComponentUrl.DELETE_DATA_COMPONENT}/${params}`,
128 128 params: {
129   - ids: params,
  129 + ids: [params],
130 130 },
131 131 });
132 132 };
... ...
... ... @@ -111,7 +111,6 @@
111 111 initChart();
112 112 props.add && props.add(props.value.id, update);
113 113 if (props.random) timeout = setInterval(handleRandomValue, 2000) as unknown as number;
114   - console.log(unref(chartRef));
115 114 });
116 115
117 116 onUnmounted(() => {
... ...
... ... @@ -65,7 +65,7 @@
65 65 <Tooltip :title="item.deviceName" placement="topLeft">
66 66 <span>
67 67 <SvgIcon name="" prefix="iconfont" class="!fill-emerald-400" />
68   - <span>{{ item.deviceName }}</span>
  68 + <span>{{ item.deviceRename || item.deviceName }}</span>
69 69 </span>
70 70 </Tooltip>
71 71 </div>
... ...
... ... @@ -26,10 +26,6 @@
26 26
27 27 const { createMessage } = useMessage();
28 28
29   - // const componentRecord = reactive<DataBoardLayoutInfo>({
30   - // ...props.record,
31   - // } as unknown as DataBoardLayoutInfo);
32   -
33 29 const dataSource = ref<DataSourceEl[]>([
34 30 { id: buildUUID(), componentInfo: props.defaultConfig || {} } as unknown as DataSourceEl,
35 31 ]);
... ... @@ -49,6 +45,11 @@
49 45 }
50 46 };
51 47
  48 + const validate = async () => {
  49 + await basicMethod.validate();
  50 + await validateDataSourceField();
  51 + };
  52 +
52 53 const getAllDataSourceFieldValue = () => {
53 54 const _dataSource = getDataSourceField();
54 55 const basicInfo = basicMethod.getFieldsValue();
... ... @@ -58,6 +59,16 @@
58 59 };
59 60 };
60 61
  62 + const validateDataSourceField = async () => {
  63 + const hasExistEl = Object.keys(dataSourceEl).filter((key) => dataSourceEl[key]);
  64 + const _dataSource: boolean[] = [];
  65 + for (const id of hasExistEl) {
  66 + const flag = (await (dataSourceEl[id] as FormActionType).validate()) as boolean;
  67 + _dataSource.push(flag);
  68 + }
  69 + return _dataSource;
  70 + };
  71 +
61 72 const getDataSourceField = () => {
62 73 const hasExistEl = Object.keys(dataSourceEl).filter((key) => dataSourceEl[key]);
63 74 const _dataSource: DataSource[] = [];
... ... @@ -66,7 +77,7 @@
66 77 const value = (dataSourceEl[id] as FormActionType).getFieldsValue() as DataSource;
67 78 if (!~index) continue;
68 79 const componentInfo = unref(dataSource)[index].componentInfo || {};
69   - _dataSource.push({
  80 + _dataSource.unshift({
70 81 ...value,
71 82 componentInfo: { ...(props.defaultConfig || {}), ...componentInfo },
72 83 });
... ... @@ -90,6 +101,7 @@
90 101 });
91 102 await nextTick();
92 103 (dataSourceEl[copyRecordId] as FormActionType).setFieldsValue(value);
  104 + (dataSourceEl[copyRecordId] as FormActionType).clearValidate();
93 105 };
94 106
95 107 const [registerVisualOptionModal, { openModal }] = useModal();
... ... @@ -128,6 +140,7 @@
128 140
129 141 const echoDataSource = () => {
130 142 basicMethod.setFieldsValue(props.record.record);
  143 + basicMethod.clearValidate();
131 144 dataSource.value = [];
132 145 dataSource.value = props.record.record.dataSource.map((item) => {
133 146 const id = buildUUID();
... ... @@ -139,6 +152,7 @@
139 152
140 153 nextTick(() => {
141 154 (dataSourceEl[id] as FormActionType).setFieldsValue(item);
  155 + (dataSourceEl[id] as FormActionType).clearValidate();
142 156 });
143 157 return {
144 158 id,
... ... @@ -165,6 +179,7 @@
165 179
166 180 defineExpose({
167 181 getAllDataSourceFieldValue,
  182 + validate,
168 183 });
169 184 </script>
170 185
... ...
... ... @@ -44,6 +44,7 @@
44 44
45 45 const basicConfigurationEl = ref<{
46 46 getAllDataSourceFieldValue: Fn<any, Recordable>;
  47 + validate: Fn;
47 48 }>();
48 49
49 50 const resetForm = () => {
... ... @@ -53,8 +54,9 @@
53 54 componentDefaultConfig.value = {};
54 55 };
55 56
56   - const handleSubmit = () => {
57   - const { getAllDataSourceFieldValue } = unref(basicConfigurationEl)!;
  57 + const handleSubmit = async () => {
  58 + const { getAllDataSourceFieldValue, validate } = unref(basicConfigurationEl)!;
  59 + await validate();
58 60 const value = getAllDataSourceFieldValue();
59 61 unref(isEdit) ? handleUpdateComponent(value) : handleAddComponent(value);
60 62 resetForm();
... ...
... ... @@ -32,6 +32,7 @@ export const basicSchema: FormSchema[] = [
32 32 field: BasicConfigField.NAME,
33 33 label: '组件名称',
34 34 component: 'Input',
  35 + rules: [{ required: true, message: '组件名称为必填项' }],
35 36 componentProps: {
36 37 placeholder: '请输入组件名称',
37 38 },
... ... @@ -40,6 +41,7 @@ export const basicSchema: FormSchema[] = [
40 41 field: BasicConfigField.REMARK,
41 42 label: '组件备注',
42 43 component: 'InputTextArea',
  44 + // rules: [{ required: true, message: '组件备注为必填项' }],
43 45 componentProps: {
44 46 placeholder: '请输入组件备注',
45 47 },
... ... @@ -64,6 +66,7 @@ export const dataSourceSchema: FormSchema[] = [
64 66 component: 'ApiTreeSelect',
65 67 label: '组织',
66 68 colProps: { span: 8 },
  69 + rules: [{ required: true, message: '组织为必填项' }],
67 70 componentProps({ formActionType }) {
68 71 const { setFieldsValue } = formActionType;
69 72 return {
... ... @@ -90,6 +93,7 @@ export const dataSourceSchema: FormSchema[] = [
90 93 component: 'ApiSelect',
91 94 label: '设备',
92 95 colProps: { span: 8 },
  96 + rules: [{ required: true, message: '设备名称为必填项' }],
93 97 componentProps({ formModel, formActionType }) {
94 98 const { setFieldsValue } = formActionType;
95 99 const organizationId = formModel[DataSourceField.ORIGINATION_ID];
... ... @@ -126,6 +130,7 @@ export const dataSourceSchema: FormSchema[] = [
126 130 label: '网关子设备',
127 131 component: 'ApiSelect',
128 132 colProps: { span: 8 },
  133 + rules: [{ required: true, message: '网关子设备为必填项' }],
129 134 ifShow({ model }) {
130 135 return model[DataSourceField.IS_GATEWAY_DEVICE];
131 136 },
... ... @@ -168,6 +173,7 @@ export const dataSourceSchema: FormSchema[] = [
168 173 component: 'ApiSelect',
169 174 label: '属性',
170 175 colProps: { span: 8 },
  176 + rules: [{ required: true, message: '属性为必填项' }],
171 177 componentProps({ formModel }) {
172 178 const organizationId = formModel[DataSourceField.ORIGINATION_ID];
173 179 const isGatewayDevice = formModel[DataSourceField.IS_GATEWAY_DEVICE];
... ...
... ... @@ -177,21 +177,23 @@
177 177 openModal(true, { isEdit: false });
178 178 };
179 179
  180 + const getLayoutInfo = () => {
  181 + return unref(dataBoardList).map((item) => {
  182 + return {
  183 + id: item.i,
  184 + h: item.h,
  185 + w: item.w,
  186 + x: item.x,
  187 + y: item.y,
  188 + } as Layout;
  189 + });
  190 + };
  191 +
180 192 const handleSaveLayoutInfo = async () => {
181 193 try {
182   - const layoutInfo = unref(dataBoardList).map((item) => {
183   - return {
184   - id: item.i,
185   - h: item.h,
186   - w: item.w,
187   - x: item.x,
188   - y: item.y,
189   - } as Layout;
190   - });
191   -
192 194 await updateDataBoardLayout({
193 195 boardId: unref(getBoardId),
194   - layout: layoutInfo,
  196 + layout: getLayoutInfo(),
195 197 });
196 198 } catch (error) {}
197 199 };
... ... @@ -231,7 +233,6 @@
231 233
232 234 if (!data.data.componentData) {
233 235 dataBoardList.value = [];
234   - console.log(unref(dataBoardList));
235 236 return;
236 237 }
237 238 dataBoardList.value = data.data.componentData.map((item) => {
... ... @@ -311,7 +312,7 @@
311 312 const handleCopy = async (id: string) => {
312 313 const record = unref(dataBoardList).find((item) => item.i === id);
313 314 try {
314   - await addDataComponent({
  315 + const data = await addDataComponent({
315 316 boardId: unref(getBoardId),
316 317 record: {
317 318 dataBoardId: unref(getBoardId),
... ... @@ -320,14 +321,31 @@
320 321 },
321 322 });
322 323 createMessage.success('复制成功');
323   - getDataBoardComponent();
  324 + const _id = data.data.id;
  325 + const layoutInfo = getLayoutInfo();
  326 +
  327 + layoutInfo.push({
  328 + id: _id,
  329 + h: record?.h,
  330 + w: record?.w,
  331 + x: record?.x,
  332 + y: record?.y,
  333 + } as Layout);
  334 +
  335 + await updateDataBoardLayout({
  336 + boardId: unref(getBoardId),
  337 + layout: layoutInfo,
  338 + });
  339 +
  340 + await getDataBoardComponent();
324 341 } catch (error) {}
325 342 };
326 343
327 344 const handleDelete = async (id: string) => {
328 345 try {
329   - await deleteDataComponent([id]);
  346 + await deleteDataComponent(id);
330 347 createMessage.success('删除成功');
  348 + await handleSaveLayoutInfo();
331 349 await getDataBoardComponent();
332 350 } catch (error) {
333 351 // createMessage.error('删除失败');
... ...