From a2c5def7cf9562312a54216bc195a6ea071a26c5 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期三, 21 一月 2026 17:38:36 +0800
Subject: [PATCH] 2026.1.21
---
component/uploader/uploader.js | 190 +++++++++++++++++++++++++++++++++++++++-------
1 files changed, 159 insertions(+), 31 deletions(-)
diff --git a/component/uploader/uploader.js b/component/uploader/uploader.js
index 21e9e1a..0e1e484 100644
--- a/component/uploader/uploader.js
+++ b/component/uploader/uploader.js
@@ -238,12 +238,24 @@
data: {
currentFiles: [],
showPreview: false,
- previewImageUrls: []
+ previewImageUrls: [],
+ groups: [{
+ text: '閫夋嫨鍥剧墖',
+ value: 0
+ }, {
+ text: '浠庤亰澶╄褰曢�夋嫨鏂囦欢',
+ value: 1
+ }],
},
ready() {},
methods: {
+ showActionSheet() {
+ this.setData({
+ showSheet: true
+ })
+ },
previewImage(e) {
const {
index
@@ -258,15 +270,42 @@
showPreview: true
});
},
+ previewFile(e) {
+ const {
+ index
+ } = e.currentTarget.dataset;
+ const file = this.data.files[index]
+ wx.openDocument({
+ filePath: file.url,
+ });
+ },
+ actionClick(e) {
+ switch (e.detail.value) {
+ case 0:
+ this.chooseImage()
+ break;
+ case 1:
+ this.chooseMessageFile()
+ break;
+ default:
+ this.chooseImage()
+ break;
+ }
+ this.setData({
+ showSheet: false
+ })
+ },
chooseImage() {
if (this.uploading) return;
- wx.chooseImage({
+ wx.chooseMedia({
count: this.data.maxCount - this.data.files.length,
- sizeType:['compressed'],
+ sizeType: ['compressed'],
+ mediaType: ['image'],
success: res => {
console.log('chooseImage resp', res)
// 棣栧厛妫�鏌ユ枃浠跺ぇ灏�
let invalidIndex = -1; // @ts-ignore
+ res.tempFilePaths = res.tempFiles.map(item => item.tempFilePath)
res.tempFiles.forEach((item, index) => {
if (item.size > this.data.maxSize) {
invalidIndex = index;
@@ -287,7 +326,7 @@
}, {});
return;
} // 鑾峰彇鏂囦欢鍐呭
-
+
const mgr = wx.getFileSystemManager();
const contents = res.tempFilePaths.map(item => {
@@ -302,40 +341,23 @@
}; // 瑙﹀彂閫変腑鐨勪簨浠讹紝寮�鍙戣�呮牴鎹唴瀹规潵涓婁紶鏂囦欢锛屼笂浼犱簡鎶婁笂浼犵殑缁撴灉鍙嶉鍒癴iles灞炴�ч噷闈�
this.triggerEvent('select', obj, {});
- // const files = res.tempFilePaths.map((item, i) => ({
- // loading: true,
- // // @ts-ignore
- // url: `data:image/jpg;base64,${wx.arrayBufferToBase64(contents[i])}`
- // }));
- // var locationPath = []
- // res.tempFilePaths.forEach(item =>{
- // wx.getImageInfo({
- // src: item,
- // success(data){
- // console.log(data)
- // locationPath = data.path
- // }
- // })
- // })
-
- let files = res.tempFilePaths.map((item, i) => ({
+
+ let files = res.tempFiles.map((item, i) => ({
loading: true,
- url: item
+ url: item.tempFilePath,
+ type: item.fileType,
}))
//鍘嬬缉鍥剧墖
wx.compressImage({
- src:files[0].url,
- quality:20,
- success(data){
- console.log(data)
+ src: files[0].url,
+ quality: 20,
+ success(data) {
+ console.log('compressImage', data)
},
- fail(){
+ fail() {
}
})
-
-
-
if (!files || !files.length) return;
const newFiles = this.data.files.concat(files);
@@ -357,7 +379,112 @@
}
});
},
+ chooseMessageFile() {
+ if (this.uploading) return;
+ wx.chooseMessageFile({
+ count: this.data.maxCount - this.data.files.length,
+ type: 'file',
+ extension: ['xls', 'xlsx', 'csv', 'doc', 'docx', 'pdf', 'ppt', 'pptx'],
+ success: res => {
+ console.log('chooseMessageFile', res)
+ // 棣栧厛妫�鏌ユ枃浠跺ぇ灏�
+ let invalidIndex = -1; // @ts-ignore
+ res.tempFilePaths = res.tempFiles.map(item => item.path)
+ res.tempFiles.forEach((item, index) => {
+ if (item.size > this.data.maxSize) {
+ invalidIndex = index;
+ }
+ });
+ if (typeof this.data.select === 'function') {
+ const ret = this.data.select(res);
+ if (ret === false) {
+ return;
+ }
+ }
+ if (invalidIndex >= 0) {
+ this.triggerEvent('fail', {
+ type: 1,
+ errMsg: `chooseMessageFile:fail size exceed ${this.data.maxSize}`,
+ total: res.tempFilePaths.length,
+ index: invalidIndex
+ }, {});
+ return;
+ } // 鑾峰彇鏂囦欢鍐呭
+
+ const mgr = wx.getFileSystemManager();
+ const contents = res.tempFilePaths.map(item => {
+ // @ts-ignore
+ const fileContent = mgr.readFileSync(item);
+ return fileContent;
+ });
+ const obj = {
+ tempFilePaths: res.tempFilePaths,
+ tempFiles: res.tempFiles,
+ contents
+ }; // 瑙﹀彂閫変腑鐨勪簨浠讹紝寮�鍙戣�呮牴鎹唴瀹规潵涓婁紶鏂囦欢锛屼笂浼犱簡鎶婁笂浼犵殑缁撴灉鍙嶉鍒癴iles灞炴�ч噷闈�
+
+ this.triggerEvent('select', obj, {});
+
+ let files = res.tempFiles.map((item, i) => {
+ // 鍒ゆ柇鏂囦欢绫诲瀷锛屽搴斾笉鍚屾牱寮�
+ let extensionClass = ''
+ switch (item.name.split('.')[1]) {
+ case 'xls':
+ case 'xlsx':
+ case 'csv':
+ extensionClass = 'file_xlsx'
+ break;
+ case 'doc':
+ case 'docx':
+ extensionClass = 'file_word'
+ break;
+ case 'pdf':
+ extensionClass = 'file_pdf'
+ break;
+ case 'ppt':
+ case 'pptx':
+ extensionClass = 'file_ppt'
+ break;
+ default:
+ break;
+ }
+ // 鎷嗗垎鏂囦欢鍚嶇О锛屽疄鐜版枃鏈繃闀挎椂锛屼腑闂寸渷鐣�
+ const ellipsisName = {
+ start: item.name.slice(0, -5),
+ // 鍙栨湯灏�5涓瓧绗﹀父鎬佹樉绀�
+ end: item.name.substr(-5, 5)
+ }
+ // 鏂囦欢澶у皬鏍煎紡鍖�
+ let size = parseInt(item.size / 1024)
+ if (size > 1024) {
+ size = parseInt(size / 1024) + ' MB'
+ } else {
+ size += ' KB'
+ }
+ return {
+ loading: true,
+ url: item.path,
+ name: item.name,
+ ellipsisName,
+ styleClass: extensionClass,
+ type: item.type,
+ time: item.time,
+ size
+ }
+ })
+ if (!files || !files.length) return;
+ const newFiles = this.data.files.concat(files);
+ this.setData({
+ files: newFiles,
+ currentFiles: newFiles
+ });
+ this.triggerEvent('uploadImg', {
+ newFiles
+ }, {})
+ }
+ })
+ },
deletePic(e) {
const index = e.detail.index;
const files = this.data.files;
@@ -370,7 +497,8 @@
index,
item: file[0]
});
- }
+ },
+
}
});
--
Gitblit v1.9.3