c293da23
刘淇
新园林init
|
1
|
<template>
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
2
|
<view class="page-container">
|
12e66ec8
刘淇
新增树
|
3
4
5
|
<!-- 用户信息栏 -->
<view class="user-info-bar">
<view class="user-info">
|
12e66ec8
刘淇
新增树
|
6
|
<view class="user-text">
|
e2e5221c
刘淇
验证码登录
|
7
8
|
<view class="username">你好{{ userName }}</view>
<view class="login-desc">蓟城山水全域智能运营管理平台</view>
|
12e66ec8
刘淇
新增树
|
9
10
|
</view>
</view>
|
4f475013
刘淇
k线图
|
11
|
<view class="msg-icon" @click="handleMsgClick" hover-class="msg-icon--hover">
|
1d3624b0
刘淇
首页。养护任务
|
12
|
<up-icon name="chat" color="#fff" size="24" />
|
578c1373
刘淇
样式优化
|
13
|
<view class="msg-badge">
|
53012a16
刘淇
首页 优化
|
14
|
<up-badge type="error" showZero="true" max="999" :value="msgCount"></up-badge>
|
4f475013
刘淇
k线图
|
15
|
</view>
|
12e66ec8
刘淇
新增树
|
16
17
18
|
</view>
</view>
|
4f475013
刘淇
k线图
|
19
|
<view class="content-wrap">
|
1d3624b0
刘淇
首页。养护任务
|
20
21
22
23
24
25
26
|
<!-- 图表区域 增加平滑动画容器 -->
<view class="chart-wrap" v-show="showChartArea">
<!-- 任务完成情况标题 -->
<view class="module-title">任务完成情况</view>
<!-- 任务完成情况卡片 -->
<view class="task-chart-card">
|
bc215493
刘淇
考勤记录
|
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
<view class="card-header">
<view class="unit-tip">数字指标</view>
<!-- ActionSheet 点击唤起 -->
<view class="sort-trigger" @click="openActionSheet">
{{ sortLabel }}
<up-icon name="arrow-down" size="14" style="margin-left:4rpx;"></up-icon>
</view>
<!-- ActionSheet组件 -->
<up-action-sheet :show="showActionSheet" :actions="actionSheetOptions" @select="handleSheetSelect"
@close="showActionSheet = false" />
<view class="date-picker-wrap">
<neo-datetime-pro v-model="dateRange" type="daterange" :clearable="false" placeholder="请选择日期范围"
@confirm="handleDateConfirm" :max-date="maxDate" @popup-show="handlePopupShow"
@popup-hide="handlePopupHide" />
</view>
</view>
|
ee792d52
刘淇
动态表单
|
43
|
|
4f475013
刘淇
k线图
|
44
|
|
1d3624b0
刘淇
首页。养护任务
|
45
|
<!-- 双折线K线图 -->
|
ee792d52
刘淇
动态表单
|
46
|
<!-- <view class="chart-container">
|
1d3624b0
刘淇
首页。养护任务
|
47
48
|
<uni-charts v-if="!isDatePickerOpen" type="line" :data="klineChartData" :categories="klineCategories"
:option="klineOption" :width="chartWidth" :height="chartHeight" />
|
ee792d52
刘淇
动态表单
|
49
50
|
</view> -->
|
bc215493
刘淇
考勤记录
|
51
52
53
54
55
56
57
|
<up-grid :border="false" col="4">
<up-grid-item v-for="(baseListItem, baseListIndex) in baseList" :key="baseListIndex">
<view class="grid-item-icon-box">
<up-icon :name="baseListItem.name" size="32" color="#1677ff"></up-icon>
<text class="grid-num-icon">{{ baseListItem.num }}</text>
<text class="grid-label-icon">{{ baseListItem.title }}</text>
</view>
|
ee792d52
刘淇
动态表单
|
58
|
</up-grid-item>
|
bc215493
刘淇
考勤记录
|
59
60
|
</up-grid>
|
12e66ec8
刘淇
新增树
|
61
62
|
</view>
</view>
|
12e66ec8
刘淇
新增树
|
63
|
|
1d3624b0
刘淇
首页。养护任务
|
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
<view class="con-wrap">
<view class="con-title">养护任务 </view>
<!-- 手写Tab切换:胶囊分段样式 -->
<view class="custom-tab-wrap">
<view class="tab-capsule" :class="{ active: currentTabValue === 0 }" @click="handleTabClick(0)">
待办事项({{ todoTotal }})
</view>
<view class="tab-capsule" :class="{ active: currentTabValue === 1 }" @click="handleTabClick(1)">
已办事项({{ doneTotal }})
</view>
</view>
<!-- 动态组信息文案 -->
|
6cc0ab0e
刘淇
养护任务
|
79
|
<!-- <view class="tip-top" style="padding: 8px 0 0 70px;">
|
1d3624b0
刘淇
首页。养护任务
|
80
|
<text>{{ tipText }}</text>
|
6cc0ab0e
刘淇
养护任务
|
81
|
</view> -->
|
1d3624b0
刘淇
首页。养护任务
|
82
83
84
85
86
87
88
89
|
<!-- 顶部进度提示栏 -->
<view v-if="showTipHeader" class="tip-header">
<up-icon name="checkmark-circle" color="#00b42a" size="20"></up-icon>
<text style="color: #1677ff;">今日组内:您已经完成{{ finishNum }}项,小组均值{{ avgNum }}项</text>
</view>
|
bc215493
刘淇
考勤记录
|
90
91
|
<scroll-view class="task-list-container" scroll-y @scroll="onListScroll" @scrolltoupper="handleTouchTop"
enhanced>
|
1d3624b0
刘淇
首页。养护任务
|
92
93
94
95
96
|
<view v-if="taskList.length === 0" class="empty-box">
<up-empty />
</view>
<view class="task-item" v-for="(item, index) in taskList" :key="`${item.taskName}_${index}`"
hover-class="task-item--hover" @click="handleTaskClick(item)">
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
97
|
<view class="task-item__content">
|
1d3624b0
刘淇
首页。养护任务
|
98
99
|
<view class="name-fixed-wrap">
<view class="task-item__name ">
|
bc215493
刘淇
考勤记录
|
100
|
事项{{ index + 1 }}
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
101
|
</view>
|
1d3624b0
刘淇
首页。养护任务
|
102
103
|
<view class="task-name-text">
{{ item.taskName || '无' }}
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
104
105
|
</view>
</view>
|
1d3624b0
刘淇
首页。养护任务
|
106
107
|
<view v-if="currentTabValue === 0" class="task-item__footer" style="padding-left: 60px;">
|
bc215493
刘淇
考勤记录
|
108
109
|
<image class="loc-icon" src="https://img.jichengshanshui.com.cn:28207/appimg/定位icon@3x.png"
mode="aspectFit"></image>
|
1d3624b0
刘淇
首页。养护任务
|
110
111
112
113
114
115
|
<template v-if="isWalkTextMode">
<text>距离当前{{ item.distance }}m ·约{{ item.estimatedWalkingMinutes }}分钟步行</text>
</template>
<template v-else>
<text>{{ item.distance }}m ·</text>
<up-icon name="star-fill" color="#ffd21d" size="20"></up-icon>
|
6cc0ab0e
刘淇
养护任务
|
116
|
<text>历史完成率{{ item.historyCompletionRate }}%</text>
|
1d3624b0
刘淇
首页。养护任务
|
117
118
|
</template>
</view>
|
4f475013
刘淇
k线图
|
119
|
</view>
|
4f475013
刘淇
k线图
|
120
|
</view>
|
1d3624b0
刘淇
首页。养护任务
|
121
122
|
</scroll-view>
</view>
|
12e66ec8
刘淇
新增树
|
123
|
</view>
|
12e66ec8
刘淇
新增树
|
124
|
</view>
|
c293da23
刘淇
新园林init
|
125
126
|
</template>
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
127
|
<script setup lang="ts">
|
9441e28e
刘淇
考勤打卡
|
128
129
|
import { ref, computed, nextTick, watch } from 'vue';
import { onShow, onUnload } from '@dcloudio/uni-app';
|
1d3624b0
刘淇
首页。养护任务
|
130
|
import { useUserStore } from '@/pinia/user';
|
bc215493
刘淇
考勤记录
|
131
|
import { timeFormat } from '@/uni_modules/uview-plus';
|
4f475013
刘淇
k线图
|
132
|
import uniCharts from '@/components/uni-charts/uni-charts.vue';
|
1d3624b0
刘淇
首页。养护任务
|
133
134
135
136
|
import { getUnreadCount } from "@/api/user";
import {
getTaskCompletionSummary,
taskDetailsWithDistance,
|
9441e28e
刘淇
考勤打卡
|
137
138
139
|
taskDetailsWithSmartSort,
getCurrentOrg,
orgTaskIndicator
|
1d3624b0
刘淇
首页。养护任务
|
140
|
} from "@/api/index/index";
|
1d3624b0
刘淇
首页。养护任务
|
141
|
const userStore = useUserStore();
|
9441e28e
刘淇
考勤打卡
|
142
|
const deptId = computed(() => String(userStore.userInfo?.deptId ?? ''));
|
1d3624b0
刘淇
首页。养护任务
|
143
|
|
6cc0ab0e
刘淇
养护任务
|
144
|
// ====================== 分组配置(多部门归属同一组) ======================
|
1d3624b0
刘淇
首页。养护任务
|
145
|
type GroupItem = {
|
9441e28e
刘淇
考勤打卡
|
146
|
deptIds: string[];
|
1d3624b0
刘淇
首页。养护任务
|
147
|
label: string;
|
9441e28e
刘淇
考勤打卡
|
148
149
|
showTipHeader: boolean;
useWalkText: boolean;
|
1d3624b0
刘淇
首页。养护任务
|
150
|
};
|
1d3624b0
刘淇
首页。养护任务
|
151
|
const groupConfig: GroupItem[] = [
|
6cc0ab0e
刘淇
养护任务
|
152
153
|
{
deptIds: ['361', '363', '279', '277', '270'],
|
9441e28e
刘淇
考勤打卡
|
154
|
label: '[组2 A1B2 纯效率·有提醒]',
|
6cc0ab0e
刘淇
养护任务
|
155
156
157
|
showTipHeader: true,
useWalkText: true
},
|
6cc0ab0e
刘淇
养护任务
|
158
159
|
{
deptIds: ['252', '273', '274', '337', '359', '360'],
|
9441e28e
刘淇
考勤打卡
|
160
|
label: '[组3 A2B1 个性化·无提醒]',
|
6cc0ab0e
刘淇
养护任务
|
161
162
163
|
showTipHeader: false,
useWalkText: false
},
|
6cc0ab0e
刘淇
养护任务
|
164
165
|
{
deptIds: ['281', '272', '271', '338', '280'],
|
9441e28e
刘淇
考勤打卡
|
166
|
label: '[组4 A2B2 个性化·有提醒]',
|
6cc0ab0e
刘淇
养护任务
|
167
168
169
|
showTipHeader: true,
useWalkText: false
},
|
1d3624b0
刘淇
首页。养护任务
|
170
|
];
|
6cc0ab0e
刘淇
养护任务
|
171
172
|
const defaultGroup: GroupItem = {
deptIds: [],
|
9441e28e
刘淇
考勤打卡
|
173
|
label: '[组1 A1B1 纯效率·无提醒]',
|
6cc0ab0e
刘淇
养护任务
|
174
175
176
|
showTipHeader: false,
useWalkText: true
};
|
1d3624b0
刘淇
首页。养护任务
|
177
|
const currentGroup = computed(() => {
|
6cc0ab0e
刘淇
养护任务
|
178
|
const targetDept = deptId.value;
|
9441e28e
刘淇
考勤打卡
|
179
180
181
|
for (const g of groupConfig) {
if (g.deptIds.includes(targetDept)) {
return g;
|
6cc0ab0e
刘淇
养护任务
|
182
183
|
}
}
|
6cc0ab0e
刘淇
养护任务
|
184
|
return defaultGroup;
|
1d3624b0
刘淇
首页。养护任务
|
185
|
});
|
1d3624b0
刘淇
首页。养护任务
|
186
187
188
189
190
|
const tipText = computed(() => currentGroup.value.label);
const showTipHeader = computed(() => currentGroup.value.showTipHeader);
const isWalkTextMode = computed(() => currentGroup.value.useWalkText);
const useDistanceApi = computed(() => currentGroup.value.useWalkText);
// =========================================================================
|
c293da23
刘淇
新园林init
|
191
|
|
1d3624b0
刘淇
首页。养护任务
|
192
193
|
const finishNum = ref(0);
const avgNum = ref(0);
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
194
|
const msgCount = ref(0);
|
1d3624b0
刘淇
首页。养护任务
|
195
|
const currentTabValue = ref(0);
|
1d3624b0
刘淇
首页。养护任务
|
196
|
const dateRange = ref<string[]>([]);
|
5b5a4862
刘淇
按钮放大
|
197
|
const yesterday = new Date();
|
1d3624b0
刘淇
首页。养护任务
|
198
|
yesterday.setDate(yesterday.getDate() - 1);
|
bc215493
刘淇
考勤记录
|
199
200
|
const maxDate = ref(timeFormat(yesterday, 'yyyy-mm-dd'));
// const minDate = '2026-01-06';
|
5b5a4862
刘淇
按钮放大
|
201
|
const isDatePickerOpen = ref(false);
|
5b5a4862
刘淇
按钮放大
|
202
203
204
|
const handlePopupShow = () => {
isDatePickerOpen.value = true;
};
|
5b5a4862
刘淇
按钮放大
|
205
206
207
|
const handlePopupHide = () => {
isDatePickerOpen.value = false;
};
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
208
|
|
1d3624b0
刘淇
首页。养护任务
|
209
210
211
212
213
214
215
|
const todoTotal = ref(0);
const doneTotal = ref(0);
const todoFullList = ref<any[]>([]);
const doneFullList = ref<any[]>([]);
const taskList = computed(() => {
return currentTabValue.value === 0 ? todoFullList.value : doneFullList.value;
});
|
1d3624b0
刘淇
首页。养护任务
|
216
217
|
const chooseOptions = computed(() => [
{ title: `待办事项(${todoTotal.value})`, id: 'todo' },
|
9441e28e
刘淇
考勤打卡
|
218
|
{ title: `已办事项(${doneTotal.value})`, id: 'done' },
|
1d3624b0
刘淇
首页。养护任务
|
219
|
]);
|
c293da23
刘淇
新园林init
|
220
|
|
1d3624b0
刘淇
首页。养护任务
|
221
222
|
const currentLon = ref<string>('');
const currentLat = ref<string>('');
|
4f475013
刘淇
k线图
|
223
224
|
const chartWidth = ref(0);
const chartHeight = ref(300);
|
1d3624b0
刘淇
首页。养护任务
|
225
|
const klineCategories = ref<string[]>([]);
|
4f475013
刘淇
k线图
|
226
|
const klineChartData = ref([
|
12e66ec8
刘淇
新增树
|
227
|
{
|
4570c70a
刘淇
消息中心
|
228
|
name: '已完成任务数',
|
1d3624b0
刘淇
首页。养护任务
|
229
|
data: [] as number[],
|
4f475013
刘淇
k线图
|
230
|
color: '#25AF69'
|
12e66ec8
刘淇
新增树
|
231
232
|
},
{
|
6bce1057
刘淇
ai 大区经理
|
233
|
name: '总任务数',
|
1d3624b0
刘淇
首页。养护任务
|
234
|
data: [] as number[],
|
4f475013
刘淇
k线图
|
235
236
237
|
color: '#B34C17'
}
]);
|
4f475013
刘淇
k线图
|
238
239
240
|
const klineOption = ref({
grid: {
top: '25%',
|
53012a16
刘淇
首页 优化
|
241
|
left: '12%',
|
9441e28e
刘淇
考勤打卡
|
242
|
right: '12%',
|
53012a16
刘淇
首页 优化
|
243
|
bottom: '16%'
|
12e66ec8
刘淇
新增树
|
244
|
},
|
4f475013
刘淇
k线图
|
245
|
xAxis: {
|
1d3624b0
刘淇
首页。养护任务
|
246
|
axisLabel: { fontSize: 12, color: '#666' }
|
12e66ec8
刘淇
新增树
|
247
|
},
|
4f475013
刘淇
k线图
|
248
249
|
yAxis: {
min: 0,
|
1d3624b0
刘淇
首页。养护任务
|
250
251
|
splitLine: { lineStyle: { color: '#f5f5f7' } },
axisLabel: { fontSize: 12, color: '#666' }
|
12e66ec8
刘淇
新增树
|
252
|
},
|
4f475013
刘淇
k线图
|
253
254
|
tooltip: {
trigger: 'axis',
|
1d3624b0
刘淇
首页。养护任务
|
255
|
formatter: (params: any[]) => {
|
4570c70a
刘淇
消息中心
|
256
|
return `${params[0].name}<br/>
|
9441e28e
刘淇
考勤打卡
|
257
258
|
${params[0].seriesName}: ${params[0].value}<br/>
${params[1].seriesName}: ${params[1].value}`;
|
4f475013
刘淇
k线图
|
259
260
261
262
263
|
}
},
legend: {
show: true,
top: '5%',
|
1d3624b0
刘淇
首页。养护任务
|
264
|
textStyle: { fontSize: 12 }
|
12e66ec8
刘淇
新增树
|
265
|
}
|
4f475013
刘淇
k线图
|
266
267
|
});
|
9441e28e
刘淇
考勤打卡
|
268
269
270
271
272
273
274
275
276
277
278
279
280
281
|
const baseList = ref<Array<{ num: string; title: string }>>([]);
const orgOptions = ref<any[]>([]);
const value1 = ref<number | string>('');
const showActionSheet = ref(false);
watch(orgOptions, async (list) => {
if (list.length && !value1.value) {
value1.value = list[0].value;
// 拿到默认组织后,拉指标
if (dateRange.value.length === 2) {
await fetchOrgIndicator(Number(value1.value), dateRange.value[0], dateRange.value[1]);
}
}
}, { immediate: true });
|
ee792d52
刘淇
动态表单
|
282
|
|
9441e28e
刘淇
考勤打卡
|
283
284
|
const actionSheetOptions = computed(() => {
return orgOptions.value.map(opt => ({
|
ee792d52
刘淇
动态表单
|
285
286
|
name: opt.label,
value: opt.value
|
9441e28e
刘淇
考勤打卡
|
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
|
}));
});
const sortLabel = computed(() => {
const cur = orgOptions.value.find(i => i.value === value1.value);
return cur?.label ?? "";
});
const openActionSheet = () => {
showActionSheet.value = true;
};
// ActionSheet选中组织:刷新指标
const handleSheetSelect = async (item: { name: string; value: number }) => {
value1.value = item.value;
showActionSheet.value = false;
console.log('选中组织:', item.value);
if (dateRange.value.length === 2) {
await fetchOrgIndicator(item.value, dateRange.value[0], dateRange.value[1]);
}
};
|
4f475013
刘淇
k线图
|
305
|
|
9441e28e
刘淇
考勤打卡
|
306
|
const userName = computed(() => userStore.userInfo?.nickname || '用户');
|
1d3624b0
刘淇
首页。养护任务
|
307
|
const rpx2px = (rpx: number) => {
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
308
|
const systemInfo = uni.getSystemInfoSync();
|
1d3624b0
刘淇
首页。养护任务
|
309
310
311
|
return Math.floor(systemInfo.screenWidth / 750 * rpx);
};
|
9441e28e
刘淇
考勤打卡
|
312
|
// ========== 滚动逻辑 ==========
|
1d3624b0
刘淇
首页。养护任务
|
313
|
const showChartArea = ref(true);
|
1d3624b0
刘淇
首页。养护任务
|
314
|
const scrollHideThreshold = rpx2px(80);
|
1d3624b0
刘淇
首页。养护任务
|
315
316
|
const safeShowThreshold = rpx2px(130);
let scrollTimer: number | null = null;
|
1d3624b0
刘淇
首页。养护任务
|
317
318
|
const handleTouchTop = () => {
showChartArea.value = true;
|
4f475013
刘淇
k线图
|
319
|
};
|
1d3624b0
刘淇
首页。养护任务
|
320
321
|
const onListScroll = (e: any) => {
const scrollTop = e.detail.scrollTop;
|
1d3624b0
刘淇
首页。养护任务
|
322
|
if (scrollTimer) clearTimeout(scrollTimer);
|
1d3624b0
刘淇
首页。养护任务
|
323
324
325
326
327
|
if (scrollTop <= safeShowThreshold) {
showChartArea.value = true;
} else if (scrollTop > scrollHideThreshold) {
showChartArea.value = false;
}
|
1d3624b0
刘淇
首页。养护任务
|
328
329
330
331
332
333
|
scrollTimer = setTimeout(() => {
if (scrollTop <= safeShowThreshold) {
showChartArea.value = true;
}
}, 100);
};
|
1d3624b0
刘淇
首页。养护任务
|
334
335
336
|
const handleTabClick = (tabIndex: number) => {
if (currentTabValue.value === tabIndex) return;
currentTabValue.value = tabIndex;
|
1d3624b0
刘淇
首页。养护任务
|
337
338
339
|
showChartArea.value = true;
};
|
9441e28e
刘淇
考勤打卡
|
340
341
342
343
344
345
346
347
348
349
350
351
352
|
// ========== 公共函数:请求 orgTaskIndicator 指标接口 ==========
const fetchOrgIndicator = async (orgId: number, beginDate: string, endDate: string) => {
try {
// 日期字符串转毫秒时间戳
const beginTime = new Date(beginDate).getTime();
const endTime = new Date(endDate).getTime();
const res = await orgTaskIndicator({
orgId,
beginTime,
endTime
});
console.log('orgTaskIndicator 返回:', res);
baseList.value = [
|
bc215493
刘淇
考勤记录
|
353
354
355
356
|
{ num: String(res.totalCnt ?? 0), title: '应办任务数', name: 'file-text' },
{ num: String(res.doneCnt ?? 0), title: '已办任务数', name: 'checkmark-circle' },
{ num: String(res.pendingCnt ?? 0), title: '待办任务数', name: 'clock' },
{ num: String(res.overdueCnt ?? 0), title: '超时未完成', name: 'close-circle' }
|
9441e28e
刘淇
考勤打卡
|
357
|
];
|
bc215493
刘淇
考勤记录
|
358
|
|
9441e28e
刘淇
考勤打卡
|
359
360
361
362
|
} catch (err) {
console.error('orgTaskIndicator 请求失败:', err);
}
};
|
5b5a4862
刘淇
按钮放大
|
363
|
|
9441e28e
刘淇
考勤打卡
|
364
365
366
367
368
369
|
// ========== 初始化日期范围(近7天) ==========
const initRecent7Days = () => {
const now = new Date();
const end = new Date(now);
end.setDate(end.getDate() - 1);
const start = new Date(end);
|
bc215493
刘淇
考勤记录
|
370
|
console.log(start)
|
9441e28e
刘淇
考勤打卡
|
371
|
start.setDate(start.getDate() - 6);
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
372
|
dateRange.value = [
|
bc215493
刘淇
考勤记录
|
373
374
|
timeFormat(start, 'yyyy-mm-dd'),
timeFormat(end, 'yyyy-mm-dd')
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
375
|
];
|
bc215493
刘淇
考勤记录
|
376
|
console.log(dateRange.value)
|
1d3624b0
刘淇
首页。养护任务
|
377
|
initChartData(dateRange.value[0], dateRange.value[1]);
|
4f475013
刘淇
k线图
|
378
379
|
};
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
380
381
382
383
384
|
const getUnread = async () => {
try {
const res = await getUnreadCount();
msgCount.value = res || 0;
} catch (error) {
|
9441e28e
刘淇
考勤打卡
|
385
386
387
388
389
390
391
392
393
394
395
396
|
console.error('获取未读消息失败:', error);
}
};
// getOrg:只拉组织下拉选项,不处理指标
const getOrg = async () => {
try {
const res = await getCurrentOrg();
console.log('getCurrentOrg组织下拉:', res);
orgOptions.value = res.options || [];
} catch (error) {
console.error('获取组织下拉失败:', error);
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
397
398
|
}
};
|
4570c70a
刘淇
消息中心
|
399
|
|
1d3624b0
刘淇
首页。养护任务
|
400
|
const initChartData = async (beginTime: string, endTime: string) => {
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
401
|
try {
|
1d3624b0
刘淇
首页。养护任务
|
402
|
const postData = { beginTime, endTime };
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
403
|
const res = await getTaskCompletionSummary(postData);
|
1d3624b0
刘淇
首页。养护任务
|
404
405
|
klineCategories.value = res.map((item: any) => item.currentDate);
klineChartData.value[0].data = res.map((item: any) => item.completedNum);
|
9441e28e
刘淇
考勤打卡
|
406
|
klineChartData.value[1].data = res.map((item: any) => item.countPendingNum);
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
407
|
} catch (error) {
|
9441e28e
刘淇
考勤打卡
|
408
|
console.error('图表数据请求失败:', error);
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
409
410
|
}
};
|
4f475013
刘淇
k线图
|
411
|
|
1d3624b0
刘淇
首页。养护任务
|
412
|
const loadDistanceApiTask = async (lon: string, lat: string) => {
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
413
|
try {
|
1d3624b0
刘淇
首页。养护任务
|
414
415
|
const paramsTodo = { queryType: 1, currentLon: lon, currentLat: lat };
const paramsDone = { queryType: 2, currentLon: lon, currentLat: lat };
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
416
|
const [todoRes, doneRes] = await Promise.all([
|
1d3624b0
刘淇
首页。养护任务
|
417
418
|
taskDetailsWithDistance(paramsTodo),
taskDetailsWithDistance(paramsDone)
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
419
|
]);
|
1d3624b0
刘淇
首页。养护任务
|
420
421
422
423
424
425
426
427
428
|
todoFullList.value = todoRes?.sortedTasks || [];
doneFullList.value = doneRes?.sortedTasks || [];
todoTotal.value = Number(todoRes?.totalPendingTasks) || 0;
doneTotal.value = Number(doneRes?.totalPendingTasks) || 0;
finishNum.value = todoRes?.teamProgress?.userCompletedCount ?? 0;
avgNum.value = doneRes?.teamProgress?.teamAverage ?? 0;
await nextTick();
} catch (err) {
uni.showToast({ title: '加载任务失败', icon: 'none' });
|
9441e28e
刘淇
考勤打卡
|
429
|
console.error('loadDistanceApiTask error', err);
|
1d3624b0
刘淇
首页。养护任务
|
430
431
432
433
|
todoFullList.value = [];
doneFullList.value = [];
todoTotal.value = 0;
doneTotal.value = 0;
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
434
|
}
|
4f475013
刘淇
k线图
|
435
|
};
|
1d3624b0
刘淇
首页。养护任务
|
436
|
const loadSmartSortTask = async (lon: string, lat: string) => {
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
437
|
try {
|
1d3624b0
刘淇
首页。养护任务
|
438
|
const [todoRes, doneRes] = await Promise.all([
|
9441e28e
刘淇
考勤打卡
|
439
440
|
taskDetailsWithSmartSort({ queryType: 1, currentLon: lon, currentLat: lat }),
taskDetailsWithSmartSort({ queryType: 2, currentLon: lon, currentLat: lat })
|
1d3624b0
刘淇
首页。养护任务
|
441
442
443
444
445
446
447
448
449
450
|
]);
todoFullList.value = todoRes?.sortedTasks || [];
doneFullList.value = doneRes?.sortedTasks || [];
todoTotal.value = Number(todoRes?.totalPendingTasks) || 0;
doneTotal.value = Number(doneRes?.totalPendingTasks) || 0;
finishNum.value = todoRes?.teamProgress?.userCompletedCount ?? 0;
avgNum.value = doneRes?.teamProgress?.teamAverage ?? 0;
await nextTick();
} catch (err) {
uni.showToast({ title: '加载任务失败', icon: 'none' });
|
9441e28e
刘淇
考勤打卡
|
451
|
console.error('loadSmartSortTask error', err);
|
1d3624b0
刘淇
首页。养护任务
|
452
453
454
455
|
todoFullList.value = [];
doneFullList.value = [];
todoTotal.value = 0;
doneTotal.value = 0;
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
456
457
|
}
};
|
1d3624b0
刘淇
首页。养护任务
|
458
459
460
461
462
463
464
465
466
467
|
const loadAllTaskByDept = async () => {
const loc = await getCurrentLocation();
currentLon.value = loc.lon;
currentLat.value = loc.lat;
if (useDistanceApi.value) {
await loadDistanceApiTask(loc.lon, loc.lat);
} else {
await loadSmartSortTask(loc.lon, loc.lat);
}
};
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
468
|
|
9441e28e
刘淇
考勤打卡
|
469
470
|
// 日期确认回调:更新图表 + 重新请求指标orgTaskIndicator
const handleDateConfirm = async (e: string[]) => {
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
471
|
dateRange.value = e;
|
9441e28e
刘淇
考勤打卡
|
472
473
474
475
|
await initChartData(e[0], e[1]);
if (value1.value) {
await fetchOrgIndicator(Number(value1.value), e[0], e[1]);
}
|
4f475013
刘淇
k线图
|
476
|
};
|
12e66ec8
刘淇
新增树
|
477
|
|
9441e28e
刘淇
考勤打卡
|
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
|
const getCurrentLocation = (): Promise<{ lon: string; lat: string }> => {
return new Promise((resolve, reject) => {
uni.getSetting({
success: (settingRes) => {
if (!settingRes.authSetting['scope.userLocation']) {
uni.authorize({
scope: 'scope.userLocation',
success: () => {
uni.getLocation({
type: 'gcj02',
success: (loc) => {
resolve({
lon: loc.longitude.toFixed(6),
lat: loc.latitude.toFixed(6)
});
},
fail: (err) => {
uni.showToast({ title: '获取位置失败,请开启定位', icon: 'none' });
reject('定位失败');
}
});
},
fail: () => {
uni.showModal({
title: '需要定位权限',
content: '允许定位才能查看任务距离',
confirmText: '去设置',
success: (modalRes) => {
if (modalRes.confirm) {
uni.openSetting();
}
}
});
reject('拒绝定位');
}
});
} else {
uni.getLocation({
type: 'gcj02',
success: (loc) => {
resolve({
lon: loc.longitude.toFixed(6),
lat: loc.latitude.toFixed(6)
});
},
fail: (err) => {
uni.showToast({ title: '获取位置失败,请开启定位', icon: 'none' });
reject('定位失败');
}
});
}
},
fail: (err) => {
reject('获取权限设置失败');
}
});
});
|
4f475013
刘淇
k线图
|
535
536
|
};
|
9441e28e
刘淇
考勤打卡
|
537
538
539
|
const handleMsgClick = () => {
uni.navigateTo({ url: '/pages-sub/msg/msg' });
};
|
1d3624b0
刘淇
首页。养护任务
|
540
541
542
|
const handleTaskClick = (item: any) => {
if (item.taskType == "maintain") {
if (currentTabValue.value === 0) {
|
9441e28e
刘淇
考勤打卡
|
543
544
545
546
547
548
549
|
uni.navigateTo({
url: `/pages-sub/daily/maintain-add?planNo=${item.planNo || ''}&planTypeId=${item.planTypeId ?? ''}&businessLine=${item.busiLine ?? ''}`
});
} else {
uni.navigateTo({
url: `/pages-sub/daily/maintain-detail?planNo=${item.planNo || ''}`
});
|
1d3624b0
刘淇
首页。养护任务
|
550
|
}
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
551
|
}
|
1d3624b0
刘淇
首页。养护任务
|
552
553
|
if (item.taskType == "inspection") {
if (currentTabValue.value === 0) {
|
9441e28e
刘淇
考勤打卡
|
554
555
556
557
558
559
560
|
uni.navigateTo({
url: `/pages-sub/daily/inspect-add?planNo=${item.planNo}&batchNo=${item.batchNo}`
});
} else {
uni.navigateTo({
url: `/pages-sub/daily/inspect-detail?planNo=${item.planNo || ''}`
});
|
1d3624b0
刘淇
首页。养护任务
|
561
562
563
|
}
}
};
|
9441e28e
刘淇
考勤打卡
|
564
565
566
567
568
569
570
571
572
573
574
575
576
577
|
onShow(async () => {
showChartArea.value = true;
chartWidth.value = rpx2px(750 - 60);
chartHeight.value = rpx2px(300);
initRecent7Days();
getUnread();
await getOrg(); // 拉取组织下拉列表
await loadAllTaskByDept();
});
onUnload(() => {
if (scrollTimer) clearTimeout(scrollTimer);
});
|
c293da23
刘淇
新园林init
|
578
579
|
</script>
|
9441e28e
刘淇
考勤打卡
|
580
581
|
|
12e66ec8
刘淇
新增树
|
582
|
<style scoped lang="scss">
|
4f475013
刘淇
k线图
|
583
584
|
$primary-color: #1677ff;
$danger-color: #E53935;
|
4f475013
刘淇
k线图
|
585
586
587
588
589
|
$text-color: #333;
$text-color-light: #666;
$text-color-placeholder: #999;
$bg-color: #f5f5f7;
$card-bg: #fff;
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
590
591
592
593
594
|
$border-radius: 16px;
$card-radius: 5px;
$spacing-sm: 5px;
$spacing-md: 10px;
$spacing-lg: 15px;
|
1d3624b0
刘淇
首页。养护任务
|
595
|
$border-color: #e5e5e5;
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
596
597
|
.page-container {
|
1d3624b0
刘淇
首页。养护任务
|
598
|
height: 100vh;
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
599
|
background-color: $bg-color;
|
1d3624b0
刘淇
首页。养护任务
|
600
601
602
|
overflow: hidden;
display: flex;
flex-direction: column;
|
12e66ec8
刘淇
新增树
|
603
604
|
}
|
12e66ec8
刘淇
新增树
|
605
|
.user-info-bar {
|
1d3624b0
刘淇
首页。养护任务
|
606
|
flex-shrink: 0;
|
4f475013
刘淇
k线图
|
607
608
|
background: url("https://img.jichengshanshui.com.cn:28207/appimg/bg.jpg") no-repeat;
background-size: 100% 100%;
|
24c0bbe7
刘淇
登录账号密码 加密存储
|
609
|
padding: 80px $spacing-lg 135px;
|
12e66ec8
刘淇
新增树
|
610
611
612
613
|
display: flex;
justify-content: space-between;
align-items: center;
color: #fff;
|
12e66ec8
刘淇
新增树
|
614
|
|
4f475013
刘淇
k线图
|
615
|
.username {
|
4570c70a
刘淇
消息中心
|
616
|
font-size: 16px;
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
617
|
margin-bottom: 4px;
|
4f475013
刘淇
k线图
|
618
|
}
|
bc215493
刘淇
考勤记录
|
619
|
|
4f475013
刘淇
k线图
|
620
|
.login-desc {
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
621
|
font-size: 16px;
|
12e66ec8
刘淇
新增树
|
622
|
}
|
bc215493
刘淇
考勤记录
|
623
|
|
12e66ec8
刘淇
新增树
|
624
625
|
.msg-icon {
position: relative;
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
626
|
padding: 5px;
|
578c1373
刘淇
样式优化
|
627
|
top: 10px;
|
4f475013
刘淇
k线图
|
628
|
border-radius: 50%;
|
bc215493
刘淇
考勤记录
|
629
|
|
4f475013
刘淇
k线图
|
630
631
632
|
&--hover {
background-color: rgba(255, 255, 255, 0.2);
}
|
bc215493
刘淇
考勤记录
|
633
|
|
12e66ec8
刘淇
新增树
|
634
635
|
.msg-badge {
position: absolute;
|
578c1373
刘淇
样式优化
|
636
637
|
top: -2px;
right: -3px;
|
12e66ec8
刘淇
新增树
|
638
639
640
641
|
}
}
}
|
4f475013
刘淇
k线图
|
642
|
.content-wrap {
|
1d3624b0
刘淇
首页。养护任务
|
643
|
flex: 1;
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
644
|
margin-top: -122px;
|
4f475013
刘淇
k线图
|
645
646
|
border-radius: $border-radius $border-radius 0 0;
background-color: $bg-color;
|
4f475013
刘淇
k线图
|
647
|
overflow: hidden;
|
1d3624b0
刘淇
首页。养护任务
|
648
649
650
651
652
653
654
655
656
657
|
display: flex;
flex-direction: column;
}
.chart-wrap {
flex-shrink: 0;
transition: all 0.35s ease-out;
opacity: 1;
overflow: hidden;
}
|
bc215493
刘淇
考勤记录
|
658
|
|
1d3624b0
刘淇
首页。养护任务
|
659
660
661
662
|
.chart-wrap[hidden] {
opacity: 0;
height: 0;
margin: 0;
|
4f475013
刘淇
k线图
|
663
|
}
|
12e66ec8
刘淇
新增树
|
664
|
|
4f475013
刘淇
k线图
|
665
|
.module-title {
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
666
|
padding: $spacing-lg;
|
578c1373
刘淇
样式优化
|
667
|
font-size: 14px;
|
4f475013
刘淇
k线图
|
668
669
|
font-weight: 600;
color: $text-color-light;
|
1d3624b0
刘淇
首页。养护任务
|
670
|
flex-shrink: 0;
|
4f475013
刘淇
k线图
|
671
672
673
674
675
676
677
|
}
.task-chart-card {
background-color: $card-bg;
border-radius: $card-radius;
margin: 0 $spacing-lg $spacing-md;
padding: $spacing-md;
|
1d3624b0
刘淇
首页。养护任务
|
678
|
flex-shrink: 0;
|
bc215493
刘淇
考勤记录
|
679
|
|
12e66ec8
刘淇
新增树
|
680
681
682
|
.card-header {
display: flex;
justify-content: space-between;
|
12e66ec8
刘淇
新增树
|
683
|
align-items: center;
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
684
|
font-size: 12px;
|
4f475013
刘淇
k线图
|
685
686
|
color: $text-color-placeholder;
margin-bottom: $spacing-md;
|
bc215493
刘淇
考勤记录
|
687
|
|
4f475013
刘淇
k线图
|
688
|
.date-picker-wrap {
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
689
|
border-radius: 3px;
|
4f475013
刘淇
k线图
|
690
|
transition: background-color 0.2s;
|
5b5a4862
刘淇
按钮放大
|
691
692
|
position: relative;
z-index: 999;
|
bc215493
刘淇
考勤记录
|
693
|
|
4f475013
刘淇
k线图
|
694
695
696
|
&:active {
background-color: $bg-color;
}
|
12e66ec8
刘淇
新增树
|
697
698
|
}
}
|
bc215493
刘淇
考勤记录
|
699
|
|
4f475013
刘淇
k线图
|
700
|
.chart-container {
|
12e66ec8
刘淇
新增树
|
701
|
width: 100%;
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
702
|
height: 150px;
|
4f475013
刘淇
k线图
|
703
704
705
|
display: flex;
align-items: center;
justify-content: center;
|
12e66ec8
刘淇
新增树
|
706
707
|
}
}
|
bc215493
刘淇
考勤记录
|
708
|
|
1d3624b0
刘淇
首页。养护任务
|
709
710
711
712
713
714
715
716
717
718
|
.con-wrap {
border-radius: 8px;
background-color: #fff;
margin: 0 15px;
flex: 1;
min-height: 0;
display: flex;
flex-direction: column;
overflow: hidden;
}
|
12e66ec8
刘淇
新增树
|
719
|
|
1d3624b0
刘淇
首页。养护任务
|
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
|
.con-title {
padding: 10px 15px;
border-bottom: 1px solid #f0e9e9;
flex-shrink: 0;
}
.custom-tab-wrap {
display: flex;
align-items: center;
gap: 20rpx;
padding: 20rpx 0 20rpx 20rpx;
background: #fff;
flex-shrink: 0;
}
.tab-capsule {
padding: 10rpx 20rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 28rpx;
color: #999;
background: #f5f5f5;
border-radius: 0;
transition: all 0.2s ease;
font-weight: 500;
}
|
bc215493
刘淇
考勤记录
|
747
|
|
1d3624b0
刘淇
首页。养护任务
|
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
|
.tab-capsule.active {
color: #d4af37;
background: #fff8dc;
}
.tip-header {
display: flex;
align-items: center;
gap: 8rpx;
padding: 12rpx 15rpx;
background: #e6f7ff;
font-size: 14px;
color: #000;
flex-shrink: 0;
}
.tip-top {
|
bc215493
刘淇
考勤记录
|
765
|
padding: 8px 0 0 70px;
|
1d3624b0
刘淇
首页。养护任务
|
766
|
flex-shrink: 0;
|
12e66ec8
刘淇
新增树
|
767
768
|
}
|
4f475013
刘淇
k线图
|
769
|
.task-list-container {
|
1d3624b0
刘淇
首页。养护任务
|
770
771
772
773
774
775
776
777
|
width: 100%;
height: 100%;
padding-bottom: 300rpx;
box-sizing: border-box;
}
.empty-box {
padding: 60rpx 0;
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
778
|
}
|
bc215493
刘淇
考勤记录
|
779
|
|
ee792d52
刘淇
动态表单
|
780
781
782
783
784
785
786
|
.sort-trigger {
display: flex;
align-items: center;
font-size: 12px;
color: $text-color-placeholder;
}
|
12e66ec8
刘淇
新增树
|
787
|
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
788
789
790
791
|
.task-item {
padding: $spacing-md;
transition: background-color 0.2s;
border-bottom: 1px solid $border-color;
|
bc215493
刘淇
考勤记录
|
792
|
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
793
794
795
|
&:last-child {
border-bottom: none;
}
|
bc215493
刘淇
考勤记录
|
796
|
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
797
798
799
|
&--hover {
background-color: $bg-color;
}
|
bc215493
刘淇
考勤记录
|
800
|
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
801
802
803
|
&__content {
width: 100%;
}
|
bc215493
刘淇
考勤记录
|
804
|
|
1d3624b0
刘淇
首页。养护任务
|
805
806
807
|
.name-fixed-wrap {
display: flex;
}
|
bc215493
刘淇
考勤记录
|
808
|
|
1d3624b0
刘淇
首页。养护任务
|
809
810
811
|
.task-item__name {
width: 60px;
}
|
bc215493
刘淇
考勤记录
|
812
813
814
815
816
817
818
819
820
821
822
823
|
.task-name-text {
flex: 1;
font-size: 14px;
color: $text-color;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
}
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
824
|
&__name {
|
1d3624b0
刘淇
首页。养护任务
|
825
|
font-size: 15px;
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
826
|
color: $text-color;
|
1d3624b0
刘淇
首页。养护任务
|
827
|
display: inline-block;
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
828
|
}
|
bc215493
刘淇
考勤记录
|
829
|
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
830
831
|
&__footer {
display: flex;
|
1d3624b0
刘淇
首页。养护任务
|
832
833
834
835
836
|
align-items: flex-start;
gap: 6rpx;
font-size: 13px;
color: $text-color-light;
margin-top: $spacing-sm;
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
837
|
align-items: center;
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
838
839
|
}
}
|
bc215493
刘淇
考勤记录
|
840
|
|
1d3624b0
刘淇
首页。养护任务
|
841
842
843
844
|
.loc-icon {
width: 20px;
height: 20px;
}
|
4f475013
刘淇
k线图
|
845
|
|
cf70629b
刘淇
养护计划 照片 自己写样式
|
846
847
|
.urgency-tag {
color: #7D7D7D;
|
12e66ec8
刘淇
新增树
|
848
|
}
|
bc215493
刘淇
考勤记录
|
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
|
.grid-item-icon-box {
display:flex;
flex-direction:column;
align-items:center;
padding:16rpx;
}
.grid-num-icon {
font-size:40rpx;
font-weight:600;
color:#333;
margin-top:8rpx;
}
.grid-label-icon {
font-size:22rpx;
color:#666;
margin-top:4rpx;
}
|
12e66ec8
刘淇
新增树
|
868
|
</style>
|