| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <view class="common-upload"> |
| | | <u-upload |
| | | :fileList="internalFileList" |
| | | @afterRead="afterRead" |
| | | @delete="deleteFile" |
| | | :name="name" |
| | | :multiple="multiple" |
| | | :maxCount="maxCount" |
| | | :accept="accept" |
| | | :disabled="disabled" |
| | | ></u-upload> |
| | | </view> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, watch, onMounted } from 'vue'; |
| | | import { getToken } from "@/utils/auth"; |
| | | import config from "@/config"; |
| | | |
| | | const props = defineProps({ |
| | | // ç¶ç»ä»¶ä¼ å
¥çæä»¶å表ï¼å¯¹åºå端åå¨ç对象åè¡¨ï¼ |
| | | modelValue: { |
| | | type: Array, |
| | | default: () => [] |
| | | }, |
| | | // æå¤§ä¸ä¼ æ°é |
| | | maxCount: { |
| | | type: Number, |
| | | default: 9 |
| | | }, |
| | | // æ¯å¦æ¯æå¤é |
| | | multiple: { |
| | | type: Boolean, |
| | | default: true |
| | | }, |
| | | // æ¥åçæä»¶ç±»å |
| | | accept: { |
| | | type: String, |
| | | default: 'image' |
| | | }, |
| | | // ä¸ä¼ æ¥å£å¯¹åºçåæ°å |
| | | name: { |
| | | type: String, |
| | | default: 'file' |
| | | }, |
| | | // æ¯å¦ç¦ç¨ |
| | | disabled: { |
| | | type: Boolean, |
| | | default: false |
| | | } |
| | | }); |
| | | |
| | | const emit = defineEmits(['update:modelValue']); |
| | | |
| | | // ç¨äº u-upload æ¾ç¤ºçå
é¨å表 |
| | | const internalFileList = ref([]); |
| | | |
| | | // çå¬å¤é¨ modelValue ååï¼åæ¥å°å
鍿¾ç¤ºå表 |
| | | watch(() => props.modelValue, (newVal) => { |
| | | if (newVal) { |
| | | internalFileList.value = newVal.map(item => ({ |
| | | ...item, |
| | | url: item.url || item.previewURL, |
| | | status: 'success', |
| | | message: '' |
| | | })); |
| | | } |
| | | }, { immediate: true, deep: true }); |
| | | |
| | | const showToast = (message) => { |
| | | uni.showToast({ |
| | | title: message, |
| | | icon: "none", |
| | | }); |
| | | }; |
| | | |
| | | // ä¸ä¼ é»è¾ |
| | | const uploadFilePromise = (url) => { |
| | | return new Promise((resolve, reject) => { |
| | | uni.uploadFile({ |
| | | url: config.baseUrl + "/common/upload", |
| | | filePath: url, |
| | | name: "files", // 注æï¼è¿éæ ¹æ®åä»£ç æ¯ "files" |
| | | header: { |
| | | Authorization: "Bearer " + getToken(), |
| | | }, |
| | | success: (res) => { |
| | | try { |
| | | const data = JSON.parse(res.data); |
| | | if (data.code === 200) { |
| | | // 妿è¿åçæ¯æ°ç»ï¼å第ä¸ä¸ªå
ç´ |
| | | const resultData = Array.isArray(data.data) ? data.data[0] : data.data; |
| | | |
| | | // å¤ç url èµå¼ |
| | | if (!resultData.url && resultData.previewURL) { |
| | | resultData.url = resultData.previewURL; |
| | | } |
| | | // å
¼å®¹å代ç ä¸ç name èµå¼ |
| | | if (!resultData.name && resultData.originalFilename) { |
| | | resultData.name = resultData.originalFilename; |
| | | } |
| | | |
| | | resolve(resultData); |
| | | } else { |
| | | reject(data.msg || "ä¸ä¼ 失败"); |
| | | } |
| | | } catch (e) { |
| | | reject("è§£æååºå¤±è´¥"); |
| | | } |
| | | }, |
| | | fail: (err) => { |
| | | reject(err); |
| | | }, |
| | | }); |
| | | }); |
| | | }; |
| | | |
| | | // ä¸ä¼ åçå¤ç |
| | | const afterRead = async (event) => { |
| | | let lists = [].concat(event.file); |
| | | let currentModelValue = [...props.modelValue]; |
| | | |
| | | // å
å¨å
é¨åè¡¨ä¸æ·»å å ä½ï¼ä¸ä¼ ä¸ç¶æï¼ |
| | | lists.forEach(item => { |
| | | internalFileList.value.push({ |
| | | ...item, |
| | | status: 'uploading', |
| | | message: 'ä¸ä¼ ä¸' |
| | | }); |
| | | }); |
| | | |
| | | for (let i = 0; i < lists.length; i++) { |
| | | try { |
| | | const result = await uploadFilePromise(lists[i].url); |
| | | |
| | | // æ´æ° modelValue |
| | | currentModelValue.push(result); |
| | | emit('update:modelValue', currentModelValue); |
| | | |
| | | } catch (e) { |
| | | // 妿ä¸ä¼ 失败ï¼ä»å
é¨å表ä¸ç§»é¤åææ·»å ç项 |
| | | const errorIndex = internalFileList.value.findIndex(item => item.status === 'uploading'); |
| | | if (errorIndex > -1) { |
| | | internalFileList.value.splice(errorIndex, 1); |
| | | } |
| | | showToast(typeof e === "string" ? e : "ä¸ä¼ 失败"); |
| | | } |
| | | } |
| | | }; |
| | | |
| | | // å é¤å¤ç |
| | | const deleteFile = (event) => { |
| | | const newList = [...props.modelValue]; |
| | | newList.splice(event.index, 1); |
| | | emit('update:modelValue', newList); |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .common-upload { |
| | | width: 100%; |
| | | } |
| | | </style> |
| | |
| | | <u-form-item label="å¾çéä»¶" |
| | | prop="storageBlobDTOs" |
| | | border-bottom> |
| | | <u-upload :fileList="fileList" |
| | | @afterRead="afterRead" |
| | | @delete="deleteFile" |
| | | name="file" |
| | | multiple |
| | | :maxCount="9" |
| | | accept="image"></u-upload> |
| | | <CommonUpload v-model="form.storageBlobDTOs" /> |
| | | </u-form-item> |
| | | </u-cell-group> |
| | | <!-- æäº¤æé® --> |
| | |
| | | import { ref, computed, onMounted, onUnmounted } from "vue"; |
| | | import { onShow, onLoad } from "@dcloudio/uni-app"; |
| | | import PageHeader from "@/components/PageHeader.vue"; |
| | | import CommonUpload from "@/components/CommonUpload.vue"; |
| | | import { getDeviceLedger } from "@/api/equipmentManagement/ledger"; |
| | | import { |
| | | addRepair, |
| | |
| | | } from "@/api/equipmentManagement/repair"; |
| | | import dayjs from "dayjs"; |
| | | import { formatDateToYMD } from "@/utils/ruoyi"; |
| | | import { getToken } from "@/utils/auth"; |
| | | import config from "@/config"; |
| | | const showToast = message => { |
| | | uni.showToast({ |
| | | title: message, |
| | |
| | | storageBlobDTOs: [], // å¾çéä»¶ |
| | | }); |
| | | |
| | | const fileList = ref([]); |
| | | |
| | | // æ¥ä¿®ç¶æé项 |
| | | const repairStatusOptions = ref([ |
| | | { name: "å¾
ç»´ä¿®", value: "0" }, |
| | |
| | | form.value.machineryCategory = data.machineryCategory; |
| | | form.value.remark = data.remark; |
| | | form.value.storageBlobDTOs = data.storageBlobVOs || []; |
| | | // 设置å¾çå表æ¾ç¤º |
| | | if (data.storageBlobVOs && data.storageBlobVOs.length > 0) { |
| | | fileList.value = data.storageBlobVOs.map(item => ({ |
| | | url: item.url, |
| | | name: item.name, |
| | | status: "success", |
| | | message: "", |
| | | })); |
| | | } |
| | | repairStatusText.value = |
| | | repairStatusOptions.value.find(item => item.value == data.status) |
| | | ?.name || ""; |
| | |
| | | form.value.repairTime = formatDateToYMD(e.value); |
| | | pickerDateValue.value = dayjs(e.value).format("YYYY-MM-DD"); |
| | | showDate.value = false; |
| | | }; |
| | | |
| | | // å¾çä¸ä¼ åçå¤ç |
| | | const afterRead = async event => { |
| | | // å½è®¾ç½® mutiple 为 true æ¶, file 为æ°ç»æ ¼å¼ï¼å¦åä¸ºå¯¹è±¡æ ¼å¼ |
| | | let lists = [].concat(event.file); |
| | | let fileListLen = fileList.value.length; |
| | | lists.map(item => { |
| | | fileList.value.push({ |
| | | ...item, |
| | | status: "uploading", |
| | | message: "ä¸ä¼ ä¸", |
| | | }); |
| | | }); |
| | | for (let i = 0; i < lists.length; i++) { |
| | | try { |
| | | const result = await uploadFilePromise(lists[i].url); |
| | | let item = fileList.value[fileListLen]; |
| | | fileList.value.splice( |
| | | fileListLen, |
| | | 1, |
| | | Object.assign(item, { |
| | | status: "success", |
| | | message: "", |
| | | url: result.url, |
| | | name: result.name, |
| | | }) |
| | | ); |
| | | // 忥å°è¡¨åæ°æ® |
| | | form.value.storageBlobDTOs.push(result); |
| | | fileListLen++; |
| | | } catch (e) { |
| | | let item = fileList.value[fileListLen]; |
| | | fileList.value.splice( |
| | | fileListLen, |
| | | 1, |
| | | Object.assign(item, { |
| | | status: "failed", |
| | | message: "ä¸ä¼ 失败", |
| | | }) |
| | | ); |
| | | showToast(typeof e === "string" ? e : "ä¸ä¼ 失败"); |
| | | } |
| | | } |
| | | }; |
| | | |
| | | const uploadFilePromise = url => { |
| | | return new Promise((resolve, reject) => { |
| | | uni.uploadFile({ |
| | | url: config.baseUrl + "/common/upload", |
| | | filePath: url, |
| | | name: "files", |
| | | header: { |
| | | Authorization: "Bearer " + getToken(), |
| | | }, |
| | | success: res => { |
| | | try { |
| | | const data = JSON.parse(res.data); |
| | | if (data.code === 200) { |
| | | // 妿è¿åçæ¯æ°ç»ï¼å第ä¸ä¸ªå
ç´ ï¼é¿å
åµå¥æ°ç» |
| | | const resultData = Array.isArray(data.data) |
| | | ? data.data[0] |
| | | : data.data; |
| | | |
| | | // 妿 url ä¸ºç©ºä¸ previewURL åå¨ï¼åå¤ç previewURL èµå¼ç» url |
| | | if (!resultData.url && resultData.previewURL) { |
| | | resultData.url = resultData.previewURL; |
| | | } |
| | | resultData.name = resultData.originalFilename; |
| | | |
| | | resolve(resultData); |
| | | } else { |
| | | reject(data.msg || "ä¸ä¼ 失败"); |
| | | } |
| | | } catch (e) { |
| | | reject("è§£æååºå¤±è´¥"); |
| | | } |
| | | }, |
| | | fail: err => { |
| | | reject(err); |
| | | }, |
| | | }); |
| | | }); |
| | | }; |
| | | |
| | | const deleteFile = event => { |
| | | fileList.value.splice(event.index, 1); |
| | | form.value.storageBlobDTOs.splice(event.index, 1); |
| | | }; |
| | | |
| | | onShow(() => { |