From 3282e95db0207ee133d1e98d9771dec9d83b0fc4 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期四, 02 四月 2026 16:24:38 +0800
Subject: [PATCH] 2026.4.2 新增专题管理功能
---
pages/supervision/rank-result-proxy.js | 25 +
pages/supervision/topic-proxy.js | 241 ++++++++++++++++++
pages/supervision/rank-result.wxml | 48 +++
pages/selfpatrol/publish/index.wxml | 2
pages/inspection/problems-proxy.js | 20 +
pages/supervision/rank-result.wxss | 43 +++
components/gallery/index.wxss | 4
components/gallery/index.wxml | 2
pages/supervision/index.json | 4
model/ledger/ledgerSummary.js | 1
pages/enterprise/detail/components/ledger-stat/index.js | 5
pages/supervision/index.js | 42 +-
pages/enterprise/detail/components/ledger-stat/index.wxml | 2
components/filter/index.wxml | 4
pages/supervision/index.wxml | 39 --
pages/selfpatrol/components/patrol-record/index.wxss | 24 +
config/index.js | 4
pages/selfpatrol/components/patrol-record/index.wxml | 12
pages/supervision/index.wxss | 10
components/enterprise-rank-result/index.wxss | 7
components/enterprise-rank-result/index.wxml | 66 +---
project.private.config.json | 21 +
pages/enterprise/detail/index.js | 10
pages/enterprise/detail/index.wxml | 6
components/gallery/index.js | 5
components/picker/location-picker/index.wxml | 2
pages/selfpatrol/components/patrol-record/index.js | 10
behaviors/picker/scene/template-scene.wxml | 3
components/picker/location-picker/index.wxss | 2
pages/supervision/topic.wxss | 33 ++
pages/supervision/topic.wxml | 29 ++
services/config/fetchConfig.js | 18 +
project.config.json | 12
33 files changed, 631 insertions(+), 125 deletions(-)
diff --git a/behaviors/picker/scene/template-scene.wxml b/behaviors/picker/scene/template-scene.wxml
index b70cdc1..86dfd20 100644
--- a/behaviors/picker/scene/template-scene.wxml
+++ b/behaviors/picker/scene/template-scene.wxml
@@ -1,5 +1,8 @@
<!-- <template name="scene-picker"> -->
+<import src="/behaviors/picker/template-selector.wxml" />
+
<block wx:if="{{sceneMode == 0}}">
+ <template is="picker-selector" data="{{key: 'scene', value: sceneText}}" />
<t-picker
visible="{{sceneVisible}}"
value="{{sceneValue}}"
diff --git a/components/enterprise-rank-result/index.wxml b/components/enterprise-rank-result/index.wxml
index 1e13a7a..d172880 100644
--- a/components/enterprise-rank-result/index.wxml
+++ b/components/enterprise-rank-result/index.wxml
@@ -1,47 +1,23 @@
-<view class="enterprise-info__wrap" bind:tap="handCellClick">
- <view slot="image" class="enterprise-info__img">
- <view class="enterprise-info__img__score"> {{item.score}} </view>
- <view class="enterprise-info__img__text"> 鑷瘎 </view>
- <t-tag
- max-width="{{130}}"
- shape="square"
- size="small"
- theme="default"
- variant="light-outline"
- >{{item.updateTime}}</t-tag
- >
- </view>
- <view class="enterprise-info__main">
- <view slot="title" class="enterprise-info__title"> {{item.name}} </view>
- <t-divider />
- <view slot="description" class="enterprise-info__tag">
- <t-tag
- max-width="{{130}}"
- shape="square"
- size="small"
- theme="success"
- variant="light-outline"
- disabled
- >杩愯惀涓�</t-tag
- >
- <t-tag
- t-class="t-class-tag"
- max-width="{{130}}"
- shape="square"
- size="medium"
- theme="default"
- variant="light"
- >{{item.district}}</t-tag
- >
- <t-tag
- t-class="t-class-tag"
- max-width="{{130}}"
- shape="square"
- size="medium"
- theme="default"
- variant="light"
- >{{item.sceneType}}</t-tag
- >
+<view class="enterprise-info__wrap">
+ <view class="enterprise-info__top" bind:tap="handCellClick">
+ <view slot="image" class="enterprise-info__img">
+ <view class="enterprise-info__img__score"> {{item.score}} </view>
+ <view class="enterprise-info__img__text"> 鑷瘎 </view>
+ <t-tag max-width="{{130}}" shape="square" size="small" theme="default" variant="light-outline">{{item.updateTime}}
+ </t-tag>
+ </view>
+ <view class="enterprise-info__main">
+ <view slot="title" class="enterprise-info__title"> {{item.name}} </view>
+ <t-divider />
+ <view slot="description" class="enterprise-info__tag">
+ <t-tag max-width="{{130}}" shape="square" size="small" theme="success" variant="light-outline" disabled>杩愯惀涓�
+ </t-tag>
+ <t-tag t-class="t-class-tag" max-width="{{130}}" shape="square" size="medium" theme="default" variant="light">
+ {{item.district}}</t-tag>
+ <t-tag t-class="t-class-tag" max-width="{{130}}" shape="square" size="medium" theme="default" variant="light">
+ {{item.sceneType}}</t-tag>
+ </view>
</view>
</view>
-</view>
+ <slot></slot>
+</view>
\ No newline at end of file
diff --git a/components/enterprise-rank-result/index.wxss b/components/enterprise-rank-result/index.wxss
index c4ea8a7..1fb9f14 100644
--- a/components/enterprise-rank-result/index.wxss
+++ b/components/enterprise-rank-result/index.wxss
@@ -5,13 +5,16 @@
box-shadow: var(--td-shadow-4);
padding: var(--td-spacer-1);
margin-top: var(--td-spacer);
- display: flex;
}
-.enterprise-info__wrap:active {
+.enterprise-info__top:active {
background-color: var(--td-gray-color-1);
}
+.enterprise-info__top {
+ display: flex;
+}
+
.enterprise-info__img {
display: block;
}
diff --git a/components/filter/index.wxml b/components/filter/index.wxml
index 94d15a8..21b04a6 100644
--- a/components/filter/index.wxml
+++ b/components/filter/index.wxml
@@ -1,6 +1,6 @@
<import src="/behaviors/picker/template-selector.wxml" />
-<t-sticky>
+<!-- <t-sticky> -->
<view class="filter-wrap">
<view class="filter-item" bind:tap="handleSort">
<text style="color: {{sorts !== '' ? color : '' }}">璇勫垎</text>
@@ -33,7 +33,7 @@
<view class="filter-wrap-2">
<include src="/behaviors/picker/scene/template-scene.wxml" />
</view>
-</t-sticky>
+<!-- </t-sticky> -->
<include src="/behaviors/picker/time/template-time.wxml" />
<!-- 绛涢�夊脊妗� -->
diff --git a/components/gallery/index.js b/components/gallery/index.js
index 4597a51..e3b2f7c 100644
--- a/components/gallery/index.js
+++ b/components/gallery/index.js
@@ -55,6 +55,11 @@
extClass: {
type: String,
value: ''
+ },
+ // 鏄惁搴曢儴绌哄嚭瀹夊叏璺濈
+ safeBottom :{
+ type: Boolean,
+ value: true
}
},
data: {
diff --git a/components/gallery/index.wxml b/components/gallery/index.wxml
index 1d74a1f..b259d4f 100644
--- a/components/gallery/index.wxml
+++ b/components/gallery/index.wxml
@@ -1,6 +1,6 @@
<!--component/mygallery/mygallery.wxml-->
<page-container show="{{show}}">
- <view class="fyui-gallery {{show ? 'fyui-gallery_show' : ''}} {{extClass}}">
+ <view class="fyui-gallery {{show ? 'fyui-gallery_show' : ''}} {{extClass}} {{safeBottom ? 'safe-bottom' : ''}}">
<t-icon wx:if="{{showRemark}}" class="fyui-gallery__close" name="close" color="white" size="26" bindtap="hideGallery"></t-icon>
<view class="fyui-gallery__info" wx:if="{{true}}">{{current+1}} / {{currentImgs.length}}</view>
<swiper class="fyui-gallery__img__wrp" bindtap="toggle" indicator-dots="{{false}}" bindanimationfinish="change" current="{{current}}" autoplay="{{false}}" duration="{{500}}">
diff --git a/components/gallery/index.wxss b/components/gallery/index.wxss
index 5b1635a..8dfe294 100644
--- a/components/gallery/index.wxss
+++ b/components/gallery/index.wxss
@@ -18,6 +18,10 @@
flex-wrap: nowrap
}
+.safe-bottom {
+ bottom: calc(env(safe-area-inset-bottom) + 96rpx);
+}
+
.fyui-gallery_show {
display: flex
}
diff --git a/components/picker/location-picker/index.wxml b/components/picker/location-picker/index.wxml
index 56b2b4b..d1f9ac3 100644
--- a/components/picker/location-picker/index.wxml
+++ b/components/picker/location-picker/index.wxml
@@ -46,7 +46,7 @@
data-key="province"
bindtap="showCascader"
>
- <text>{{_.defaultSelectOption(provinceText)}}</text>
+ <text class="picker-selector__text">{{_.defaultSelectOption(provinceText)}}</text>
<t-icon name="caret-down-small" size="36rpx" color="{{color}}" />
</view>
<view
diff --git a/components/picker/location-picker/index.wxss b/components/picker/location-picker/index.wxss
index d22fd52..98b88ef 100644
--- a/components/picker/location-picker/index.wxss
+++ b/components/picker/location-picker/index.wxss
@@ -15,7 +15,7 @@
color: rgba(51, 51, 51, 1);
}
-.picker-selector>text {
+.picker-selector .picker-selector__text {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
diff --git a/config/index.js b/config/index.js
index 4551236..f3d8c5e 100644
--- a/config/index.js
+++ b/config/index.js
@@ -1,6 +1,6 @@
// 瀹堟硶鑷姪灏忕▼搴�
-const baseUrl = 'http://192.168.0.103:8082';
-// const baseUrl = 'https://fyami.com.cn';
+// const baseUrl = 'http://192.168.0.103:8082';
+const baseUrl = 'https://fyami.com.cn';
// 瀹堟硶鑷姪灏忕▼搴忓浘鐗�
const bu = 'https://fyami.com.cn';
diff --git a/model/ledger/ledgerSummary.js b/model/ledger/ledgerSummary.js
index d15d07e..e4f669a 100644
--- a/model/ledger/ledgerSummary.js
+++ b/model/ledger/ledgerSummary.js
@@ -44,6 +44,7 @@
m.upload++;
}
m.children.push({
+ subTypeId: s.ledgerSubTypeId,
name: s.ledgerName,
icon: s.iconUrl,
upload: s.upLoad,
diff --git a/pages/enterprise/detail/components/ledger-stat/index.js b/pages/enterprise/detail/components/ledger-stat/index.js
index d6ef077..0dca41f 100644
--- a/pages/enterprise/detail/components/ledger-stat/index.js
+++ b/pages/enterprise/detail/components/ledger-stat/index.js
@@ -47,8 +47,13 @@
});
}
},
+ // 鍙充笂瑙掓寜閽偣鍑讳簨浠�
noteClick() {
this.triggerEvent('noteClick');
},
+ // 鍏蜂綋鏌愪釜鍙拌处鐐瑰嚮浜嬩欢
+ ledgerClick(e) {
+ this.triggerEvent('ledgerClick', e.currentTarget.dataset.ledger);
+ }
},
});
diff --git a/pages/enterprise/detail/components/ledger-stat/index.wxml b/pages/enterprise/detail/components/ledger-stat/index.wxml
index ed5d861..84c3cee 100644
--- a/pages/enterprise/detail/components/ledger-stat/index.wxml
+++ b/pages/enterprise/detail/components/ledger-stat/index.wxml
@@ -67,6 +67,8 @@
>
<view
class="enterprise-info__ledger-wrap {{(child.upload || !child.needUpdate) ? 'enterprise-info__ledger-wrap__disable' : ''}}"
+ data-ledger="{{child}}"
+ bind:tap="ledgerClick"
>
<view class="enterprise-info__ledger-item__left">
<text
diff --git a/pages/enterprise/detail/index.js b/pages/enterprise/detail/index.js
index 5dcb3d8..a1202de 100644
--- a/pages/enterprise/detail/index.js
+++ b/pages/enterprise/detail/index.js
@@ -126,13 +126,21 @@
}
},
- navToLedger(e) {
+ navToLedgerHistory(e) {
const { mode } = e.currentTarget.dataset;
wx.navigateTo({
url: `/pages/enterprise/ledger/history/index?userId=${this.data.enterprise.id}&sceneTypeId=${this.data.enterprise.sceneTypeId}&time=${this.data.monthValue}&mode=${mode}`,
});
},
+ navToLedgerDetail(e) {
+ const ledger = e.detail;
+ console.log('navToLedgerDetail', ledger);
+ wx.navigateTo({
+ url: `/pages/enterprise/ledger/detail/index`,
+ });
+ },
+
navToPromise() {
// wx.navigateTo({
// url: `/pages/enterprise/promise/history/index?userId=${this.data.enterprise.id}`,
diff --git a/pages/enterprise/detail/index.wxml b/pages/enterprise/detail/index.wxml
index ffb0110..596d2bf 100644
--- a/pages/enterprise/detail/index.wxml
+++ b/pages/enterprise/detail/index.wxml
@@ -50,7 +50,8 @@
loading="{{loadStatus == 1}}"
value="{{selfCheckInfo}}"
data-mode="1"
- bind:noteClick="navToLedger"
+ bind:noteClick="navToLedgerHistory"
+ bind:ledgerClick="navToLedgerDetail"
></t-ledger-stat>
<t-ledger-stat
title="鍙拌处绠$悊"
@@ -58,7 +59,8 @@
loading="{{loadStatus == 1}}"
value="{{ledgerInfo}}"
data-mode="2"
- bind:noteClick="navToLedger"
+ bind:noteClick="navToLedgerHistory"
+ bind:ledgerClick="navToLedgerDetail"
></t-ledger-stat>
<t-assessment-stat
title="鑷祴鑷瘎"
diff --git a/pages/inspection/problems-proxy.js b/pages/inspection/problems-proxy.js
index 80fb2fa..c8fb781 100644
--- a/pages/inspection/problems-proxy.js
+++ b/pages/inspection/problems-proxy.js
@@ -25,7 +25,17 @@
label: {
show: true,
position: 'inside',
- formatter: '{d}%',
+ // formatter: '{d}%',
+ formatter: function (params) {
+ let perStr = params.percent + '';
+ if (perStr.indexOf('.') != -1) {
+ let percent = params.percent.toFixed(1); // 淇濈暀涓や綅灏忔暟
+ return `${percent}%`;
+ } else {
+ let percent = params.percent.toFixed(0);
+ return `${percent}%`;
+ }
+ },
},
},
],
@@ -94,7 +104,7 @@
},
summaryAnalysis(data) {
- const {time, inspection: v} = this.data
+ const { time, inspection: v } = this.data;
// 缁勫悎琛屾斂鍖哄垝
let loc = '';
loc += v.provinceName ? v.provinceName : '';
@@ -102,7 +112,7 @@
loc += v.districtName ? `${v.districtName}` : '';
loc += v.townName ? `${v.townName}` : '';
// 鏃堕棿
- const timeText = dayjs(time).format('YYYY骞碝M鏈�')
+ const timeText = dayjs(time).format('YYYY骞碝M鏈�');
// 鎬荤粨
let summaryText = '';
@@ -113,7 +123,9 @@
totalC += p.changeCount;
});
const cPer = totalP == 0 ? '--' : Math.round((totalC / totalP) * 1000) / 10 + '%';
- summaryText = `${loc+timeText}鍏卞彂鐜�${data.length}绉嶇被鍨嬮棶棰橈紝闂鎬昏${totalP}涓紝鏁存敼鐜�${cPer}`;
+ summaryText = `${loc + timeText}鍏卞彂鐜�${
+ data.length
+ }绉嶇被鍨嬮棶棰橈紝闂鎬昏${totalP}涓紝鏁存敼鐜�${cPer}`;
this.setData({ summaryText });
},
},
diff --git a/pages/selfpatrol/components/patrol-record/index.js b/pages/selfpatrol/components/patrol-record/index.js
index 6a3a8ed..1cb0a5f 100644
--- a/pages/selfpatrol/components/patrol-record/index.js
+++ b/pages/selfpatrol/components/patrol-record/index.js
@@ -13,6 +13,14 @@
},
item: {
type: Object,
+ observer(value) {
+ if (value.path1 && value.path1.length > 0) {
+ this.setData({
+ picPath: value.path1[0],
+ leftPic: value.path1.length - 1,
+ });
+ }
+ },
},
},
@@ -20,7 +28,7 @@
* 缁勪欢鐨勫垵濮嬫暟鎹�
*/
data: {
- indexText: '01.'
+ indexText: '01.',
},
/**
diff --git a/pages/selfpatrol/components/patrol-record/index.wxml b/pages/selfpatrol/components/patrol-record/index.wxml
index 5cc815c..4cfc7e3 100644
--- a/pages/selfpatrol/components/patrol-record/index.wxml
+++ b/pages/selfpatrol/components/patrol-record/index.wxml
@@ -19,7 +19,7 @@
<text slot="error">鏈彁浜�</text>
</t-image>
<block wx:else>
- <t-image
+ <!-- <t-image
wx:for="{{item.path1}}"
wx:key="index"
wx:for-item="urlItem"
@@ -30,7 +30,17 @@
height="80rpx"
shape="round"
aria-label="{{item.ledgerName}}"
+ /> -->
+ <t-image
+ t-class="t-class-image"
+ src="{{picPath}}"
+ mode="aspectFill"
+ width="80rpx"
+ height="80rpx"
+ shape="round"
+ aria-label="{{item.ledgerName}}"
/>
+ <view wx:if="{{leftPic > 0}}" class="left-pic">+{{leftPic}}</view>
</block>
</view>
</view>
diff --git a/pages/selfpatrol/components/patrol-record/index.wxss b/pages/selfpatrol/components/patrol-record/index.wxss
index 5869f1a..3f27550 100644
--- a/pages/selfpatrol/components/patrol-record/index.wxss
+++ b/pages/selfpatrol/components/patrol-record/index.wxss
@@ -16,7 +16,7 @@
position: relative;
}
-.patrol-unfinished::after {
+/* .patrol-unfinished::after {
content: '';
position: absolute;
bottom: 0;
@@ -26,14 +26,14 @@
border-right: var(--ei-triangle-border) solid var(--td-error-color-6);
border-top: var(--ei-triangle-border) solid transparent;
border-left: var(--ei-triangle-border) solid transparent;
-}
+} */
.patrol-finished {
position: relative;
opacity: 0.7;
}
-.patrol-finished::after {
+/* .patrol-finished::after {
content: '';
position: absolute;
bottom: 0;
@@ -43,12 +43,14 @@
border-right: var(--ei-triangle-border) solid var(--td-success-color-6);
border-top: var(--ei-triangle-border) solid transparent;
border-left: var(--ei-triangle-border) solid transparent;
-}
+} */
.patrol-record-text-wrap {
width: 50%;
display: flex;
gap: 4px;
+ align-items: baseline;
+ flex: 1;
}
.patrol-record-img-wrap {
@@ -69,4 +71,18 @@
.t-class-image {
border: 1px solid rgba(0, 0, 0, 0.1);
font-size: var(--td-font-size-s);
+}
+
+.left-pic {
+ position: absolute;
+ right: 4px;
+ bottom: 4px;
+ background-color: rgba(250, 250, 250, 0.705);
+ border: 1px solid rgba(0, 0, 0, 0.452);
+ border-radius: 6px;
+ font-size: 12px;
+ line-height: 12px;
+ width: 14px;
+ height: 14px;
+ padding: 2px;
}
\ No newline at end of file
diff --git a/pages/selfpatrol/publish/index.wxml b/pages/selfpatrol/publish/index.wxml
index 85125d8..ad00b2f 100644
--- a/pages/selfpatrol/publish/index.wxml
+++ b/pages/selfpatrol/publish/index.wxml
@@ -140,7 +140,7 @@
size="extra-small"
bindtap="onSelfPatrolPickerChange"
>
- <!-- {{selectedPatrolTypes[patrolPopupIndex].selectedCount > 0 ? '(' + selectedPatrolTypes[patrolPopupIndex].selectedCount + ')' : ''}} -->
+ {{selectedPatrolTypes[patrolPopupIndex].selectedCount > 0 ? '(' + selectedPatrolTypes[patrolPopupIndex].selectedCount + ')' : ''}}
纭畾
</t-button>
</view>
diff --git a/pages/supervision/index.js b/pages/supervision/index.js
index 5cb0c66..7ce8c53 100644
--- a/pages/supervision/index.js
+++ b/pages/supervision/index.js
@@ -1,11 +1,13 @@
// pages/supervision/index.js
import { useLoading } from '../../behaviors/loading';
+import { useTopic } from './topic-proxy.js';
+import { useRankResult } from './rank-result-proxy.js';
import { fetchGradeList } from '../../services/enterprise/fetchAssessment';
import { sceneTypeList } from '../../common/dataSceneTypes';
import dayjs from 'dayjs';
Page({
- behaviors: [useLoading],
+ behaviors: [useLoading, useTopic, useRankResult],
/**
* 椤甸潰鐨勫垵濮嬫暟鎹�
*/
@@ -49,21 +51,16 @@
init() {
this.optionsCount++;
// 鍖呮嫭鏃堕棿銆佸満鏅被鍨嬨�佸尯鍩熶笁涓�夐」锛屽叏閮ㄨ幏鍙栧垵濮嬪�煎悗锛屾墽琛屽姞杞�
- if (this.optionsCount == 3) this._startLoad();
+ if (this.optionsCount == 3) {
+ // 鍒濆鍖栦笓棰樼鐞嗙殑閫夐」
+ this.initselectedTopics();
+ this._startLoad();
+ }
},
_fetchData(page) {
- let {
- province,
- city,
- district,
- town,
- area,
- management,
- sorts,
- sceneType,
- period,
- } = this.data.searchOptions;
+ let { province, city, district, town, area, management, sorts, sceneType, period } =
+ this.data.searchOptions;
return fetchGradeList({
page,
data: {
@@ -78,10 +75,12 @@
sceneTypes: [sceneType],
},
}).then(res => {
+ const startIndex = page == 1 ? 0 : this.data.searchResult.length
this.setData({
- searchResult:
- page == 1 ? res.data : this.data.searchResult.concat(res.data),
+ searchResult: page == 1 ? res.data : this.data.searchResult.concat(res.data),
});
+ // 鑾峰彇涓撻鐩稿叧鐨勫彴璐︿俊鎭�
+ this.fetchTopicLedgers(startIndex);
return res.head;
});
},
@@ -100,8 +99,10 @@
const { timeValue } = e.detail;
const p = dayjs(timeValue);
const period = `${p.year()}/${p.month() + 1}-${p.month() + 1}`;
+ const time = p.format('YYYY-MM-DD');
this.setData({
['searchOptions.period']: period,
+ ['searchOptions.time']: time,
});
},
initTime(e) {
@@ -126,6 +127,8 @@
},
handleScenePickerChange(e) {
this.setSceneValue(e);
+ // 鍒濆鍖栦笓棰樼鐞嗙殑閫夐」
+ this.initselectedTopics();
this._startLoad();
},
@@ -144,14 +147,7 @@
setPopupValue(e) {
const { searchOptions } = this.data;
- const {
- provinceText,
- cityText,
- districtText,
- townText,
- areaText,
- managementText,
- } = e.detail;
+ const { provinceText, cityText, districtText, townText, areaText, managementText } = e.detail;
searchOptions.province = provinceText;
searchOptions.city = cityText;
searchOptions.district = districtText;
diff --git a/pages/supervision/index.json b/pages/supervision/index.json
index 13b9335..c367989 100644
--- a/pages/supervision/index.json
+++ b/pages/supervision/index.json
@@ -10,6 +10,8 @@
"load-more": "/components/load-more/index",
"t-empty-page": "/components/empty-page/index",
"enterprise-rank-result": "/components/enterprise-rank-result/index",
- "scene-picker": "/components/scene-picker/index"
+ "scene-picker": "/components/scene-picker/index",
+ "patrol-record": "../selfpatrol/components/patrol-record/index",
+ "my-gallery": "/components/gallery/index"
}
}
\ No newline at end of file
diff --git a/pages/supervision/index.wxml b/pages/supervision/index.wxml
index 0d3d56f..f5ac3d0 100644
--- a/pages/supervision/index.wxml
+++ b/pages/supervision/index.wxml
@@ -5,40 +5,25 @@
<view class="supervision-search" bind:tap="navToSearchPage">
<t-search placeholder="{{placeholder}}" leftIcon="search" disabled> </t-search>
</view>
- <filter
- sceneMode="{{1}}"
- bind:sortsChange="handleSortsChange"
- bind:timeInitValue="initTime"
- bind:timePickerChange="handleTimePickerChange"
- bind:sceneInitValue="initScene"
- bind:scenePickerChange="handleScenePickerChange"
- bind:showFilterPopup="showFilterPopup"
- >
- <filter-popup-2
- slot="filterPopup"
- show="{{show}}"
- bind:showFilterPopupClose="showFilterPopupClose"
- bind:initValue="initPopup"
- bind:reset="onPopupSearch"
- bind:confirm="onPopupSearch"
- >
- </filter-popup-2>
- </filter>
+ <t-sticky>
+ <filter sceneMode="{{1}}" bind:sortsChange="handleSortsChange" bind:timeInitValue="initTime"
+ bind:timePickerChange="handleTimePickerChange" bind:sceneInitValue="initScene"
+ bind:scenePickerChange="handleScenePickerChange" bind:showFilterPopup="showFilterPopup">
+ <filter-popup-2 slot="filterPopup" show="{{show}}" bind:showFilterPopupClose="showFilterPopupClose"
+ bind:initValue="initPopup" bind:reset="onPopupSearch" bind:confirm="onPopupSearch">
+ </filter-popup-2>
+ </filter>
+ <include src="./topic.wxml" />
+ </t-sticky>
</view>
<view class="page-container">
<template is="pulldown-loading" wx:if="{{pageLoading && searchResult.length != 0}}" />
<block wx:if="{{searchResult.length > 0}}">
- <enterprise-rank-result
- wx:for="{{searchResult}}"
- wx:key="index"
- wx:for-index="index"
- result="{{item}}"
- bind:click="handCellClick"
- ></enterprise-rank-result>
+ <include src="./rank-result.wxml" />
</block>
<t-empty-page wx:elif="{{!pageLoading}}" description="鏃犺嚜璇勮褰�" />
<load-more list-is-empty="{{!searchResult.length}}" status="{{loadStatus}}" bind:retry="_startLoad" />
</view>
<view class="page-footer"></view>
-</view>
+</view>
\ No newline at end of file
diff --git a/pages/supervision/index.wxss b/pages/supervision/index.wxss
index 80a870c..2d25412 100644
--- a/pages/supervision/index.wxss
+++ b/pages/supervision/index.wxss
@@ -1,4 +1,7 @@
/* pages/supervision/index.wxss */
+@import './topic.wxss';
+@import './rank-result.wxss';
+
.page .page-header {
/* background: linear-gradient(var(--td-primary-color-7), var(--td-primary-color-4));
min-height: 380rpx;
@@ -13,6 +16,13 @@
padding-top: 1px;
}
+.supervision__loading{
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 50rpx;
+}
+
.fy-loading {
text-align: center;
background-color: transparent;
diff --git a/pages/supervision/rank-result-proxy.js b/pages/supervision/rank-result-proxy.js
new file mode 100644
index 0000000..988e0ae
--- /dev/null
+++ b/pages/supervision/rank-result-proxy.js
@@ -0,0 +1,25 @@
+/**
+ * 鎺掑悕鍒楄〃
+ */
+export const useRankResult = Behavior({
+ data: {},
+ methods: {
+ ledgerClick() {},
+ previewImage(e) {
+ const { index1, index2 } = e.currentTarget.dataset;
+ const ledger = this.data.searchResult[index1].topics[index2].detail;
+ if (ledger.ledgerFinished) {
+ const previewTitle = ledger.ledgerName;
+ const previewRemark = ledger.remark1;
+ const previewImageUrls = ledger.path1;
+ this.setData({
+ previewImageUrls,
+ previewRemark,
+ previewTitle,
+ previewCurrent: 0,
+ showPreview: true,
+ });
+ }
+ },
+ },
+});
diff --git a/pages/supervision/rank-result.wxml b/pages/supervision/rank-result.wxml
new file mode 100644
index 0000000..cbef2c3
--- /dev/null
+++ b/pages/supervision/rank-result.wxml
@@ -0,0 +1,48 @@
+<wxs src="../enterprise/detail/components/utils.wxs" module="_" />
+
+<enterprise-rank-result wx:for="{{searchResult}}" wx:key="index" wx:for-index="index" result="{{item}}"
+ bind:click="handCellClick">
+ <view wx:if="{{item.topicLoading}}" class="supervision__loading">
+ <t-loading theme="dots" size="50rpx" />
+ </view>
+ <block wx:elif="{{item.topics.length > 0}}">
+ <t-divider />
+ <!-- <view wx:for="{{item.topics}}" wx:key="index2" wx:for-item="item2" wx:for-index="index2">
+ {{item2.ledgerName}}
+ </view> -->
+ <t-collapse default-expand-all>
+ <t-collapse-panel header="鍙拌处涓婁紶鎯呭喌" value="0" t-class-header="t-class-collapse-panel-header"
+ t-class-content="t-class-collapse-panel-content" expandIcon
+ style="--td-cell-title-color: var(--td-text-color-primary)">
+ <view slot="content">
+ <block wx:for="{{item.topics}}" wx:for-index="index2" wx:key="index2" wx:for-item="item2">
+ <!-- <view
+ class="enterprise-info__ledger-wrap {{(item2.upload || !item2.needUpdate) ? 'enterprise-info__ledger-wrap__disable' : ''}}"
+ data-ledger="{{item2}}" bind:tap="ledgerClick"> -->
+
+ <patrol-record item="{{item2.detail}}" index="{{index2}}" data-index1="{{index}}" data-index2="{{index2}}"
+ bindtap="previewImage">
+ </patrol-record>
+ <!-- <view class="enterprise-info__ledger-item__left">
+ <text style="color: {{item2.needUpdate ? ' var(--td-error-color);' : 'transparent;'}}">*</text>
+ {{item2.ledgerName}}
+ </view>
+ <view class="enterprise-info__ledger-item__right">
+ {{item2.upload ? '鉁�' : '鉁�'}}
+ </view>
+ <view class="enterprise-info__ledger-item__right">
+ {{item2.onTime ? '鍑嗘椂' : (item2.upload ? '瓒呮椂' : '-')}}
+ </view> -->
+ <!-- </view> -->
+
+ <t-divider />
+ </block>
+ </view>
+ </t-collapse-panel>
+ </t-collapse>
+ </block>
+</enterprise-rank-result>
+
+<my-gallery safeBottom="{{true}}" hide-on-click="{{true}}" show-delete="{{false}}" show="{{showPreview}}"
+ img-urls="{{previewImageUrls}}" current="{{previewCurrent}}" title="{{previewTitle}}" remark="{{previewRemark}}">
+</my-gallery>
\ No newline at end of file
diff --git a/pages/supervision/rank-result.wxss b/pages/supervision/rank-result.wxss
new file mode 100644
index 0000000..c71d8cd
--- /dev/null
+++ b/pages/supervision/rank-result.wxss
@@ -0,0 +1,43 @@
+.enterprise-info__ledger-wrap {
+ display: flex;
+ /* color: var(--td-error-color); */
+ font-size: var(--td-font-size-base);
+}
+
+.enterprise-info__ledger-wrap__disable {
+ color: var(--td-text-color-disabled);
+}
+
+.enterprise-info__ledger-wrap__header {
+ color: var(--td-text-color-secondary);
+ /* border-bottom: 1rpx solid var(--td-gray-color-1); */
+ margin-bottom: var(--td-spacer);
+}
+
+.enterprise-info__ledger-wrap .enterprise-info__ledger-item__left,
+.enterprise-info__ledger-item__right {
+ display: flex;
+ align-items: center;
+ margin-right: 2px;
+ flex: 3;
+}
+
+.enterprise-info__ledger-item__right {
+ justify-content: center;
+ flex: 1;
+}
+
+.t-class-divider {
+ margin: 0 !important;
+}
+
+.t-class-collapse-panel-header {
+ padding: 0 !important;
+ padding-top: var(--td-spacer) !important;
+ padding-bottom: var(--td-spacer) !important;
+ /* font-weight: 600 !important; */
+}
+
+.t-class-collapse-panel-content {
+ padding: 0 !important;
+}
\ No newline at end of file
diff --git a/pages/supervision/topic-proxy.js b/pages/supervision/topic-proxy.js
new file mode 100644
index 0000000..a43408e
--- /dev/null
+++ b/pages/supervision/topic-proxy.js
@@ -0,0 +1,241 @@
+import { fetchLedgerType } from '../../services/enterprise/fetchLedger';
+import { fetchLedgerDetail } from '../../services/enterprise/fetchLedger';
+import { toLabel } from '../../common/dataSceneTypes';
+
+/**
+ * 鍙拌处涓撻绠$悊
+ */
+export const useTopic = Behavior({
+ data: {
+ // 涓撻閫夋嫨寮瑰嚭妗�
+ popupVisible: false,
+ // 鎸夊満鏅被鍨嬪垎绫荤殑鍙拌处閫夋嫨鎯呭喌
+ selectedTopics: {},
+ // 涓撻瀵瑰簲鐨勫彴璐︿俊鎭姞杞界姸鎬�
+ topicLoading: false,
+ },
+ methods: {
+ /**
+ * 鍒濆鍖栧綋鍓嶅満鏅被鍨嬩笅鐨勫彲閫夊彴璐﹂�夐」锛�
+ * 鍒濆鍖栭粯璁ら�夋嫨鐨勪笓棰橈紙鍙拌处绫诲瀷锛夛紝
+ * @param {Function} callback 鍙�夌殑鍥炶皟鍑芥暟
+ */
+ initselectedTopics(callback) {
+ const { selectedTopics } = this.data;
+ const { sceneType } = this.data.searchOptions;
+ if (selectedTopics[sceneType] == undefined || selectedTopics[sceneType].length == 0) {
+ fetchLedgerType({ sceneType: parseInt(sceneType) }).then(res => {
+ // 閫夋嫨鍓嶄笁涓彴璐︿负榛樿涓撻
+ let count = 3;
+ for (let i = 0; i < 3; i++) {
+ if (i >= res.length) break;
+ res[i].selected = {
+ color: 'green',
+ count: '鉁�',
+ shape: 'square',
+ };
+ }
+ selectedTopics[sceneType] = {
+ sceneType,
+ sceneTypeText: toLabel(sceneType),
+ topicText: '璇烽�夋嫨涓撻',
+ allLedgerTypes: res,
+ selectedLedgers: [],
+ checkAll: false,
+ selectedCount: 0,
+ };
+ this.setData({ selectedTopics });
+ this.refreshSelectedLedger();
+ if (typeof callback === 'function') {
+ callback();
+ }
+ });
+ } else {
+ if (typeof callback === 'function') {
+ callback();
+ }
+ }
+ },
+ // 鏄剧ず寮瑰嚭妗�
+ showPopUp() {
+ this.initselectedTopics(() => this.setData({ popupVisible: true }));
+ },
+ // 鐩戝惉寮瑰嚭妗嗙姸鎬佸彉鍖栵紝渚嬪閫氳繃鐐瑰嚮澶栭儴閬僵灞傚叧闂脊鍑烘鏃�
+ onPopupVisibleChange(e) {
+ const { visible } = e.detail;
+ this.setData({ popupVisible: visible });
+ if (!visible) {
+ this.closePatrolList();
+ }
+ },
+ // 鍙栨秷骞跺叧闂彴璐︾被鍒�夋嫨寮瑰嚭妗�
+ closePatrolList() {
+ const { selectedTopics } = this.data;
+ const { sceneType } = this.data.searchOptions;
+ const { allLedgerTypes, selectedLedgers } = selectedTopics[sceneType];
+ allLedgerTypes.forEach(p => {
+ if (selectedLedgers.indexOf(p.ledgerSubTypeId) == -1) {
+ p.selected = false;
+ } else {
+ p.selected = {
+ color: 'green',
+ count: '鉁�',
+ shape: 'square',
+ };
+ }
+ });
+ this.setData({
+ [`selectedTopics.${sceneType}.allLedgerTypes`]: allLedgerTypes,
+ popupVisible: false,
+ });
+ this._isCheckAll();
+ },
+ // 閫夋嫨鍙拌处绫诲埆
+ choseLedgerType(e) {
+ const { index } = e.currentTarget.dataset;
+ const { selectedTopics } = this.data;
+ const { sceneType } = this.data.searchOptions;
+ const { allLedgerTypes, selectedLedgers } = selectedTopics[sceneType];
+ let { selected, ledgerSubTypeId } = allLedgerTypes[index];
+ if (selected) {
+ selected = null;
+ } else {
+ selected = {
+ color: 'green',
+ count: '鉁�',
+ shape: 'square',
+ };
+ }
+ this.setData({
+ [`selectedTopics.${sceneType}.allLedgerTypes[${index}].selected`]: selected,
+ });
+ this._isCheckAll();
+ },
+ // 鍏ㄩ��
+ onCheckAll(e) {
+ const { checked } = e.detail;
+ const { selectedTopics } = this.data;
+ const { sceneType } = this.data.searchOptions;
+ const { allLedgerTypes } = selectedTopics[sceneType];
+ allLedgerTypes.forEach(p => {
+ if (checked) {
+ p.selected = {
+ color: 'green',
+ count: '鉁�',
+ shape: 'square',
+ };
+ } else {
+ p.selected = null;
+ }
+ });
+ this.setData({ [`selectedTopics.${sceneType}.allLedgerTypes`]: allLedgerTypes });
+ this._isCheckAll();
+ },
+ /**
+ * 鍏ㄩ�夊垽鏂�
+ * 鏍规嵁鐢ㄦ埛閫夋嫨鐨勬儏鍐碉紝鍒ゆ柇鏄惁宸茬粡鍏ㄩ�夛紝鏇存柊鍏ㄩ�夊彉閲忕姸鎬�
+ */
+ _isCheckAll() {
+ const { selectedTopics } = this.data;
+ const { sceneType } = this.data.searchOptions;
+ const { allLedgerTypes } = selectedTopics[sceneType];
+ // 鍒ゆ柇鏄惁鍏ㄩ�変腑
+ const p = allLedgerTypes.filter(v => {
+ return v.selected == undefined || v.selected == null || v.selected == false;
+ });
+ this.setData({
+ [`selectedTopics.${sceneType}.selectedCount`]: allLedgerTypes.length - p.length,
+ [`selectedTopics.${sceneType}.checkAll`]: p.length == 0,
+ });
+ },
+ // 鍒锋柊閫夋嫨缁撴灉
+ refreshSelectedLedger() {
+ const { selectedTopics } = this.data;
+ const { sceneType } = this.data.searchOptions;
+ const { allLedgerTypes, selectedLedgers } = selectedTopics[sceneType];
+ let topicText = '';
+ allLedgerTypes.forEach(p => {
+ const i = selectedLedgers.indexOf(p.ledgerSubTypeId);
+ if (p.selected) {
+ if (i == -1) {
+ selectedLedgers.push(p.ledgerSubTypeId);
+ }
+ if (topicText != '') {
+ topicText += '銆�';
+ }
+ topicText += p.ledgerName;
+ } else {
+ if (i != -1) {
+ selectedLedgers.splice(i, 1);
+ }
+ }
+ });
+ if (topicText == '') {
+ topicText = '鐐瑰嚮閫夋嫨';
+ } else if (selectedLedgers.length == allLedgerTypes.length) {
+ topicText = '宸查�夊叏閮ㄧ被鍒�';
+ } else if (topicText.length > 9) {
+ topicText = topicText.substring(0, 10);
+ topicText += `...绛�${selectedLedgers.length}涓被鍒玚;
+ }
+ this.setData({
+ [`selectedTopics.${sceneType}.selectedLedgers`]: selectedLedgers,
+ [`selectedTopics.${sceneType}.topicText`]: topicText,
+ });
+ },
+ /**
+ * 鍙拌处绫诲埆閫夋嫨浜嬩欢
+ * 鍦ㄧ敤鎴风偣鍑诲脊鍑烘鐨勨�滅‘瀹氣�濇寜閽悗锛屽皢[allLedgerTypes]閫変腑鐨勫彴璐︽洿鏂板埌[selectedLedgers]鍒楄〃涓紝
+ * 鍏抽棴寮瑰嚭妗嗭紝骞朵笖瑙﹀彂鑾峰彇鍙拌处淇℃伅鐨勫嚱鏁�
+ */
+ onLedgerPickerChange() {
+ this.refreshSelectedLedger();
+ this.setData({ popupVisible: false });
+ this.fetchTopicLedgers();
+ },
+ /**
+ * 鑾峰彇涓撻鐩稿叧鐨勫彴璐︿俊鎭�
+ * @param {Int} startIndex 闇�瑕佽幏鍙栧彴璐︿俊鎭殑璧峰绱㈠紩
+ */
+ fetchTopicLedgers(startIndex) {
+ this.setData({ topicLoading: true });
+ // 纭畾鎵�閫夌殑鍙拌处绫诲瀷
+ const { selectedTopics } = this.data;
+ const { sceneType, time } = this.data.searchOptions;
+ const { allLedgerTypes, selectedLedgers } = selectedTopics[sceneType];
+ const _selectedLedgers = allLedgerTypes.filter(v => {
+ return selectedLedgers.indexOf(v.ledgerSubTypeId) != -1;
+ });
+
+ if (_selectedLedgers.length == 0) {
+ searchResult.forEach(e => {
+ e.topics = [];
+ });
+ } else {
+ const { searchResult } = this.data;
+ const alltask = [];
+ for (let i = startIndex ? startIndex : 0; i < searchResult.length; i++) {
+ const e = searchResult[i];
+ this.setData({ [`searchResult[${i}].topicLoading`]: true });
+ const t = fetchLedgerDetail({ userId: e.userId, sceneType, time }).then(res => {
+ const topics = [];
+ _selectedLedgers.forEach(l => {
+ const ledger = res.data.find(r => r.ledgerSubTypeId == l.ledgerSubTypeId);
+ const detail = ledger ? ledger : { ledgerName: l.ledgerName };
+ topics.push({ ...l, detail });
+ });
+ this.setData({
+ [`searchResult[${i}].topicLoading`]: false,
+ [`searchResult[${i}].topics`]: topics,
+ });
+ });
+ alltask.push(t);
+ }
+ Promise.all(alltask).finally(() => {
+ this.setData({ topicLoading: false });
+ console.log('searchResult', this.data.searchResult);
+ });
+ }
+ },
+ },
+});
diff --git a/pages/supervision/topic.wxml b/pages/supervision/topic.wxml
new file mode 100644
index 0000000..6e77dee
--- /dev/null
+++ b/pages/supervision/topic.wxml
@@ -0,0 +1,29 @@
+<view bind:tap="showPopUp" class='topic-text'>
+ <text>涓撻绠$悊锛歿{selectedTopics[searchOptions.sceneType].topicText}}</text>
+ <t-icon name="caret-down-small" size="36rpx" color="black'" />
+</view>
+
+<t-popup visible="{{popupVisible}}" bind:visible-change="onPopupVisibleChange" placement="bottom">
+ <view class="popup-btn-group">
+ <t-button block="{{false}}" t-class="t-class-button" theme="default" size="extra-small" bindtap="closePatrolList">鍙栨秷
+ </t-button>
+ <view style="display: flex; align-items: center">
+ <t-checkbox t-class="t-class-checkbox" t-class-border="t-class-border-checkbox"
+ t-class-content="t-class-content-checkbox" t-class-label="t-class-label-checkbox" placement="right" borderless
+ icon="rectangle" block="{{true}}" label="鍏ㄩ��" checked="{{selectedTopics[searchOptions.sceneType].checkAll}}"
+ bind:change="onCheckAll" />
+ <t-button block="{{false}}" t-class="t-class-button" theme="primary" size="extra-small"
+ bindtap="onLedgerPickerChange">
+ {{selectedTopics[searchOptions.sceneType].selectedCount > 0 ? '(' + selectedTopics[searchOptions.sceneType].selectedCount + ')' : ''}}
+ 纭畾
+ </t-button>
+ </view>
+ </view>
+ <scroll-view style="height: 70vh" scroll-y="{{true}}">
+ <t-grid column="{{4}}" theme="card">
+ <t-grid-item wx:for="{{selectedTopics[searchOptions.sceneType].allLedgerTypes}}" wx:key="index"
+ class="{{item.selected ? 'patrol-task-item-selected' : 'patrol-task-item'}}" badge-props="{{ item.selected }}"
+ text="{{item.ledgerName}}" image="{{item.iconUrl}}" data-index="{{index}}" bindtap="choseLedgerType" />
+ </t-grid>
+ </scroll-view>
+</t-popup>
\ No newline at end of file
diff --git a/pages/supervision/topic.wxss b/pages/supervision/topic.wxss
new file mode 100644
index 0000000..39bb63d
--- /dev/null
+++ b/pages/supervision/topic.wxss
@@ -0,0 +1,33 @@
+.topic-text {
+ display: flex;
+ padding: 8px;
+ align-items: center;
+ color: rgba(51, 51, 51, 1);
+ background-color: #fff;
+}
+
+.popup-btn-group {
+ display: flex;
+ justify-content: space-between;
+ padding: 0 var(--td-spacer-2);
+ /* background-color: aqua; */
+ align-items: center;
+}
+
+.t-class-checkbox {
+ /* background-color: tomato !important; */
+ /* padding: initial !important; */
+ text-align: end;
+}
+
+.t-class-button {
+ margin: initial !important;
+}
+
+.patrol-task-item {
+ opacity: 0.5;
+}
+
+.patrol-task-item-selected {
+ opacity: 1;
+}
\ No newline at end of file
diff --git a/project.config.json b/project.config.json
index 77d5cdd..417ce2d 100644
--- a/project.config.json
+++ b/project.config.json
@@ -33,7 +33,13 @@
"outputPath": ""
},
"condition": false,
- "ignoreUploadUnusedFiles": true
+ "ignoreUploadUnusedFiles": true,
+ "compileWorklet": false,
+ "localPlugins": false,
+ "disableUseStrict": false,
+ "useCompilerPlugins": false,
+ "swc": false,
+ "disableSWC": true
},
"compileType": "miniprogram",
"condition": {},
@@ -45,5 +51,7 @@
"packOptions": {
"ignore": [],
"include": []
- }
+ },
+ "libVersion": "3.15.0",
+ "simulatorPluginLibVersion": {}
}
\ No newline at end of file
diff --git a/project.private.config.json b/project.private.config.json
index dee57ef..551518c 100644
--- a/project.private.config.json
+++ b/project.private.config.json
@@ -1,9 +1,24 @@
{
"description": "椤圭洰绉佹湁閰嶇疆鏂囦欢銆傛鏂囦欢涓殑鍐呭灏嗚鐩� project.config.json 涓殑鐩稿悓瀛楁銆傞」鐩殑鏀瑰姩浼樺厛鍚屾鍒版鏂囦欢涓�傝瑙佹枃妗o細https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
- "projectname": "ep-law-abiding-manage-weixin",
+ "projectname": "ep-law-abiding-manage",
"setting": {
"compileHotReLoad": true,
- "urlCheck": true
+ "urlCheck": true,
+ "coverView": true,
+ "lazyloadPlaceholderEnable": false,
+ "skylineRenderEnable": false,
+ "preloadBackgroundData": false,
+ "autoAudits": false,
+ "useApiHook": true,
+ "showShadowRootInWxmlPanel": true,
+ "useStaticServer": false,
+ "useLanDebug": false,
+ "showES6CompileOption": false,
+ "checkInvalidKey": true,
+ "ignoreDevUnusedFiles": true,
+ "bigPackageSizeSupport": false,
+ "useIsolateContext": true
},
- "libVersion": "3.11.2"
+ "libVersion": "3.15.0",
+ "condition": {}
}
\ No newline at end of file
diff --git a/services/config/fetchConfig.js b/services/config/fetchConfig.js
index cf2b0a4..88c3096 100644
--- a/services/config/fetchConfig.js
+++ b/services/config/fetchConfig.js
@@ -41,4 +41,20 @@
});
}
-export { fetchSceneTypes, fetchUserConfig };
+/**
+ * 鑾峰彇鐢ㄦ埛鐨勪笟鍔″睘鎬ч厤缃俊鎭紙渚嬪鍙拌处涓婃姤鏃ユ湡锛岃嚜宸℃煡鏄惁闇�瑕佹壙璇虹瓑锛�
+ */
+function fetchUserSetting({ userId }) {
+ return get({
+ url: `/config/user/setting`,
+ params: {
+ userId: userId,
+ },
+ }).then(res => {
+ if (res.data.success) {
+ app.globalData.userSetting = res.data.data;
+ }
+ });
+}
+
+export { fetchSceneTypes, fetchUserConfig, fetchUserSetting };
--
Gitblit v1.9.3