riku
2026-01-20 91f7d372fa318e859efd20d71eafbd34274902c4
2026.1.20

新增自巡查承诺相关功能(待完成)
已修改10个文件
已删除4个文件
已添加4个文件
1018 ■■■■■ 文件已修改
app.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
config/loadConfig.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/ledger.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mLedger/home/summary.wxml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mLedger/home/summary.wxss 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mLedger/ledgerhome/ledgerhome.js 314 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mLedger/ledgerhome/ledgerhome.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mLedger/ledgerhome/ledgerhome.wxml 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mLedger/ledgerhome/ledgerhome.wxss 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mSelfPatrol/components/self-patrol/index.js 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mSelfPatrol/components/self-patrol/index.wxml 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mSelfPatrol/components/self-patrol/index.wxss 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mSelfPatrol/patrolpromise/index.js 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mSelfPatrol/patrolpromise/index.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mSelfPatrol/patrolpromise/index.wxml 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mSelfPatrol/patrolpromise/index.wxss 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/baserequest.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/selfpatrolservice.js 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app.json
@@ -58,7 +58,8 @@
    "pages/mSelfPatrol/patrolhome/index",
    "pages/mUser/sceneauthentication/industrial/index",
    "pages/mExtra/pSupervisionSummary/index",
    "pages/mLedger/home/index"
    "pages/mLedger/home/index",
    "pages/mSelfPatrol/patrolpromise/index"
  ],
  "window": {
    "backgroundTextStyle": "light",
config/loadConfig.js
@@ -25,6 +25,10 @@
        if (app.globalData.userSetting.selfPatrolPromise == undefined) {
          app.globalData.userSetting.selfPatrolPromise = false
        }
        // è‡ªå·¡æŸ¥æ‰¿è¯ºä¹¦æ–‡æœ¬æ¢è¡Œç¬¦æ ¼å¼åŒ–
        if (app.globalData.userSetting.spPromiseContent != undefined) {
          app.globalData.userSetting.spPromiseContent = app.globalData.userSetting.spPromiseContent.replaceAll('\\n', '\n')
        }
        wx.setStorage({
          key: 'user_setting',
          data: res.data,
model/ledger.js
@@ -1,8 +1,8 @@
const moment = require('../utils/moment.min');
const app = getApp();
const DEADLINEDAY = app.globalData.userSetting.ledgerDeadline;
function name(params) {
  const DEADLINEDAY = app.globalData.userSetting.ledgerDeadline;
  let monthInfo = {
    totalMust: 0,
    finishedMust: 0,
@@ -111,7 +111,6 @@
 * @param {Boolean} isSelfPatrol æ˜¯å¦ç»Ÿè®¡è‡ªå·¡æŸ¥ç±»åž‹
 */
function _parse(subtypes, isSelfPatrol) {
  const DEADLINEDAY = 10;
  // æœˆåº¦ç»Ÿè®¡
  let monthInfo = {
    // å…¨éƒ¨å¿…å¡«æ•°
pages/mLedger/home/summary.wxml
@@ -43,8 +43,8 @@
    <view class="head_row">
      <view class="head_tag">本期台账提交日:{{deadline}}</view>
      <block wx:if="{{thisMonthInfo.percent < 1}}">
        <view wx:if="{{leftday > 0}}" class="head_tag"
          >剩余<text>{{leftday}}</text>天</view
        <view wx:if="{{leftday >= 0}}" class="head_tag"
          >剩余<text>{{leftday + 1}}</text>天</view
        >
        <view wx:else class="head_tag"
          >逾期 <text>{{thisMonthInfo.overtime}}</text>天</view
pages/mLedger/home/summary.wxss
@@ -1,4 +1,4 @@
@import '../ledgerhome/ledgerhome.wxss';.banner-bg {
.banner-bg {
  position: fixed;
  width: 100%;
  height: 60%;
pages/mLedger/ledgerhome/ledgerhome.js
ÎļþÒÑɾ³ý
pages/mLedger/ledgerhome/ledgerhome.json
ÎļþÒÑɾ³ý
pages/mLedger/ledgerhome/ledgerhome.wxml
ÎļþÒÑɾ³ý
pages/mLedger/ledgerhome/ledgerhome.wxss
ÎļþÒÑɾ³ý
pages/mSelfPatrol/components/self-patrol/index.js
@@ -1,4 +1,7 @@
import { parseSelfPatrol, refreshLedgerStatus } from '../../../../model/ledger';
import {
  parseSelfPatrol,
  refreshLedgerStatus
} from '../../../../model/ledger';
import configservice from '../../../../service/configservice';
const ledgerservice = require('../../../../service/ledgerservice');
const moment = require('../../../../utils/moment.min');
@@ -16,11 +19,14 @@
  data: {
    refresh: false,
    thisMonth: '',
    tags1: { count: 0 },
    tags1: {
      count: 0
    },
    pageList1: [],
    // æ˜¯å¦æœ‰æƒé™å¯ä»¥è¿›è¡Œè‡ªå·¡æŸ¥æ‰¿è¯º
    promiseValid: app.globalData.userSetting.selfPatrolPromise,
    promised: false
    // æ˜¯å¦å·²æ‰¿è¯º
    promised: false,
  },
  lifetimes: {
@@ -37,7 +43,9 @@
      const now = moment();
      const nowStr = now.format('YYYY-MM-DD');
      const thisMonth = now.format('YYYYå¹´MM月');
      this.setData({ thisMonth });
      this.setData({
        thisMonth
      });
      this.getLedgerType(nowStr, r => {
        this.setData({
          tags1: {
@@ -50,14 +58,24 @@
          refresh: false,
        });
      });
      this.getPromise()
    },
    /**
     * æŸ¥è¯¢ç”¨æˆ·æ˜¯å¦å®Œæˆè‡ªå·¡æŸ¥æ‰¿è¯º
     */
    getPromise() {
      configservice.fetchUserSettingRecord(app.globalData.accessToken.userId, {
        success: res => {
        },
      })
      if (this.data.promiseValid) {
        configservice.fetchUserSettingRecord(app.globalData.accessToken.userId, {
          success: res => {
            const nowYear = moment().year()
            const promiseYear = moment(res.data?.lastPromisedTime).year()
            this.setData({
              promised: (res.data?.selfPatrolPromised == true) && (nowYear == promiseYear)
            })
          },
        })
      }
    },
    getLedgerType(time, success, lastMonth) {
@@ -65,8 +83,7 @@
      ledgerservice.getLedgerSummary(
        app.globalData.accessToken.userId,
        app.globalData.userInfo.extension2,
        time,
        {
        time, {
          success(res) {
            let r = parseSelfPatrol(res);
            success(r);
@@ -76,7 +93,9 @@
    },
    gotoLedgerDetail(e) {
      const { index } = e.currentTarget.dataset;
      const {
        index
      } = e.currentTarget.dataset;
      const indexGroup = index;
      var ledger = this.data.pageList1[index];
      var that = this;
@@ -118,5 +137,27 @@
        },
      });
    },
    /**
     * è·³è½¬è‡³è‡ªå·¡æŸ¥æ‰¿è¯ºç•Œé¢
     */
    gotoPromise() {
      wx.navigateTo({
        url: '/pages/mSelfPatrol/patrolpromise/index',
        events: {
          doPromiseDone: (data)=> {
            this.setData({
              promised: data.promised
            })
          },
        },
        success: (res)=> {
          // é€šè¿‡ eventChannel å‘被打开页面传送数据
          // res.eventChannel.emit('acceptDataFromOpenerPage', {
          // });
        },
      });
    },
  },
});
});
pages/mSelfPatrol/components/self-patrol/index.wxml
@@ -1,8 +1,19 @@
<view class="self-patrol-promise" bindtap="gotoPromise">
  <t-icon name="notification-error" size="32rpx"/>
<view
  wx:if="{{promiseValid && !promised}}"
  class="self-patrol-promise"
  bindtap="gotoPromise"
>
  <t-icon name="notification-error" size="32rpx" />
  <text class="promise-text"></text>
  <text class="promise_btn">去承诺 ></text>
</view>
<view
  wx:else
  class="self-patrol-promise-done"
>
  <t-icon name="check" size="32rpx" />
  <text class="promise-done-text">自巡查承诺已签署</text>
</view>
<view class="self-patrol-static">
  <view class="head_right">
    <view style="font-size: 14px"> {{thisMonth}} </view>
pages/mSelfPatrol/components/self-patrol/index.wxss
@@ -1,11 +1,11 @@
.self-patrol-promise {
  color: var(--fyui-text-color_1);
  color: white;
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 12px;
  padding: 8rpx 8rpx;
  background-color: var(--fyui-primary-color-2);
  background-color: #c44e00;
}
.promise_btn {
  font-weight: 600;
@@ -43,6 +43,30 @@
  }
}
.self-patrol-promise-done {
  color: white;
  display: flex;
  justify-content: flex-start;
  align-items: center;
  font-size: 12px;
  padding: 8rpx 8rpx;
  background-color: #51be82;
}
.promise-done-text {
  /* white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis; */
  position: relative;
  display: -webkit-box;
  -webkit-line-clamp: 1;
  -webkit-box-orient: vertical;
  overflow-x: hidden;
  text-overflow: ellipsis;
  width: 100%;
  height: 20px;
  line-height: 20px;
}
.self-patrol-static {
  margin: 16rpx 32rpx;
  padding: 4rpx;
pages/mSelfPatrol/patrolpromise/index.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,81 @@
import selfpatrolservice from "../../../service/selfpatrolservice";
import moment from "../../../utils/moment.min";
const app = getApp()
Page({
  /**
   * é¡µé¢çš„初始数据
   */
  data: {
    date: '2026å¹´01月20日',
    promiseText: app.globalData.userSetting.spPromiseContent,
    showDialog: false,
    promiseContent: '尊敬的用户:\n签署本承诺书后,您本年度内已上传的有效自巡查记录将无需每月重复上传,系统将视其为长期有效。您仍可随时上传新的巡查记录。\n请确保填写信息准确,承诺内容真实。虚假承诺可能导致服务终止并承担相应责任。',
    agree: false,
    confirmBtn: {
      content: '确认',
      variant: 'base'
    },
  },
  /**
   * ç”Ÿå‘½å‘¨æœŸå‡½æ•°--监听页面加载
   */
  onLoad(options) {
    var now = moment();
    this.setData({
      date: now.format('YYYYå¹´MM月DD日'),
    });
  },
  checkboxChange(e) {
    var a = !this.data.agree;
    this.setData({
      agree: a,
    });
  },
  waitAgree() {
    if (this.data.agree) {
      return true;
    } else {
      wx.showToast({
        title: '请勾选同意条款',
        icon: 'none',
      });
      return false;
    }
  },
  showCheckDialog() {
    if (this.waitAgree()) {
      this.setData({
        showDialog: true
      })
    }
  },
  closeCheckDialog() {
    this.setData({
      showDialog: false
    })
  },
  /**
   * ç­¾ç½²è‡ªå·¡æŸ¥æ‰¿è¯ºä¹¦
   */
  doPromise() {
    selfpatrolservice.signPromise(app.globalData.accessToken.userId, {
      success: res => {
        // app.globalData.userSetting = res.data
        this.getOpenerEventChannel().emit('doPromiseDone', {
          promised: res.data.selfPatrolPromised,
          promiseTime: res.data.lastPromisedTime,
        });
        wx.navigateBack({
          delta: 1,
        });
      }
    })
  },
})
pages/mSelfPatrol/patrolpromise/index.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
{
  "navigationBarTitleText": "自巡查承诺",
  "navigationBarBackgroundColor": "#57E4CB",
  "navigationBarTextStyle": "white",
  "usingComponents": {}
}
pages/mSelfPatrol/patrolpromise/index.wxml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
<view class="page">
  <view class="banner-bg"></view>
  <view class="page__bd">
    <view class="fyui-panel">
      <view class="p-title">环保自巡查承诺书</view>
      <text class="p-content"> {{promiseText}} </text>
      <text style="text-align: end">\n签署时间:{{date}}</text>
      <text 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>
  </view>
</view>
<t-dialog
  visible="{{showDialog}}"
  prevent-scroll-through
  confirm-btn="{{confirmBtn}}"
  cancel-btn="取消"
  bind:confirm="doPromise"
  bind:cancel="closeCheckDialog"
>
  <scroll-view slot="content" scroll-y class="long-content">
    <text class="content-container" user-select="{{true}}"
      >{{promiseContent}}
    </text>
  </scroll-view>
</t-dialog>
pages/mSelfPatrol/patrolpromise/index.wxss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
.page__bd {
  font-size: 14px;
}
.banner-bg {
  position: fixed;
  width: 100%;
  height: 5vh;
  background-color: #57E4CB;
}
.fyui-panel {
  padding: 8px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}
.p-title {
  text-align: center;
  padding-top: 16px;
  font-size: 20px;
  font-weight: 600;
}
.p-content {
  font-size: 14px;
}
.p-sign {
  font-size: 12px;
  color: var(--fyui-text-color_2);
}
.submit {
  border-radius: 4px;
  background: linear-gradient(to right, #6DF1A9, #62EBCF);
  margin: 8px;
  color: white;
  padding: 8px;
}
.sign-btn {
  width: 96px;
  height: 96px;
  text-align: center;
}
.sign-img {
  float: left;
  margin-right: 8px;
  margin-bottom: 8px;
  width: 96px;
  height: 96px;
  background: no-repeat 50%;
  background-size: cover
}
.top-right {
  margin-top: 6px;
  margin-right: 6px;
}
.weui-agree {
  /* font-size: 12px; */
  text-align: left;
}
.weui-agree__text {
  color: var(--fyui-primary-color-1);
  font-weight: 600;
}
service/baserequest.js
@@ -44,15 +44,13 @@
    fun.url = bUrl + url;
  }
  var fun1 = util.deepCopy(fun);
  if (mode == 'debug') {
    console.log(
      '|------------------------------------------------------------------------------------------------------------',
    );
    console.log('|--访问: ', fun.url);
    console.log('|--参数: ', fun.data);
  }
  fun1.success = function (res) {
    if (mode == 'debug') {
      console.log(
        '|------------------------------------------------------------------------------------------------------------',
      );
      console.log('|--访问: ', fun.url);
      console.log('|--参数: ', fun.data);
      console.log('|--结果: ', res);
    }
@@ -76,6 +74,11 @@
  };
  fun1.fail = function (error) {
    if (mode == 'debug') {
      console.log(
        '|------------------------------------------------------------------------------------------------------------',
      );
      console.log('|--访问: ', fun.url);
      console.log('|--参数: ', fun.data);
      console.log('|--错误: ', error);
    }
    wx.showToast({
service/selfpatrolservice.js
@@ -49,8 +49,7 @@
  //上传自巡查
  uploadSelfPatrol: function (userId, taskId, selfPatrol, paths, fun) {
    const fields = [
      {
    const fields = [{
        name: 'params',
        value: JSON.stringify([selfPatrol]),
      },
@@ -129,4 +128,20 @@
    $f.get(fun1);
  },
};
  // ç­¾ç½²è‡ªå·¡æŸ¥æ‰¿è¯º
  signPromise: function (
    userId,
    fun,
  ) {
    let cb = {
      url: '/selfPatrol/promise',
      params: {
        userId: userId,
      },
    };
    Object.assign(cb, fun);
    $f.post(cb);
  },
};