Commit 2bffa686753069d2f0e29883e02cc7d1c5c10693

Authored by 王彪总
1 parent 7b93c3f6

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

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