Commit 5b2888aafa0f2a0eb48eba8391ca9a0882276c23

Authored by fengwotao
1 parent 6c08bd8b

fix: DEFECT-1644 所有可以上传图片的都需要预览个删除按钮

@@ -12,6 +12,9 @@ import ObjectModelValidateForm from '/@/components/Form/src/externalCompns/compo @@ -12,6 +12,9 @@ import ObjectModelValidateForm from '/@/components/Form/src/externalCompns/compo
12 import { CommandDeliveryWayEnum, ServiceCallTypeEnum } from '/@/enums/toolEnum'; 12 import { CommandDeliveryWayEnum, ServiceCallTypeEnum } from '/@/enums/toolEnum';
13 import { TaskTypeEnum } from '/@/views/task/center/config'; 13 import { TaskTypeEnum } from '/@/views/task/center/config';
14 import { AddressTypeEnum } from '/@/views/task/center/components/PollCommandInput'; 14 import { AddressTypeEnum } from '/@/views/task/center/components/PollCommandInput';
  15 +import { FileItem } from '/@/components/Form/src/components/ApiUpload.vue';
  16 +import { createImgPreview } from '/@/components/Preview';
  17 +import { uploadThumbnail } from '/@/api/configuration/center/configurationCenter';
15 18
16 useComponentRegister('JSONEditor', JSONEditor); 19 useComponentRegister('JSONEditor', JSONEditor);
17 useComponentRegister('ObjectModelValidateForm', ObjectModelValidateForm); 20 useComponentRegister('ObjectModelValidateForm', ObjectModelValidateForm);
@@ -29,8 +32,33 @@ export const step1Schemas: FormSchema[] = [ @@ -29,8 +32,33 @@ export const step1Schemas: FormSchema[] = [
29 { 32 {
30 field: 'icon', 33 field: 'icon',
31 label: '设备图片', 34 label: '设备图片',
32 - slot: 'iconSelect',  
33 - component: 'Input', 35 + component: 'ApiUpload',
  36 + changeEvent: 'update:fileList',
  37 + valueField: 'fileList',
  38 + componentProps: () => {
  39 + return {
  40 + listType: 'picture-card',
  41 + maxFileLimit: 1,
  42 + accept: '.png,.jpg,.jpeg,.gif',
  43 + api: async (file: File) => {
  44 + try {
  45 + const formData = new FormData();
  46 + formData.set('file', file);
  47 + const { fileStaticUri, fileName } = await uploadThumbnail(formData);
  48 + return {
  49 + uid: fileStaticUri,
  50 + name: fileName,
  51 + url: fileStaticUri,
  52 + } as FileItem;
  53 + } catch (error) {
  54 + return {};
  55 + }
  56 + },
  57 + onPreview: (fileList: FileItem) => {
  58 + createImgPreview({ imageList: [fileList.url!] });
  59 + },
  60 + };
  61 + },
34 }, 62 },
35 { 63 {
36 field: 'alias', 64 field: 'alias',
@@ -157,7 +157,7 @@ @@ -157,7 +157,7 @@
157 sn: stepRecord.name, 157 sn: stepRecord.name,
158 customerId: currentDeviceData.customerId, 158 customerId: currentDeviceData.customerId,
159 deviceInfo: { 159 deviceInfo: {
160 - avatar: DeviceStep1Ref.value?.devicePic, 160 + avatar: stepRecord?.icon,
161 ...DeviceStep1Ref.value?.devicePositionState, 161 ...DeviceStep1Ref.value?.devicePositionState,
162 }, 162 },
163 }; 163 };
@@ -169,7 +169,7 @@ @@ -169,7 +169,7 @@
169 ...stepRecord, 169 ...stepRecord,
170 sn: stepRecord.name, 170 sn: stepRecord.name,
171 deviceInfo: { 171 deviceInfo: {
172 - avatar: DeviceStep1Ref.value?.devicePic, 172 + avatar: stepRecord?.icon,
173 ...DeviceStep1Ref.value?.devicePositionState, 173 ...DeviceStep1Ref.value?.devicePositionState,
174 }, 174 },
175 deviceToken: 175 deviceToken:
@@ -22,24 +22,6 @@ @@ -22,24 +22,6 @@
22 </div> 22 </div>
23 </div> 23 </div>
24 </template> 24 </template>
25 - <template #iconSelect>  
26 - <Upload  
27 - name="avatar"  
28 - accept=".png,.jpg,.jpeg,.gif"  
29 - :show-upload-list="false"  
30 - list-type="picture-card"  
31 - class="avatar-uploader"  
32 - :customRequest="customUpload"  
33 - :before-upload="beforeUpload"  
34 - >  
35 - <img v-if="devicePic" :src="devicePic" alt="avatar" />  
36 - <div v-else>  
37 - <LoadingOutlined v-if="loading" />  
38 - <PlusOutlined v-else />  
39 - <div class="ant-upload-text">图片上传</div>  
40 - </div>  
41 - </Upload>  
42 - </template>  
43 <template #snCode="{ model, field }"> 25 <template #snCode="{ model, field }">
44 <div class="flex"> 26 <div class="flex">
45 <Input v-model:value="model[field]" placeholder="请输入设备名称" /> 27 <Input v-model:value="model[field]" placeholder="请输入设备名称" />
@@ -115,10 +97,9 @@ @@ -115,10 +97,9 @@
115 import { BasicForm, useForm } from '/@/components/Form'; 97 import { BasicForm, useForm } from '/@/components/Form';
116 import { step1Schemas } from '../../config/data'; 98 import { step1Schemas } from '../../config/data';
117 import { useScript } from '/@/hooks/web/useScript'; 99 import { useScript } from '/@/hooks/web/useScript';
118 - import { Input, Upload, message, Modal, Form, Row, Col, AutoComplete } from 'ant-design-vue';  
119 - import { EnvironmentTwoTone, PlusOutlined, LoadingOutlined } from '@ant-design/icons-vue'; 100 + import { Input, message, Modal, Form, Row, Col, AutoComplete } from 'ant-design-vue';
  101 + import { EnvironmentTwoTone } from '@ant-design/icons-vue';
120 import { upload } from '/@/api/oss/ossFileUploader'; 102 import { upload } from '/@/api/oss/ossFileUploader';
121 - import { FileItem } from '/@/components/Upload/src/typing';  
122 import { BAI_DU_MAP_URL } from '/@/utils/fnUtils'; 103 import { BAI_DU_MAP_URL } from '/@/utils/fnUtils';
123 import { generateSNCode } from '/@/api/device/deviceManager'; 104 import { generateSNCode } from '/@/api/device/deviceManager';
124 import icon from '/@/assets/images/wz.png'; 105 import icon from '/@/assets/images/wz.png';
@@ -130,21 +111,20 @@ @@ -130,21 +111,20 @@
130 import DeptDrawer from '/@/views/system/organization/OrganizationDrawer.vue'; 111 import DeptDrawer from '/@/views/system/organization/OrganizationDrawer.vue';
131 import { TaskTypeEnum } from '/@/views/task/center/config'; 112 import { TaskTypeEnum } from '/@/views/task/center/config';
132 import { toRaw } from 'vue'; 113 import { toRaw } from 'vue';
  114 + import { FileItem } from '/@/components/Form/src/components/ApiUpload.vue';
  115 + import { buildUUID } from '/@/utils/uuid';
133 116
134 export default defineComponent({ 117 export default defineComponent({
135 components: { 118 components: {
136 BasicForm, 119 BasicForm,
137 Input, 120 Input,
138 AutoComplete, 121 AutoComplete,
139 - Upload,  
140 EnvironmentTwoTone, 122 EnvironmentTwoTone,
141 - PlusOutlined,  
142 Modal, 123 Modal,
143 Form, 124 Form,
144 FormItem: Form.Item, 125 FormItem: Form.Item,
145 Row, 126 Row,
146 Col, 127 Col,
147 - LoadingOutlined,  
148 DeptDrawer, 128 DeptDrawer,
149 }, 129 },
150 props: { 130 props: {
@@ -202,8 +182,11 @@ @@ -202,8 +182,11 @@
202 async function nextStep() { 182 async function nextStep() {
203 try { 183 try {
204 let values = await validate(); 184 let values = await validate();
205 - values = { devicePic: devicePic.value, ...positionState, ...values };  
206 - delete values.icon; 185 + if (Reflect.has(values, 'icon')) {
  186 + const file = (unref(values.icon) || []).at(0) || {};
  187 + values.icon = file.url || null;
  188 + }
  189 + values = { ...positionState, ...values };
207 delete values.deviceAddress; 190 delete values.deviceAddress;
208 emit('next', values); 191 emit('next', values);
209 // 获取输入的数据 192 // 获取输入的数据
@@ -405,6 +388,11 @@ @@ -405,6 +388,11 @@
405 positionState.address = deviceInfo.address; 388 positionState.address = deviceInfo.address;
406 devicePositionState.value = { ...toRaw(positionState) }; 389 devicePositionState.value = { ...toRaw(positionState) };
407 devicePic.value = deviceInfo.avatar; 390 devicePic.value = deviceInfo.avatar;
  391 + if (deviceInfo.avatar) {
  392 + setFieldsValue({
  393 + icon: [{ uid: buildUUID(), name: 'name', url: deviceInfo.avatar } as FileItem],
  394 + });
  395 + }
408 setFieldsValue({ 396 setFieldsValue({
409 ...data, 397 ...data,
410 code: data?.code, 398 code: data?.code,
@@ -414,6 +402,10 @@ @@ -414,6 +402,10 @@
414 // 父组件调用获取字段值的方法 402 // 父组件调用获取字段值的方法
415 function parentGetFieldsValue() { 403 function parentGetFieldsValue() {
416 const value = getFieldsValue(); 404 const value = getFieldsValue();
  405 + if (Reflect.has(value, 'icon')) {
  406 + const file = (value.icon || []).at(0) || {};
  407 + value.icon = file.url || null;
  408 + }
417 return { 409 return {
418 ...value, 410 ...value,
419 ...(value?.code || value?.addressCode 411 ...(value?.code || value?.addressCode