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 |  188 +++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 158 insertions(+), 30 deletions(-)

diff --git a/component/uploader/uploader.js b/component/uploader/uploader.js
index 889eea3..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){
+                  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