Commit 5b5a4862b0b8ad73f75f85c4ac6798d847f79409

Authored by 刘淇
1 parent 0b29c178

按钮放大

... ... @@ -129,5 +129,41 @@ page {
129 129 color: #606266
130 130 }
131 131  
  132 +// 通用按钮样式(支持任意top值,无需批量生成类名)
  133 +.common-custom-btn {
  134 + position: absolute;
  135 + // 核心:用CSS变量接收动态top值,默认100px
  136 + top: var(--btn-top, 100px);
  137 + right: 15px;
  138 + //transform: translateX(-50%);
  139 + background-color: #3c9cff;
  140 + color: #ffffff;
  141 + border: none;
  142 + border-radius: 4px;
  143 + padding: 4px 10px;
  144 + font-size: 14px;
  145 + text-align: center;
  146 + cursor: pointer;
  147 + transition: all 0.2s ease;
  148 + white-space: nowrap;
  149 + z-index: 99;
  150 +
  151 + // 点击态
  152 + &:active {
  153 + background-color: #2b88ee;
  154 + opacity: 0.9;
  155 + }
  156 +
  157 + // 禁用态
  158 + &.disabled {
  159 + background-color: #a0c8f5;
  160 + cursor: not-allowed;
  161 + opacity: 0.7;
  162 + }
  163 +}
  164 +
  165 +
  166 +
  167 +
132 168  
133 169 </style>
134 170 \ No newline at end of file
... ...
pages-sub/daily/maintain-manage/finish-plan-detail.vue
... ... @@ -69,7 +69,7 @@
69 69 <!-- 7. 处理结果 -->
70 70 <up-cell align="middle">
71 71 <template #title>
72   - <view style="min-width: 200rpx">巡查描述</view>
  72 + <view style="min-width: 200rpx">养护描述</view>
73 73 </template>
74 74 <template #value>
75 75 <view class="up-line-1 common-text-color">{{i.remark || '--'}}</view>
... ... @@ -78,7 +78,7 @@
78 78  
79 79 <up-cell
80 80 title="提交时间"
81   - :value="timeFormat(i.finishTime,'yyyy-mm-dd hh:MM:ss') || '--'"
  81 + :value="i.finishTime==null?'--':timeFormat(i.finishTime,'yyyy-mm-dd hh:MM:ss')"
82 82 align="middle"
83 83 ></up-cell>
84 84  
... ...
pages-sub/daily/maintain-manage/index.vue
... ... @@ -70,6 +70,20 @@
70 70 >
71 71 <template #body>
72 72 <view class="card-body">
  73 +<!-- <view class="">-->
  74 +<!-- <up-button-->
  75 +<!-- type="primary"-->
  76 +<!-- size="mini"-->
  77 +<!-- @click="goToDetail(item)"-->
  78 +<!-- class="submit-record-btn"-->
  79 +<!-- >-->
  80 +<!-- 计划明细-->
  81 +<!-- </up-button>-->
  82 +<!-- </view>-->
  83 +
  84 + <view class="common-custom-btn " style="--btn-top: 68px;" @click="goToDetail(item)">
  85 + 计划明细
  86 + </view>
73 87 <view class="u-body-item u-flex">
74 88 <view class="u-body-item-title">道路名称:</view>
75 89 <view class="u-line-1 u-body-value">{{ item.roadName || '-' }}</view>
... ... @@ -83,16 +97,7 @@
83 97  
84 98 <view class="u-body-item u-flex common-item-center common-justify-between">
85 99 <view class="u-body-item-title">养护级别: {{uni.$dict.getDictLabel('conserve_level', item.levelId) || '-'}}</view>
86   - <view class="">
87   - <up-button
88   - type="primary"
89   - size="mini"
90   - @click="goToDetail(item)"
91   - class="submit-record-btn"
92   - >
93   - 计划明细
94   - </up-button>
95   - </view>
  100 +
96 101 </view>
97 102  
98 103 <!-- <view class="u-body-item u-flex">-->
... ... @@ -125,6 +130,9 @@
125 130  
126 131 <template #body>
127 132 <view class="card-body">
  133 + <view class="common-custom-btn " v-if="item.finishState!==3" style="--btn-top: 100px;" @click="submitRecord(item)">
  134 + 提交记录
  135 + </view>
128 136 <view class="u-body-item u-flex">
129 137 <view class="u-body-item-title">计划编码:</view>
130 138 <view class="u-line-1 u-body-value">{{ item.planNo || '-' }}</view>
... ... @@ -138,16 +146,16 @@
138 146  
139 147 <view class="u-body-item u-flex common-item-center common-justify-between">
140 148 <view class="u-body-item-title">计划完成次数: {{ item.planNum || 0 }}</view>
141   - <view class="" v-if="item.finishState!==3">
142   - <up-button
143   - type="primary"
144   - size="mini"
145   - @click="submitRecord(item)"
146   - class="submit-record-btn"
147   - >
148   - 提交记录
149   - </up-button>
150   - </view>
  149 +<!-- <view class="" v-if="item.finishState!==3">-->
  150 +<!-- <up-button-->
  151 +<!-- type="primary"-->
  152 +<!-- size="mini"-->
  153 +<!-- @click="submitRecord(item)"-->
  154 +<!-- class="submit-record-btn"-->
  155 +<!-- >-->
  156 +<!-- 提交记录-->
  157 +<!-- </up-button>-->
  158 +<!-- </view>-->
151 159 </view>
152 160  
153 161 <view class="u-body-item u-flex">
... ...
pages-sub/daily/maintain-manage/pending-plan-detail.vue
... ... @@ -18,6 +18,20 @@
18 18 <!-- 卡片主体内容(原详情项) -->
19 19 <template #body>
20 20 <view class="card-body">
  21 +<!-- <view class="">-->
  22 +<!-- <up-button-->
  23 +<!-- type="primary"-->
  24 +<!-- size="mini"-->
  25 +<!-- @click="gotoFinishPlanDetail(i)"-->
  26 +<!-- class="submit-record-btn"-->
  27 +
  28 +<!-- >-->
  29 +<!-- 查看记录-->
  30 +<!-- </up-button>-->
  31 +<!-- </view>-->
  32 + <view class="common-custom-btn " style="--btn-top: 100px;" @click="gotoFinishPlanDetail(i)">
  33 + 查看记录
  34 + </view>
21 35 <!-- 计划编码 -->
22 36 <view class="u-body-item u-flex">
23 37 <view class="u-body-item-title">计划编码:</view>
... ... @@ -41,17 +55,7 @@
41 55 <!-- 已完成次数 + 查看记录按钮 -->
42 56 <view class="u-body-item u-flex common-item-center common-justify-between">
43 57 <view class="u-body-item-title">已完成次数: {{ i.planFinishNum || 0 }} 次</view>
44   - <view class="">
45   - <up-button
46   - type="primary"
47   - size="mini"
48   - @click="gotoFinishPlanDetail(i)"
49   - class="submit-record-btn"
50   -
51   - >
52   - 查看记录
53   - </up-button>
54   - </view>
  58 +
55 59 </view>
56 60  
57 61 <!-- 计划有效期 -->
... ...
pages-sub/daily/maintain-manage/record-detail-list.vue
... ... @@ -67,7 +67,7 @@
67 67  
68 68 <!-- 7. 处理结果 -->
69 69 <up-cell
70   - title="巡查描述"
  70 + title="养护描述"
71 71 :value="i.remark || '--'"
72 72 class="up-line-1"
73 73 align="middle"
... ...
pages-sub/daily/maintain-manage/road-detail-list.vue
... ... @@ -63,6 +63,27 @@
63 63  
64 64 <template #body>
65 65 <view class="card-body">
  66 +
  67 +<!-- <view class="">-->
  68 +<!-- <up-button-->
  69 +<!-- type="primary"-->
  70 +<!-- size="mini"-->
  71 +<!-- @click="submitRecord(item)"-->
  72 +<!-- class="submit-record-btn"-->
  73 +<!-- :disabled="item.finishState == 3"-->
  74 +<!-- >-->
  75 +<!-- {{ item.finishState ==3 ? '补交记录' : '提交记录' }}-->
  76 +<!-- </up-button>-->
  77 +<!-- </view>-->
  78 +
  79 + <view class="common-custom-btn " v-if="item.finishState ==3" style="--btn-top: 100px;" >
  80 + 补交记录
  81 + </view>
  82 + <view class="common-custom-btn " v-else style="--btn-top: 100px;" @click="submitRecord(item)">
  83 + 提交记录
  84 + </view>
  85 +
  86 +
66 87 <view class="u-body-item u-flex">
67 88 <view class="u-body-item-title">计划编码:</view>
68 89 <view class="u-line-1 u-body-value">{{ item.planNo || '-' }}</view>
... ... @@ -76,42 +97,17 @@
76 97  
77 98 <view class="u-body-item u-flex common-item-center common-justify-between">
78 99 <view class="u-body-item-title">计划完成次数: {{ item.planNum || 0 }}</view>
79   - <view class="">
80   - <up-button
81   - type="primary"
82   - size="mini"
83   - @click="submitRecord(item)"
84   - class="submit-record-btn"
85   -
86   - :disabled="item.finishState == 3"
87   -
88   - >
89   -
90   - {{ item.finishState ==3 ? '补交记录' : '提交记录' }}
91   - </up-button>
92   -
93   -<!-- :class="{ 'disabled-btn': item.finishState ==3 }"-->
  100 +<!-- <view class="">-->
94 101 <!-- <up-button-->
95   -<!-- v-if="item.finishState ==3"-->
96 102 <!-- type="primary"-->
97 103 <!-- size="mini"-->
98   -<!-- @click=""-->
  104 +<!-- @click="submitRecord(item)"-->
99 105 <!-- class="submit-record-btn"-->
100   -<!-- :disabled="true"-->
  106 +<!-- :disabled="item.finishState == 3"-->
101 107 <!-- >-->
102   -<!-- 补交记录-->
  108 +<!-- {{ item.finishState ==3 ? '补交记录' : '提交记录' }}-->
103 109 <!-- </up-button>-->
104   -
105   -<!-- <up-button-->
106   -<!-- v-if="item.finishState !== '3' && item.planFinishNum>0"-->
107   -<!-- type="primary"-->
108   -<!-- size="mini"-->
109   -<!-- @click="gotoFinishPlanDetail(item)"-->
110   -<!-- class="submit-record-btn"-->
111   -<!-- >-->
112   -<!-- 提交记录-->
113   -<!-- </up-button>-->
114   - </view>
  110 +<!-- </view>-->
115 111 </view>
116 112  
117 113 <view class="u-body-item u-flex">
... ...
pages-sub/daily/patrol-manage/finish-plan-detail.vue
... ... @@ -79,7 +79,7 @@
79 79  
80 80 <up-cell
81 81 title="提交时间"
82   - :value="timeFormat(i.finishTime,'yyyy-mm-dd hh:MM:ss') || '--'"
  82 + :value="i.finishTime==null?'--':timeFormat(i.finishTime,'yyyy-mm-dd hh:MM:ss') "
83 83 align="middle"
84 84  
85 85 ></up-cell>
... ...
pages-sub/daily/patrol-manage/index.vue
... ... @@ -56,6 +56,9 @@
56 56 >
57 57 <template #body>
58 58 <view class="card-body">
  59 + <view class="common-custom-btn " style="--btn-top: 80px;" @click="gotoDetail(item)">
  60 + 计划明细
  61 + </view>
59 62 <view class="u-body-item u-flex">
60 63 <view class="u-body-item-title">道路名称:</view>
61 64 <view class="u-line-1 u-body-value">{{ item.roadName || '-' }}</view>
... ... @@ -71,16 +74,7 @@
71 74  
72 75 <view class="u-body-item u-flex common-item-center common-justify-between">
73 76 <view class="u-body-item-title">养护级别: {{uni.$dict.getDictLabel('conserve_level', item.levelId) || '-'}}</view>
74   - <view class="">
75   - <up-button
76   - type="primary"
77   - size="mini"
78   - @click="gotoDetail(item)"
79   - class="submit-record-btn"
80   - >
81   - 计划明细
82   - </up-button>
83   - </view>
  77 +
84 78 </view>
85 79  
86 80 <view class="u-body-item u-flex">
... ...
pages-sub/daily/patrol-manage/pending-plan-detail.vue
... ... @@ -23,55 +23,84 @@
23 23  
24 24 <template #body>
25 25 <view class="card-body">
26   - <view class="u-body-item u-flex">
27   - <view class="u-body-item-title">计划编码:</view>
28   - <view class="u-line-1 u-body-value">{{ item.planNo || '-' }}</view>
29   - </view>
30   - <view class="u-body-item u-flex">
31   - <view class="u-body-item-title">养护周期:</view>
32   - <view class="u-line-1 u-body-value">{{ item.rate || '-' }}
33   - {{ uni.$dict.getDictLabel('cycle_id_type', item.cycleId) }}
  26 +
  27 + <!-- <up-button-->
  28 + <!-- v-if="item.finishState ==3"-->
  29 + <!-- type="primary"-->
  30 + <!-- size="mini"-->
  31 + <!-- @click=""-->
  32 + <!-- class="submit-record-btn"-->
  33 + <!-- :disabled="true"-->
  34 + <!-- >-->
  35 + <!-- 补交记录-->
  36 + <!-- </up-button>-->
  37 +
  38 + <!-- <up-button-->
  39 + <!-- v-if="item.finishState !== 3 && item.planFinishNum > 0"-->
  40 + <!-- type="primary"-->
  41 + <!-- size="mini"-->
  42 + <!-- @click="gotoFinishPlanDetail(item)"-->
  43 + <!-- class="submit-record-btn"-->
  44 + <!-- >-->
  45 + <!-- 提交记录-->
  46 + <!-- </up-button>-->
  47 + <!-- </view>-->
  48 + <view class="common-custom-btn disable" style="--btn-top: 120px;" v-if="item.finishState ==3">
  49 + 补交记录
  50 + </view>
  51 + <view class="common-custom-btn " style="--btn-top: 120px;"
  52 + v-if="item.finishState !== 3 && item.planFinishNum > 0" @click="gotoFinishPlanDetail(item)">
  53 + 提交记录
  54 + </view>
  55 + <view class="u-body-item u-flex">
  56 + <view class="u-body-item-title">计划编码:</view>
  57 + <view class="u-line-1 u-body-value">{{ item.planNo || '-' }}</view>
  58 + </view>
  59 + <view class="u-body-item u-flex">
  60 + <view class="u-body-item-title">养护周期:</view>
  61 + <view class="u-line-1 u-body-value">{{ item.rate || '-' }}
  62 + {{ uni.$dict.getDictLabel('cycle_id_type', item.cycleId) }}
  63 + </view>
34 64 </view>
35   - </view>
36 65  
37   - <view class="u-body-item u-flex common-item-center common-justify-between">
38   - <view class="u-body-item-title">计划完成次数: {{ item.planNum || 0 }}</view>
39   - <view class="">
40   - <up-button
41   - v-if="item.finishState ==3"
42   - type="primary"
43   - size="mini"
44   - @click=""
45   - class="submit-record-btn"
46   - :disabled="true"
47   - >
48   - 补交记录
49   - </up-button>
  66 + <view class="u-body-item u-flex common-item-center common-justify-between">
  67 + <view class="u-body-item-title">计划完成次数: {{ item.planNum || 0 }}</view>
  68 + <!-- <view class="">-->
  69 + <!-- <up-button-->
  70 + <!-- v-if="item.finishState ==3"-->
  71 + <!-- type="primary"-->
  72 + <!-- size="mini"-->
  73 + <!-- @click=""-->
  74 + <!-- class="submit-record-btn"-->
  75 + <!-- :disabled="true"-->
  76 + <!-- >-->
  77 + <!-- 补交记录-->
  78 + <!-- </up-button>-->
50 79  
51   - <up-button
52   - v-if="item.finishState !== 3 && item.planFinishNum > 0"
53   - type="primary"
54   - size="mini"
55   - @click="gotoFinishPlanDetail(item)"
56   - class="submit-record-btn"
57   - >
58   - 提交记录
59   - </up-button>
  80 + <!-- <up-button-->
  81 + <!-- v-if="item.finishState !== 3 && item.planFinishNum > 0"-->
  82 + <!-- type="primary"-->
  83 + <!-- size="mini"-->
  84 + <!-- @click="gotoFinishPlanDetail(item)"-->
  85 + <!-- class="submit-record-btn"-->
  86 + <!-- >-->
  87 + <!-- 提交记录-->
  88 + <!-- </up-button>-->
  89 + <!-- </view>-->
60 90 </view>
61   - </view>
62 91  
63   - <view class="u-body-item u-flex">
64   - <view class="u-body-item-title">已完成次数:</view>
65   - <view class="u-line-1 u-body-value">{{ item.planFinishNum || 0 }}</view>
66   - </view>
  92 + <view class="u-body-item u-flex">
  93 + <view class="u-body-item-title">已完成次数:</view>
  94 + <view class="u-line-1 u-body-value">{{ item.planFinishNum || 0 }}</view>
  95 + </view>
67 96  
68   - <view class="u-body-item u-flex">
69   - <view class="u-body-item-title">计划有效期:</view>
70   - <view class="u-line-1 u-body-value">{{ timeFormat(item.beginTime, 'yyyy-mm-dd') || '-' }} 至
71   - {{ timeFormat(item.endTime, 'yyyy-mm-dd') || '-' }}
  97 + <view class="u-body-item u-flex">
  98 + <view class="u-body-item-title">计划有效期:</view>
  99 + <view class="u-line-1 u-body-value">{{ timeFormat(item.beginTime, 'yyyy-mm-dd') || '-' }} 至
  100 + {{ timeFormat(item.endTime, 'yyyy-mm-dd') || '-' }}
  101 + </view>
72 102 </view>
73 103 </view>
74   - </view>
75 104 </template>
76 105 </up-card>
77 106 </view>
... ...
pages-sub/daily/quick-order/index.vue
... ... @@ -54,6 +54,17 @@
54 54  
55 55 <template #body>
56 56 <view class="card-body">
  57 + <view class="common-custom-btn " style="--btn-top: 64px;" @click="handleDetail(item)">
  58 + 工单详情
  59 + <!-- <up-button-->
  60 + <!-- type="primary"-->
  61 +
  62 + <!-- @click="gotoDetail(item)"-->
  63 + <!-- class="submit-record-btn"-->
  64 + <!-- >-->
  65 + <!-- 计划明细-->
  66 + <!-- </up-button>-->
  67 + </view>
57 68 <view class="u-body-item u-flex">
58 69 <view class="u-body-item-title">工单编号:</view>
59 70 <view class="u-line-1 u-body-value">{{ item.orderNo || '-' }}</view>
... ... @@ -75,16 +86,16 @@
75 86  
76 87 <view class="u-body-item u-flex common-item-center common-justify-between">
77 88 <view class="u-body-item-title u-body-value">提交时间:{{ timeFormat(item.createTime, 'yyyy-mm-dd hh:MM:ss') }}</view>
78   - <view class="">
79   - <up-button
80   - type="primary"
81   - size="mini"
82   - @click="handleDetail(item)"
83   -
84   - >
85   - 工单详情
86   - </up-button>
87   - </view>
  89 +<!-- <view class="">-->
  90 +<!-- <up-button-->
  91 +<!-- type="primary"-->
  92 +<!-- size="mini"-->
  93 +<!-- @click="handleDetail(item)"-->
  94 +
  95 +<!-- >-->
  96 +<!-- 工单详情-->
  97 +<!-- </up-button>-->
  98 +<!-- </view>-->
88 99  
89 100 </view>
90 101 </view>
... ...
pages-sub/problem/regional-order-manage/index.vue
... ... @@ -62,6 +62,14 @@
62 62 >
63 63 <template #body>
64 64 <view class="card-body">
  65 +<!-- <view v-if="activeTab !== 0" class="ml-10">-->
  66 +<!-- <up-button type="primary" size="mini" @click="handleDetail(item)">工单详情</up-button>-->
  67 +<!-- </view>-->
  68 +
  69 + <view class="common-custom-btn " v-if="activeTab !== 0" style="--btn-top: 130px;" @click="handleDetail(item)">
  70 + 工单详情
  71 + </view>
  72 +
65 73 <view class="u-body-item u-flex">
66 74 <view class="u-body-item-title">工单编号:</view>
67 75 <view class="u-line-1 u-body-value">{{ item.orderNo || '-' }}</view>
... ... @@ -78,16 +86,16 @@
78 86 <view class="u-body-item-title">情况描述:</view>
79 87 <view class="u-line-1 u-body-value">{{ item.remark || '无' }}</view>
80 88 </view>
81   - <!-- 核心修改:紧急程度行 合并工单详情按钮 【我发起的/已办】放到该行最右侧 -->
  89 +
82 90 <view class="u-body-item u-flex common-justify-between common-item-center">
83 91 <view class="u-body-item-title">紧急程度:{{ uni.$dict.getDictLabel('workorder_pressing_type', item.pressingType) || '-' }}</view>
84 92 <!-- <view class="u-line-1 u-body-value flex-1 text-right">-->
85 93 <!-- {{ uni.$dict.getDictLabel('workorder_pressing_type', item.pressingType) || '-' }}-->
86 94 <!-- </view>-->
87 95 <!-- 只有 我发起的(1)、已办(2) 显示该行的详情按钮 -->
88   - <view v-if="activeTab !== 0" class="ml-10">
89   - <up-button type="primary" size="mini" @click="handleDetail(item)">工单详情</up-button>
90   - </view>
  96 +<!-- <view v-if="activeTab !== 0" class="ml-10">-->
  97 +<!-- <up-button type="primary" size="mini" @click="handleDetail(item)">工单详情</up-button>-->
  98 +<!-- </view>-->
91 99 </view>
92 100 <view class="u-body-item u-flex">
93 101 <view class="u-body-item-title">工单状态:</view>
... ... @@ -99,11 +107,11 @@
99 107 </view>
100 108  
101 109 <!-- 待办工单(0) 保留原来的操作按钮区 不变 -->
102   - <view v-if="activeTab === 0" class="u-body-item u-flex common-justify-between common-item-center mt-20">
103   - <up-button type="warning" size="mini" @click="handleReject(item)" v-show="nextStepMap[item.taskKey].backShow">回退</up-button>
104   - <up-button type="success" size="mini" @click="handleRenew(item)" v-show="nextStepMap[item.taskKey].renewShow">重新提交</up-button>
105   - <up-button type="primary" size="mini" @click="handleProcess(item)">{{ nextStepMap[item.taskKey].btnText }}</up-button>
106   - <up-button type="info" size="mini" @click="handleDetail(item)">详情</up-button>
  110 + <view v-if="activeTab === 0" class="u-body-item u-body-item-btn-wrap u-flex common-justify-between common-item-center mt-20">
  111 + <up-button type="warning" size="large" @click="handleReject(item)" v-show="nextStepMap[item.taskKey].backShow">回退</up-button>
  112 + <up-button type="success" size="large" @click="handleRenew(item)" v-show="nextStepMap[item.taskKey].renewShow">重新提交</up-button>
  113 + <up-button type="primary" size="large" @click="handleProcess(item)">{{ nextStepMap[item.taskKey].btnText }}</up-button>
  114 + <up-button type="info" size="large" @click="handleDetail(item)">详情</up-button>
107 115 </view>
108 116  
109 117 <!-- 已删除:原来单独的【我发起的/已办】按钮区,不需要了 -->
... ... @@ -222,8 +230,8 @@ const USER_ROLES = userStore.userInfo?.roles || [];
222 230  
223 231 // ========== 基础状态 (按模块分组,语义化更强) ==========
224 232 // tab切换
225   -const activeTab = ref(0); // 0-待办 1-我发起的 2-已办
226   -const tabList = [{name: '待办'}, {name: '我发起的任务'}, {name: '已办'}];
  233 +const activeTab = ref(0); // 0-待办 1-已办 2-我发起的任务
  234 +const tabList = [{name: '待办'}, {name: '已办'}, {name: '我发起的任务'}];
227 235 // 排序与搜索
228 236 const selectedSortValue = ref(1);
229 237 const sortOptions = ref([
... ... @@ -347,8 +355,9 @@ const queryList = async (pageNo, pageSize) =&gt; {
347 355 try {
348 356 const params = getQueryParams(pageNo, pageSize);
349 357 let res;
  358 + // 0-待办 1-已办 2-我发起的任务
350 359 if (activeTab.value === 0) res = await todoBuzSimplePage(params);
351   - else if (activeTab.value === 1) res = await myBuzSimplePage(params);
  360 + else if (activeTab.value === 2) res = await myBuzSimplePage(params);
352 361 else res = await doneBuzSimplePage(params);
353 362 pagingHandle('complete', res?.list || [], res?.total || 0);
354 363 } catch (error) {
... ... @@ -592,6 +601,11 @@ onLoad(() =&gt; {
592 601 box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
593 602 }
594 603  
  604 +.u-body-item-btn-wrap :deep(.u-button--large){
  605 + height: 28px;
  606 +}
  607 +
  608 +
595 609 // 新增样式:解决按钮和文字间距、排版问题
596 610 .flex-1 { flex: 1; }
597 611 .text-right { text-align: right; }
... ...
pages-sub/problem/regional-order-manage/order-detail.vue
... ... @@ -203,7 +203,7 @@
203 203  
204 204 <!-- 2. 原描述内容:时间 + 处理说明(最多200字) -->
205 205 <view class="step-desc">
206   - <view class="operator-name up-line-1">
  206 + <view class="operator-name up-line-1" v-if="item.tasks">
207 207 处理人:
208 208 <text>{{ item.tasks?.map(itemName => itemName.assigneeUser?.nickname).filter(Boolean).join(',') }}</text>
209 209 </view>
... ... @@ -545,7 +545,8 @@ const getLimitReason = (reason: string | null | undefined) =&gt; {
545 545 const getCurrentStepIndex = () => {
546 546 const {activityNodes} = processData.value;
547 547 if (!activityNodes || !activityNodes.length) return 0;
548   - return activityNodes.length - 1;
  548 + // return activityNodes.length - 1;
  549 + return activityNodes.length;
549 550 }
550 551  
551 552 /**
... ... @@ -557,12 +558,12 @@ const DetailQuery = async (taskIdStr: string) =&gt; {
557 558 loading.value = true;
558 559 const tabType = Number(activeTab.value);
559 560 let res: any;
560   -
  561 + // 0-待办 1-已办 2-我发起的任务
561 562 if (tabType === 0) {
562 563 res = await getTodoTaskDetail({taskId: taskIdStr});
563   - } else if (tabType === 1) {
564   - res = await getMyTaskDetail({taskId: taskIdStr});
565 564 } else if (tabType === 2) {
  565 + res = await getMyTaskDetail({taskId: taskIdStr});
  566 + } else if (tabType === 1) {
566 567 res = await getDoneTaskDetail({taskId: taskIdStr});
567 568 } else {
568 569 uni.showToast({title: '无效的工单类型', icon: 'none'});
... ...
pages-sub/problem/work-order-manage/index.vue
... ... @@ -101,20 +101,20 @@
101 101 <view class="u-line-1 u-body-value">{{ timeFormat(item.createTime, 'yyyy-mm-dd hh:MM:ss') }}</view>
102 102 </view>
103 103 <!-- 操作按钮行 -->
104   - <view class="u-body-item u-flex common-justify-between common-item-center mt-20">
105   - <up-button type="warning" size="mini" @click="handleReject(item)"
  104 + <view class="u-body-item u-body-item-btn-wrap u-flex common-justify-between common-item-center mt-20">
  105 + <up-button type="warning" size="large" @click="handleReject(item)"
106 106 v-show="nextStepMap[item.taskKey].backShow">回退
107 107 </up-button>
108 108  
109   - <up-button type="success" size="mini" @click="handleRenew(item)"
  109 + <up-button type="success" size="large" @click="handleRenew(item)"
110 110 v-show="nextStepMap[item.taskKey].renewShow">重新提交
111 111 </up-button>
112 112  
113   - <up-button type="primary" size="mini" @click="handleProcess(item)">{{
  113 + <up-button type="primary" size="large" @click="handleProcess(item)">{{
114 114 nextStepMap[item.taskKey].btnText
115 115 }}
116 116 </up-button>
117   - <up-button type="info" size="mini" @click="handleDetail(item)">详情</up-button>
  117 + <up-button type="info" size="large" @click="handleDetail(item)">详情</up-button>
118 118 </view>
119 119 </view>
120 120 </template>
... ... @@ -132,6 +132,14 @@
132 132 >
133 133 <template #body>
134 134 <view class="card-body">
  135 +
  136 +<!-- <view class=" ">-->
  137 +<!-- <up-button type="primary" size="mini" @click="handleDetail(item)">工单详情</up-button>-->
  138 +<!-- </view>-->
  139 + <view class="common-custom-btn " style="--btn-top: 130px;" @click="handleDetail(item)">
  140 + 工单详情
  141 + </view>
  142 +
135 143 <view class="u-body-item u-flex">
136 144 <view class="u-body-item-title">工单编号:</view>
137 145 <view class="u-line-1 u-body-value">{{ item.orderNo || '-' }}</view>
... ... @@ -152,9 +160,9 @@
152 160 <view class="u-body-item u-flex common-justify-between common-item-center">
153 161 <view class="u-body-item-title">紧急程度:{{ uni.$dict.getDictLabel('workorder_pressing_type', item.pressingType) }}
154 162 </view>
155   - <view class=" ">
156   - <up-button type="primary" size="mini" @click="handleDetail(item)">工单详情</up-button>
157   - </view>
  163 +<!-- <view class=" ">-->
  164 +<!-- <up-button type="primary" size="mini" @click="handleDetail(item)">工单详情</up-button>-->
  165 +<!-- </view>-->
158 166 </view>
159 167 <view class="u-body-item u-flex">
160 168 <view class="u-body-item-title">工单状态:</view>
... ... @@ -286,11 +294,11 @@ import { useUploadImgs } from &#39;@/common/utils/useUploadImgs&#39;
286 294 // ========== 状态管理 ==========
287 295 const userStore = useUserStore();
288 296 // 标签页切换
289   -const activeTab = ref(0); // 0-待办 1-我发起的 2-已办
  297 +const activeTab = ref(0); //0-待办 1-已办 2-我发起的任务
290 298 const tabList = ref([
291 299 {name: '待办'},
292   - {name: '我发起的任务'},
293   - {name: '已办'}
  300 + {name: '已办'},
  301 + {name: '我发起的任务'}
294 302 ]);
295 303 // 排序下拉框
296 304 const selectedSortValue = ref(1);
... ... @@ -353,10 +361,11 @@ const queryList = async (pageNo, pageSize) =&gt; {
353 361 type: selectedSortValue.value // 1-位置 2-工单名称 3-情况描述 4-工单编号
354 362 };
355 363 let res;
  364 + // 0-待办 1-已办 2-我发起的任务
356 365 if (activeTab.value == 0) {
357 366 // 待办工单
358 367 res = await todoBuzSimplePage(apiParams);
359   - } else if (activeTab.value == 1) {
  368 + } else if (activeTab.value == 2) {
360 369 // 我发起的任务
361 370 res = await myBuzSimplePage(apiParams);
362 371 } else {
... ... @@ -403,7 +412,7 @@ const handleSearch = (val) =&gt; {
403 412 // };
404 413 // 工单详情
405 414 const handleDetail = (item) => {
406   - // 0-待办 1我发起的- 2-已办
  415 + // 0-待办 1-已办 2-我发起的任务
407 416 uni.navigateTo({
408 417 url: `/pages-sub/problem/work-order-manage/order-detail?taskId=${item.taskId}&activeTab=${activeTab.value}&processInstanceId=${item.processInstanceId}`,
409 418 events: {
... ... @@ -609,7 +618,7 @@ const handleAcceptModalCancel = () =&gt; {
609 618 // 验收弹窗 - 确定按钮(含returnImgs传参)
610 619 const handleAcceptModalConfirm = async () => {
611 620 // 1. 校验验收原因是否为空
612   - if (!acceptReason.value.trim()) {
  621 + if (acceptRadioValue.value == 1 && !acceptReason.value.trim()) {
613 622 uni.showToast({title: '请填写验收原因', icon: 'none', duration: 1000});
614 623 return;
615 624 }
... ... @@ -706,10 +715,11 @@ onLoad(() =&gt; {
706 715 border-radius: 12rpx;
707 716 box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
708 717 }
  718 +.u-body-item-btn-wrap :deep(.u-button--large){
  719 + height: 28px;
  720 +}
709 721  
710   -.card-body {
711 722  
712   -}
713 723  
714 724 // 回退modal样式
715 725 .reject-modal-content {
... ...
pages-sub/problem/work-order-manage/order-detail.vue
... ... @@ -202,7 +202,7 @@
202 202  
203 203 <!-- 2. 原描述内容:时间 + 处理说明(最多200字) -->
204 204 <view class="step-desc">
205   - <view class="operator-name up-line-1">
  205 + <view class="operator-name up-line-1" v-if="item.tasks">
206 206 处理人:
207 207 <text>{{ item.tasks?.map(itemName => itemName.assigneeUser?.nickname).filter(Boolean).join(',') }}</text>
208 208 </view>
... ... @@ -492,7 +492,8 @@ const getCurrentStepIndex = () =&gt; {
492 492 if (!activityNodes || !activityNodes.length) return 0;
493 493  
494 494 // 2. 若没有处理中的节点(全部已完成),则激活最后一个节点
495   - return activityNodes.length - 1;
  495 + // return activityNodes.length - 1;
  496 + return activityNodes.length;
496 497 }
497 498  
498 499 /**
... ... @@ -505,12 +506,12 @@ const DetailQuery = async (taskIdStr: string) =&gt; {
505 506 // 转换activeTab为数字类型,避免类型不一致导致接口调用失败
506 507 const tabType = Number(activeTab.value);
507 508 let res: any;
508   -
  509 + // 0-待办 1-已办 2-我发起的任务
509 510 if (tabType === 0) {
510 511 res = await getTodoTaskDetail({taskId: taskIdStr});
511   - } else if (tabType === 1) {
512   - res = await getMyTaskDetail({taskId: taskIdStr});
513 512 } else if (tabType === 2) {
  513 + res = await getMyTaskDetail({taskId: taskIdStr});
  514 + } else if (tabType === 1) {
514 515 res = await getDoneTaskDetail({taskId: taskIdStr});
515 516 } else {
516 517 uni.showToast({title: '无效的工单类型', icon: 'none'});
... ... @@ -547,10 +548,11 @@ const activeTopTabClick = async (item: any) =&gt; {
547 548 // 关键:格式化数据,补充up-steps要求的title字段
548 549 if (res && res.activityNodes && res.activityNodes.length) {
549 550 // 1. 先过滤:剔除 name 为 "结束" 的节点
550   - const filteredActivityNodes = res.activityNodes.filter(node => {
551   - // 返回 true 保留节点,返回 false 剔除节点
552   - return node.name !== '结束';
553   - });
  551 + // const filteredActivityNodes = res.activityNodes.filter(node => {
  552 + // // 返回 true 保留节点,返回 false 剔除节点
  553 + // return node.name !== '结束';
  554 + // });
  555 + const filteredActivityNodes = res.activityNodes
554 556 const formatActivityNodes = filteredActivityNodes.map(node => ({
555 557 ...node,
556 558 title: node.name // 补充强制字段,满足3.3.48版本组件要求
... ... @@ -785,7 +787,7 @@ const handleAcceptModalCancel = () =&gt; {
785 787 // ========== 验收弹窗确认按钮(新增returnImgs传参) ==========
786 788 const handleAcceptModalConfirm = async () => {
787 789 // 1. 校验验收原因是否为空
788   - if (!acceptReason.value.trim()) {
  790 + if (acceptRadioValue.value == 1 && !acceptReason.value.trim()) {
789 791 uni.showToast({title: '请填写验收原因', icon: 'none', duration: 1000});
790 792 return;
791 793 }
... ...
pages/index/index.vue
... ... @@ -32,13 +32,18 @@
32 32 placeholder="请选择日期范围"
33 33 @confirm="handleDateConfirm"
34 34 :max-date="maxDate"
  35 +
  36 + @popup-show="handlePopupShow"
  37 + @popup-hide="handlePopupHide"
35 38 />
  39 +<!-- :minDate="minDate"-->
36 40 </view>
37 41 </view>
38 42  
39 43 <!-- 双折线K线图 -->
40 44 <view class="chart-container">
41 45 <uni-charts
  46 + v-if="!isDatePickerOpen"
42 47 type="line"
43 48 :data="klineChartData"
44 49 :categories="klineCategories"
... ... @@ -75,6 +80,7 @@
75 80 :page-size="10"
76 81 use-page-scroll
77 82 >
  83 +
78 84 <template #empty>
79 85 <up-empty/>
80 86 </template>
... ... @@ -122,8 +128,23 @@ import {getTaskCompletionSummary, getTaskDetails} from &quot;@/api/index/index&quot;;
122 128 const msgCount = ref(0);
123 129 const currentTab = ref('todo'); // todo:待办 done:已办
124 130 const dateRange = ref([]);
125   -const maxDate = ref(timeFormat(new Date(), 'yyyy-mm-dd'));
  131 +const yesterday = new Date();
  132 +yesterday.setDate(yesterday.getDate() - 1); // 日期减1天 = 昨天
  133 +const maxDate = ref(timeFormat(yesterday, 'yyyy-mm-dd'));
  134 +const minDate = '2026-01-06'
  135 +
  136 +// 新增响应式变量:标记日期选择器弹窗是否打开
  137 +const isDatePickerOpen = ref(false);
  138 +
  139 +// 弹窗打开时触发
  140 +const handlePopupShow = () => {
  141 + isDatePickerOpen.value = true;
  142 +};
126 143  
  144 +// 弹窗关闭时触发
  145 +const handlePopupHide = () => {
  146 + isDatePickerOpen.value = false;
  147 +};
127 148 // Tab列表配置
128 149 const tabList = ref([]);
129 150 const todoTotal = ref(0); // 待办事项总数
... ... @@ -193,16 +214,18 @@ const rpx2px = (rpx) =&gt; {
193 214  
194 215  
195 216 const initRecent7Days = async () => {
196   - const now = new Date();
197   - const sevenDaysAgo = new Date();
198   - sevenDaysAgo.setDate(now.getDate() - 6);
  217 + const yesterday = new Date();
  218 + yesterday.setDate(yesterday.getDate() - 1); // 结束时间 = 昨天
  219 + const sevenDaysAgo = new Date(yesterday);
  220 + sevenDaysAgo.setDate(yesterday.getDate() - 6); // 开始时间 = 昨天往前推6天(共7天)
  221 +
199 222 // 格式化日期为 YYYY-MM-DD 格式
200 223 dateRange.value = [
201 224 timeFormat(sevenDaysAgo, 'yyyy-mm-dd'),
202   - timeFormat(now, 'yyyy-mm-dd')
  225 + timeFormat(yesterday, 'yyyy-mm-dd')
203 226 ];
204 227  
205   - initChartData(timeFormat(sevenDaysAgo, 'yyyy-mm-dd'), timeFormat(now, 'yyyy-mm-dd'));
  228 + initChartData(timeFormat(sevenDaysAgo, 'yyyy-mm-dd'), timeFormat(yesterday, 'yyyy-mm-dd'));
206 229 };
207 230  
208 231 const getUnread = async () => {
... ... @@ -381,8 +404,8 @@ $border-color: #e5e5e5; // 新增边框颜色变量
381 404 justify-content: space-between;
382 405 align-items: center;
383 406 color: #fff;
384   - position: relative;
385   - z-index: 1;
  407 + //position: relative;
  408 + //z-index: 1;
386 409  
387 410 .username {
388 411 font-size: 16px;
... ... @@ -415,8 +438,8 @@ $border-color: #e5e5e5; // 新增边框颜色变量
415 438 margin-top: -122px;
416 439 border-radius: $border-radius $border-radius 0 0;
417 440 background-color: $bg-color;
418   - position: relative;
419   - z-index: 999;
  441 + //position: relative;
  442 + //z-index: 999;
420 443 overflow: hidden;
421 444 padding-bottom: $spacing-lg;
422 445 }
... ... @@ -446,7 +469,8 @@ $border-color: #e5e5e5; // 新增边框颜色变量
446 469 padding: 2px 4px;
447 470 border-radius: 3px;
448 471 transition: background-color 0.2s;
449   -
  472 + position: relative;
  473 + z-index: 999;
450 474 &:active {
451 475 background-color: $bg-color;
452 476 }
... ...
pages/login/index.vue
... ... @@ -17,11 +17,11 @@
17 17 :activeStyle="{
18 18 color: '#3c9cff',
19 19 fontWeight:'500',
20   - fontSize: '14'
  20 + fontSize: '14px' // 补充单位,避免样式异常
21 21 }"
22 22 :inactiveStyle="{
23 23 color: '#606060',
24   - fontSize: '14'
  24 + fontSize: '14px' // 补充单位,避免样式异常
25 25 }"
26 26 ></up-tabs>
27 27  
... ... @@ -44,8 +44,6 @@
44 44 :disabled="isLoading"
45 45 shape="circle"
46 46 placeholder="请输入手机号"
47   - selectionStart="10"
48   - selectionEnd="10"
49 47 @blur="() => loginFormRef.validateField('mobile')"
50 48 />
51 49 </up-form-item>
... ... @@ -95,8 +93,8 @@
95 93 iconSize="14"
96 94 labelSize="14"
97 95 labelColor="'#3F3F3F'"
98   - usedAlone
99   - v-model:checked="rememberPwd"
  96 + usedAlone
  97 + v-model:checked="rememberPwd"
100 98 >
101 99 </up-checkbox>
102 100 </view>
... ... @@ -126,20 +124,14 @@ import { useUserStore } from &#39;@/pinia/user&#39;;
126 124 import globalConfig from '@/common/config/global';
127 125 import CryptoJS from 'crypto-js';
128 126  
129   -// ========== 加密工具函数(建议抽离到 @/utils/encrypt.js) ==========
130   -// 密钥配置:生产环境建议从后端接口获取,不要硬编码
  127 +// ========== 加密工具函数 ==========
131 128 const CRYPTO_CONFIG = {
132   - key: CryptoJS.enc.Utf8.parse('jcsscrypto123abc'), // 16位key(AES-128)
  129 + key: CryptoJS.enc.Utf8.parse('jcsscrypto123abc'), // 16位key
133 130 iv: CryptoJS.enc.Utf8.parse('abc123jcsscrypto'), // 16位iv
134 131 mode: CryptoJS.mode.CBC,
135 132 padding: CryptoJS.pad.Pkcs7
136 133 };
137 134  
138   -/**
139   - * AES加密
140   - * @param {string} text 待加密文本
141   - * @returns {string} 加密后的字符串
142   - */
143 135 const aesEncrypt = (text) => {
144 136 if (!text) return '';
145 137 try {
... ... @@ -154,11 +146,6 @@ const aesEncrypt = (text) =&gt; {
154 146 }
155 147 };
156 148  
157   -/**
158   - * AES解密
159   - * @param {string} encryptedText 加密后的字符串
160   - * @returns {string} 解密后的原始文本
161   - */
162 149 const aesDecrypt = (encryptedText) => {
163 150 if (!encryptedText) return '';
164 151 try {
... ... @@ -191,9 +178,9 @@ const rememberPwd = ref(true);
191 178  
192 179 // 表单数据
193 180 const form = reactive({
194   - account: '',
195   - mobile: '',
196   - password: ''
  181 + account: '', // 账号
  182 + mobile: '', // 手机号
  183 + password: '' // 密码
197 184 });
198 185  
199 186 // 表单校验规则
... ... @@ -212,15 +199,12 @@ const loginFormRules = reactive({
212 199 ]
213 200 });
214 201  
215   -// Tabs切换事件
  202 +// Tabs切换事件:移除清空输入框的逻辑
216 203 const handleTabChange = ({ name }) => {
217 204 if (isLoading.value) return;
  205 + console.log('切换到:', name);
218 206 loginType.value = name;
219   - if (name === '手机号登录') {
220   - form.account = '';
221   - } else {
222   - form.mobile = '';
223   - }
  207 + // 只清空校验状态,不清除输入框内容
224 208 nextTick(() => {
225 209 loginFormRef.value?.clearValidate();
226 210 });
... ... @@ -260,20 +244,20 @@ const handleLogin = async () =&gt; {
260 244 // 保存数据:账号/密码 均用AES加密
261 245 if (rememberPwd.value) {
262 246 try {
  247 + console.log('123+'+loginType.value)
263 248 if (loginType.value === '手机号登录') {
264 249 uni.setStorageSync('login_mobile', aesEncrypt(form.mobile));
265   - uni.removeStorageSync('login_account');
  250 + uni.removeStorageSync('login_account'); // 确保只存一种类型
266 251 } else {
267 252 uni.setStorageSync('login_account', aesEncrypt(form.account));
268   - uni.removeStorageSync('login_mobile');
  253 + uni.removeStorageSync('login_mobile'); // 确保只存一种类型
269 254 }
270   - // 密码加密存储(可解密还原)
271 255 uni.setStorageSync('login_password', aesEncrypt(form.password));
272 256 } catch (err) {
273 257 console.warn('保存登录信息失败:', err);
274 258 }
275 259 } else {
276   - // 清除缓存
  260 + // 清除所有缓存
277 261 uni.removeStorageSync('login_account');
278 262 uni.removeStorageSync('login_mobile');
279 263 uni.removeStorageSync('login_password');
... ... @@ -308,21 +292,23 @@ onMounted(() =&gt; {
308 292 nextTick(() => {
309 293 loginFormRef.value?.setRules(loginFormRules);
310 294 });
311   - // 读取缓存并解密填充
  295 + // 读取缓存并解密填充:修复逻辑漏洞,确保只填充当前登录类型的输入框
312 296 if (rememberPwd.value) {
313 297 try {
314 298 const savedAccount = aesDecrypt(uni.getStorageSync('login_account') || '');
315 299 const savedMobile = aesDecrypt(uni.getStorageSync('login_mobile') || '');
316 300 const savedPwd = aesDecrypt(uni.getStorageSync('login_password') || '');
317 301  
  302 + // 核心修正:只填充对应类型的输入框,另一类置空
318 303 if (savedAccount) {
319 304 form.account = savedAccount;
320   - loginType.value = '账号登录';
  305 + form.mobile = ''; // 清空手机号输入框
  306 + // loginType.value = '账号登录';
321 307 } else if (savedMobile) {
322 308 form.mobile = savedMobile;
323   - loginType.value = '手机号登录';
  309 + form.account = ''; // 清空账号输入框
  310 + // loginType.value = '手机号登录';
324 311 }
325   - // 密码解密后填充到输入框(可展示)
326 312 form.password = savedPwd;
327 313 } catch (err) {
328 314 console.warn('读取缓存失败:', err);
... ... @@ -332,7 +318,6 @@ onMounted(() =&gt; {
332 318 </script>
333 319  
334 320 <style scoped lang="scss">
335   -
336 321 .top-title {
337 322 background: url("https://img.jichengshanshui.com.cn:28207/appimg/bg.jpg") no-repeat;
338 323 background-size: 100% 100%;
... ...
pages/mine/index.vue
... ... @@ -11,7 +11,7 @@
11 11  
12 12 <!-- 用户名+手机号 -->
13 13 <view class="user-info-content">
14   - <view class="user-name">{{ userStore.isLogin ? userInfo.username : '未登录' }}</view>
  14 + <view class="user-name">{{ userStore.isLogin ? userInfo.nickname : '未登录' }}</view>
15 15 <!-- <view class="user-phone">{{ userStore.isLogin ? userInfo.nickname : '&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;' }}</view>-->
16 16 <view class="user-phone">上次登录时间 {{ timeFormat(userInfo.loginDate)}}</view>
17 17  
... ... @@ -129,7 +129,7 @@ export default {
129 129 background-size: 100% 100%;
130 130 z-index: -1;
131 131 display: flex;
132   - padding: 80px 0 0 20px;
  132 + padding: 80px 0 0 15px;
133 133 }
134 134 .mine-content{
135 135 margin-top: -150px;
... ...