| src/api/equipmentManagement/upkeep.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages.json | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages/equipmentManagement/upkeep/fileList.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages/equipmentManagement/upkeep/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/api/equipmentManagement/upkeep.js
@@ -70,3 +70,30 @@ method: "delete", }); }; // æ¥è¯¢ä¿å »ä»»å¡éä»¶å表 export function listMaintenanceTaskFiles(query) { return request({ url: "/maintenanceTaskFile/listPage", method: "get", params: query, }); } // æ°å¢ä¿å »ä»»å¡éä»¶ export function addMaintenanceTaskFile(data) { return request({ url: "/maintenanceTaskFile/add", method: "post", data, }); } // å é¤ä¿å »ä»»å¡éä»¶ export function delMaintenanceTaskFile(id) { return request({ url: "/maintenanceTaskFile/del", method: "delete", data: Array.isArray(id) ? id : [id], }); } src/pages.json
@@ -541,6 +541,13 @@ } }, { "path": "pages/equipmentManagement/upkeep/fileList", "style": { "navigationBarTitleText": "ä¿å »æä»¶ç®¡ç", "navigationStyle": "custom" } }, { "path": "pages/equipmentManagement/inspection/index", "style": { "navigationBarTitleText": "设å¤å·¡æ£", src/pages/equipmentManagement/upkeep/fileList.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,562 @@ <template> <view class="file-list-page"> <!-- 页é¢å¤´é¨ --> <PageHeader title="é件管ç" @back="goBack" /> <!-- éä»¶å表 --> <view class="file-list-container"> <view v-if="fileList.length > 0" class="file-list"> <view v-for="(file, index) in fileList" :key="file.id || index" class="file-item"> <!-- æä»¶å¾æ --> <!-- <view class="file-icon" :class="getFileIconClass(file.fileType)"> <up-icon :name="getFileIcon(file.fileType)" size="24" color="#ffffff" /> </view> --> <!-- æä»¶ä¿¡æ¯ --> <view class="file-info"> <text class="file-name">{{ file.name }}</text> <!-- <text class="file-meta">{{ formatFileSize(file.fileSize) }} · {{ file.uploadTime || file.createTime }}</text> --> </view> <!-- æä½æé® --> <view class="file-actions"> <!-- <u-button size="small" type="primary" plain @click="previewFile(file)">é¢è§</u-button> --> <u-button size="small" type="info" plain @click="downloadFile(file)">ä¸è½½å¹¶é¢è§</u-button> <u-button size="small" type="error" plain @click="confirmDelete(file, index)">å é¤</u-button> </view> </view> </view> <!-- ç©ºç¶æ --> <view v-else class="empty-state"> <up-icon name="document" size="64" color="#c0c4cc" /> <text class="empty-text">ææ éä»¶</text> </view> </view> <!-- <a rel="nofollow" id="downloadLink" href="#" style="display:none;">ä¸è½½ææ¬æä»¶</a> --> <!-- ä¸ä¼ æé® --> <view class="upload-button" @click="chooseFile"> <up-icon name="plus" size="24" color="#ffffff" /> <text class="upload-text">ä¸ä¼ éä»¶</text> </view> </view> </template> <script setup> import { ref, onMounted } from "vue"; import PageHeader from "@/components/PageHeader.vue"; import config from "@/config"; import { getToken } from "@/utils/auth"; // import { saveAs } from "file-saver"; import { listMaintenanceTaskFiles, addMaintenanceTaskFile, delMaintenanceTaskFile, } from "@/api/equipmentManagement/upkeep"; import { blobValidate } from "@/utils/ruoyi"; // éä»¶å表 const fileList = ref([]); // è¿åä¸ä¸é¡µ const goBack = () => { uni.navigateBack(); }; // const request = axios.create({ // baseURL: "URL.com", // adapter: axiosAdapterUniapp, // }); // è·åæä»¶å¾æ const getFileIcon = fileType => { const iconMap = { doc: "document", docx: "document", xls: "grid", xlsx: "grid", pdf: "document", ppt: "copy", pptx: "copy", txt: "document", jpg: "image", jpeg: "image", png: "image", gif: "image", zip: "folder", rar: "folder", }; return iconMap[fileType.toLowerCase()] || "document"; }; // è·åæä»¶å¾æ æ ·å¼ç±» const getFileIconClass = fileType => { const colorMap = { doc: "blue", docx: "blue", xls: "green", xlsx: "green", pdf: "red", ppt: "orange", pptx: "orange", txt: "gray", jpg: "purple", jpeg: "purple", png: "purple", gif: "purple", zip: "yellow", rar: "yellow", }; return colorMap[fileType.toLowerCase()] || "gray"; }; // æ ¼å¼åæä»¶å¤§å° const formatFileSize = bytes => { if (bytes === 0) return "0 B"; const k = 1024; const sizes = ["B", "KB", "MB", "GB"]; const i = Math.floor(Math.log(bytes) / Math.log(k)); return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + " " + sizes[i]; }; // éæ©æä»¶ const chooseFile = () => { uni.chooseImage({ count: 9, sizeType: ["original", "compressed"], sourceType: ["album", "camera"], success: res => { console.log(res, "éæ©å¾çæå"); uploadFiles(res.tempFiles); }, fail: err => { console.error("éæ©å¾ç失败:", err); showToast("éæ©æä»¶å¤±è´¥"); }, }); // uni.chooseFile({ // count: 9, // extension: [ // ".doc", // ".docx", // ".xls", // ".xlsx", // ".pdf", // ".ppt", // ".pptx", // ".txt", // ".jpg", // ".jpeg", // ".png", // ".gif", // ".zip", // ".rar", // ], // success: res => { // console.log(res, "éæ©æä»¶æå"); // uploadFiles(res.tempFiles); // }, // fail: err => { // showToast("éæ©æä»¶å¤±è´¥"); // }, // }); }; // ä¸ä¼ æä»¶ const uploadFiles = tempFiles => { console.log(tempFiles, "ä¸ä¼ æä»¶1"); tempFiles.forEach((tempFile, index) => { // æ¾ç¤ºä¸ä¼ ä¸æç¤º uni.showLoading({ title: "ä¸ä¼ ä¸...", mask: true, }); console.log(tempFile, "ä¸ä¼ æä»¶2"); // 1. ç´æ¥ä½¿ç¨ uni.uploadFile ä¸ä¼ æä»¶ uni.uploadFile({ url: config.baseUrl + "/file/upload", filePath: tempFile.path, name: "file", header: { Authorization: "Bearer " + getToken(), }, success: uploadRes => { uni.hideLoading(); console.log(uploadRes, "ä¸ä¼ æä»¶3"); try { const res = JSON.parse(uploadRes.data); console.log(res, "ä¸ä¼ æä»¶4"); if (res.code === 200) { // 2. æåæä»¶ä¿¡æ¯ const fileName = tempFile.name ? tempFile.name : tempFile.path.split("/").pop(); // const fileType = fileName.split(".").pop(); // 3. æé ä¿åæä»¶ä¿¡æ¯çåæ° const saveData = { name: fileName, deviceMaintenanceId: upkeepId.value, url: res.data.tempPath || "", }; console.log(saveData, "ä¿åæä»¶ä¿¡æ¯åæ°"); // 4. è°ç¨ addRuleFile æ¥å£ä¿åæä»¶ä¿¡æ¯ addMaintenanceTaskFile(saveData) .then(addRes => { if (addRes.code === 200) { // 5. æ·»å å°æä»¶å表 const newFile = { ...addRes.data, uploadTime: new Date().toLocaleString(), }; // fileList.value.push(newFile); getFileList(); showToast("ä¸ä¼ æå"); } else { showToast("ä¿åæä»¶ä¿¡æ¯å¤±è´¥"); } }) .catch(err => { console.error("ä¿åæä»¶ä¿¡æ¯å¤±è´¥:", err); showToast("ä¿åæä»¶ä¿¡æ¯å¤±è´¥"); }); } else { showToast("æä»¶ä¸ä¼ 失败"); } } catch (e) { console.error("è§£æä¸ä¼ ç»æå¤±è´¥:", e); showToast("ä¸ä¼ 失败"); } }, fail: err => { uni.hideLoading(); console.error("ä¸ä¼ 失败:", err); showToast("ä¸ä¼ 失败"); }, }); }); }; // ä¸è½½æä»¶ const downloadFile = file => { var url = config.baseUrl + "/common/download?fileName=" + encodeURIComponent(file.url) + "&delete=true"; console.log(url, "url"); uni .downloadFile({ url: url, responseType: "blob", header: { Authorization: "Bearer " + getToken() }, }) .then(res => { let osType = uni.getStorageSync("deviceInfo").osName; let filePath = res.tempFilePath; if (osType === "ios") { uni.openDocument({ filePath: filePath, showMenu: true, success: res => {}, fail: err => { console.log("uni.openDocument--fail"); reject(err); }, }); } else { uni.saveFile({ tempFilePath: filePath, success: fileRes => { uni.showToast({ icon: "none", mask: true, title: "æä»¶å·²ä¿åï¼Android/data/uni.UNI720216F/apps/__UNI__720216F/" + fileRes.savedFilePath, //ä¿åè·¯å¾ duration: 3000, }); setTimeout(() => { //æå¼ææ¡£æ¥ç uni.openDocument({ filePath: fileRes.savedFilePath, success: function (res) {}, }); }, 1000); }, fail: err => { console.log("uni.save--fail"); reject(err); }, }); } // const isBlob = blobValidate(res.data); // if (isBlob) { // const blob = new Blob([res.data], { type: "text/plain" }); // const url = URL.createObjectURL(blob); // const downloadLink = document.getElementById("downloadLink"); // downloadLink.href = url; // downloadLink.download = file.name; // downloadLink.click(); // showToast("ä¸è½½æå"); // } else { // showToast("ä¸è½½å¤±è´¥"); // } }) .catch(err => { console.error("ä¸è½½å¤±è´¥:", err); showToast("ä¸è½½å¤±è´¥"); }); }; // 确认å é¤ const confirmDelete = (file, index) => { uni.showModal({ title: "å é¤ç¡®è®¤", content: `ç¡®å®è¦å é¤éä»¶ "${file.name}" åï¼`, success: res => { if (res.confirm) { deleteFile(file.id, index); } }, }); }; // å 餿件 const deleteFile = (fileId, index) => { uni.showLoading({ title: "å é¤ä¸...", mask: true, }); delMaintenanceTaskFile([fileId]) .then(res => { uni.hideLoading(); if (res.code === 200) { // fileList.value.splice(index, 1); getFileList(); showToast("å 餿å"); } else { showToast("å é¤å¤±è´¥"); } }) .catch(err => { uni.hideLoading(); showToast("å é¤å¤±è´¥"); }); }; // æ¾ç¤ºæç¤º const showToast = message => { uni.showToast({ title: message, icon: "none", }); }; const rulesRegulationsManagementId = ref(""); const upkeepId = ref(""); // 页é¢å è½½æ¶ onMounted(() => { // ä» API è·åéä»¶å表 // 仿¬å°åå¨è·å rulesRegulationsManagementId rulesRegulationsManagementId.value = uni.getStorageSync( "rulesRegulationsManagement" ); upkeepId.value = uni.getStorageSync("upkeepId"); getFileList(); }); // è·åéä»¶å表 const getFileList = () => { uni.showLoading({ title: "å è½½ä¸...", mask: true, }); listMaintenanceTaskFiles({ current: 1, size: 100, deviceMaintenanceId: upkeepId.value, rulesRegulationsManagementId: upkeepId.value, }) .then(res => { uni.hideLoading(); if (res.code === 200) { fileList.value = res.data.records || []; } else { showToast("è·åéä»¶å表失败"); } }) .catch(err => { uni.hideLoading(); showToast("è·åéä»¶å表失败"); }); }; </script> <style scoped lang="scss"> @import "../../../styles/sales-common.scss"; .file-list-page { min-height: 100vh; background: #f8f9fa; padding-bottom: 100rpx; } .file-list-container { padding: 20rpx; } .file-list { background: #ffffff; border-radius: 8rpx; overflow: hidden; box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05); } .file-item { display: flex; align-items: center; padding: 20rpx; border-bottom: 1rpx solid #f0f0f0; &:last-child { border-bottom: none; } } .file-icon { width: 56rpx; height: 56rpx; border-radius: 8rpx; display: flex; justify-content: center; align-items: center; margin-right: 20rpx; &.blue { background: #409eff; } &.green { background: #67c23a; } &.red { background: #f56c6c; } &.orange { background: #e6a23c; } &.gray { background: #909399; } &.purple { background: #909399; } &.yellow { background: #e6a23c; } } .file-info { flex: 1; min-width: 0; } .file-name { display: block; font-size: 16px; color: #303133; margin-bottom: 8rpx; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .file-meta { display: block; font-size: 12px; color: #909399; } .file-actions { display: flex; gap: 12rpx; } .empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 100rpx 0; background: #ffffff; border-radius: 8rpx; box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05); } .empty-text { font-size: 14px; color: #909399; margin-top: 20rpx; } .upload-button { position: fixed; bottom: 40rpx; right: 40rpx; width: 130rpx; height: 130rpx; border-radius: 50%; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); display: flex; flex-direction: column; justify-content: center; align-items: center; box-shadow: 0 4rpx 16rpx rgba(102, 126, 234, 0.4); z-index: 1000; } .upload-text { font-size: 10px; color: #ffffff; margin-top: 4rpx; } .upload-progress { padding: 40rpx 0; } .upload-progress-text { display: block; text-align: center; margin-top: 20rpx; font-size: 14px; color: #606266; } </style> src/pages/equipmentManagement/upkeep/index.vue
@@ -1,44 +1,50 @@ <template> <view class="sales-account"> <!-- 使ç¨éç¨é¡µé¢å¤´é¨ç»ä»¶ --> <PageHeader title="设å¤ä¿å »" @back="goBack" /> <PageHeader title="设å¤ä¿å »" @back="goBack" /> <!-- æç´¢åºå --> <view class="search-section"> <view class="search-bar"> <view class="search-input"> <up-input class="search-text" <up-input class="search-text" placeholder="请è¾å ¥è®¾å¤åç§°æç´¢" v-model="searchKeyword" @change="getList" clearable /> clearable /> </view> <view class="filter-button" @click="getList"> <up-icon name="search" size="24" color="#999"></up-icon> <view class="filter-button" @click="getList"> <up-icon name="search" size="24" color="#999"></up-icon> </view> </view> </view> <!-- 设å¤ä¿å »å表 --> <view class="ledger-list" v-if="upkeepList.length > 0"> <view v-for="(item, index) in upkeepList" :key="index"> <view class="ledger-item" @click="toggleSelection(item)"> <view class="ledger-list" v-if="upkeepList.length > 0"> <view v-for="(item, index) in upkeepList" :key="index"> <view class="ledger-item" @click="toggleSelection(item)"> <view class="item-header"> <view class="item-left"> <view class="document-icon"> <up-icon name="file-text" size="16" color="#ffffff"></up-icon> <up-icon name="file-text" size="16" color="#ffffff"></up-icon> </view> <text class="item-id">设å¤åç§°ï¼{{ item.deviceName }}</text> </view> <view class="status-tag"> <u-tag v-if="item.status === 1" type="success">å®ç»</u-tag> <u-tag v-if="item.status === 0" type="error">å¾ ä¿å »</u-tag> <u-tag v-if="item.status === 1" type="success">å®ç»</u-tag> <u-tag v-if="item.status === 0" type="error">å¾ ä¿å »</u-tag> </view> </view> <up-divider></up-divider> <view class="item-details"> <view class="detail-row"> <text class="detail-label">è§æ ¼åå·</text> @@ -67,130 +73,143 @@ <view class="detail-row"> <text class="detail-label">ä¿å »ç»æ</text> <view class="detail-value"> <u-tag v-if="item.maintenanceResult === 1" type="success" size="mini"> <u-tag v-if="item.maintenanceResult === 1" type="success" size="mini"> å®å¥½ </u-tag> <u-tag v-if="item.maintenanceResult === 0" type="error" size="mini"> <u-tag v-if="item.maintenanceResult === 0" type="error" size="mini"> ç»´ä¿® </u-tag> <text v-if="item.maintenanceResult === undefined || item.maintenanceResult === null">-</text> </view> </view> </view> <!-- æé®åºå --> <view class="action-buttons"> <u-button type="primary" <u-button type="primary" size="small" class="action-btn" :disabled="item.status === 1" @click.stop="edit(item.id)" > @click.stop="edit(item.id)"> ç¼è¾ </u-button> <u-button type="warning" <u-button type="warning" size="small" class="action-btn" :disabled="item.status === 1" @click.stop="addMaintain(item.id)" > @click.stop="addMaintain(item.id)"> ä¿å » </u-button> <u-button type="error" <u-button type="error" size="small" plain class="action-btn" @click.stop="delUpkeepByIds(item.id)" > @click.stop="delUpkeepByIds(item.id)"> å é¤ </u-button> <u-button type="warning" size="small" class="action-btn" @click.stop="addFile(item.id)"> éä»¶ </u-button> </view> </view> </view> </view> <view v-else class="no-data"> <view v-else class="no-data"> <text>ææ è®¾å¤ä¿å »æ°æ®</text> </view> <!-- æµ®å¨æ°å¢æé® --> <view class="fab-button" @click="addPlan"> <up-icon name="plus" size="24" color="#ffffff"></up-icon> <view class="fab-button" @click="addPlan"> <up-icon name="plus" size="24" color="#ffffff"></up-icon> </view> </view> </template> <script setup> import { ref, onMounted } from 'vue' import { onShow } from '@dcloudio/uni-app' import PageHeader from '@/components/PageHeader.vue' import { getUpkeepPage, delUpkeep } from '@/api/equipmentManagement/upkeep' import useUserStore from "@/store/modules/user" import { ref, onMounted } from "vue"; import { onShow } from "@dcloudio/uni-app"; import PageHeader from "@/components/PageHeader.vue"; import { getUpkeepPage, delUpkeep } from "@/api/equipmentManagement/upkeep"; import useUserStore from "@/store/modules/user"; // æ¾ç¤ºæç¤ºä¿¡æ¯ const showToast = (message) => { const showToast = message => { uni.showToast({ title: message, icon: 'none' }) icon: "none", }); }; import dayjs from "dayjs" import dayjs from "dayjs"; const userStore = useUserStore() const userStore = useUserStore(); // æç´¢å ³é®è¯ const searchKeyword = ref('') const searchKeyword = ref(""); // 设å¤ä¿å »æ°æ® const upkeepList = ref([]) const upkeepList = ref([]); // å¤éå表 const multipleList = ref([]) const multipleList = ref([]); // è¿åä¸ä¸é¡µ const goBack = () => { uni.navigateBack() } uni.navigateBack(); }; // æ ¼å¼åæ¥æ const formatDate = (dateStr) => { if (!dateStr) return '' return dayjs(dateStr).format("YYYY-MM-DD") } const formatDate = dateStr => { if (!dateStr) return ""; return dayjs(dateStr).format("YYYY-MM-DD"); }; // æ ¼å¼åæ¥ææ¶é´ const formatDateTime = (dateStr) => { if (!dateStr) return '' return dayjs(dateStr).format("YYYY-MM-DD HH:mm:ss") } const formatDateTime = dateStr => { if (!dateStr) return ""; return dayjs(dateStr).format("YYYY-MM-DD HH:mm:ss"); }; // æ¥è¯¢å表 const getList = () => { showLoadingToast('å è½½ä¸...') showLoadingToast("å è½½ä¸..."); const params = { current: -1, size: -1, deviceName: searchKeyword.value || undefined } deviceName: searchKeyword.value || undefined, }; getUpkeepPage(params) .then((res) => { .then(res => { // 妿res.data䏿¯æ°ç»ï¼è®¾ç½®ä¸ºç©ºæ°ç» upkeepList.value = res.records || res.data?.records || [] closeToast() upkeepList.value = res.records || res.data?.records || []; closeToast(); }) .catch(() => { closeToast() showToast('è·åæ°æ®å¤±è´¥') }) } closeToast(); showToast("è·åæ°æ®å¤±è´¥"); }); }; // æ°å¢éä»¶ - 跳转å°éä»¶é¡µé¢ const addFile = id => { // ä½¿ç¨æ¬å°åå¨ä¼ éid uni.setStorageSync("upkeepId", id); uni.navigateTo({ url: "/pages/equipmentManagement/upkeep/fileList", }); }; // æ¾ç¤ºå è½½æç¤º const showLoadingToast = (message) => { const showLoadingToast = message => { uni.showLoading({ title: message, mask: true mask: true, }); }; @@ -200,96 +219,98 @@ }; // åæ¢éæ©ç¶æ const toggleSelection = (item) => { const index = multipleList.value.findIndex(selected => selected.id === item.id) const toggleSelection = item => { const index = multipleList.value.findIndex( selected => selected.id === item.id ); if (index > -1) { multipleList.value.splice(index, 1) multipleList.value.splice(index, 1); } else { multipleList.value.push(item) multipleList.value.push(item); } } }; // æ£æ¥æ¯å¦å·²éæ© const isSelected = (item) => { return multipleList.value.some(selected => selected.id === item.id) } const isSelected = item => { return multipleList.value.some(selected => selected.id === item.id); }; // æ°å¢ä¿å » - 跳转å°ä¿å »é¡µé¢ const addMaintain = (id) => { const addMaintain = id => { if (!id && multipleList.value.length !== 1) { showToast('è¯·éæ©ä¸æ¡è®°å½') return showToast("è¯·éæ©ä¸æ¡è®°å½"); return; } const targetId = id || multipleList.value[0].id const targetId = id || multipleList.value[0].id; // ä½¿ç¨æ¬å°åå¨ä¼ éid uni.setStorageSync('repairId', targetId) uni.setStorageSync("repairId", targetId); uni.navigateTo({ url: '/pages/equipmentManagement/upkeep/maintain' }) } url: "/pages/equipmentManagement/upkeep/maintain", }); }; // æ°å¢è®¡å - è·³è½¬å°æ°å¢é¡µé¢ const addPlan = () => { uni.navigateTo({ url: '/pages/equipmentManagement/upkeep/add' }) } url: "/pages/equipmentManagement/upkeep/add", }); }; // ç¼è¾ - 跳转å°add页é¢ï¼éè¿idåºåæ°å¢è¿æ¯ç¼è¾ const edit = (id) => { if (!id) return const edit = id => { if (!id) return; // ä½¿ç¨æ¬å°åå¨ä¼ éid uni.setStorageSync('repairId', id) uni.setStorageSync("repairId", id); uni.navigateTo({ url: '/pages/equipmentManagement/upkeep/add' }) } url: "/pages/equipmentManagement/upkeep/add", }); }; // å é¤ä¿å »æ°æ® const delUpkeepByIds = async (ids) => { const deleteIds = Array.isArray(ids) ? ids : [ids] const delUpkeepByIds = async ids => { const deleteIds = Array.isArray(ids) ? ids : [ids]; if (deleteIds.length === 0) { showToast('è¯·éæ©è¦å é¤çè®°å½') return showToast("è¯·éæ©è¦å é¤çè®°å½"); return; } uni.showModal({ title: 'è¦å', content: '确认å é¤ä¿å »æ°æ®, æ¤æä½ä¸å¯é?', confirmText: 'ç¡®å®', cancelText: 'åæ¶', success: async (res) => { if (!res.confirm) return title: "è¦å", content: "确认å é¤ä¿å »æ°æ®, æ¤æä½ä¸å¯é?", confirmText: "ç¡®å®", cancelText: "åæ¶", success: async res => { if (!res.confirm) return; try { // é个å é¤ for (const id of deleteIds) { const response = await delUpkeep(id) const response = await delUpkeep(id); if (response.code !== 200) { showToast('å é¤å¤±è´¥') return showToast("å é¤å¤±è´¥"); return; } } showToast('å 餿å') multipleList.value = [] getList() showToast("å 餿å"); multipleList.value = []; getList(); } catch (e) { showToast('å é¤å¤±è´¥') showToast("å é¤å¤±è´¥"); } } }) } }, }); }; onMounted(() => { getList() }) getList(); }); onShow(() => { getList() }) getList(); }); </script> <style scoped lang="scss"> @import '@/styles/sales-common.scss'; @import "@/styles/sales-common.scss"; // 设å¤ä¿å »ç¹ææ ·å¼ .sales-account {