riku
2026-01-21 a2c5def7cf9562312a54216bc195a6ea071a26c5
2026.1.21

1. 完成自巡查承诺;
2. 新增台账复制逻辑;
3. 新增上次office文件台账功能(待完成);
已修改19个文件
835 ■■■■ 文件已修改
component/actionsheet/actionsheet.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
component/actionsheet/actionsheet.wxml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
component/uploader/uploader.js 188 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
component/uploader/uploader.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
component/uploader/uploader.wxml 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
component/uploader/uploader.wxss 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
config/loadConfig.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mLedger/behaviors/bUploadLedger.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mLedger/behaviors/bUploadSelfPatrol.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mLedger/home/index.js 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mLedger/home/tab.js 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mLedger/ledgerupload/ledgerupload.js 135 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mLedger/ledgerupload/ledgerupload.wxml 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mLedger/ledgerupload/ledgerupload.wxss 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mSelfPatrol/components/self-patrol/index.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mSelfPatrol/components/self-patrol/index.wxml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mSelfPatrol/patrolpromise/index.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mSelfPatrol/patrolpromise/index.wxml 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/ledgerservice.js 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
component/actionsheet/actionsheet.js
@@ -105,6 +105,11 @@
      type: String,
      value: ''
    },
    showClose: {
      // 是否显示关闭按钮
      type: Boolean,
      value: true
    },
    showCancel: {
      // 是否显示取消按钮
      type: Boolean,
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>
    <!-- 标题 -->
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 @@
                }; // 触发选中的事件,开发者根据内容来上传文件,上传了把上传的结果反馈到files属性里面
                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
                }; // 触发选中的事件,开发者根据内容来上传文件,上传了把上传的结果反馈到files属性里面
                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]
            });
          }
          },
        }
      });
component/uploader/uploader.json
@@ -1,6 +1,7 @@
{
    "component": true,
    "usingComponents": {
        "mp-gallery": "../gallery/gallery"
        "mp-gallery": "../gallery/gallery",
        "mp-actionSheet": "/component/actionsheet/actionsheet"
    }
}
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>
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 {}
config/loadConfig.js
@@ -33,7 +33,6 @@
          key: 'user_setting',
          data: res.data,
        });
        console.log('app.globalData.userSetting', app.globalData.userSetting);
        resolve()
      },
      fail: e => {
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 });
        },
      })
    }
  },
});
pages/mLedger/behaviors/bUploadSelfPatrol.js
@@ -6,7 +6,7 @@
const app = getApp();
/**
 * 自巡查上传管理
 * 应急自巡查上传管理
 */
module.exports = Behavior({
  behaviors: [bUpload, bLoadingStatus],
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,
  //       });
  //     },
  //   });
  // },
});
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,
          });
        },
      });
    },
  },
});
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年MM月DD日')
            }
          })
        }
      },
      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
    });
  },
});
});
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>
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;
}
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
          });
        },
      });
    }
  },
});
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">
pages/mSelfPatrol/patrolpromise/index.js
@@ -17,6 +17,7 @@
      content: '确认',
      variant: 'base'
    },
    isReview:false,
  },
  /**
@@ -27,6 +28,16 @@
    this.setData({
      date: now.format('YYYY年MM月DD日'),
    });
    // 获取参数:是否是查看承诺书
    this.getOpenerEventChannel().on(
      'acceptDataFromOpenerPage',
      (data) => {
        this.setData({
          isReview: data.review
        })
      },
    );
  },
  checkboxChange(e) {
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"
          >我已阅读、理解并同意以上《环保自巡查承诺书》的全部内容。</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"
            >我已阅读、理解并同意以上《环保自巡查承诺书》的全部内容。</span
          >
        </label>
      </view>
      <view class="submit" bindtap="showCheckDialog">签署</view>
    </template>
  </view>
</view>
<t-dialog
service/ledgerservice.js
@@ -93,4 +93,25 @@
    $f.get(fun1);
  },
  /**
   * 复制台账
   * @param {string} userId 用户id
   * @param {string} time 年月,格式YYYY-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);
  },
};