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.wxml                    |  110 ++++--
 pages/mSelfPatrol/components/self-patrol/index.wxml |    4 
 component/actionsheet/actionsheet.wxml              |    2 
 component/uploader/uploader.wxss                    |   65 ++++
 pages/mLedger/home/tab.js                           |   34 ++
 config/loadConfig.js                                |    1 
 pages/mLedger/ledgerupload/ledgerupload.wxss        |   48 +++
 service/ledgerservice.js                            |   21 +
 component/actionsheet/actionsheet.js                |    5 
 pages/mLedger/ledgerupload/ledgerupload.js          |  135 ++++++++-
 pages/mLedger/ledgerupload/ledgerupload.wxml        |   82 +----
 component/uploader/uploader.json                    |    3 
 pages/mSelfPatrol/patrolpromise/index.js            |   11 
 pages/mLedger/behaviors/bUploadLedger.js            |   15 +
 pages/mLedger/behaviors/bUploadSelfPatrol.js        |    2 
 pages/mLedger/home/index.js                         |   62 ++--
 component/uploader/uploader.js                      |  188 +++++++++++--
 pages/mSelfPatrol/components/self-patrol/index.js   |   15 +
 pages/mSelfPatrol/patrolpromise/index.wxml          |   32 +-
 19 files changed, 632 insertions(+), 203 deletions(-)

diff --git a/component/actionsheet/actionsheet.js b/component/actionsheet/actionsheet.js
index e89857b..f166293 100644
--- a/component/actionsheet/actionsheet.js
+++ b/component/actionsheet/actionsheet.js
@@ -105,6 +105,11 @@
       type: String,
       value: ''
     },
+    showClose: {
+      // 鏄惁鏄剧ず鍏抽棴鎸夐挳
+      type: Boolean,
+      value: true
+    },
     showCancel: {
       // 鏄惁鏄剧ず鍙栨秷鎸夐挳
       type: Boolean,
diff --git a/component/actionsheet/actionsheet.wxml b/component/actionsheet/actionsheet.wxml
index 78e6ef2..7baa8ff 100644
--- a/component/actionsheet/actionsheet.wxml
+++ b/component/actionsheet/actionsheet.wxml
@@ -14,7 +14,7 @@
 <view wx:if="{{mask}}" class="weui-mask {{show ? '' : 'weui-mask_hidden'}} {{maskClass}}" bindtap="closeActionSheet"></view>
 <view class="weui-actionsheet {{show ? 'weui-actionsheet_toggle' : ''}} {{extClass}}">
     <!-- 鍏抽棴鍥炬爣 -->
-    <view class="close">
+    <view wx:if="{{showClose}}" class="close">
       <mp-icon bindtap="closeActionSheet" icon="close" size="{{20}}"></mp-icon>
     </view>
     <!-- 鏍囬 -->
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]
             });
-          }
+          },
+
 
         }
       });
diff --git a/component/uploader/uploader.json b/component/uploader/uploader.json
index e3479ce..834dd12 100644
--- a/component/uploader/uploader.json
+++ b/component/uploader/uploader.json
@@ -1,6 +1,7 @@
 {
     "component": true,
     "usingComponents": {
-        "mp-gallery": "../gallery/gallery"
+        "mp-gallery": "../gallery/gallery",
+        "mp-actionSheet": "/component/actionsheet/actionsheet"
     }
 }
diff --git a/component/uploader/uploader.wxml b/component/uploader/uploader.wxml
index 2b17a15..3e09af0 100644
--- a/component/uploader/uploader.wxml
+++ b/component/uploader/uploader.wxml
@@ -15,48 +15,68 @@
   <view class="weui-uploader__bd">
     <view class="weui-uploader__files">
       <block wx:for="{{currentFiles}}" wx:key="*this">
-        <view
-          wx:if="{{item.error}}"
-          data-index="{{index}}"
-          bindtap="previewImage"
-          class="weui-uploader__file weui-uploader__file_status"
-        >
-          <image
-            class="weui-uploader__img"
-            src="{{item.url}}"
-            mode="aspectFill"
-          />
-          <view class="weui-uploader__file-content">
-            <icon type="warn" size="23" color="#F43530"></icon>
+        <!-- 鍥剧墖 -->
+        <block wx:if="{{item.type == 'image'}}">
+          <view
+            wx:if="{{item.error}}"
+            data-index="{{index}}"
+            bindtap="previewImage"
+            class="weui-uploader__file weui-uploader__file_status"
+          >
+            <image
+              class="weui-uploader__img"
+              src="{{item.url}}"
+              mode="aspectFill"
+            />
+            <view class="weui-uploader__file-content">
+              <icon type="warn" size="23" color="#F43530"></icon>
+            </view>
           </view>
-        </view>
-        <view
-          wx:elif="{{item.loading}}"
-          data-index="{{index}}"
-          bindtap="previewImage"
-          class="weui-uploader__file weui-uploader__file_status"
-        >
-          <image
-            class="weui-uploader__img"
-            src="{{item.url}}"
-            mode="aspectFill"
-          />
-          <view class="weui-uploader__file-content">
-            <view class="weui-loading"></view>
+          <view
+            wx:elif="{{item.loading}}"
+            data-index="{{index}}"
+            bindtap="previewImage"
+            class="weui-uploader__file weui-uploader__file_status"
+          >
+            <image
+              class="weui-uploader__img"
+              src="{{item.url}}"
+              mode="aspectFill"
+            />
+            <view class="weui-uploader__file-content">
+              <view class="weui-loading"></view>
+            </view>
           </view>
-        </view>
-        <view
-          wx:else
-          class="weui-uploader__file"
-          data-index="{{index}}"
-          bindtap="previewImage"
-        >
-          <image
-            class="weui-uploader__img"
-            src="{{item.url}}"
-            mode="aspectFill"
-          />
-        </view>
+          <view
+            wx:else
+            class="weui-uploader__file"
+            data-index="{{index}}"
+            bindtap="previewImage"
+          >
+            <image
+              class="weui-uploader__img"
+              src="{{item.url}}"
+              mode="aspectFill"
+            />
+          </view>
+        </block>
+        <block wx:elif="{{item.type == 'file'}}">
+          <view
+            data-index="{{index}}"
+            bindtap="previewFile"
+            class="weui-uploader__file"
+          >
+            <view class="{{'weui-uploader__img uploader-preview__file ' + styleClass}}">
+              <view class="wrap">
+                <span class="{{'txt ' + styleClass}}">{{item.name}}</span>
+                <span class="{{'filename ' + styleClass}}" data-title="{{item.name}}"
+                  >{{item.name}}</span
+                >
+              </view>
+              <text class="unit">{{item.size + ' KB'}}</text>
+            </view>
+          </view>
+        </block>
       </block>
     </view>
     <view
@@ -64,7 +84,7 @@
       class="weui-uploader__input-box"
       hover-class="weui-active"
     >
-      <view class="weui-uploader__input" bindtap="chooseImage"></view>
+      <view class="weui-uploader__input" bindtap="showActionSheet"></view>
     </view>
   </view>
 </view>
@@ -77,3 +97,11 @@
   img-urls="{{previewImageUrls}}"
   current="{{previewCurrent}}"
 ></mp-gallery>
+<mp-actionSheet
+  bindactiontap="actionClick"
+  show="{{showSheet}}"
+  actions="{{groups}}"
+  showCancel="{{true}}"
+  showClose="{{false}}"
+>
+</mp-actionSheet>
diff --git a/component/uploader/uploader.wxss b/component/uploader/uploader.wxss
index e69de29..3a22cf2 100644
--- a/component/uploader/uploader.wxss
+++ b/component/uploader/uploader.wxss
@@ -0,0 +1,65 @@
+.uploader-preview__file {
+  --default-bg-color: #888888;
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  background-color: var(--default-bg-color);
+  color: white;
+  height: 100%;
+  font-size: 12px;
+}
+
+.wrap {
+  /* background-color: rgb(109, 109, 4); */
+  height: 3em;
+  line-height: 1.5;
+  overflow: hidden;
+  margin: 8rpx 8rpx 0 8rpx;
+}
+
+.wrap .txt {
+  display: block;
+  max-height: 3em;
+  /* margin: 8rpx 8rpx 0 8rpx; */
+}
+
+.wrap .filename {
+  position: relative;
+  /* display: -webkit-box;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical; */
+  /* display: none; */
+  top: -3em;
+  background-color: rgb(115, 172, 118);
+  /* background-color: var(--default-bg-color); */
+  overflow: hidden;
+  /* text-overflow: ellipsis; */
+  text-align: justify;
+  /* white-space: nowrap; */
+  /* margin: 8rpx 8rpx 0 8rpx; */
+}
+
+.filename::before {
+  content: attr(data-title);
+  width: 100%;
+  float: right;
+  margin-top: 1.5em;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  direction: rtl;
+  /* background-color: rgb(141, 141, 3); */
+  background-color: var(--default-bg-color);
+}
+
+.unit {
+  margin: 0rpx 8rpx 8rpx 8rpx;
+}
+
+.file_xlsx {}
+
+.file_word {}
+
+.file_pdf {}
+
+.file_ppt {}
\ No newline at end of file
diff --git a/config/loadConfig.js b/config/loadConfig.js
index ba9f4ac..729fae5 100644
--- a/config/loadConfig.js
+++ b/config/loadConfig.js
@@ -33,7 +33,6 @@
           key: 'user_setting',
           data: res.data,
         });
-        console.log('app.globalData.userSetting', app.globalData.userSetting);
         resolve()
       },
       fail: e => {
diff --git a/pages/mLedger/behaviors/bUploadLedger.js b/pages/mLedger/behaviors/bUploadLedger.js
index fa10fc9..7077420 100644
--- a/pages/mLedger/behaviors/bUploadLedger.js
+++ b/pages/mLedger/behaviors/bUploadLedger.js
@@ -87,5 +87,20 @@
         },
       );
     },
+
+    _uploadCopyLedger(copyLedgerList) {
+      const time = moment().format('YYYY-MM');
+      ledgerservice.copyLedger(app.globalData.accessToken.userId, time,copyLedgerList, {
+        success:res=>{
+          this.setData({ loading: false });
+          if (typeof this._success === 'function') {
+            this._success(res);
+          }
+        },
+        fail(err) {
+          this.setData({ loading: false });
+        },
+      })
+    }
   },
 });
diff --git a/pages/mLedger/behaviors/bUploadSelfPatrol.js b/pages/mLedger/behaviors/bUploadSelfPatrol.js
index 43200ed..94278af 100644
--- a/pages/mLedger/behaviors/bUploadSelfPatrol.js
+++ b/pages/mLedger/behaviors/bUploadSelfPatrol.js
@@ -6,7 +6,7 @@
 const app = getApp();
 
 /**
- * 鑷贰鏌ヤ笂浼犵鐞�
+ * 搴旀�ヨ嚜宸℃煡涓婁紶绠$悊
  */
 module.exports = Behavior({
   behaviors: [bUpload, bLoadingStatus],
diff --git a/pages/mLedger/home/index.js b/pages/mLedger/home/index.js
index 9401309..05fe77d 100644
--- a/pages/mLedger/home/index.js
+++ b/pages/mLedger/home/index.js
@@ -72,36 +72,36 @@
       },
     );
   },
-  gotoLedgerDetail(e) {
-    var indexGroup = e.currentTarget.dataset.index;
-    // var indexGroup = [parseInt(i[0]), parseInt(i[1])];
-    var ledger = this.data.pageList[indexGroup[0]][indexGroup[1]];
+  // gotoLedgerDetail(e) {
+  //   var indexGroup = e.currentTarget.dataset.index;
+  //   // var indexGroup = [parseInt(i[0]), parseInt(i[1])];
+  //   var ledger = this.data.pageList[indexGroup[0]][indexGroup[1]];
 
-    var that = this;
-    wx.navigateTo({
-      url: '/pages/mLedger/ledgerupload/ledgerupload',
-      events: {
-        uploadOver: function (data) {
-          let i = data.indexGroup;
-          let { pageList, tabList } = that.data;
-          tabList[i[0]].tag--;
-          pageList[i[0]][i[1]].upLoad = true;
-          pageList[i[0]][i[1]].tag = '/res/icons/round_check_fill.png';
-          pageList[i[0]][i[1]].opacity = 0.7;
-          that.setData({
-            pageList,
-            tabList,
-          });
-        },
-      },
-      success: res => {
-        // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
-        res.eventChannel.emit('acceptDataFromOpenerPage', {
-          ledger: ledger,
-          indexGroup: indexGroup,
-          type: 0,
-        });
-      },
-    });
-  },
+  //   var that = this;
+  //   wx.navigateTo({
+  //     url: '/pages/mLedger/ledgerupload/ledgerupload',
+  //     events: {
+  //       uploadOver: function (data) {
+  //         let i = data.indexGroup;
+  //         let { pageList, tabList } = that.data;
+  //         tabList[i[0]].tag--;
+  //         pageList[i[0]][i[1]].upLoad = true;
+  //         pageList[i[0]][i[1]].tag = '/res/icons/round_check_fill.png';
+  //         pageList[i[0]][i[1]].opacity = 0.7;
+  //         that.setData({
+  //           pageList,
+  //           tabList,
+  //         });
+  //       },
+  //     },
+  //     success: res => {
+  //       // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
+  //       res.eventChannel.emit('acceptDataFromOpenerPage', {
+  //         ledger: ledger,
+  //         indexGroup: indexGroup,
+  //         type: 0,
+  //       });
+  //     },
+  //   });
+  // },
 });
diff --git a/pages/mLedger/home/tab.js b/pages/mLedger/home/tab.js
index 08b03a2..14648a9 100644
--- a/pages/mLedger/home/tab.js
+++ b/pages/mLedger/home/tab.js
@@ -11,6 +11,38 @@
     },
     onTabsClick(e){
       
-    }
+    },
+    gotoLedgerDetail(e) {
+      var indexGroup = e.currentTarget.dataset.index;
+      // var indexGroup = [parseInt(i[0]), parseInt(i[1])];
+      var ledger = this.data.pageList[indexGroup[0]][indexGroup[1]];
+  
+      var that = this;
+      wx.navigateTo({
+        url: '/pages/mLedger/ledgerupload/ledgerupload',
+        events: {
+          uploadOver: function (data) {
+            let i = data.indexGroup;
+            let { pageList, tabList } = that.data;
+            tabList[i[0]].tag--;
+            pageList[i[0]][i[1]].upLoad = true;
+            pageList[i[0]][i[1]].tag = '/res/icons/round_check_fill.png';
+            pageList[i[0]][i[1]].opacity = 0.7;
+            that.setData({
+              pageList,
+              tabList,
+            });
+          },
+        },
+        success: res => {
+          // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
+          res.eventChannel.emit('acceptDataFromOpenerPage', {
+            ledger: ledger,
+            indexGroup: indexGroup,
+            type: 0,
+          });
+        },
+      });
+    },
   },
 });
diff --git a/pages/mLedger/ledgerupload/ledgerupload.js b/pages/mLedger/ledgerupload/ledgerupload.js
index 2544bb5..38baa06 100644
--- a/pages/mLedger/ledgerupload/ledgerupload.js
+++ b/pages/mLedger/ledgerupload/ledgerupload.js
@@ -24,7 +24,14 @@
     previewCurrent: 0,
     showPreview: false,
 
+    // 涓婁紶妯″紡锛�0锛氭櫘閫氫笂浼狅紱1锛氫笉娑夊強锛�2锛氬欢鐢ㄥ鍒跺巻鍙茶褰�
     uploadMode: 0,
+    // 绫诲瀷锛�0锛氬彴璐﹀拰鑷贰鏌ワ紱1锛氬簲鎬ヨ嚜宸℃煡
+    type: 0,
+    // 鍘嗗彶鏈�鏂拌褰�
+    lastLedger: undefined,
+
+    
   },
 
   /**
@@ -55,6 +62,11 @@
         });
 
         that.checkStatus();
+
+        // 瀵逛簬鍙鍒剁殑骞朵笖涓嶆槸閲嶄紶鐘舵�佺殑鍙拌处锛岃幏鍙栨渶鏂扮殑鍘嗗彶璁板綍鐢ㄤ簬澶嶅埗
+        if (data.ledger.copy && !data.reUpload) {
+          that.getLatestLedger()
+        }
       },
     );
   },
@@ -71,7 +83,11 @@
       let remark = this.data.remark;
       if (this.data.ledger.remark1) remark = this.data.ledger.remark1;
       let remarkDisable = true;
-      this.setData({ imgFiles, remark, remarkDisable });
+      this.setData({
+        imgFiles,
+        remark,
+        remarkDisable
+      });
     } else if (this.data.ledger.upLoad) {
       var that = this;
       var userId = app.globalData.accessToken.userId;
@@ -88,7 +104,12 @@
                 let imgFiles = detail.path1;
                 let remark = detail.remark1 ? detail.remark1 : '';
                 let remarkDisable = true;
-                that.setData({ imgFiles, remark, remarkDisable, detail });
+                that.setData({
+                  imgFiles,
+                  remark,
+                  remarkDisable,
+                  detail
+                });
               }
             }
           },
@@ -102,13 +123,46 @@
                 let imgFiles = detail.path1;
                 let remark = detail.remark1 ? detail.remark1 : '';
                 let remarkDisable = true;
-                that.setData({ imgFiles, remark, remarkDisable, detail });
+                that.setData({
+                  imgFiles,
+                  remark,
+                  remarkDisable,
+                  detail
+                });
               }
             }
           },
         });
       }
     }
+  },
+
+  // 鑾峰彇鏈�鏂颁竴娆$殑鍘嗗彶璁板綍锛岀敤浜庡欢鐢ㄥ鍒跺姛鑳�
+  getLatestLedger() {
+    var userId = app.globalData.accessToken.userId;
+    var typeId = this.data.ledger.ledgerSubTypeId;
+    var sceneType = app.globalData.userInfo.extension2;
+    this.setData({
+      latestLedgerLoading: true
+    })
+    ledgerservice.getLedgerDetail(userId, typeId, sceneType, null, {
+      success: (res) => {
+        if (res.length > 0) {
+          const ledger = res[0]
+          this.setData({
+            lastLedger: {
+              ...ledger,
+              _updateTimeStr: moment(ledger.updateDate).format('YYYY骞碝M鏈圖D鏃�')
+            }
+          })
+        }
+      },
+      complete: () => {
+        this.setData({
+          latestLedgerLoading: false
+        })
+      }
+    });
   },
 
   // 涓婁紶鍙拌处
@@ -134,26 +188,62 @@
     });
   },
 
+  // 寤剁敤澶嶅埗鍙拌处
+  onCopyLedger() {
+    if (this.data.latestLedgerLoading) {
+      return
+    } else if (this.data.lastLedger == undefined) {
+      wx.showToast({
+        title: '娌℃湁鍙欢鐢ㄧ殑璁板綍',
+        icon: 'none',
+      });
+    } else {
+      this.setData({
+        showDialog: true,
+        uploadMode: 2,
+      });
+    }
+  },
+
   //鎻愪氦鍙拌处
   submitLedger() {
     this.setData({
       showDialog: false,
     });
-    if (this.data.uploadMode == 0) {
-      if (this.data.type == 0) {
-        this._uploadLedger();
-      } else {
-        this._uploadSelfPatrol();
-      }
-    } else {
-      if (this.data.type == 0) {
-        this._uploadNoLedger();
-      } else {
-        this._uploadNoSelfPatrol();
-      }
+    switch (this.data.uploadMode) {
+      case 0:
+        if (this.data.type == 0) {
+          this._uploadLedger();
+        } else {
+          this._uploadSelfPatrol();
+        }
+        break;
+      case 1:
+        if (this.data.type == 0) {
+          this._uploadNoLedger();
+        } else {
+          this._uploadNoSelfPatrol();
+        }
+        break;
+      case 2:
+        if (this.data.type == 0) {
+          const {
+            lastLedger
+          } = this.data
+          const copyLedgerList = [{
+            subTypeId: lastLedger.ledgerSubTypeId,
+            time: `${lastLedger.year}-${lastLedger.month}`
+          }]
+          this._uploadCopyLedger(copyLedgerList);
+        }
+        break;
+
+      default:
+        break;
     }
   },
 
+  // 璺宠浆閲嶄紶鐣岄潰
   reUpload() {
     wx.navigateTo({
       url: '/pages/mLedger/ledgerupload/ledgerupload',
@@ -188,7 +278,9 @@
 
   //鍥剧墖鏀惧ぇ棰勮
   previewImage(e) {
-    const { index } = e.currentTarget.dataset;
+    const {
+      index
+    } = e.currentTarget.dataset;
     const previewImageUrls = this.data.imgFiles;
     this.setData({
       previewImageUrls,
@@ -197,8 +289,13 @@
     });
   },
 
+  // 鍙拌处澶囨敞鐩戝惉
   onRemarkChange(e) {
-    const { value } = e.detail;
-    this.setData({ remark: value });
+    const {
+      value
+    } = e.detail;
+    this.setData({
+      remark: value
+    });
   },
-});
+});
\ No newline at end of file
diff --git a/pages/mLedger/ledgerupload/ledgerupload.wxml b/pages/mLedger/ledgerupload/ledgerupload.wxml
index 7b43e76..d5790d1 100644
--- a/pages/mLedger/ledgerupload/ledgerupload.wxml
+++ b/pages/mLedger/ledgerupload/ledgerupload.wxml
@@ -11,59 +11,30 @@
       </view>
       <text>{{ledger.description}}</text>
     </view>
-    <view
-      wx:if="{{!ledger.upLoad || reUpload}}"
-      class="weui-upload-view"
-      style="margin-top: 16px"
-    >
-      <mp-upload
-        title="涓婁紶鍥剧墖锛堝繀濉級"
-        titleClass="upload-title-class"
-        max-count="6"
-        files="{{imgFiles}}"
-        binduploadImg="uploadFile"
-        binddelete="delImg"
-      ></mp-upload>
-      <textarea
-        disabled="{{remarkDisable}}"
-        value="{{remark}}"
-        class="text-area"
-        auto-height="{{false}}"
-        name="des"
-        placeholder="娣诲姞澶囨敞锛堥�夊~锛�"
-        bindinput="onRemarkChange"
-      ></textarea>
+    <view wx:if="{{!ledger.upLoad || reUpload}}" class="weui-upload-view" style="margin-top: 16px">
+      <mp-upload title="涓婁紶鍥剧墖锛堝繀濉級" titleClass="upload-title-class" max-count="6" files="{{imgFiles}}" binduploadImg="uploadFile" binddelete="delImg"></mp-upload>
+      <textarea disabled="{{remarkDisable}}" value="{{remark}}" class="text-area" auto-height="{{false}}" name="des" placeholder="娣诲姞澶囨敞锛堥�夊~锛�" bindinput="onRemarkChange"></textarea>
     </view>
     <block wx:else>
       <view style="font-size: 14px; margin-top: 16px">鍥剧墖</view>
       <view class="img-group">
-        <image
-          wx:for="{{imgFiles}}"
-          wx:key="index"
-          class="img-group_img"
-          src="{{item}}"
-          mode="aspectFill"
-          bindtap="previewImage"
-          data-index="{{index}}"
-          show-menu-by-longpress="{{true}}"
-        ></image>
+        <image wx:for="{{imgFiles}}" wx:key="index" class="img-group_img" src="{{item}}" mode="aspectFill" bindtap="previewImage" data-index="{{index}}" show-menu-by-longpress="{{true}}"></image>
       </view>
       <view style="font-size: 14px; margin-top: 16px">澶囨敞</view>
-      <textarea
-        class="text-area text-area-read"
-        placeholder="鏃犲娉�"
-        value="{{remark}}"
-      ></textarea>
+      <textarea class="text-area text-area-read" placeholder="鏃犲娉�" value="{{remark}}"></textarea>
     </block>
   </view>
   <view class="page__ft">
     <view wx:if="{{!ledger.upLoad || reUpload}}" class="fix-bottom">
-      <view
-        wx:if="{{ledger.notRelated}}"
-        class="submit submit-2 left"
-        bindtap="onSubmitNoLedger"
-        >涓嶆秹鍙�</view
-      >
+      <view wx:if="{{type == 0 && ledger.copy && !reUpload}}" class="submit submit-3 left" bindtap="onCopyLedger">
+        <t-loading wx:if="{{latestLedgerLoading}}" theme="spinner" size="20rpx" class="wrapper" />
+        <text>寤剁敤</text>
+        <!-- <view class="small-tag-text">
+          <text wx:if="{{lastLedger}}">涓婃璁板綍锛歿{lastLedger._updateTimeStr}}</text>
+          <text wx:else>鏃犱笂浼犺褰�</text>
+        </view> -->
+      </view>
+      <view wx:if="{{ledger.notRelated}}" class="submit submit-2 left" bindtap="onSubmitNoLedger">涓嶆秹鍙�</view>
       <view class="submit right" bindtap="onSubmit">鎻愪氦</view>
     </view>
     <view wx:else class="fix-bottom">
@@ -72,21 +43,12 @@
   </view>
 
   <c-dialog show="{{showDialog}}" yes="纭" bindconfirm="submitLedger">
-    <view>{{uploadMode == 0 ? '纭鏄惁鎻愪氦锛�' : '纭涓嶆秹鍙婏紵'}}</view>
+    <view wx:if="{{uploadMode == 0}}">纭鏄惁鎻愪氦锛�</view>
+    <view wx:elif="{{uploadMode == 1}}">纭涓嶆秹鍙婏紵</view>
+    <view wx:else="{{uploadMode == 2}}">
+      <view>涓婃璁板綍锛歿{lastLedger._updateTimeStr}}</view>
+      <view>纭寤剁敤锛�</view>
+    </view>
   </c-dialog>
-  <!-- <mp-gallery
-    class="gallery"
-    hide-on-click="{{true}}"
-    show-delete="{{false}}"
-    show="{{showPreview}}"
-    img-urls="{{previewImageUrls}}"
-    current="{{previewCurrent}}"
-  ></mp-gallery> -->
-  <my-gallery
-  hide-on-click="{{true}}"
-  show-delete="{{false}}"
-  show="{{showPreview}}"
-  img-urls="{{previewImageUrls}}"
-  current="{{previewCurrent}}"
-></my-gallery>
-</view>
+  <my-gallery hide-on-click="{{true}}" show-delete="{{false}}" show="{{showPreview}}" img-urls="{{previewImageUrls}}" current="{{previewCurrent}}"></my-gallery>
+</view>
\ No newline at end of file
diff --git a/pages/mLedger/ledgerupload/ledgerupload.wxss b/pages/mLedger/ledgerupload/ledgerupload.wxss
index 0d1e1c9..7483f69 100644
--- a/pages/mLedger/ledgerupload/ledgerupload.wxss
+++ b/pages/mLedger/ledgerupload/ledgerupload.wxss
@@ -25,7 +25,6 @@
   padding-top: 0;
   display: flex;
   align-items: flex-end;
-  z-index: 1;
   background-color: white;
 }
 
@@ -85,10 +84,57 @@
   background: #dfdfdf;
 }
 
+.submit-3 {
+  background: white;
+  border: 1px solid #005994;
+  color: #005994;
+  padding: 7px 0;
+}
+
+.submit-2:active {
+  background: #dfdfdf;
+}
+
 .ledger-des {
   font-size: 12px;
   color: var(--fyui-text-color_2);
   background-color: var(--fyui-BG_1);
   padding: 4px;
   border-radius: 4px;
+}
+
+/* .small-tag-text {
+  position: absolute;
+  bottom: 40rpx;
+  font-size: 10px;
+} */
+
+
+.custom-action {
+  position: relative;
+  min-height: 40vh;
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.custom-action__bg{
+  position: absolute;
+  top: 0;
+  left: 0;
+}
+
+.custom-action__tag{
+  font-size: 14px;
+  color: var(--fyui-text-color_1);
+  font-weight: 600;
+  width: 50%;
+  text-align: center;
+  z-index: 2;
+}
+
+.custom-action__tag>image{
+  width: 64px;
+  height: 64px;
 }
\ No newline at end of file
diff --git a/pages/mSelfPatrol/components/self-patrol/index.js b/pages/mSelfPatrol/components/self-patrol/index.js
index 4d471f4..5791ed7 100644
--- a/pages/mSelfPatrol/components/self-patrol/index.js
+++ b/pages/mSelfPatrol/components/self-patrol/index.js
@@ -159,5 +159,20 @@
         },
       });
     },
+
+    /**
+     * 鏌ョ湅鑷贰鏌ユ壙璇�
+     */
+    reviewPromise() {
+      wx.navigateTo({
+        url: '/pages/mSelfPatrol/patrolpromise/index',
+        success: (res)=> {
+          // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
+          res.eventChannel.emit('acceptDataFromOpenerPage', {
+            review: true
+          });
+        },
+      });
+    }
   },
 });
\ No newline at end of file
diff --git a/pages/mSelfPatrol/components/self-patrol/index.wxml b/pages/mSelfPatrol/components/self-patrol/index.wxml
index dc0a5e1..3adad4b 100644
--- a/pages/mSelfPatrol/components/self-patrol/index.wxml
+++ b/pages/mSelfPatrol/components/self-patrol/index.wxml
@@ -10,9 +10,11 @@
 <view
   wx:else
   class="self-patrol-promise-done"
+  bindtap="reviewPromise"
 >
   <t-icon name="check" size="32rpx" />
-  <text class="promise-done-text">鑷贰鏌ユ壙璇哄凡绛剧讲</text>
+  <text class="promise-done-text">鑷贰鏌ユ壙璇哄凡绛剧讲锛屾湁鏁堟湡寤堕暱涓哄綋骞存湁鏁堬紒</text>
+  <text class="promise_btn">鏌ョ湅鎵胯涔� ></text>
 </view>
 <view class="self-patrol-static">
   <view class="head_right">
diff --git a/pages/mSelfPatrol/patrolpromise/index.js b/pages/mSelfPatrol/patrolpromise/index.js
index 36971b9..7b506cb 100644
--- a/pages/mSelfPatrol/patrolpromise/index.js
+++ b/pages/mSelfPatrol/patrolpromise/index.js
@@ -17,6 +17,7 @@
       content: '纭',
       variant: 'base'
     },
+    isReview:false,
   },
 
   /**
@@ -27,6 +28,16 @@
     this.setData({
       date: now.format('YYYY骞碝M鏈圖D鏃�'),
     });
+
+    // 鑾峰彇鍙傛暟锛氭槸鍚︽槸鏌ョ湅鎵胯涔�
+    this.getOpenerEventChannel().on(
+      'acceptDataFromOpenerPage',
+      (data) => {
+        this.setData({
+          isReview: data.review
+        })
+      },
+    );
   },
 
   checkboxChange(e) {
diff --git a/pages/mSelfPatrol/patrolpromise/index.wxml b/pages/mSelfPatrol/patrolpromise/index.wxml
index f993255..81d5fed 100644
--- a/pages/mSelfPatrol/patrolpromise/index.wxml
+++ b/pages/mSelfPatrol/patrolpromise/index.wxml
@@ -5,26 +5,28 @@
       <view class="p-title">鐜繚鑷贰鏌ユ壙璇轰功</view>
       <text class="p-content"> {{promiseText}} </text>
       <text style="text-align: end">\n绛剧讲鏃堕棿锛歿{date}}</text>
-      <text style="font-weight: 600"
+      <text wx:if="{{!isReview}}" style="font-weight: 600"
         >\n*璇蜂粩缁嗛槄璇讳互涓婃壙璇烘潯娆撅紝纭鏃犺鍚庤鍦ㄤ笅鏂圭缃�</text
       >
     </view>
   </view>
   <view class="page__ft">
-    <view class="weui-agree">
-      <label bindtap="checkboxChange">
-        <checkbox
-          class="weui-agree__checkbox-check"
-          value="{{agree}}"
-          checked="{{agree}}"
-        />
-        <span class="weui-agree__checkbox"></span>
-        <span class="weui-agree__text"
-          >鎴戝凡闃呰銆佺悊瑙e苟鍚屾剰浠ヤ笂銆婄幆淇濊嚜宸℃煡鎵胯涔︺�嬬殑鍏ㄩ儴鍐呭銆�</span
-        >
-      </label>
-    </view>
-    <view class="submit" bindtap="showCheckDialog">绛剧讲</view>
+    <template wx:if="{{!isReview}}">
+      <view class="weui-agree">
+        <label bindtap="checkboxChange">
+          <checkbox
+            class="weui-agree__checkbox-check"
+            value="{{agree}}"
+            checked="{{agree}}"
+          />
+          <span class="weui-agree__checkbox"></span>
+          <span class="weui-agree__text"
+            >鎴戝凡闃呰銆佺悊瑙e苟鍚屾剰浠ヤ笂銆婄幆淇濊嚜宸℃煡鎵胯涔︺�嬬殑鍏ㄩ儴鍐呭銆�</span
+          >
+        </label>
+      </view>
+      <view class="submit" bindtap="showCheckDialog">绛剧讲</view>
+    </template>
   </view>
 </view>
 <t-dialog
diff --git a/service/ledgerservice.js b/service/ledgerservice.js
index 7c522e5..034a20e 100644
--- a/service/ledgerservice.js
+++ b/service/ledgerservice.js
@@ -93,4 +93,25 @@
 
     $f.get(fun1);
   },
+
+  /**
+   * 澶嶅埗鍙拌处
+   * @param {string} userId 鐢ㄦ埛id
+   * @param {string} time 骞存湀锛屾牸寮廦YYY-MM
+   * @param {Array} sourceLedgerList 鍙拌处澶嶅埗婧恵subTypeId:寰呭鍒剁殑鍙拌处绫诲瀷id, time: 寰呭鍒剁殑鍙拌处鎵�鍦ㄦ湀浠斤紝涓嶅~鍐欏垯榛樿浣跨敤鏈�鏂颁竴鏉¤褰曚綔涓哄鍒舵簮}
+   * @param {*} fun 
+   */
+  copyLedger: function (userId, time, sourceLedgerList, fun) {
+    let cb = {
+      url: '/ledger/copy',
+      params: {
+        userId: userId,
+        time: time,
+      },
+      data: sourceLedgerList,
+    };
+    Object.assign(cb, fun);
+
+    $f.post(cb);
+  },
 };

--
Gitblit v1.9.3