Commit 2bffa686753069d2f0e29883e02cc7d1c5c10693

Authored by 王彪总
1 parent 7b93c3f6

业务线 小程序不用写死,从后端接口获取

Showing 36 changed files with 256 additions and 223 deletions
... ... @@ -153,7 +153,7 @@ page {
153 153  
154 154 .common-text-color{
155 155 font-size: 26rpx;
156   - color: #4B5563
  156 + color: #1F2937
157 157 }
158 158  
159 159 // 通用按钮样式(支持任意top值,无需批量生成类名)
... ...
common/config/env.js
... ... @@ -2,12 +2,10 @@
2 2 const env = {
3 3 // 开发环境
4 4 development: {
5   - // baseUrl: 'https://test.jichengshanshui.com.cn:28302',
6   - // https://test.jichengshanshui.com.cn:28302
7   -
8   - baseUrl: 'http://192.168.1.163:48081',
9   -
10   - uploadUrl: 'http://192.168.1.163:48081',
  5 + baseUrl: 'http://192.168.1.55:48081',
  6 + uploadUrl:'http://192.168.1.55:48081',
  7 + // baseUrl: 'https://test.jichengshanshui.com.cn:28302',
  8 + // uploadUrl: 'https://test.jichengshanshui.com.cn:28302',
11 9 // baseApi:'admin-api',
12 10 // appApi:'app-api'
13 11 },
... ...
common/styles/ui-standard.scss
... ... @@ -52,11 +52,11 @@ $j-reject-a: #B91C1C;
52 52 $j-neutral-a: #565E6B;
53 53  
54 54 /* --- 1.5 文本色 --- */
55   -$j-text-title: #1F2937; // 卡片主标题
56   -$j-text-label: #9CA3AF; // 标签(浅灰)
57   -$j-text-value: #4B5563; // 内容值
58   -$j-text-weak: #9CA3AF; // 辅助说明
59   -$j-text-strong: #1F2937; // 强调值
  55 +$j-text-title: #111827; // 卡片主标题
  56 +$j-text-label: #6B7280; // 标签(次级灰)
  57 +$j-text-value: #1F2937; // 内容值(正文黑)
  58 +$j-text-weak: #6B7280; // 辅助说明
  59 +$j-text-strong: #111827; // 强调值
60 60  
61 61 /* --- 1.6 字号层级(全站 6 档) --- */
62 62 $j-fs-title: 32rpx; // 16px 卡片主标题
... ... @@ -93,10 +93,10 @@ $j-shadow-card: 0 4rpx 16rpx rgba(17, 24, 39, 0.06);
93 93 $j-shadow-float: 0 -8rpx 28rpx rgba(17, 24, 39, 0.08);
94 94  
95 95 /* ==========================================================================
96   - * 2. 信息项:标签自然宽 + 值右对齐(设计稿 .kv)
  96 + * 2. 信息项:标签自然宽 + 值左对齐(设计稿 .kv)
97 97 * --------------------------------------------------------------------------
98   - * 设计稿不固定标签列宽:标签浅灰靠左,值占满剩余宽度并右对齐,
99   - * 因此各行内容值的右边缘天然对齐,不会参差不齐。
  98 + * 标签浅灰靠左,值紧跟标签之后并左对齐,读起来是「标签:值」一句话,
  99 + * 长文本换行也从固定位置起始,不会出现值忽左忽右的观感。
100 100 * ========================================================================== */
101 101 .u-body-item {
102 102 display: flex !important;
... ... @@ -132,7 +132,7 @@ $j-shadow-float: 0 -8rpx 28rpx rgba(17, 24, 39, 0.08);
132 132 font-weight: 400 !important;
133 133 color: $j-text-value !important;
134 134 line-height: 1.5 !important;
135   - text-align: right;
  135 + text-align: left;
136 136 word-break: break-all;
137 137 }
138 138  
... ... @@ -357,13 +357,16 @@ $j-shadow-float: 0 -8rpx 28rpx rgba(17, 24, 39, 0.08);
357 357 * 6. 详情页统一:u-cell 排版收口(设计稿 .card.pad + .kv)
358 358 * --------------------------------------------------------------------------
359 359 * 三类工单(养护 / 区域 / AI)详情都用 up-cell 渲染字段,此处统一层级:
360   - * 标签 26rpx #9CA3AF 左 / 内容值 26rpx #4B5563 右 / 行内 16rpx 上下
  360 + * 标签 26rpx #6B7280 左 / 内容值 26rpx #1F2937 紧跟标签后,左对齐 / 行内 16rpx 上下
361 361 * 注意:uview-plus 单元格内部类名为 u-cell__xxx(组件内为 scoped 样式),
362 362 * 全局层必须带 !important 才生效。
  363 + * 组件默认给 title 加 flex:1、给 value 加 margin-left:auto,值会被推到最右,
  364 + * 只改 text-align 不生效,必须同时收回 title 的 flex 并让 value 占满剩余宽度。
363 365 * ========================================================================== */
364 366 .u-cell__body {
365 367 display: flex !important;
366 368 justify-content: space-between !important;
  369 + column-gap: $j-sp-sm !important;
367 370 padding: 16rpx $j-card-pad !important;
368 371 }
369 372  
... ... @@ -380,8 +383,33 @@ $j-shadow-float: 0 -8rpx 28rpx rgba(17, 24, 39, 0.08);
380 383 line-height: 1.5 !important;
381 384 }
382 385  
383   -/* 标题插槽(#title 自定义 view)同样收到「标签」层级 */
  386 +/* 标签只占自身宽度,值紧随其后:
  387 + * 标签与内容之间的距离固定 16rpx(与列表卡片 .u-body-item 的 gap 保持一致) */
  388 +.u-cell__title {
  389 + flex: 0 1 auto !important;
  390 + min-width: 0;
  391 +}
  392 +
  393 +/* 标题区外层容器:组件默认 flex:1,会把整行剩余宽度都吃掉,
  394 + * 导致 value 只能从半行之后开始,看起来像居中/右对齐,这里收回成「按内容宽度」 */
  395 +.u-cell__body__content {
  396 + flex: 0 1 auto !important;
  397 + min-width: 0;
  398 +}
  399 +
  400 +/* #value 插槽:内容会被直接渲染成 .u-cell__body 的 flex 子元素(不是 u-cell__value),
  401 + * 上面那套规则管不到,必须单独补一份,否则插槽渲染的字段仍然贴在最右边 */
  402 +.u-cell__body > view:not(.u-cell__body__content):not(.u-cell__left-icon-wrap):not(.u-cell__right-icon-wrap) {
  403 + flex: 1 1 auto !important;
  404 + min-width: 0;
  405 + text-align: left !important;
  406 +}
  407 +
  408 +/* 标题插槽(#title 自定义 view)同样收到「标签」层级;
  409 + * 模板里常给这个 view 写 inline 的 min-width: 200rpx,会把间距撑成一大段,
  410 + * 这里用 !important 统一收回,保证所有页面的「标签—内容」距离都是 16rpx */
384 411 .u-cell__title > view {
  412 + min-width: 0 !important;
385 413 font-size: $j-fs-label !important;
386 414 font-weight: 400 !important;
387 415 color: $j-text-label !important;
... ... @@ -389,15 +417,18 @@ $j-shadow-float: 0 -8rpx 28rpx rgba(17, 24, 39, 0.08);
389 417 }
390 418  
391 419 .u-cell__value {
  420 + flex: 1 1 auto !important;
  421 + min-width: 0;
  422 + margin-left: 0 !important;
392 423 font-size: $j-fs-value !important;
393 424 font-weight: 400 !important;
394 425 color: $j-text-value !important;
395 426 line-height: 1.5 !important;
396   - text-align: right !important;
  427 + text-align: left !important;
397 428 word-break: break-all;
398 429 }
399 430  
400   -/* 插槽内的内容值统一走 .common-text-color(App.vue 中定义为 #4B5563) */
  431 +/* 插槽内的内容值统一走 .common-text-color(App.vue 中定义为 #1F2937) */
401 432  
402 433 /* 信息区块统一成卡片:四周留白一致,标题/内容与边框保持固定间距 */
403 434 .u-cell-group {
... ...
components/unified-task-actions/unified-task-actions.vue
... ... @@ -321,7 +321,7 @@ defineExpose({ open })
321 321 }
322 322  
323 323 .unified-action-tip {
324   - color: #9CA3AF;
  324 + color: #6B7280;
325 325 font-size: 28rpx;
326 326 padding: 20rpx 0;
327 327 }
... ... @@ -395,7 +395,7 @@ defineExpose({ open })
395 395 // 字数统计贴灰底显示(组件内部写死了白底,需 !important 覆盖)
396 396 .unified-action-form :deep(.u-textarea__count) {
397 397 background-color: transparent !important;
398   - color: #9CA3AF;
  398 + color: #6B7280;
399 399 }
400 400  
401 401 .unified-action-btns {
... ...
pages-sub/daily/maintain-manage/add-record.vue
... ... @@ -1088,8 +1088,8 @@ export default {
1088 1088 <style lang="scss" scoped>
1089 1089 // 页面:设计稿底 #F4F6FA,底部给固定操作栏留位(按钮 88rpx + 上下 24rpx)
1090 1090 .page-container {
1091   - padding-bottom: calc(180rpx + constant(safe-area-inset-bottom));
1092   - padding-bottom: calc(180rpx + env(safe-area-inset-bottom));
  1091 + padding-bottom: calc(136rpx + constant(safe-area-inset-bottom));
  1092 + padding-bottom: calc(136rpx + env(safe-area-inset-bottom));
1093 1093 }
1094 1094  
1095 1095 // 表单容器:不再整屏铺白,改为浮起的白卡(设计稿 .card)
... ... @@ -1268,7 +1268,7 @@ export default {
1268 1268 padding: 80rpx 24rpx;
1269 1269 text-align: center;
1270 1270 font-size: 26rpx;
1271   - color: #9CA3AF;
  1271 + color: #6B7280;
1272 1272 background-color: #ffffff;
1273 1273 border-radius: 16rpx;
1274 1274 }
... ... @@ -1279,7 +1279,7 @@ export default {
1279 1279 text-align: center;
1280 1280 font-size: 22rpx;
1281 1281 line-height: 1.6;
1282   - color: #9CA3AF;
  1282 + color: #6B7280;
1283 1283 }
1284 1284  
1285 1285 // 底部固定操作栏:白底 + 上分隔线;左「提交」白底描边,右「提交并结束」绿色主按钮
... ...
pages-sub/daily/maintain-manage/finish-plan-detail.vue
... ... @@ -681,14 +681,14 @@ onLoad((options) =&gt; {
681 681 .sec-count {
682 682 margin-left: auto;
683 683 font-size: 24rpx;
684   - color: #9CA3AF;
  684 + color: #6B7280;
685 685 white-space: nowrap;
686 686 }
687 687  
688 688 /* 某条子上报没填字段时的占位文案 */
689 689 .no-field-tip {
690 690 font-size: 26rpx;
691   - color: #9CA3AF;
  691 + color: #6B7280;
692 692 padding: 8rpx 0;
693 693 }
694 694  
... ... @@ -740,7 +740,7 @@ onLoad((options) =&gt; {
740 740 padding: 0 16rpx;
741 741 background: #F4F6FA;
742 742 border-radius: 8rpx;
743   - color: #4B5563;
  743 + color: #1F2937;
744 744 font-size: 22rpx;
745 745 line-height: 40rpx;
746 746 }
... ... @@ -776,7 +776,7 @@ onLoad((options) =&gt; {
776 776 background: #ffffff;
777 777 border-radius: 16rpx;
778 778 font-size: 26rpx;
779   - color: #9CA3AF;
  779 + color: #6B7280;
780 780 box-shadow: 0 4rpx 16rpx rgba(17, 24, 39, 0.06);
781 781 }
782 782  
... ...
pages-sub/daily/maintain-manage/now-list-page.vue
... ... @@ -112,8 +112,8 @@ const handleAddReport = () =&gt; {
112 112 .page-wrap {
113 113 min-height: 100vh;
114 114 // 底部固定栏(按钮 88rpx + 上下各 24rpx)+ 安全区
115   - padding-bottom: calc(180rpx + constant(safe-area-inset-bottom));
116   - padding-bottom: calc(180rpx + env(safe-area-inset-bottom));
  115 + padding-bottom: calc(136rpx + constant(safe-area-inset-bottom));
  116 + padding-bottom: calc(136rpx + env(safe-area-inset-bottom));
117 117 background: #F4F6FA;
118 118 }
119 119 // 顶部提示条:浅蓝底 + 蓝字 + 圆形感叹号(设计稿 .banner)
... ... @@ -168,7 +168,7 @@ const handleAddReport = () =&gt; {
168 168 }
169 169 .item-row {
170 170 font-size: 26rpx;
171   - color: #4B5563;
  171 + color: #1F2937;
172 172 margin-bottom: 12rpx;
173 173 }
174 174 .item-row-bottom {
... ... @@ -187,7 +187,7 @@ const handleAddReport = () =&gt; {
187 187 height: 56rpx;
188 188 padding: 0 24rpx;
189 189 font-size: 24rpx;
190   - color: #4B5563;
  190 + color: #1F2937;
191 191 background-color: #ffffff;
192 192 border: 1rpx solid #E8EBF0;
193 193 border-radius: 8rpx;
... ...
pages-sub/daily/maintain-manage/pending-plan-detail.vue
... ... @@ -139,7 +139,7 @@ const addNewRecord = () =&gt; {
139 139 /* 统一卡片样式(与巡查计划明细一致) */
140 140 .page-container {
141 141 min-height: 100vh;
142   - padding-bottom: 200rpx;
  142 + padding-bottom: calc(144rpx + env(safe-area-inset-bottom));
143 143 background-color: #F4F6FA;
144 144 box-sizing: border-box;
145 145 }
... ...
pages-sub/daily/maintain-manage/road-detail-list.vue
... ... @@ -9,7 +9,7 @@
9 9 :list="statusTabs"
10 10 line-width="44rpx"
11 11 active-color="#2563EB"
12   - inactive-color="#4B5563"
  12 + inactive-color="#1F2937"
13 13 :scrollable="true"
14 14 class="status-tabs"
15 15 @click="handleStatusChange"
... ...
pages-sub/daily/maintain-manage/type-list-page.vue
... ... @@ -3,7 +3,7 @@
3 3 <up-sticky>
4 4 <view class="sticky-wrap">
5 5 <up-tabs v-model="activeStatus" :list="statusTabs" line-width="44rpx" active-color="#2563EB"
6   - inactive-color="#4B5563" :scrollable="false" @change="handleStatusChange"></up-tabs>
  6 + inactive-color="#1F2937" :scrollable="false" @change="handleStatusChange"></up-tabs>
7 7 </view>
8 8 </up-sticky>
9 9 <z-paging ref="pagingRef" v-model="currentList" @query="fetchData" :auto-show-system-loading="true">
... ... @@ -434,7 +434,7 @@ onUnload(() =&gt; {
434 434 .plan-no {
435 435 margin-top: 8rpx;
436 436 font-size: 24rpx;
437   - color: #9CA3AF;
  437 + color: #6B7280;
438 438 line-height: 1.4;
439 439 }
440 440 .info-row {
... ... @@ -446,15 +446,15 @@ onUnload(() =&gt; {
446 446 }
447 447 .info-label {
448 448 font-size: 26rpx;
449   - color: #9CA3AF;
  449 + color: #6B7280;
450 450 flex-shrink: 0;
451 451 }
452 452 .info-value {
453 453 flex: 1;
454 454 min-width: 0;
455 455 font-size: 26rpx;
456   - color: #4B5563;
457   - text-align: right;
  456 + color: #1F2937;
  457 + text-align: left;
458 458 }
459 459 /* 操作区统一收底:上 16rpx 留白 + 分隔线(设计稿 .tcard-foot) */
460 460 .action-row {
... ...
pages-sub/daily/maintain-manage/type-list.vue
... ... @@ -138,19 +138,19 @@ onUnload(()=&gt;{
138 138 .info-label {
139 139 flex-shrink: 0;
140 140 font-size: 26rpx;
141   - color: #9CA3AF;
  141 + color: #6B7280;
142 142 line-height: 1.5;
143 143 }
144 144  
145 145 .info-value {
146 146 flex: 1;
147 147 min-width: 0;
148   - text-align: right;
  148 + text-align: left;
149 149 }
150 150  
151 151 .info-line {
152 152 font-size: 26rpx;
153   - color: #4B5563;
  153 + color: #1F2937;
154 154 line-height: 1.5;
155 155 word-break: break-all;
156 156  
... ... @@ -165,6 +165,6 @@ onUnload(()=&gt;{
165 165 padding: 120rpx 0;
166 166 text-align: center;
167 167 font-size: 26rpx;
168   - color: #9CA3AF;
  168 + color: #6B7280;
169 169 }
170 170 </style>
... ...
pages-sub/daily/patrol-manage/add-patrol-record.vue
... ... @@ -493,7 +493,7 @@ export default {
493 493 <style lang="scss" scoped>
494 494 .u-page {
495 495 min-height: 100vh;
496   - padding-bottom: 200rpx;
  496 + padding-bottom: calc(144rpx + env(safe-area-inset-bottom));
497 497 background-color: #F4F6FA;
498 498 box-sizing: border-box;
499 499 }
... ... @@ -571,7 +571,7 @@ export default {
571 571 border-radius: 12rpx;
572 572 }
573 573 .form-card--field :deep(.u-textarea__count) {
574   - color: #9CA3AF;
  574 + color: #6B7280;
575 575 }
576 576 /* 上传:虚线框 */
577 577 .form-card--field :deep(.u-upload__button) {
... ... @@ -582,7 +582,7 @@ export default {
582 582 .upload-hint {
583 583 margin-top: 16rpx;
584 584 font-size: 24rpx;
585   - color: #9CA3AF;
  585 + color: #6B7280;
586 586 }
587 587  
588 588 /* 底部提交栏 */
... ...
pages-sub/daily/patrol-manage/finish-plan-detail.vue
... ... @@ -162,7 +162,7 @@ onLoad((options) =&gt; {
162 162  
163 163 /* 空文本 */
164 164 .empty-text {
165   - color: #9CA3AF;
  165 + color: #6B7280;
166 166 font-size: 26rpx;
167 167 line-height: 80rpx;
168 168 display: block;
... ...
pages-sub/daily/patrol-manage/pending-plan-detail.vue
... ... @@ -128,7 +128,7 @@ const addNewRecord = () =&gt; {
128 128 /* 统一卡片样式(与工单/巡查表单页一致) */
129 129 .page-container {
130 130 min-height: 100vh;
131   - padding-bottom: 200rpx;
  131 + padding-bottom: calc(144rpx + env(safe-area-inset-bottom));
132 132 background-color: #F4F6FA;
133 133 box-sizing: border-box;
134 134 }
... ...
pages-sub/daily/quick-order/add-order.vue
... ... @@ -626,7 +626,7 @@ export default {
626 626 /* 统一卡片样式(与工单/巡查表单页一致) */
627 627 .page-container {
628 628 min-height: 100vh;
629   - padding-bottom: 200rpx;
  629 + padding-bottom: calc(144rpx + env(safe-area-inset-bottom));
630 630 background-color: #F4F6FA;
631 631 box-sizing: border-box;
632 632 }
... ... @@ -705,7 +705,7 @@ export default {
705 705 border-radius: 12rpx;
706 706 }
707 707 .form-card--field :deep(.u-textarea__count) {
708   - color: #9CA3AF;
  708 + color: #6B7280;
709 709 }
710 710 /* 上传:虚线框 */
711 711 .form-card--field :deep(.u-upload__button) {
... ... @@ -716,7 +716,7 @@ export default {
716 716 .upload-hint {
717 717 margin-top: 16rpx;
718 718 font-size: 24rpx;
719   - color: #9CA3AF;
  719 + color: #6B7280;
720 720 }
721 721  
722 722 /* 底部提交栏 */
... ...
pages-sub/daily/quick-order/index.vue
... ... @@ -43,7 +43,7 @@
43 43 <empty-view/>
44 44 </template>
45 45  
46   - <view class="common-card-list" style="padding-top: 136rpx;padding-bottom: 180rpx">
  46 + <view class="common-card-list" style="padding-top: 136rpx;padding-bottom: calc(120rpx + env(safe-area-inset-bottom))">
47 47 <view class="plan-card" v-for="(item,index) in orderList" :key="`${item.orderNo}_${index}`">
48 48 <view class="u-body-item u-flex">
49 49 <view class="u-body-item-title">工单编号:</view>
... ...
pages-sub/data/tree-archive/addInspect.vue
... ... @@ -1050,7 +1050,8 @@ onUnload(() =&gt; {
1050 1050 background-color: #F4F6FA;
1051 1051 }
1052 1052 .inspect-scroll {
1053   - height: calc(100vh - 120rpx);
  1053 + // 底部固定栏 120rpx + 与卡片之间统一 24rpx 间距
  1054 + height: calc(100vh - 144rpx - env(safe-area-inset-bottom));
1054 1055 }
1055 1056  
1056 1057 /* 折叠面板:每个部位一张白色卡片(设计稿 .card) */
... ... @@ -1124,7 +1125,7 @@ onUnload(() =&gt; {
1124 1125 margin-bottom: 15rpx;
1125 1126 font-size: 26rpx;
1126 1127 .risk-label {
1127   - color: #9CA3AF;
  1128 + color: #6B7280;
1128 1129 margin-right: 10rpx;
1129 1130 }
1130 1131 .risk-value {
... ... @@ -1159,7 +1160,7 @@ onUnload(() =&gt; {
1159 1160 .modal-row {
1160 1161 font-size: 26rpx;
1161 1162 line-height: 2;
1162   - color: #4B5563;
  1163 + color: #1F2937;
1163 1164 }
1164 1165 }
1165 1166  
... ... @@ -1175,7 +1176,7 @@ onUnload(() =&gt; {
1175 1176 min-width: 220rpx; /* 根据需求自行调大/调小 */
1176 1177 display: inline-block;
1177 1178 font-size: 26rpx;
1178   - color: #4B5563;
  1179 + color: #1F2937;
1179 1180 }
1180 1181  
1181 1182 /* 单列单选组,增加上下间距,避免误触 */
... ... @@ -1191,12 +1192,12 @@ onUnload(() =&gt; {
1191 1192 border: 1rpx solid #E8EBF0;
1192 1193 border-radius: 12rpx;
1193 1194 font-size: 26rpx;
1194   - color: #4B5563;
  1195 + color: #1F2937;
1195 1196 background-color: #FAFBFC;
1196 1197 margin-bottom: 12rpx;
1197 1198 &.disabled-row {
1198 1199 background: #F4F6FA;
1199   - color: #9CA3AF;
  1200 + color: #6B7280;
1200 1201 }
1201 1202 }
1202 1203  
... ...
pages-sub/data/tree-archive/addTree.vue
... ... @@ -29,7 +29,7 @@
29 29 <up-form-item label="胸径" prop="dbh" required>
30 30 <up-input v-model.trim="formData.dbh" placeholder="请输入" maxlength="10" border="none" input-align="left"/>
31 31 <template #right>
32   - <text style="padding-left: 12rpx;color:#9CA3AF;font-size:26rpx">厘米</text>
  32 + <text style="padding-left: 12rpx;color:#6B7280;font-size:26rpx">厘米</text>
33 33 </template>
34 34 </up-form-item>
35 35 </up-col>
... ... @@ -38,7 +38,7 @@
38 38 <up-input v-model.trim="formData.treeheight" placeholder="请输入" maxlength="10" border="none"
39 39 input-align="left"/>
40 40 <template #right>
41   - <text style="padding-left: 12rpx;color:#9CA3AF;font-size:26rpx;">米</text>
  41 + <text style="padding-left: 12rpx;color:#6B7280;font-size:26rpx;">米</text>
42 42 </template>
43 43 </up-form-item>
44 44 </up-col>
... ... @@ -157,7 +157,7 @@
157 157 <up-input v-model.trim="formData.weekday" placeholder="请输入" maxlength="10" border="none"
158 158 input-align="left"/>
159 159 <template #right>
160   - <text style="padding-left:12rpx;color:#9CA3AF;font-size:26rpx">厘米</text>
  160 + <text style="padding-left:12rpx;color:#6B7280;font-size:26rpx">厘米</text>
161 161 </template>
162 162 </up-form-item>
163 163 </up-col>
... ... @@ -171,7 +171,7 @@
171 171 <up-input v-model.trim="formData.canopyeastwest" placeholder="请输入" maxlength="10" border="none"
172 172 input-align="left"/>
173 173 <template #right>
174   - <text style="padding-left:12rpx;color:#9CA3AF;font-size:26rpx">米</text>
  174 + <text style="padding-left:12rpx;color:#6B7280;font-size:26rpx">米</text>
175 175 </template>
176 176 </up-form-item>
177 177 </up-col>
... ... @@ -180,7 +180,7 @@
180 180 <up-input v-model.trim="formData.canopysouthnorth" placeholder="请输入" maxlength="10" border="none"
181 181 input-align="left"/>
182 182 <template #right>
183   - <text style="padding-left:12rpx;color:#9CA3AF;font-size:26rpx">米</text>
  183 + <text style="padding-left:12rpx;color:#6B7280;font-size:26rpx">米</text>
184 184 </template>
185 185 </up-form-item>
186 186 </up-col>
... ... @@ -196,8 +196,6 @@
196 196 </view>
197 197 </up-form>
198 198  
199   - <view style="height: 60px;width: 100%"></view>
200   -
201 199 <view class="fixed-bottom-btn-wrap">
202 200 <up-button type="primary" @click="submit" :loading="loadingFlag" size="large" bold>提交</up-button>
203 201 </view>
... ... @@ -550,7 +548,7 @@ const submit = async () =&gt; {
550 548 /* 页面底色 + 留白(设计稿 --page-bg / .body) */
551 549 .page-container {
552 550 padding: 24rpx;
553   - padding-bottom: 200rpx; // 给底部固定按钮留空间
  551 + padding-bottom: calc(144rpx + env(safe-area-inset-bottom)); // 给底部固定按钮留空间
554 552 box-sizing: border-box;
555 553 background-color: #F4F6FA;
556 554 }
... ... @@ -646,13 +644,13 @@ const submit = async () =&gt; {
646 644 .coord-k {
647 645 flex-shrink: 0;
648 646 font-size: 22rpx;
649   - color: #9CA3AF;
  647 + color: #6B7280;
650 648 }
651 649 .coord-v {
652 650 flex: 1;
653 651 min-width: 0;
654 652 font-size: 24rpx;
655   - color: #4B5563;
  653 + color: #1F2937;
656 654 overflow: hidden;
657 655 text-overflow: ellipsis;
658 656 white-space: nowrap;
... ... @@ -679,7 +677,7 @@ const submit = async () =&gt; {
679 677 }
680 678 .page-container :deep(.u-upload__button__text) {
681 679 font-size: 22rpx !important;
682   - color: #9CA3AF !important;
  680 + color: #6B7280 !important;
683 681 }
684 682 .page-container :deep(.u-upload__wrap__preview) {
685 683 border-radius: 12rpx !important;
... ... @@ -696,7 +694,7 @@ const submit = async () =&gt; {
696 694 .upload-tip-line {
697 695 font-size: 22rpx;
698 696 line-height: 1.5;
699   - color: #9CA3AF;
  697 + color: #6B7280;
700 698 }
701 699  
702 700 /* 展开/收起:浅蓝底整行按钮(设计稿 .btn.soft) */
... ...
pages-sub/data/tree-archive/editTree.vue
... ... @@ -45,7 +45,7 @@
45 45 <up-input v-model.trim="formData.dbh" placeholder="请输入" maxlength="10" border="none"
46 46 input-align="left"/>
47 47 <template #right>
48   - <text style="padding-left: 12rpx;color:#9CA3AF;font-size:26rpx">厘米</text>
  48 + <text style="padding-left: 12rpx;color:#6B7280;font-size:26rpx">厘米</text>
49 49 </template>
50 50 </up-form-item>
51 51 </up-col>
... ... @@ -54,7 +54,7 @@
54 54 <up-input v-model.trim="formData.treeheight" placeholder="请输入" maxlength="10" border="none"
55 55 input-align="left"/>
56 56 <template #right>
57   - <text style="padding-left: 12rpx;color:#9CA3AF;font-size:26rpx;">米</text>
  57 + <text style="padding-left: 12rpx;color:#6B7280;font-size:26rpx;">米</text>
58 58 </template>
59 59 </up-form-item>
60 60 </up-col>
... ... @@ -145,7 +145,7 @@
145 145 <up-input v-model.trim="formData.weekday" placeholder="请输入" maxlength="10" border="none"
146 146 input-align="left"/>
147 147 <template #right>
148   - <text style="padding-left:12rpx;color:#9CA3AF;font-size:26rpx">厘米</text>
  148 + <text style="padding-left:12rpx;color:#6B7280;font-size:26rpx">厘米</text>
149 149 </template>
150 150 </up-form-item>
151 151 </up-col>
... ... @@ -159,7 +159,7 @@
159 159 <up-input v-model.trim="formData.canopyeastwest" placeholder="请输入" maxlength="10" border="none"
160 160 input-align="left"/>
161 161 <template #right>
162   - <text style="padding-left:12rpx;color:#9CA3AF;font-size:26rpx">米</text>
  162 + <text style="padding-left:12rpx;color:#6B7280;font-size:26rpx">米</text>
163 163 </template>
164 164 </up-form-item>
165 165 </up-col>
... ... @@ -168,7 +168,7 @@
168 168 <up-input v-model.trim="formData.canopysouthnorth" placeholder="请输入" maxlength="10" border="none"
169 169 input-align="left"/>
170 170 <template #right>
171   - <text style="padding-left:12rpx;color:#9CA3AF;font-size:26rpx">米</text>
  171 + <text style="padding-left:12rpx;color:#6B7280;font-size:26rpx">米</text>
172 172 </template>
173 173 </up-form-item>
174 174 </up-col>
... ... @@ -705,7 +705,7 @@ const toAddInspect = () =&gt; {
705 705 <style scoped lang="scss">
706 706 .container {
707 707 min-height: 100vh;
708   - padding-bottom: 200rpx;
  708 + padding-bottom: calc(144rpx + env(safe-area-inset-bottom));
709 709 background-color: #F4F6FA;
710 710 box-sizing: border-box;
711 711 }
... ... @@ -741,7 +741,7 @@ const toAddInspect = () =&gt; {
741 741 }
742 742 .base-info-wrap :deep(.u-input__inner) {
743 743 font-size: 26rpx;
744   - color: #4B5563;
  744 + color: #1F2937;
745 745 }
746 746  
747 747 /* 分区标题:蓝色竖条 + 标题文字 */
... ... @@ -774,7 +774,7 @@ const toAddInspect = () =&gt; {
774 774 }
775 775  
776 776 .record-wrap {
777   - padding: 24rpx 0 40rpx;
  777 + padding: 24rpx 0 0;
778 778 }
779 779  
780 780 /* 巡检 / 变更日志卡片:白底 16rpx 圆角 + 浅投影(设计稿 .tcard) */
... ... @@ -784,6 +784,10 @@ const toAddInspect = () =&gt; {
784 784 background-color: #ffffff !important;
785 785 box-shadow: 0 4rpx 16rpx rgba(17, 24, 39, 0.06) !important;
786 786 }
  787 +/* 最后一张卡不再带下外边距,页面底部留白统一交给容器 */
  788 +.tree-card:last-child {
  789 + margin-bottom: 0 !important;
  790 +}
787 791 .tree-card :deep(.u-card__body) {
788 792 padding: 24rpx !important;
789 793 }
... ... @@ -832,7 +836,7 @@ const toAddInspect = () =&gt; {
832 836 .card-body-inner {
833 837 display: flex;
834 838 font-size: 26rpx;
835   - color: #4B5563;
  839 + color: #1F2937;
836 840 }
837 841  
838 842 .fs-align__center {
... ... @@ -890,7 +894,7 @@ const toAddInspect = () =&gt; {
890 894 .inspect-row {
891 895 font-size: 26rpx;
892 896 line-height: 1.9;
893   - color: #4B5563;
  897 + color: #1F2937;
894 898 }
895 899 .detail-text {
896 900 color: #2563EB;
... ...
pages-sub/data/tree-archive/index.vue
... ... @@ -4,10 +4,10 @@
4 4 <view class="filter-bar">
5 5 <view class="sel" @click="showActionSheet = true">
6 6 <text class="sel-text up-line-1">{{ formData.companyId || '归属单位' }}</text>
7   - <up-icon name="arrow-down" size="12" color="#9CA3AF"></up-icon>
  7 + <up-icon name="arrow-down" size="12" color="#6B7280"></up-icon>
8 8 </view>
9 9 <view class="sbox">
10   - <up-icon name="search" size="12" color="#9CA3AF"></up-icon>
  10 + <up-icon name="search" size="12" color="#6B7280"></up-icon>
11 11 <input
12 12 v-model="searchValue"
13 13 class="sbox-input"
... ... @@ -58,7 +58,7 @@
58 58 </view>
59 59 <view class="card-body">
60 60 <view class="kv">
61   - <text class="k">已录入行道树</text>
  61 + <text class="k">已录入行道树:</text>
62 62 <text class="v up-line-1">{{ item.recordedCount }} / {{ item.treeCount }} 棵</text>
63 63 </view>
64 64 <!-- 录入进度:占总数比例,纯模板计算未新增 JS -->
... ... @@ -69,11 +69,11 @@
69 69 ></view>
70 70 </view>
71 71 <view class="kv">
72   - <text class="k">起点</text>
  72 + <text class="k">起点:</text>
73 73 <text class="v up-line-1">{{ item.startRemark }}</text>
74 74 </view>
75 75 <view class="kv">
76   - <text class="k">终点</text>
  76 + <text class="k">终点:</text>
77 77 <text class="v up-line-1">{{ item.endRemark }}</text>
78 78 </view>
79 79 </view>
... ... @@ -237,7 +237,7 @@ const checkRoadDataValid = () =&gt; {
237 237 flex: 1;
238 238 min-width: 0;
239 239 font-size: 26rpx;
240   - color: #4B5563;
  240 + color: #1F2937;
241 241 }
242 242  
243 243 // 道路搜索框
... ... @@ -262,7 +262,7 @@ const checkRoadDataValid = () =&gt; {
262 262 }
263 263 .sbox-placeholder {
264 264 font-size: 26rpx;
265   - color: #9CA3AF;
  265 + color: #6B7280;
266 266 }
267 267 .sbox-go {
268 268 flex-shrink: 0;
... ... @@ -291,7 +291,7 @@ const checkRoadDataValid = () =&gt; {
291 291 .left-item {
292 292 padding: 24rpx 20rpx;
293 293 font-size: 26rpx;
294   - color: #4B5563;
  294 + color: #1F2937;
295 295 white-space: nowrap;
296 296 overflow: hidden;
297 297 text-overflow: ellipsis;
... ... @@ -379,13 +379,13 @@ const checkRoadDataValid = () =&gt; {
379 379 }
380 380 .kv .k {
381 381 flex-shrink: 0;
382   - color: #9CA3AF;
  382 + color: #6B7280;
383 383 }
384 384 .kv .v {
385 385 flex: 1;
386 386 min-width: 0;
387   - color: #4B5563;
388   - text-align: right;
  387 + color: #1F2937;
  388 + text-align: left;
389 389 }
390 390  
391 391 // 录入进度条:直观呈现「已录入 / 总数」
... ...
pages-sub/data/tree-archive/logDetail.vue
... ... @@ -24,7 +24,7 @@
24 24 <up-form-item label="胸径" prop="dbh" required>
25 25 <up-input v-model="formData.dbh" maxlength="10" border="none" input-align="left" readonly placeholder=""/>
26 26 <template #right>
27   - <text style="padding-left: 12rpx;color:#9CA3AF;font-size:26rpx">厘米</text>
  27 + <text style="padding-left: 12rpx;color:#6B7280;font-size:26rpx">厘米</text>
28 28 </template>
29 29 </up-form-item>
30 30 </up-col>
... ... @@ -32,7 +32,7 @@
32 32 <up-form-item label="高度" prop="treeheight">
33 33 <up-input v-model="formData.treeheight" maxlength="10" border="none" input-align="left" readonly placeholder=""/>
34 34 <template #right>
35   - <text style="padding-left: 12rpx;color:#9CA3AF;font-size:26rpx;">米</text>
  35 + <text style="padding-left: 12rpx;color:#6B7280;font-size:26rpx;">米</text>
36 36 </template>
37 37 </up-form-item>
38 38 </up-col>
... ... @@ -107,7 +107,7 @@
107 107 <up-form-item label="干周" prop="weekday">
108 108 <up-input v-model="formData.weekday" maxlength="10" border="none" input-align="left" readonly placeholder=""/>
109 109 <template #right>
110   - <text style="padding-left:12rpx;color:#9CA3AF;font-size:26rpx">厘米</text>
  110 + <text style="padding-left:12rpx;color:#6B7280;font-size:26rpx">厘米</text>
111 111 </template>
112 112 </up-form-item>
113 113 </up-col>
... ... @@ -120,7 +120,7 @@
120 120 <up-form-item label="东西冠幅" prop="canopyeastwest">
121 121 <up-input v-model="formData.canopyeastwest" maxlength="10" border="none" input-align="left" readonly placeholder=""/>
122 122 <template #right>
123   - <text style="padding-left:12rpx;color:#9CA3AF;font-size:26rpx">米</text>
  123 + <text style="padding-left:12rpx;color:#6B7280;font-size:26rpx">米</text>
124 124 </template>
125 125 </up-form-item>
126 126 </up-col>
... ... @@ -128,7 +128,7 @@
128 128 <up-form-item label="南北冠幅" prop="canopysouthnorth">
129 129 <up-input v-model="formData.canopysouthnorth" maxlength="10" border="none" input-align="left" readonly placeholder=""/>
130 130 <template #right>
131   - <text style="padding-left:12rpx;color:#9CA3AF;font-size:26rpx">米</text>
  131 + <text style="padding-left:12rpx;color:#6B7280;font-size:26rpx">米</text>
132 132 </template>
133 133 </up-form-item>
134 134 </up-col>
... ... @@ -278,13 +278,13 @@ onReady(() =&gt; {});
278 278  
279 279 :deep(.u-input__inner) {
280 280 font-size: 26rpx;
281   - color: #4B5563;
  281 + color: #1F2937;
282 282 background-color: transparent !important;
283 283 }
284 284  
285 285 .show-text {
286 286 font-size: 26rpx;
287   - color: #4B5563;
  287 + color: #1F2937;
288 288 line-height: 80rpx;
289 289 width: 100%;
290 290 display: block;
... ...
pages-sub/data/tree-archive/treeRecord.vue
... ... @@ -119,7 +119,7 @@ const fetchData = async (pageNo, pageSize) =&gt; {
119 119  
120 120 /* 列表:左右 24rpx 留白,卡片之间 24rpx(设计稿 .body) */
121 121 .record-wrap {
122   - padding: 24rpx 0 180rpx; // 底部预留固定按钮高度
  122 + padding: 24rpx 0 calc(120rpx + env(safe-area-inset-bottom)); // 底部固定按钮栏 120rpx,卡片自带 24rpx 外边距
123 123 }
124 124  
125 125 /* 树木卡片:白底 16rpx 圆角 + 浅投影(设计稿 .tcard) */
... ... @@ -168,7 +168,7 @@ const fetchData = async (pageNo, pageSize) =&gt; {
168 168 flex-shrink: 0;
169 169 margin-left: 16rpx;
170 170 font-size: 22rpx;
171   - color: #9CA3AF;
  171 + color: #6B7280;
172 172 }
173 173  
174 174 .record-kv {
... ... @@ -176,7 +176,7 @@ const fetchData = async (pageNo, pageSize) =&gt; {
176 176 align-items: center;
177 177 margin-top: 10rpx;
178 178 font-size: 24rpx;
179   - color: #4B5563;
  179 + color: #1F2937;
180 180 }
181 181 .record-ico {
182 182 width: 24rpx;
... ...
pages-sub/problem/ai-manage/index.vue
... ... @@ -51,7 +51,7 @@
51 51 <empty-view />
52 52 </template>
53 53  
54   - <view class="common-card-list" style="padding-top: 216rpx;padding-bottom: 180rpx">
  54 + <view class="common-card-list" style="padding-top: 216rpx;padding-bottom: calc(120rpx + env(safe-area-inset-bottom))">
55 55 <!-- 待办工单卡片 -->
56 56 <up-card
57 57 v-if="activeTab === 0"
... ...
pages-sub/problem/regional-order-manage/add-order.vue
... ... @@ -840,7 +840,7 @@ if (hasRepeat) {
840 840 /* 统一卡片样式(与工单表单页一致) */
841 841 .page-container {
842 842 min-height: 100vh;
843   - padding-bottom: 200rpx;
  843 + padding-bottom: calc(144rpx + env(safe-area-inset-bottom));
844 844 background-color: #F4F6FA;
845 845 box-sizing: border-box;
846 846 }
... ...
pages-sub/problem/regional-order-manage/add-patrol-order.vue
... ... @@ -368,7 +368,7 @@ const submitWorkOrder = async () =&gt; {
368 368 /* 统一卡片样式(与工单表单页一致) */
369 369 .page-container {
370 370 min-height: 100vh;
371   - padding-bottom: 200rpx;
  371 + padding-bottom: calc(144rpx + env(safe-area-inset-bottom));
372 372 background-color: #F4F6FA;
373 373 box-sizing: border-box;
374 374 }
... ...
pages-sub/problem/regional-order-manage/distribution-order.vue
... ... @@ -537,7 +537,7 @@ const submitWorkOrder = async () =&gt; {
537 537 /* 统一卡片样式(与工单表单页一致) */
538 538 .page-container {
539 539 min-height: 100vh;
540   - padding-bottom: 200rpx; // 给底部按钮留空间
  540 + padding-bottom: calc(144rpx + env(safe-area-inset-bottom)); // 给底部按钮留空间
541 541 background-color: #F4F6FA;
542 542 box-sizing: border-box;
543 543 }
... ...
pages-sub/problem/regional-order-manage/index.vue
... ... @@ -62,14 +62,6 @@
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   -
73 65 <view class="u-body-item u-flex">
74 66 <view class="u-body-item-title">工单编号:</view>
75 67 <view class="u-line-1 u-body-value">{{ item.orderNo || '-' }}</view>
... ... @@ -88,14 +80,10 @@
88 80 </view>
89 81  
90 82 <view class="u-body-item u-flex common-justify-between common-item-center">
91   - <view class="u-body-item-title">紧急程度:{{ uni.$dict.getDictLabel('workorder_pressing_type', item.pressingType) || '-' }}</view>
92   - <!-- <view class="u-line-1 u-body-value flex-1 text-right">-->
93   - <!-- {{ uni.$dict.getDictLabel('workorder_pressing_type', item.pressingType) || '-' }}-->
94   - <!-- </view>-->
95   - <!-- 只有 我发起的(1)、已办(2) 显示该行的详情按钮 -->
96   - <!-- <view v-if="activeTab !== 0" class="ml-10">-->
97   - <!-- <up-button type="primary" size="mini" @click="handleDetail(item)">工单详情</up-button>-->
98   - <!-- </view>-->
  83 + <view class="u-body-item-title">紧急程度:</view>
  84 + <view class="u-line-1 u-body-value">
  85 + {{ uni.$dict.getDictLabel('workorder_pressing_type', item.pressingType) || '-' }}
  86 + </view>
99 87 </view>
100 88 <view class="u-body-item u-flex">
101 89 <view class="u-body-item-title">工单状态:</view>
... ... @@ -130,7 +118,10 @@
130 118 </template>
131 119 </view>
132 120  
133   - <!-- 已删除:原来单独的【我发起的/已办】按钮区,不需要了 -->
  121 + <!-- 已办 / 我发起的:操作按钮收进底部操作区,不再用绝对定位盖住信息行 -->
  122 + <view v-if="activeTab !== 0" class="card-action-row">
  123 + <view class="mini-btn mini-btn--primary" @click="handleDetail(item)">工单详情</view>
  124 + </view>
134 125 </view>
135 126 </template>
136 127 </up-card>
... ... @@ -746,7 +737,7 @@ onLoad(() =&gt; {
746 737 // 顶部留白 = 吸顶筛选条高度(Tabs 44 + 搜索条 10+32+10 = 96px) + 12px 间距
747 738 // 原写法用 calc(var(--status-bar-height) + 140rpx),状态栏高度随机型变化,低状态栏机型会压到卡片
748 739 .common-card-list {
749   - padding: 216rpx 0 180rpx;
  740 + padding: 216rpx 0 calc(120rpx + env(safe-area-inset-bottom));
750 741 box-sizing: border-box;
751 742 }
752 743  
... ...
pages-sub/problem/regional-order-manage/list-detail.vue
... ... @@ -27,11 +27,11 @@
27 27 <!-- 工单详情 Tab -->
28 28 <view v-show="activeTopTab === 0" class="detail-content">
29 29 <up-cell-group :border="false" class="detail-cell-group">
30   - <up-cell title="工单编号" :value="orderDetail.orderNo || '--'" align="middle"></up-cell>
  30 + <up-cell title="工单编号:" :value="orderDetail.orderNo || '--'" align="middle"></up-cell>
31 31  
32 32 <up-cell align="middle">
33 33 <template #title>
34   - <view style="min-width: 200rpx">工单位置</view>
  34 + <view style="min-width: 200rpx">工单位置:</view>
35 35 </template>
36 36 <template #value>
37 37 <view class="common-text-color up-line-1">{{ orderDetail.lonLatAddress || '--' }}</view>
... ... @@ -40,18 +40,18 @@
40 40  
41 41 <up-cell align="middle">
42 42 <template #title>
43   - <view style="min-width: 200rpx">问题类型</view>
  43 + <view style="min-width: 200rpx">问题类型:</view>
44 44 </template>
45 45 <template #value>
46 46 <view class="common-text-color up-line-1">{{ orderDetail.orderName || '--' }}</view>
47 47 </template>
48 48 </up-cell>
49 49  
50   - <up-cell title="街道名称" :value="orderDetail.streetName || '--'" align="middle"></up-cell>
  50 + <up-cell title="街道名称:" :value="orderDetail.streetName || '--'" align="middle"></up-cell>
51 51  
52 52 <up-cell v-if="orderDetail.roadName">
53 53 <template #title>
54   - <view style="min-width: 200rpx">道路名称</view>
  54 + <view style="min-width: 200rpx">道路名称:</view>
55 55 </template>
56 56 <template #value>
57 57 <view class="common-text-color up-line-1">{{ orderDetail.roadName || '--' }}</view>
... ... @@ -60,7 +60,7 @@
60 60  
61 61 <up-cell>
62 62 <template #title>
63   - <view style="min-width: 200rpx">情况描述</view>
  63 + <view style="min-width: 200rpx">情况描述:</view>
64 64 </template>
65 65 <template #value>
66 66 <view class="common-text-color up-line-1">{{ orderDetail.remark || '--' }}</view>
... ... @@ -68,22 +68,22 @@
68 68 </up-cell>
69 69  
70 70 <up-cell
71   - title="紧急程度"
  71 + title="紧急程度:"
72 72 :value="uni.$dict.getDictLabel('workorder_pressing_type', orderDetail.pressingType) || '--'"
73 73 align="middle"
74 74 ></up-cell>
75 75  
76   - <up-cell title="提交人" :value="orderDetail.userName || '--'" align="middle"></up-cell>
  76 + <up-cell title="提交人:" :value="orderDetail.userName || '--'" align="middle"></up-cell>
77 77  
78 78 <up-cell
79   - title="提交时间"
  79 + title="提交时间:"
80 80 :value="timeFormat(orderDetail.createTime, 'yyyy-mm-dd hh:MM:ss') || '--'"
81 81 align="middle"
82 82 ></up-cell>
83 83  
84 84 <up-cell v-if="orderDetail.handleResult">
85 85 <template #title>
86   - <view style="min-width: 200rpx">处理结果</view>
  86 + <view style="min-width: 200rpx">处理结果:</view>
87 87 </template>
88 88 <template #value>
89 89 <view class="common-text-color up-line-1">{{ orderDetail.handleResult || '--' }}</view>
... ... @@ -107,7 +107,7 @@
107 107  
108 108 <up-cell
109 109 v-if="orderDetail.expectedFinishDate"
110   - title="希望完成时间"
  110 + title="希望完成时间:"
111 111 :value="timeFormat(orderDetail.expectedFinishDate, 'yyyy-mm-dd hh:MM:ss')"
112 112 align="middle"
113 113 :border="false"
... ... @@ -115,7 +115,7 @@
115 115  
116 116 <up-cell
117 117 v-if="orderDetail.finishDate"
118   - title="工单完结时间"
  118 + title="工单完结时间:"
119 119 :value="timeFormat(orderDetail.finishDate, 'yyyy-mm-dd hh:MM:ss')"
120 120 align="middle"
121 121 :border="false"
... ... @@ -127,7 +127,7 @@
127 127 <up-cell-group :border="false">
128 128 <up-cell>
129 129 <template #title>
130   - <view style="min-width: 200rpx">共同处理人</view>
  130 + <view style="min-width: 200rpx">共同处理人:</view>
131 131 </template>
132 132 <template #value>
133 133 <view class="common-text-color up-line-1">
... ... @@ -1108,14 +1108,14 @@ onLoad((options: any) =&gt; {
1108 1108  
1109 1109 // 按操作栏行数给内容预留底部间距
1110 1110 .main-content.pb-rows-1 {
1111   - padding-bottom: 190rpx;
  1111 + padding-bottom: calc(88rpx + env(safe-area-inset-bottom));
1112 1112 }
1113 1113  
1114 1114 .main-content.pb-rows-2 {
1115   - padding-bottom: 290rpx;
  1115 + padding-bottom: calc(168rpx + env(safe-area-inset-bottom));
1116 1116 }
1117 1117  
1118 1118 .main-content.pb-rows-3 {
1119   - padding-bottom: 390rpx;
  1119 + padding-bottom: calc(248rpx + env(safe-area-inset-bottom));
1120 1120 }
1121 1121 </style>
1122 1122 \ No newline at end of file
... ...
pages-sub/problem/regional-order-manage/list.vue
... ... @@ -505,12 +505,6 @@ onMounted(async () =&gt; {
505 505 }
506 506 }
507 507  
508   -/* 列表顶部留出吸顶栏高度,避免内容被遮挡 */
509   -.common-card-list {
510   - /* 原有样式保留,追加顶部内边距 */
511   - padding: calc(var(--status-bar-height) + 100rpx + 44rpx) 0 30rpx;
512   - box-sizing: border-box;
513   -}
514 508  
515 509  
516 510 /* 第一行筛选布局 */
... ... @@ -566,7 +560,7 @@ onMounted(async () =&gt; {
566 560 }
567 561  
568 562 .common-card-list {
569   - padding: calc(var(--status-bar-height) + 160rpx) 0 30rpx;
  563 + padding: calc(var(--status-bar-height) + 160rpx) 0 0;
570 564 box-sizing: border-box;
571 565 }
572 566  
... ...
pages-sub/problem/regional-order-manage/order-detail.vue
... ... @@ -30,12 +30,12 @@
30 30 <view v-show="activeTopTab == 0" class="detail-content">
31 31 <up-cell-group :border="false" class="detail-cell-group">
32 32 <!-- 工单编号 -->
33   - <up-cell title="工单编号" :value="orderDetail.orderNo || '--'" align="middle"></up-cell>
  33 + <up-cell title="工单编号:" :value="orderDetail.orderNo || '--'" align="middle"></up-cell>
34 34  
35 35 <!-- 工单位置 -->
36 36 <up-cell align="middle">
37 37 <template #title>
38   - <view style="min-width: 200rpx">工单位置</view>
  38 + <view style="min-width: 200rpx">工单位置:</view>
39 39 </template>
40 40 <template #value>
41 41 <view class="common-text-color up-line-1">{{ orderDetail.lonLatAddress || '--' }}</view>
... ... @@ -45,7 +45,7 @@
45 45 <!-- 问题类型 -->
46 46 <up-cell align="middle">
47 47 <template #title>
48   - <view style="min-width: 200rpx">问题类型</view>
  48 + <view style="min-width: 200rpx">问题类型:</view>
49 49 </template>
50 50 <template #value>
51 51 <view class="common-text-color up-line-1">{{ orderDetail.orderName || '--' }}</view>
... ... @@ -53,11 +53,11 @@
53 53 </up-cell>
54 54  
55 55 <!-- 街道名称 -->
56   - <up-cell title="街道名称" :value="orderDetail.streetName || '--'" align="middle"></up-cell>
  56 + <up-cell title="街道名称:" :value="orderDetail.streetName || '--'" align="middle"></up-cell>
57 57  
58 58 <up-cell v-if="orderDetail.roadName">
59 59 <template #title>
60   - <view style="min-width: 200rpx">道路名称</view>
  60 + <view style="min-width: 200rpx">道路名称:</view>
61 61 </template>
62 62 <template #value>
63 63 <view class="common-text-color up-line-1">{{ orderDetail.roadName || '--' }}</view>
... ... @@ -67,7 +67,7 @@
67 67 <!-- 情况描述 -->
68 68 <up-cell>
69 69 <template #title>
70   - <view style="min-width: 200rpx">情况描述</view>
  70 + <view style="min-width: 200rpx">情况描述:</view>
71 71 </template>
72 72 <template #value>
73 73 <view class="common-text-color up-line-1">{{ orderDetail.remark || '--' }}</view>
... ... @@ -76,17 +76,17 @@
76 76  
77 77 <!-- 紧急程度 -->
78 78 <up-cell
79   - title="紧急程度"
  79 + title="紧急程度:"
80 80 :value="uni.$dict.getDictLabel('workorder_pressing_type', orderDetail.pressingType) || '--'"
81 81 align="middle"
82 82 ></up-cell>
83 83  
84 84 <!-- 提交人 -->
85   - <up-cell title="提交人" :value="orderDetail.userName || '--'" align="middle"></up-cell>
  85 + <up-cell title="提交人:" :value="orderDetail.userName || '--'" align="middle"></up-cell>
86 86  
87 87 <!-- 提交时间 -->
88 88 <up-cell
89   - title="提交时间"
  89 + title="提交时间:"
90 90 :value="timeFormat(orderDetail.createTime, 'yyyy-mm-dd hh:MM:ss') || '--'"
91 91 align="middle"
92 92 ></up-cell>
... ... @@ -94,7 +94,7 @@
94 94 <!-- 处理结果 -->
95 95 <up-cell v-if="orderDetail.handleResult">
96 96 <template #title>
97   - <view style="min-width: 200rpx">处理结果</view>
  97 + <view style="min-width: 200rpx">处理结果:</view>
98 98 </template>
99 99 <template #value>
100 100 <view class="common-text-color up-line-1">{{ orderDetail.handleResult || '--' }}</view>
... ... @@ -120,7 +120,7 @@
120 120 <!-- 希望完成时间 -->
121 121 <up-cell
122 122 v-if="orderDetail.expectedFinishDate"
123   - title="希望完成时间"
  123 + title="希望完成时间:"
124 124 :value="timeFormat(orderDetail.expectedFinishDate, 'yyyy-mm-dd hh:MM:ss')"
125 125 align="middle"
126 126 :border="false"
... ... @@ -128,7 +128,7 @@
128 128  
129 129 <up-cell
130 130 v-if="orderDetail.finishDate"
131   - title="工单完结时间"
  131 + title="工单完结时间:"
132 132 :value="timeFormat(orderDetail.finishDate, 'yyyy-mm-dd hh:MM:ss')"
133 133 align="middle"
134 134 :border="false"
... ... @@ -140,7 +140,7 @@
140 140 <up-cell-group :border="false">
141 141 <up-cell>
142 142 <template #title>
143   - <view style="min-width: 200rpx">共同处理人</view>
  143 + <view style="min-width: 200rpx">共同处理人:</view>
144 144 </template>
145 145 <template #value>
146 146 <view class="common-text-color up-line-1">
... ... @@ -1253,14 +1253,14 @@ onShow(() =&gt; {});
1253 1253  
1254 1254 // 按操作栏行数给内容预留底部间距
1255 1255 .main-content.pb-rows-1 {
1256   - padding-bottom: 190rpx;
  1256 + padding-bottom: calc(88rpx + env(safe-area-inset-bottom));
1257 1257 }
1258 1258  
1259 1259 .main-content.pb-rows-2 {
1260   - padding-bottom: 290rpx;
  1260 + padding-bottom: calc(168rpx + env(safe-area-inset-bottom));
1261 1261 }
1262 1262  
1263 1263 .main-content.pb-rows-3 {
1264   - padding-bottom: 390rpx;
  1264 + padding-bottom: calc(248rpx + env(safe-area-inset-bottom));
1265 1265 }
1266 1266 </style>
1267 1267 \ No newline at end of file
... ...
pages-sub/problem/work-order-manage/add-maintain-order.vue
... ... @@ -1054,8 +1054,8 @@ const submitWorkOrder = async () =&gt; {
1054 1054 // 页面容器:浅灰底 + 给底部固定栏(按钮 88rpx + 上下各 24rpx)留空间
1055 1055 .page-container {
1056 1056 min-height: 100vh;
1057   - padding-bottom: calc(180rpx + constant(safe-area-inset-bottom));
1058   - padding-bottom: calc(180rpx + env(safe-area-inset-bottom));
  1057 + padding-bottom: calc(160rpx + constant(safe-area-inset-bottom));
  1058 + padding-bottom: calc(160rpx + env(safe-area-inset-bottom));
1059 1059 background-color: #F4F6FA;
1060 1060 }
1061 1061  
... ...
pages-sub/problem/work-order-manage/add-order.vue
... ... @@ -615,7 +615,7 @@ const submitWorkOrder = async () =&gt; {
615 615 <style lang="scss" scoped>
616 616 .page-container {
617 617 min-height: 100vh;
618   - padding-bottom: 200rpx;
  618 + padding-bottom: calc(144rpx + env(safe-area-inset-bottom));
619 619 background-color: #F4F6FA;
620 620 box-sizing: border-box;
621 621 }
... ... @@ -686,7 +686,7 @@ const submitWorkOrder = async () =&gt; {
686 686 border-radius: 12rpx;
687 687 }
688 688 .form-card--field :deep(.u-textarea__count) {
689   - color: #9CA3AF;
  689 + color: #6B7280;
690 690 }
691 691 /* 上传:虚线框 */
692 692 .form-card--field :deep(.u-upload__button) {
... ...
pages-sub/problem/work-order-manage/distribution-order.vue
... ... @@ -42,7 +42,7 @@
42 42 border="none"
43 43 ></up-input>
44 44 <template #right>
45   - <up-icon name="arrow-right" size="16" color="#9CA3AF"></up-icon>
  45 + <up-icon name="arrow-right" size="16" color="#6B7280"></up-icon>
46 46 </template>
47 47 </up-form-item>
48 48 </view>
... ... @@ -296,8 +296,8 @@ const submitWorkOrder = async () =&gt; {
296 296 // 页面容器:浅灰底 + 给底部固定栏(按钮 88rpx + 上下各 24rpx)留空间
297 297 .page-container {
298 298 min-height: 100vh;
299   - padding-bottom: calc(180rpx + constant(safe-area-inset-bottom));
300   - padding-bottom: calc(180rpx + env(safe-area-inset-bottom));
  299 + padding-bottom: calc(160rpx + constant(safe-area-inset-bottom));
  300 + padding-bottom: calc(160rpx + env(safe-area-inset-bottom));
301 301 background-color: #F4F6FA;
302 302 }
303 303  
... ... @@ -364,7 +364,7 @@ const submitWorkOrder = async () =&gt; {
364 364 // 字数统计贴灰底显示(组件内部写死了白底,需 !important 覆盖)
365 365 .form-card :deep(.u-textarea__count) {
366 366 background-color: transparent !important;
367   - color: #9CA3AF;
  367 + color: #6B7280;
368 368 }
369 369  
370 370 // 底部固定操作栏:白底 + 上分隔线 + 蓝色渐变主按钮(设计稿 .bar / .btn.pri)
... ...
pages-sub/problem/work-order-manage/index.vue
... ... @@ -57,7 +57,7 @@
57 57 <empty-view/>
58 58 </template>
59 59  
60   - <view class="common-card-list" style="padding-top: 216rpx;padding-bottom: 180rpx">
  60 + <view class="common-card-list" style="padding-top: 216rpx;padding-bottom: calc(120rpx + env(safe-area-inset-bottom))">
61 61 <!-- 待办工单卡片 -->
62 62 <up-card
63 63 v-if="activeTab == 0"
... ...
pages-sub/problem/work-order-manage/order-detail.vue
... ... @@ -35,12 +35,12 @@
35 35 <view class="sec-title">工单信息</view>
36 36 </view>
37 37 <!-- 工单编号 -->
38   - <up-cell title="工单编号" :value="orderDetail.orderNo || '--'" align="middle"></up-cell>
  38 + <up-cell title="工单编号:" :value="orderDetail.orderNo || '--'" align="middle"></up-cell>
39 39  
40 40 <!-- 工单位置 -->
41 41 <up-cell align="middle">
42 42 <template #title>
43   - <view style="min-width: 200rpx">工单位置</view>
  43 + <view style="min-width: 200rpx">工单位置:</view>
44 44 </template>
45 45 <template #value>
46 46 <view class="common-text-color up-line-1">{{ orderDetail.lonLatAddress || '--' }}</view>
... ... @@ -50,18 +50,18 @@
50 50 <!-- 问题类型-->
51 51 <up-cell align="middle">
52 52 <template #title>
53   - <view style="min-width: 200rpx">问题类型</view>
  53 + <view style="min-width: 200rpx">问题类型:</view>
54 54 </template>
55 55 <template #value>
56 56 <view class="common-text-color up-line-1">{{ orderDetail.orderName || '--' }}</view>
57 57 </template>
58 58 </up-cell>
59 59 <!-- 街道名称 -->
60   - <up-cell title="街道名称" :value="orderDetail.streetName || '--'" align="middle"></up-cell>
  60 + <up-cell title="街道名称:" :value="orderDetail.streetName || '--'" align="middle"></up-cell>
61 61  
62 62 <up-cell v-if="orderDetail.roadName">
63 63 <template #title>
64   - <view style="min-width: 200rpx">道路名称</view>
  64 + <view style="min-width: 200rpx">道路名称:</view>
65 65 </template>
66 66 <template #value>
67 67 <view class="common-text-color up-line-1">{{ orderDetail.roadName || '--' }}</view>
... ... @@ -70,17 +70,17 @@
70 70  
71 71 <!-- 紧急程度 -->
72 72 <up-cell
73   - title="紧急程度"
  73 + title="紧急程度:"
74 74 :value="uni.$dict.getDictLabel('workorder_pressing_type', orderDetail.pressingType) || '--'"
75 75 align="middle"
76 76 ></up-cell>
77 77  
78 78 <!-- 提交人 -->
79   - <up-cell title="提交人" :value="orderDetail.userName || '--'" align="middle"></up-cell>
  79 + <up-cell title="提交人:" :value="orderDetail.userName || '--'" align="middle"></up-cell>
80 80  
81 81 <!-- 提交时间 -->
82 82 <up-cell
83   - title="提交时间"
  83 + title="提交时间:"
84 84 :value="timeFormat(orderDetail.createTime, 'yyyy-mm-dd hh:MM:ss') || '--'"
85 85 align="middle"
86 86 ></up-cell>
... ... @@ -88,19 +88,19 @@
88 88 <!-- 处理结果 -->
89 89 <up-cell v-if="orderDetail.handleResult">
90 90 <template #title>
91   - <view style="min-width: 200rpx">处理结果</view>
  91 + <view style="min-width: 200rpx">处理结果:</view>
92 92 </template>
93 93 <template #value>
94 94 <view class="common-text-color up-line-1">{{ orderDetail.handleResult || '--' }}</view>
95 95 </template>
96 96 </up-cell>
97 97  
98   - <up-cell title="重点巡检区域" :value="orderDetail.keyInspection==0?'否':'是'" align="middle"></up-cell>
  98 + <up-cell title="重点巡检区域:" :value="orderDetail.keyInspection==0?'否':'是'" align="middle"></up-cell>
99 99  
100 100 <!-- 希望完成时间 -->
101 101 <up-cell
102 102 v-if="orderDetail.expectedFinishDate!==0"
103   - title="希望完成时间"
  103 + title="希望完成时间:"
104 104 :value="timeFormat(orderDetail.expectedFinishDate, 'yyyy-mm-dd hh:MM:ss')"
105 105 align="middle"
106 106 :border="false"
... ... @@ -108,7 +108,7 @@
108 108  
109 109 <up-cell
110 110 v-if="orderDetail.finishDate"
111   - title="工单完结时间"
  111 + title="工单完结时间:"
112 112 :value="timeFormat(orderDetail.finishDate, 'yyyy-mm-dd hh:MM:ss')"
113 113 align="middle"
114 114 :border="false"
... ... @@ -155,7 +155,7 @@
155 155 <up-cell-group :border="false">
156 156 <up-cell>
157 157 <template #title>
158   - <view style="min-width: 200rpx">共同处理人</view>
  158 + <view style="min-width: 200rpx">共同处理人:</view>
159 159 </template>
160 160 <template #value>
161 161 <view class="common-text-color up-line-1">
... ... @@ -1150,13 +1150,13 @@ onShow(() =&gt; {
1150 1150 width: 100%;
1151 1151 text-align: left;
1152 1152 font-size: 28rpx;
1153   - color: #4B5563;
  1153 + color: #1F2937;
1154 1154 line-height: 1.6;
1155 1155 word-break: break-all;
1156 1156 }
1157 1157  
1158 1158 .empty-text {
1159   - color: #9CA3AF;
  1159 + color: #6B7280;
1160 1160 font-size: 28rpx;
1161 1161 }
1162 1162 }
... ... @@ -1188,7 +1188,7 @@ onShow(() =&gt; {
1188 1188 .empty-img-text {
1189 1189 height: 75px;
1190 1190 line-height: 75px;
1191   - color: #9CA3AF;
  1191 + color: #6B7280;
1192 1192 font-size: 28rpx;
1193 1193 }
1194 1194 }
... ... @@ -1390,15 +1390,15 @@ onShow(() =&gt; {
1390 1390  
1391 1391 // 按操作栏行数给内容预留底部间距
1392 1392 .main-content.pb-rows-1 {
1393   - padding-bottom: 190rpx;
  1393 + padding-bottom: calc(88rpx + env(safe-area-inset-bottom));
1394 1394 }
1395 1395  
1396 1396 .main-content.pb-rows-2 {
1397   - padding-bottom: 290rpx;
  1397 + padding-bottom: calc(168rpx + env(safe-area-inset-bottom));
1398 1398 }
1399 1399  
1400 1400 .main-content.pb-rows-3 {
1401   - padding-bottom: 390rpx;
  1401 + padding-bottom: calc(248rpx + env(safe-area-inset-bottom));
1402 1402 }
1403 1403  
1404 1404 // 作业填报明细:白色卡片(设计稿 .card)
... ... @@ -1422,7 +1422,7 @@ onShow(() =&gt; {
1422 1422  
1423 1423 .work-field-value {
1424 1424 max-width: 420rpx;
1425   - text-align: right;
  1425 + text-align: left;
1426 1426 word-break: break-all;
1427 1427 }
1428 1428  
... ...
pages/mine/index.vue
... ... @@ -17,40 +17,43 @@
17 17 </view>
18 18  
19 19  
20   - <view class="mine-content">
21   - <view class="card-title">个人信息</view>
22   - <up-cell-group>
23   - <up-cell title="姓名" :value="userInfo.nickname"></up-cell>
24   - <up-cell title="账号" :value="userInfo.username"></up-cell>
25   - <up-cell title="电话" :value="userInfo.mobile"></up-cell>
26   - <up-cell title="角色" :value="translateRoles(userStore.userInfo.roles)"></up-cell>
27   - <up-cell title="考勤" :isLink="true" url="/pages-sub/daily/attendanceRecord"></up-cell>
28   - </up-cell-group>
29   - </view>
30   -
  20 + <!-- 个人信息卡 + 操作按钮:整体在剩余区域内垂直居中 -->
  21 + <view class="mine-body">
  22 + <view class="mine-content">
  23 + <view class="card-title">个人信息</view>
  24 + <up-cell-group>
  25 + <up-cell title="姓名:" :value="userInfo.nickname"></up-cell>
  26 + <up-cell title="账号:" :value="userInfo.username"></up-cell>
  27 + <up-cell title="电话:" :value="userInfo.mobile"></up-cell>
  28 + <up-cell title="角色:" :value="translateRoles(userStore.userInfo.roles)"></up-cell>
  29 + <up-cell title="考勤" :isLink="true" url="/pages-sub/daily/attendanceRecord"></up-cell>
  30 + </up-cell-group>
  31 + </view>
31 32  
32   - <up-button
33   - v-if="!userStore.isLogin"
34   - type="primary"
35   - size="mini"
36   - shape="circle"
37   - @click="handleLogin"
38   - class="login-btn"
39   - >
40   - 立即登录
41   - </up-button>
42 33  
43   - <!-- 退出登录按钮 (仅登录状态显示) -->
44   - <view v-if="userStore.isLogin" class="logout-btn-wrap">
45 34 <up-button
  35 + v-if="!userStore.isLogin"
46 36 type="primary"
47   - size="large"
  37 + size="mini"
48 38 shape="circle"
49   - @click="confirmLogout"
  39 + @click="handleLogin"
50 40 class="login-btn"
51 41 >
52   - 退出登录
  42 + 立即登录
53 43 </up-button>
  44 +
  45 + <!-- 退出登录按钮 (仅登录状态显示) -->
  46 + <view v-if="userStore.isLogin" class="logout-btn-wrap">
  47 + <up-button
  48 + type="primary"
  49 + size="large"
  50 + shape="circle"
  51 + @click="confirmLogout"
  52 + class="login-btn"
  53 + >
  54 + 退出登录
  55 + </up-button>
  56 + </view>
54 57 </view>
55 58 </view>
56 59 </template>
... ... @@ -119,15 +122,28 @@ export default {
119 122 padding-bottom: 48rpx;
120 123 box-sizing: border-box;
121 124 background-color: #F4F6FA;
  125 + /* 竖向 flex:头部固定高度,卡片+按钮组在剩余区域居中 */
  126 + display: flex;
  127 + flex-direction: column;
  128 +}
  129 +
  130 +/* 卡片 + 退出登录按钮:作为一组在头部以下的剩余空间里垂直居中 */
  131 +.mine-body {
  132 + flex: 1;
  133 + display: flex;
  134 + flex-direction: column;
  135 + justify-content: center;
122 136 }
123 137  
124 138 /* 顶部信息栏:品牌渐变(设计稿 --grad-head) */
125 139 .header-bg {
126 140 position: relative;
  141 + flex-shrink: 0;
127 142 width: 100%;
128 143 display: flex;
129 144 align-items: center;
130   - padding: 48rpx 32rpx 120rpx;
  145 + /* 卡片不再上压,底部留白按原视觉高度(120 - 80 重叠)收成 40rpx */
  146 + padding: 48rpx 32rpx 40rpx;
131 147 box-sizing: border-box;
132 148 background: linear-gradient(135deg, #1D4ED8 0%, #2563EB 60%, #3B82F6 100%);
133 149 }
... ... @@ -139,11 +155,11 @@ export default {
139 155 overflow: hidden;
140 156 }
141 157  
142   -/* 个人信息卡片:白底 16rpx 圆角 + 浅投影,向上压住渐变头图 */
  158 +/* 个人信息卡片:白底 16rpx 圆角 + 浅投影(不再上压头图,随卡片组一起居中) */
143 159 .mine-content {
144 160 position: relative;
145 161 z-index: 1;
146   - margin: -80rpx 24rpx 0;
  162 + margin: 0 24rpx;
147 163 padding: 8rpx 24rpx 16rpx;
148 164 background-color: #ffffff;
149 165 border-radius: 16rpx;
... ... @@ -174,7 +190,7 @@ export default {
174 190 }
175 191 .mine-content :deep(.u-cell__value) {
176 192 font-size: 26rpx !important;
177   - color: #4B5563 !important;
  193 + color: #1F2937 !important;
178 194 }
179 195 .mine-content :deep(.u-line) {
180 196 background-color: #EEF1F6 !important;
... ...