riku
2024-11-12 befd1f21839939b54254bd316bbd158b136fcd15
简化主页

1. 新增简化主页界面;
2. 优化拆分了原主页的页面逻辑;
已修改15个文件
已删除1个文件
已添加14个文件
793 ■■■■ 文件已修改
app.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
behaviors/login.js 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
config/index.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/index.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/inspection-proxy.js 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/news.wxml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/options.wxml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/inspection/param-util.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/inspection/ranking/index.js 133 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/inspection/ranking/index.wxml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/inspection/ranking/index.wxss 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/inspection/ranking/problem-change-list.js 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/inspection/ranking/problem-change-list.wxml 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/inspection/ranking/problem-change-list.wxss 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/inspection/ranking/sort-options.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/inspection/ranking/sort-options.wxml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/inspection/ranking/sort-options.wxss 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/inspection/ranking/statistic.js 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/inspection/ranking/statistic.wxml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/inspection/ranking/statistic.wxss 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/simple-home/index.js 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/simple-home/index.json 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/simple-home/index.wxml 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/simple-home/index.wxss 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/simple-home/packge-info 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/usercenter/about/index.wxml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/usercenter/login/login-home/index.wxml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
services/inspection/fetchInspection.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
services/inspection/fetchScene.js 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/time.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app.json
@@ -35,7 +35,8 @@
    "pages/inspection/scene/search/index",
    "pages/inspection/scene/info/index",
    "pages/inspection/scene/info/device-info/index",
    "pages/inspection/scene/info/device-status/index"
    "pages/inspection/scene/info/device-status/index",
    "pages/simple-home/index"
  ],
  "tabBar": {
    "custom": true,
behaviors/login.js
@@ -1,8 +1,4 @@
import {
  fetchLoginPW,
  fetchUserInfo,
  fetchUserBaseInfo,
} from '../services/usercenter/fetchUser';
import { fetchLoginPW, fetchUserInfo, fetchUserBaseInfo } from '../services/usercenter/fetchUser';
import { loadConfig } from '../behaviors/loadConfig';
import dayjs from 'dayjs';
@@ -33,12 +29,10 @@
                  app.globalData.accessToken.suserId = data.suserId;
                  app.globalData.accessToken.openId = data.openId;
                  if (accessTokenPW.userName) {
                    app.globalData.accessToken.userName =
                      accessTokenPW.userName;
                    app.globalData.accessToken.userName = accessTokenPW.userName;
                  }
                  if (accessTokenPW.password) {
                    app.globalData.accessToken.password =
                      accessTokenPW.password;
                    app.globalData.accessToken.password = accessTokenPW.password;
                  }
                  wx.setStorage({
                    key: 'accessToken',
@@ -99,10 +93,28 @@
          key: 'userInfo',
          data: data,
          success: result => {
            loadConfig().then(res => {
            loadConfig()
              .then(res => {
                // åˆ¤æ–­ç”¨æˆ·æ˜¯å¦è¿›å…¥ç®€åŒ–主页
                if (app.globalData.userConfig.ucExtension1 == 'simple') {
                  wx.redirectTo({
                    url: '/pages/simple-home/index',
                  });
                } else {
              wx.switchTab({
                url: '/pages/home/index',
              });
                }
              })
              .finally(() => {
                this.setData({
                  loading: false,
                });
              });
          },
          fail: err => {
            this.setData({
              loading: false,
            });
          },
        });
config/index.js
@@ -9,7 +9,7 @@
// çº¿ä¸Šç›‘管
const inspectUrl = 'https://fyami.com.cn:447';
// const inspectUrl = 'http://192.168.0.138:8082';
// const inspectUrl = 'http://192.168.0.138:9001';
// const inspectUrl = 'http://192.168.0.138:8080';
// const inspectUrl = 'http://192.168.1.8:8080';
pages/home/index.js
@@ -35,6 +35,7 @@
   * åˆå§‹åŠ è½½
   * å½“所有筛选条件都获取到初始值后,执行一次初始化加载
   * åŒ…括场景类型、区域、时间三个选项,全部获取初始值后,执行加载
   * @see options-proxy.js
   */
  optionsCount: 0,
  init() {
pages/home/inspection-proxy.js
@@ -2,6 +2,7 @@
  fetchInspectionStatistic,
  fetchSubtaskSummaryByArea,
} from '../../services/inspection/fetchInspection';
import dayjs from "dayjs";
/**
 * çŽ°åœºå·¡æŸ¥ç›‘ç®¡ç›¸å…³ä¿¡æ¯èŽ·å–é€»è¾‘
@@ -16,6 +17,7 @@
    fetchInspection(page) {
      this.setData({ inspectionLoading: true });
      const { provinceCode, cityCode, districtCode, townCode, sceneTypeValue, time } = this.data;
      const eTime = dayjs(time).endOf('M').format('YYYY-MM-DD HH:mm:ss')
      fetchSubtaskSummaryByArea({
        provincecode: provinceCode,
        citycode: cityCode,
@@ -23,7 +25,7 @@
        towncode: townCode,
        scensetypeid: sceneTypeValue[0],
        starttime: time,
        endtime: time,
        endtime: eTime,
      })
        .then(res => {
          this.setData({
pages/home/news.wxml
@@ -1,3 +1,3 @@
<train-card values="{{trainingList}}" />
<!-- <train-card values="{{trainingList}}" /> -->
<info-cards cardTitle="执法动态" infoList="{{infoList}}" bindnavTo="navToInfoPage"></info-cards>
<load-more list-is-empty="{{!infoList.length}}" status="{{loadStatus}}" bind:retry="_startLoad" />
pages/home/options.wxml
@@ -20,5 +20,9 @@
    ></location-picker>
  <!-- </view> -->
</view>
<scene-picker sceneMode="{{1}}" bind:sceneInitValue="initScene" bind:scenePickerChange="onScenePickerConfirm">
<scene-picker
  sceneMode="{{1}}"
  bind:sceneInitValue="initScene"
  bind:scenePickerChange="onScenePickerConfirm"
>
</scene-picker>
pages/inspection/param-util.js
@@ -1,7 +1,7 @@
import dayjs from 'dayjs';
export function _getParamsArea(data) {
  const { inspection, sceneTypeValue: scensetypeid, time, sort } = data;
  const { inspection, sceneTypeValue: scensetypeid, time, sort, sortBy } = data;
  const params = {
    provincecode: inspection.provinceCode,
    provincename: inspection.provinceName,
@@ -13,6 +13,7 @@
    townname: inspection.townName,
    scensetypeid: scensetypeid[0],
    sort: sort,
    sortBy: sortBy
  };
  const t = dayjs(time);
  params.starttime = t.startOf('month').format('YYYY-MM-DD HH:mm:ss');
pages/inspection/ranking/index.js
@@ -1,19 +1,22 @@
import dayjs from 'dayjs';
import { useLoading } from '../../../behaviors/loading';
import { useProblemChangeList } from "./problem-change-list.js";
import { useStatistic } from "./statistic.js";
import { useSortOptions } from "./sort-options.js";
import { fetchSceneProSummary } from '../../../services/inspection/fetchScene';
import { fetchProblemsStatistic } from '../../../services/inspection/fetchInspection';
import { _getParamsArea } from '../param-util.js';
Page({
  behaviors: [useLoading],
  behaviors: [useLoading, useProblemChangeList, useStatistic, useSortOptions],
  data: {
    summaryList: [],
    sort: '',
    sortBy: 'pro',
    statistic: {
      proNum: 0,
      changeNum: 0,
    },
    // summaryList: [],
    // sort: '',
    // sortBy: 'pro',
    // statistic: {
    //   proNum: 0,
    //   changeNum: 0,
    // },
  },
  onLoad(options) {
@@ -39,51 +42,51 @@
  },
  _fetchData(page) {
    const f1 = this.fetchSceneProSummary(page);
    const f2 = this.fetchProblems(page);
    const params = _getParamsArea(this.data);
    const f1 = this.fetchSceneProSummary(params, page);
    const f2 = this.fetchProblems(params, page);
    return Promise.all([f1, f2]).then(res => {
      // è¿”回请求f1的分页信息
      return res[0];
    });
  },
  fetchSceneProSummary(page) {
    const params = _getParamsArea(this.data);
    const { sortBy } = this.data;
    return fetchSceneProSummary({ area: params, sortBy, page }).then(res => {
      if (res.success) {
        this.setData({
          summaryList: page == 1 ? res.data : this.data.summaryList.concat(res.data),
        });
      } else {
        this.setData({
          summaryList: [],
        });
      }
      return res.head;
    });
  },
  // fetchSceneProSummary(params, page) {
  //   const params = _getParamsArea(this.data);
  //   return fetchSceneProSummary({ area: params, page }).then(res => {
  //     if (res.success) {
  //       this.setData({
  //         summaryList: page == 1 ? res.data : this.data.summaryList.concat(res.data),
  //       });
  //     } else {
  //       this.setData({
  //         summaryList: [],
  //       });
  //     }
  //     return res.head;
  //   });
  // },
  fetchProblems(page) {
    const params = _getParamsArea(this.data);
    return fetchProblemsStatistic(params).then(res => {
      let proNum = 0,
        changeNum = 0,
        changePer = 0;
      res.data.forEach(r => {
        proNum += r.count;
        changeNum += r.changeCount;
      });
      if (proNum > 0) {
        changePer = Math.round((changeNum / proNum) * 1000) / 10;
        changePer += '%';
      }
      this.setData({
        statistic: { proNum, changeNum, changePer },
      });
      return res.head;
    });
  },
  // fetchProblems(params, page) {
  //   const params = _getParamsArea(this.data);
  //   return fetchProblemsStatistic(params).then(res => {
  //     let proNum = 0,
  //       changeNum = 0,
  //       changePer = 0;
  //     res.data.forEach(r => {
  //       proNum += r.count;
  //       changeNum += r.changeCount;
  //     });
  //     if (proNum > 0) {
  //       changePer = Math.round((changeNum / proNum) * 1000) / 10;
  //       changePer += '%';
  //     }
  //     this.setData({
  //       statistic: { proNum, changeNum, changePer },
  //     });
  //     return res.head;
  //   });
  // },
  onTimePickerConfirm(e) {
    const { timeValue } = e.detail;
@@ -124,29 +127,17 @@
    this._startLoad();
  },
  // é—®é¢˜æ•°æŽ’序更改
  onProNumSortChange(e) {
    const { sorts } = e.detail;
    this.setData({
      sort: sorts,
    });
    this._startLoad();
  },
  // æ•´æ”¹çŽ‡æŽ’åºæ›´æ”¹
  onChangePerSortChange(e) {},
  navToDetail(e) {
    const { index } = e.currentTarget.dataset;
    const summary = this.data.summaryList[index];
    wx.navigateTo({
      url: '/pages/inspection/detail/index',
      success: result => {
        result.eventChannel.emit('acceptInspectionDetailData', {
          scene: summary.scene,
          time: this.data.time,
        });
      },
    });
  },
  // navToDetail(e) {
  //   const { index } = e.currentTarget.dataset;
  //   const summary = this.data.summaryList[index];
  //   wx.navigateTo({
  //     url: '/pages/inspection/detail/index',
  //     success: result => {
  //       result.eventChannel.emit('acceptInspectionDetailData', {
  //         scene: summary.scene,
  //         time: this.data.time,
  //       });
  //     },
  //   });
  // },
});
pages/inspection/ranking/index.wxml
@@ -1,4 +1,4 @@
<import src="/pages/common/template/template-loading.wxml" />
<!-- <import src="/pages/common/template/template-loading.wxml" /> -->
<wxs src="./util.wxs" module="_" />
<view class="page">
@@ -27,11 +27,13 @@
          bind:scenePickerChange="onScenePickerConfirm"
        />
      </view>
      <view class="ranking-summary__item-abstract" style="margin-left: var(--td-spacer)">
      <include src="/pages/inspection/ranking/statistic.wxml" />
      <!-- <view class="ranking-summary__item-abstract" style="margin-left: var(--td-spacer)">
        é—®é¢˜æ€»è®¡{{statistic.proNum}}个,已整改{{statistic.changeNum}}个,未整改{{statistic.proNum -
        statistic.changeNum}}个,整改率{{statistic.changePer}}
      </view>
      <view class="filter-wrap">
      </view> -->
      <include src="/pages/inspection/ranking/sort-options.wxml" />
      <!-- <view class="filter-wrap">
        <sort-btn
          text="问题数"
          custom-class="flex-start "
@@ -48,11 +50,12 @@
          defaultSort="{{changeSort}}"
          bind:sortsChange="onSortChange"
        ></sort-btn>
      </view>
      </view> -->
    </view>
  </t-sticky>
  <view class="page-container">
    <template is="pulldown-loading" wx:if="{{pageLoading && summaryList.length != 0}}" />
    <include src="./problem-change-list.wxml" />
    <!-- <template is="pulldown-loading" wx:if="{{pageLoading && summaryList.length != 0}}" />
    <block wx:if="{{summaryList.length > 0}}">
      <view
        class="ranking-summary__item"
@@ -111,7 +114,7 @@
      list-is-empty="{{!summaryList.length}}"
      status="{{loadStatus}}"
      bind:retry="_startLoad"
    />
    /> -->
  </view>
  <view class="page-footer"></view>
</view>
pages/inspection/ranking/index.wxss
@@ -1,4 +1,7 @@
@import '../../../components/filter/index.wxss';
@import './problem-change-list.wxss';
@import './statistic.wxss';
@import './sort-options.wxss';
.page .page-header {
  background: linear-gradient(var(--td-primary-color-7), var(--td-bg-color));
@@ -38,89 +41,4 @@
.fy-loading-indicator,
.fy-loading-text {
  color: var(--td-text-color-placeholder) !important;
}
.ranking-summary__item {
  background-color: var(--td-bg-color-fade);
  border-radius: var(--td-border-radius);
  box-shadow: var(--td-shadow-4);
  padding: var(--td-spacer);
  margin-top: var(--td-spacer);
  display: flex;
  justify-content: space-between;
  gap: 2px;
  color: var(--td-text-color-primary);
}
.ranking-summary__item:active {
  background-color: var(--td-gray-color-1);
}
.ranking-summary__item .ranking-summary__item-name {
  --ei-font-size: var(--td-font-size-m);
  --ei-line-height: calc(var(--td-text-line-height) * var(--ei-font-size));
  font-size: var(--ei-font-size);
  line-height: var(--ei-line-height);
  height: calc(var(--ei-line-height) * 2);
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ranking-summary__item-abstract {
  font-size: var(--td-font-size-s);
  color: var(--td-text-color-secondary);
}
.flex-v {
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}
.ranking-summary__item-tag__wrap{
  position: relative;
  display: flex;
  gap: 2px;
}
.ranking-summary__item-tag__wrap .ranking-summary__item-tag {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
}
.ranking-summary__item-tag .ranking-summary__tag-count {
  /* background-color: var(--td-primary-color-10); */
  width: 80rpx;
  height: 80rpx;
  display: flex;
  justify-content: center;
  align-items: center;
  /* color: var(--td-text-color-anti); */
  border: 6rpx solid var(--td-success-color-5);
  border-radius: var(--td-border-radius);
  font-weight: 600;
}
.ranking-summary__tag-count__error {
  border-color: var(--td-error-color-5) !important;
}
.ranking-summary__tag-count__warning {
  border-color: var(--td-warning-color) !important;
}
.ranking-summary__nav-icon {
  position: relative;
  bottom: 0px;
  right: 0px;
  display: flex;
  justify-content: flex-end;
  /* margin-top: var(--td-spacer); */
  /* background-color: blanchedalmond; */
}
pages/inspection/ranking/problem-change-list.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
import { fetchSceneProSummary } from '../../../services/inspection/fetchScene';
export const useProblemChangeList = Behavior({
  data: {
    summaryList: [],
  },
  methods: {
    fetchSceneProSummary(params, page) {
      return fetchSceneProSummary({ area: params, page }).then(res => {
        if (res.success) {
          this.setData({
            summaryList: page == 1 ? res.data : this.data.summaryList.concat(res.data),
          });
        } else {
          this.setData({
            summaryList: [],
          });
        }
        return res.head;
      });
    },
    navToDetail(e) {
      const { index } = e.currentTarget.dataset;
      const summary = this.data.summaryList[index];
      wx.navigateTo({
        url: '/pages/inspection/detail/index',
        success: result => {
          result.eventChannel.emit('acceptInspectionDetailData', {
            scene: summary.scene,
            time: this.data.time,
          });
        },
      });
    },
  },
});
pages/inspection/ranking/problem-change-list.wxml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
<import src="/pages/common/template/template-loading.wxml" />
<!-- <template is="pulldown-loading" wx:if="{{pageLoading && summaryList.length != 0}}" /> -->
<block wx:if="{{summaryList.length > 0}}">
  <view
    class="ranking-summary__item"
    wx:for="{{summaryList}}"
    data-index="{{index}}"
    bind:tap="navToDetail"
  >
    <view style="flex: 1">
      <view class="ranking-summary__item-name">{{item.scene.name}} </view>
      <t-divider />
      <view class="ranking-summary__item-tag__wrap">
        <view class="ranking-summary__item-abstract">地址:{{item.scene.location}} </view>
      </view>
    </view>
    <view class="flex-v">
      <view class="ranking-summary__item-abstract flex-end"
        >整改率:{{_.changePercent(item.proNum, item.changeNum)}}</view
      >
      <view class="ranking-summary__item-tag__wrap">
        <view class="ranking-summary__item-tag">
          <view class="ranking-summary__tag-count"> {{item.proNum}} </view>
          <t-tag
            max-width="{{130}}"
            shape="square"
            size="small"
            theme="default"
            variant="light-outline"
            >问题</t-tag
          >
        </view>
        <view class="ranking-summary__item-tag">
          <view
            class="ranking-summary__tag-count {{_.tagBorderColor(item.proNum, item.changeNum)}}"
          >
            <text>{{item.changeNum}}</text>
            <view></view>
          </view>
          <t-tag
            max-width="{{130}}"
            shape="square"
            size="small"
            theme="default"
            variant="light-outline"
            >整改</t-tag
          >
        </view>
      </view>
      <view class="ranking-summary__nav-icon">
        <t-icon name="chevron-right" size="24rpx" />
      </view>
    </view>
  </view>
</block>
<t-empty-page wx:elif="{{!pageLoading}}" description="暂无相关记录" />
<load-more
  list-is-empty="{{!summaryList.length}}"
  status="{{loadStatus}}"
  bind:retry="_startLoad"
/>
pages/inspection/ranking/problem-change-list.wxss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,79 @@
.ranking-summary__item {
  background-color: var(--td-bg-color-fade);
  border-radius: var(--td-border-radius);
  box-shadow: var(--td-shadow-4);
  padding: var(--td-spacer);
  margin-top: var(--td-spacer);
  display: flex;
  justify-content: space-between;
  gap: 2px;
  color: var(--td-text-color-primary);
}
.ranking-summary__item:active {
  background-color: var(--td-gray-color-1);
}
.ranking-summary__item .ranking-summary__item-name {
  --ei-font-size: var(--td-font-size-m);
  --ei-line-height: calc(var(--td-text-line-height) * var(--ei-font-size));
  font-size: var(--ei-font-size);
  line-height: var(--ei-line-height);
  height: calc(var(--ei-line-height) * 2);
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
  text-overflow: ellipsis;
}
.flex-v {
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}
.ranking-summary__item-tag__wrap{
  position: relative;
  display: flex;
  gap: 2px;
}
.ranking-summary__item-tag__wrap .ranking-summary__item-tag {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
}
.ranking-summary__item-tag .ranking-summary__tag-count {
  /* background-color: var(--td-primary-color-10); */
  width: 80rpx;
  height: 80rpx;
  display: flex;
  justify-content: center;
  align-items: center;
  /* color: var(--td-text-color-anti); */
  border: 6rpx solid var(--td-success-color-5);
  border-radius: var(--td-border-radius);
  font-weight: 600;
}
.ranking-summary__tag-count__error {
  border-color: var(--td-error-color-5) !important;
}
.ranking-summary__tag-count__warning {
  border-color: var(--td-warning-color) !important;
}
.ranking-summary__nav-icon {
  position: relative;
  bottom: 0px;
  right: 0px;
  display: flex;
  justify-content: flex-end;
  /* margin-top: var(--td-spacer); */
  /* background-color: blanchedalmond; */
}
pages/inspection/ranking/sort-options.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
export const useSortOptions = Behavior({
  data: {
    sort: '',
    sortBy: 'pro',
  },
  methods: {
    onSortChange(e) {
      const { sorts } = e.detail;
      const { type } = e.currentTarget.dataset;
      this.setData({
        sort: sorts,
        sortBy: type,
        proSort: type == 'pro' ? sorts : 'default',
        changeSort: type == 'changePer' ? sorts : 'default',
      });
      if (typeof this._startSortLoad === 'function') {
        this._startSortLoad()
      } else {
        this._startLoad();
      }
    },
  },
});
pages/inspection/ranking/sort-options.wxml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
<view class="filter-wrap">
  <sort-btn
    text="问题数"
    icon-color="var(--td-warning-color-4)"
    data-type="pro"
    defaultSort="{{proSort}}"
    bind:sortsChange="onSortChange"
  ></sort-btn>
  <sort-btn
    text="整改率"
    icon-color="var(--td-warning-color-4)"
    data-type="changePer"
    defaultSort="{{changeSort}}"
    bind:sortsChange="onSortChange"
  ></sort-btn>
</view>
pages/inspection/ranking/sort-options.wxss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
.filter-wrap {
  background: initial;
}
pages/inspection/ranking/statistic.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
import { fetchProblemsStatistic } from '../../../services/inspection/fetchInspection';
export const useStatistic = Behavior({
  data: {
    statistic: {
      proNum: 0,
      changeNum: 0,
    },
  },
  methods: {
    fetchProblems(params, page) {
      return fetchProblemsStatistic(params).then(res => {
        let proNum = 0,
          changeNum = 0,
          changePer = 0;
        res.data.forEach(r => {
          proNum += r.count;
          changeNum += r.changeCount;
        });
        if (proNum > 0) {
          changePer = Math.round((changeNum / proNum) * 1000) / 10;
          changePer += '%';
        }
        this.setData({
          statistic: { proNum, changeNum, changePer },
        });
        return res.head;
      });
    },
  },
});
pages/inspection/ranking/statistic.wxml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,4 @@
<view class="ranking-summary__item-abstract" style="margin-left: var(--td-spacer)">
  é—®é¢˜æ€»è®¡{{statistic.proNum}}个,已整改{{statistic.changeNum}}个,未整改{{statistic.proNum -
  statistic.changeNum}}个,整改率{{statistic.changePer}}
</view>
pages/inspection/ranking/statistic.wxss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,4 @@
.ranking-summary__item-abstract {
  font-size: var(--td-font-size-s);
  color: var(--td-text-color-secondary);
}
pages/simple-home/index.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,125 @@
import dayjs from "dayjs";
import { useLoading } from '../../behaviors/loading';
import { useOptions } from '../home/options-proxy.js';
import { useInsepction } from '../home/inspection-proxy.js';
// import { useSupervision } from '../home/supervision-proxy.js';
// import { useNotice } from '../home/notice-proxy.js';
// import { useNews } from '../home/news-proxy.js';
import { useProblemChangeList } from '../inspection/ranking/problem-change-list.js';
import { useStatistic } from '../inspection/ranking/statistic.js';
import { useSortOptions } from '../inspection/ranking/sort-options.js';
const app = getApp();
Page({
  behaviors: [
    useLoading,
    useOptions,
    useInsepction,
    // useSupervision,
    // useNotice,
    // useNews,
    useStatistic,
    useSortOptions,
    useProblemChangeList,
  ],
  data: {
    placeholder: '搜索企业详情',
    userName: app.globalData.userInfo.name,
  },
  onLoad(options) {
    this.setData({ userName: app.globalData.userInfo.name });
  },
  onShow() {
    // this.getTabBar().init();
  },
  onPullDownRefresh() {
    this._startLoad();
  },
  onReachBottom() {
    this._loadMore();
  },
  /**
   * åˆå§‹åŠ è½½
   * å½“所有筛选条件都获取到初始值后,执行一次初始化加载
   * åŒ…括场景类型、区域、时间三个选项,全部获取初始值后,执行加载
   */
  optionsCount: 0,
  init() {
    this.optionsCount++;
    if (this.optionsCount == 3) this._startLoad();
  },
  _fetchData(page) {
    const array = [];
    // // æ‰§æ³•动态
    // const f3 = this._enforcementNews(page);
    // array.push(f3);
    if (page == 1) {
      // // çº¿ä¸Šç›‘管
      // this.fetchSupervision(page);
      // çŽ°åœºå·¡æŸ¥
      this.fetchInspection(page);
      const params = this.getParam();
      const f1 = this.fetchSceneProSummary(params, page);
      array.push(f1);
      const f2 = this.fetchProblems(params, page);
      array.push(f2);
      // // å·¥ä½œæé†’
      // const f1 = this._fetchNotice(page);
      // array.push(f1);
      // const f4 = this._fetchUnReadNoticeNum(page);
      // array.push(f4);
      // // å®ˆæ³•培训
      // const f2 = this._complianceTraining(page);
      // array.push(f2);
    }
    return Promise.all(array).then(res => {
      return res[0];
    });
  },
  // æŽ’序切换后的加载函数
  _startSortLoad() {
    const params = this.getParam();
    this.setData({ pageLoading: true });
    this.fetchSceneProSummary(params, 1).finally(() => this.setData({ pageLoading: false }));
  },
  getParam() {
    const { provinceCode, cityCode, districtCode, townCode, sceneTypeValue, time, sort, sortBy } =
      this.data;
    const params = {
      provincecode: provinceCode,
      // provincename: provinceName,
      citycode: cityCode,
      // cityname: cityName,
      districtcode: districtCode,
      // districtname: districtName,
      towncode: townCode,
      // townname: townName,
      scensetypeid: sceneTypeValue[0],
      sort: sort,
      sortBy: sortBy,
    };
    const t = dayjs(time);
    params.starttime = t.startOf('month').format('YYYY-MM-DD HH:mm:ss');
    params.endtime = t.endOf('month').format('YYYY-MM-DD HH:mm:ss');
    return params;
  },
  navToSearchPage() {
    wx.navigateTo({
      url: '/pages/enterprise/search/index',
      success: result => {},
      fail: res => {},
      complete: res => {},
    });
  },
});
pages/simple-home/index.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
{
  "navigationBarTitleText": "首页",
  "onReachBottomDistance": 10,
  "backgroundTextStyle": "light",
  "enablePullDownRefresh": true,
  "navigationBarTextStyle": "white",
  "navigationBarBackgroundColor": "#389AFF",
  "navigationStyle":"custom",
  "usingComponents": {
    "stat-card": "/components/stat-card/index",
    "info-cards": "/components/info-cards/index",
    "load-more": "/components/load-more/index",
    "notice-card": "/components/notice-card/index",
    "train-card": "/components/train-card/index",
    "scene-picker": "/components/scene-picker/index",
    "location-picker": "/components/picker/location-picker/index",
    "t-time-picker": "/components/time-picker/index",
    "sort-btn": "/components/sort-btn/index",
    "t-empty-page": "/components/empty-page/index"
  }
}
pages/simple-home/index.wxml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
<import src="/pages/common/template/template-loading.wxml" />
<t-navbar>
  <view slot="left" class="t-class-navbar">
    <t-icon name="user" size="36rpx" />
    <view class="t-class-navbar-title"> {{userName}} </view>
  </view>
</t-navbar>
<view class="page">
  <template is="pulldown-loading" wx:if="{{pageLoading}}" />
  <view class="page-header">
    <!-- <view slot="left" bind:tap="navToSearchPage">
      <t-search shape="square" placeholder="{{placeholder}}" disabled />
    </view> -->
    <include src="/pages/home/options.wxml" />
    <include src="/pages/home/inspection.wxml" />
  </view>
  <view class="page-container">
    <!-- <t-sticky> -->
    <include src="/pages/inspection/ranking/statistic.wxml" />
    <include src="/pages/inspection/ranking/sort-options.wxml" />
    <!-- </t-sticky> -->
    <!-- <view class="home-supervision-wrap"> -->
    <include src="/pages/inspection/ranking/problem-change-list.wxml" />
    <!-- <include src="/pages/home/supervision.wxml" /> -->
    <!-- </view> -->
    <!-- <include src="/pages/home/notice.wxml" />
    <include src="/pages/home/news.wxml" /> -->
  </view>
  <view class="page-footer"></view>
</view>
pages/simple-home/index.wxss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
@import '/components/filter/index.wxss';
@import '/pages/home/index.wxss';
@import '/pages/inspection/ranking/statistic.wxss';
@import '/pages/inspection/ranking/sort-options.wxss';
@import '/pages/inspection/ranking/problem-change-list.wxss';
page {
  --header-bottom-padding: 150rpx;
}
/* .page {
  background: linear-gradient(var(--td-primary-color-7), var(--td-bg-color),);
} */
.page .page-header {
  /* background: transparent; */
  background: linear-gradient(var(--td-primary-color-7), var(--td-bg-color));
  padding-bottom: var(--header-bottom-padding);
  /* padding-bottom: initial; */
  /* min-height: 380rpx; */
  /* border-bottom-left-radius: 40%;
  border-bottom-right-radius: 40%; */
}
/* .page .page-container {
  margin-top: initial;
} */
pages/simple-home/packge-info
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
简化主页,用于部分次级管理员或政府部门使用,主要展示现场监管相关内容
pages/usercenter/about/index.wxml
@@ -38,7 +38,7 @@
    </view> -->
  </view>
  <view class="page-footer">
    <view>业务指导:上海市生态环境局执法总队</view>
    <!-- <view>业务指导:上海市生态环境局执法总队</view> -->
    <view>技术支持:上海飞羽环保科技有限公司</view>
  </view>
</view>
pages/usercenter/login/login-home/index.wxml
@@ -17,7 +17,7 @@
    </view> -->
  </view>
  <view class="page-footer">
    <view>业务指导:上海市生态环境局执法总队</view>
    <!-- <view>业务指导:上海市生态环境局执法总队</view> -->
    <view>技术支持:上海飞羽环保科技有限公司</view>
  </view>
</view>
services/inspection/fetchInspection.js
@@ -11,11 +11,12 @@
// èŽ·å–å·¡æŸ¥ä»»åŠ¡æ•°åŠå„è‡ªé—®é¢˜æ•°ç»Ÿè®¡
function fetchInspectionStatistic(area) {
  // ä¸¤ä¸ªç³»ç»Ÿä¹‹é—´çš„场景类型需要转换
  area.scensetypeid = transSceneType(area.scensetypeid);
  const data = {...area}
  data.scensetypeid = transSceneType(area.scensetypeid);
  return post(
    {
      url: `/task/progress`,
      data: area,
      data: data,
    },
    inspectUrl,
  ).then(res => {
@@ -25,11 +26,12 @@
// èŽ·å–å„é—®é¢˜ç±»åž‹å‘ç”Ÿçš„æ•°é‡ç»Ÿè®¡
function fetchProblemsStatistic(area) {
  area.scensetypeid = transSceneType(area.scensetypeid);
  const data = {...area}
  data.scensetypeid = transSceneType(area.scensetypeid);
  return post(
    {
      url: `/problemlist/getStatisticalResult`,
      data: area,
      data: data,
    },
    inspectUrl,
  ).then(res => {
@@ -39,12 +41,13 @@
//
function fetchSubtasksByProType({ area, pType }) {
  area.scensetypeid = transSceneType(area.scensetypeid);
  const data = {...area}
  data.scensetypeid = transSceneType(area.scensetypeid);
  return post(
    {
      url: `/problemlist/type/subtask`,
      params: { pType: pType },
      data: area,
      data: data,
    },
    inspectUrl,
  ).then(res => {
@@ -87,11 +90,12 @@
}
function fetchSubtaskSummaryByArea(area) {
  area.scensetypeid = transSceneType(area.scensetypeid);
  const data = {...area}
  data.scensetypeid = transSceneType(area.scensetypeid);
  return post(
    {
      url: `/subtask/summary/area`,
      data: area,
      data: data,
    },
    inspectUrl,
  ).then(res => {
services/inspection/fetchScene.js
@@ -21,7 +21,8 @@
 * æŸ¥æ‰¾åœºæ™¯
 */
function searchScene(area, page = 1, perPage = 20) {
  area.scensetypeid = transSceneType(area.scensetypeid);
  const data = {...area}
  data.scensetypeid = transSceneType(area.scensetypeid);
  return post(
    {
      url: `/scense/find`,
@@ -29,24 +30,24 @@
        page: page,
        per_page: perPage,
      },
      data: area,
      data: data,
    },
    inspectUrl,
  ).then(res => res.data);
}
//
function fetchSceneProSummary({ area, sortBy, page = 1, per_page = 30 }) {
  area.scensetypeid = transSceneType(area.scensetypeid);
function fetchSceneProSummary({ area, page = 1, per_page = 30 }) {
  const data = {...area}
  data.scensetypeid = transSceneType(area.scensetypeid);
  return post(
    {
      url: `/problemlist/summary/scene`,
      params: {
        sortBy: sortBy,
        page: page,
        per_page: per_page,
      },
      data: area,
      data: data,
    },
    inspectUrl,
  ).then(res => {
utils/time.js
ÎļþÒÑɾ³ý