Просмотр исходного кода

style:发单表单整页样式调整

zhangxin месяцев назад: 2
Родитель
Сommit
6de1aa0189
1 измененных файлов с 173 добавлено и 89 удалено
  1. 173 89
      pages/orderForm/index.vue

+ 173 - 89
pages/orderForm/index.vue

@@ -7,76 +7,73 @@
7
 		<view class="form_wrap">
7
 		<view class="form_wrap">
8
 			<u--form labelPosition="top" labelWidth="100" :model="form" :rules="rules" ref="form" class="form_wrap"
8
 			<u--form labelPosition="top" labelWidth="100" :model="form" :rules="rules" ref="form" class="form_wrap"
9
 				:errorType="'toast'">
9
 				:errorType="'toast'">
10
-				<u-form-item label="物品品牌" prop="brand">
10
+				<u-form-item label="品牌" prop="brand" class="brand_wrap">
11
 					<ld-select :list="brandDict" label-key="dictLabel" value-key="dictValue" placeholder="请选择物品品牌"
11
 					<ld-select :list="brandDict" label-key="dictLabel" value-key="dictValue" placeholder="请选择物品品牌"
12
-						v-model="form.brand" :border="false"></ld-select>
12
+						v-model="form.brand" :border="false" border></ld-select>
13
 					<u-icon slot="right" name="arrow-right"></u-icon>
13
 					<u-icon slot="right" name="arrow-right"></u-icon>
14
 				</u-form-item>
14
 				</u-form-item>
15
 
15
 
16
-				<u-row justify="space-between">
17
-					<u-form-item label="型号" prop="model">
18
-						<u-col span="6">
19
-							<u--input v-model="form.model" placeholder="请输入型号" border="none"></u--input>
20
-
21
-						</u-col>
22
-					</u-form-item>
23
-
24
-					<u-form-item label="实价" prop="price">
25
-						<u-col span="6">
26
-							<u--input v-model="form.price" placeholder="请输入实价" border="none"></u--input>
27
-						</u-col>
16
+				<u-row gutter="5" justify="space-between">
17
+					<u-col span="6">
18
+						<u-form-item label="型号" prop="model">
19
+							<u--input v-model="form.model" placeholder="例如:CF小号" border="surround"></u--input>
20
+						</u-form-item>
21
+					</u-col>
22
+					 <u-col span="6">
23
+                        <u-form-item label="实价" prop="price">
24
+							<u--input v-model="form.price" placeholder="0.00" border="surround"></u--input>
28
 					</u-form-item>
25
 					</u-form-item>
26
+                    </u-col>
29
 				</u-row>
27
 				</u-row>
30
 
28
 
31
-				<u-row justify="space-between">
32
-					<u-form-item label="客户电话" prop="phone">
33
-						<u-col span="6">
34
-							<u--input v-model="form.phone" placeholder="请输入客户电话" border="none"></u--input>
35
-
36
-						</u-col>
37
-					</u-form-item>
38
-
39
-					<u-form-item label="客户微信" prop="wechat">
40
-						<u-col span="6">
41
-							<u--input v-model="form.wechat" placeholder="请输入客户微信" border="none"></u--input>
42
-						</u-col>
43
-					</u-form-item>
29
+				<u-row gutter="5" justify="space-between">
30
+					<u-col span="6">
31
+						<u-form-item label="客户电话" prop="phone">
32
+							<u--input v-model="form.phone" placeholder="电话号" border="surround"></u--input>
33
+						</u-form-item>
34
+					</u-col>
35
+					 <u-col span="6">
36
+						<u-form-item label="客户微信" prop="wechat">
37
+							<u--input v-model="form.wechat" placeholder="微信号" border="surround"></u--input>
38
+						</u-form-item>
39
+					</u-col>
44
 				</u-row>
40
 				</u-row>
45
-
46
-				<u-form-item label="省市区">
47
-					<pick-regions :defaultRegion="defaultRegion" @getRegion="handleGetRegion">
48
-						<view class="region-picker">
49
-							<template v-if="form.province">
50
-								<u--input :value="form.province + '/' + form.city + '/' + form.area" placeholder="点击选择"
51
-									readonly suffixIcon="arrow-right" suffixIconStyle="color : #c0c4cc"></u--input>
52
-							</template>
53
-							<template v-else>
54
-								<u--input placeholder="点击选择" readonly suffixIcon="arrow-right"
55
-									suffixIconStyle="color : #c0c4cc"></u--input>
56
-							</template>
57
-						</view>
58
-					</pick-regions>
59
-				</u-form-item>
60
-
61
-				<u-form-item label="详细地址" prop="address" class='form_card'>
62
-					<u--textarea v-model="form.address" placeholder="请输入详细地址" count confirmType="done"></u--textarea>
63
-				</u-form-item>
64
-
65
-				<u-form-item label="上门时间" prop="visitTime">
41
+				<view class="address_wrap">
42
+					<view class="address_title">
43
+						<u-icon name="map" color="#3b82f6" size="16"></u-icon>
44
+						<view>地址信息</view>
45
+					</view>
46
+					<u-form-item label="详细地址" prop="address" class='form_card'>
47
+						<pick-regions :defaultRegion="defaultRegion" @getRegion="handleGetRegion" clearable class="region-picker">
48
+							<view>
49
+								<template v-if="form.province">
50
+									<u--input :value="form.province + '/' + form.city + '/' + form.area" placeholder="点击选择"
51
+										readonly suffixIcon="arrow-right" suffixIconStyle="color : #c0c4cc"></u--input>
52
+								</template>
53
+								<template v-else>
54
+									<u--input placeholder="点击选择" readonly suffixIcon="arrow-right"
55
+										suffixIconStyle="color : #c0c4cc"></u--input>
56
+								</template>
57
+							</view>
58
+						</pick-regions>
59
+					</u-form-item>
60
+					<u--textarea v-model="form.address" placeholder="粘贴地址自动识别(例如:浙江省杭州市...)" confirmType="done" @blur="handleAddressBlur"></u--textarea>
61
+				</view>
62
+				<u-form-item label="上门时间" prop="visitTime" class="visit_time_wrap">
66
 					<date-time-picker v-model="form.visitTime" :value-format="'YYYY-MM-DD HH:mm:ss'" :type="'datetime'">
63
 					<date-time-picker v-model="form.visitTime" :value-format="'YYYY-MM-DD HH:mm:ss'" :type="'datetime'">
67
 					</date-time-picker>
64
 					</date-time-picker>
68
 				</u-form-item>
65
 				</u-form-item>
69
 
66
 
70
-				<u-form-item label="类型" prop="category">
71
-					<ld-select :list="categoryDict" label-key="dictLabel" value-key="dictValue" placeholder="请选择类型"
72
-						v-model="form.category" :border="false"></ld-select>
73
-					<u-icon slot="right" name="arrow-right"></u-icon>
67
+				<u-form-item label="类型" prop="category" class="category_wrap">
68
+					<view class="category_select_wrap">
69
+						<ld-select :list="categoryDict" label-key="dictLabel" value-key="dictValue" placeholder="请选择类型"
70
+							v-model="form.category" :border="false"></ld-select>
71
+						<u-icon slot="right" name="arrow-right"></u-icon>
72
+					</view>
74
 				</u-form-item>
73
 				</u-form-item>
75
 
74
 
76
-
77
-
78
 				<u-form-item label="价格范围" prop="priceRange">
75
 				<u-form-item label="价格范围" prop="priceRange">
79
-					<u--input v-model="form.priceRange" placeholder="请输入价格范围" border="none"></u--input>
76
+					<u--input v-model="form.priceRange" placeholder="请输入价格范围" border="surround"></u--input>
80
 				</u-form-item>
77
 				</u-form-item>
81
 
78
 
82
 				<u-form-item label="战术选择" prop="tactic">
79
 				<u-form-item label="战术选择" prop="tactic">
@@ -88,8 +85,8 @@
88
 					</view>
85
 					</view>
89
 				</u-form-item>
86
 				</u-form-item>
90
 
87
 
91
-				<u-form-item label="备注消息" prop="remarks">
92
-					<u--textarea v-model="form.remarks" placeholder="请输入备注消息" count confirmType="done"></u--textarea>
88
+				<u-form-item label="备注信息" prop="remarks" class="remarks_wrap">
89
+					<u--textarea v-model="form.remarks" placeholder="填写线索来源、客户特殊要求等..." count confirmType="done"></u--textarea>
93
 				</u-form-item>
90
 				</u-form-item>
94
 
91
 
95
 			</u--form>
92
 			</u--form>
@@ -263,12 +260,31 @@ export default {
263
 			this.form.province = provinceData.name;
260
 			this.form.province = provinceData.name;
264
 			this.form.city = cityData.name;
261
 			this.form.city = cityData.name;
265
 			this.form.area = areaData.name;
262
 			this.form.area = areaData.name;
266
-			// 只在详细地址为空时自动填充省市区
267
-			if (!this.form.address || this.form.address.trim() === '') {
268
-				this.form.address = this.form.province + this.form.city + this.form.area;
263
+			
264
+			// 构建完整的地区信息
265
+			const regionText = this.form.province + this.form.city + this.form.area;
266
+			
267
+			// 检查当前地址内容是否为纯地区信息(没有具体街道等)
268
+			const isPureRegion = !this.form.address || 
269
+								this.form.address.trim() === '' ||
270
+								this.form.address.trim().includes(this.form.province) ||
271
+								this.form.address.trim().includes(this.form.city) ||
272
+								this.form.address.trim().includes(this.form.area);
273
+			
274
+			// 如果是纯地区信息或者是空地址,则更新为选择的地区
275
+			if (isPureRegion) {
276
+				this.form.address = regionText;
277
+			} else {
278
+				// 如果有具体地址信息,保留原有地址,但更新地区部分
279
+				// 这里可以保持原有地址不变,让用户自己选择是否更新
280
+				// 或者可以选择性地更新地区信息
269
 			}
281
 			}
270
 		},
282
 		},
271
 
283
 
284
+		// 地址失焦时自动解析地址信息
285
+		handleAddressBlur() {
286
+		},
287
+
272
 		// 更新各类附件
288
 		// 更新各类附件
273
 		updateChatFiles(fileList) {
289
 		updateChatFiles(fileList) {
274
 			this.form.chatAttachmentList = fileList;
290
 			this.form.chatAttachmentList = fileList;
@@ -385,21 +401,16 @@ export default {
385
 
401
 
386
 <style lang="scss" scoped>
402
 <style lang="scss" scoped>
387
 .oder_form_wrap {
403
 .oder_form_wrap {
388
-	background-color: #f5f5f5;
404
+	background-color: #f8f9fa;
389
 	min-height: 100vh;
405
 	min-height: 100vh;
390
-	padding-bottom: 100rpx;
406
+	padding-bottom: 10rpx;
391
 	padding-top: 10px;
407
 	padding-top: 10px;
392
 	padding-left: 20rpx;
408
 	padding-left: 20rpx;
393
 	padding-right: 20rpx;
409
 	padding-right: 20rpx;
394
 }
410
 }
395
 
411
 
396
-.form_wrap {
397
-	/* 移除整体背景和边框,让每个form-item成为独立卡片 */
398
-}
399
-
400
 .upload_area {
412
 .upload_area {
401
-	padding: 0 0rpx;
402
-	margin: 20rpx 0;
413
+	padding: 0 10rpx;
403
 }
414
 }
404
 
415
 
405
 .bottom_btn {
416
 .bottom_btn {
@@ -412,9 +423,7 @@ export default {
412
 	box-shadow: 0 -4rpx 20rpx rgba(0, 0, 0, 0.1);
423
 	box-shadow: 0 -4rpx 20rpx rgba(0, 0, 0, 0.1);
413
 }
424
 }
414
 
425
 
415
-.region-picker {
416
-	width: 100%;
417
-}
426
+
418
 
427
 
419
 ::v-deep .u-form-item {
428
 ::v-deep .u-form-item {
420
 	/* 移除底部边框 */
429
 	/* 移除底部边框 */
@@ -422,19 +431,96 @@ export default {
422
 	/* 添加卡片样式 */
431
 	/* 添加卡片样式 */
423
 	// background-color: #fff;
432
 	// background-color: #fff;
424
 	border-radius: 16rpx;
433
 	border-radius: 16rpx;
425
-	/* 添加阴影效果 */
426
-	/* 添加外边距 */
427
-	margin-bottom: 20rpx;
428
 	/* 添加内边距 */
434
 	/* 添加内边距 */
429
-	padding: 20rpx;
435
+	padding: 10rpx;
430
 	/* 确保内容不会溢出 */
436
 	/* 确保内容不会溢出 */
431
 	overflow: hidden;
437
 	overflow: hidden;
438
+	.u-input--square{
439
+		border-radius: 20rpx;
440
+	}
441
+	.u-input--square:focus-within,
442
+	.u-input--square.u-input--focus {
443
+		border: 2rpx solid #2563eb !important;
444
+		background-color: #fff !important;
445
+	}
432
 }
446
 }
433
-
434
-.form_card {
447
+.brand_wrap{
448
+	::v-deep .u-form-item__body__right__content{
449
+		border:1px solid #dadbde;
450
+		padding:10rpx;
451
+		border-radius: 20rpx;
452
+		.inputWrap{
453
+			border:none;
454
+		}
455
+	}
456
+}
457
+.address_wrap {
458
+	border-radius: 20rpx;
459
+	padding:24rpx;
460
+	display: flex;
461
+	flex-direction: column;
435
 	background-color: #fff;
462
 	background-color: #fff;
436
 	box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.05);
463
 	box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.05);
464
+	margin: 0 10rpx;
465
+	.address_title {
466
+		display: flex;
467
+		align-items: center;
468
+		background-color: #fff;
469
+		padding-bottom: 12rpx;
470
+		gap:16rpx;
471
+		font-size:26rpx;
472
+		color: #6b7280;
473
+		font-weight: 600;
474
+	}
475
+	::v-deep .u-form-item{
476
+		margin-bottom:0 !important;
477
+		padding:0;
478
+		.u-input--square{
479
+			background-color: #f9fafb;
480
+		}
481
+	}
482
+	::v-deep .u-textarea--radius{
483
+		border-radius: 20rpx;
484
+	}
485
+	.region-picker {
486
+		width: 100%;
487
+	}
488
+	::v-deep .u-textarea{
489
+		background-color: #f9fafb;
490
+	}
491
+}
437
 
492
 
493
+.visit_time_wrap{
494
+	::v-deep .uni-date-x{
495
+		border-radius: 10px;
496
+		padding: 8rpx 10rpx;
497
+		border:1px solid #dadbde;
498
+		background-color: #f8f9fa;
499
+	}
500
+}
501
+.category_wrap{
502
+	.category_select_wrap{
503
+		border-radius: 20rpx;
504
+		border:1px solid #dadbde;
505
+		padding:6rpx;
506
+		width:100%;
507
+		::v-deep .ldSelectInput{
508
+			font-size: 28rpx !important;
509
+		}
510
+	}
511
+	.category_select_wrap:focus-within,
512
+	.category_select_wrap:focus {
513
+		border: 2rpx solid #2563eb !important;
514
+		background-color: #fff !important;
515
+	}
516
+}
517
+.remarks_wrap{
518
+	.u-textarea{
519
+		background-color: #fff;
520
+	}
521
+	::v-deep .u-textarea--radius{
522
+		border-radius: 20rpx;
523
+	}
438
 }
524
 }
439
 
525
 
440
 ::v-deep .u-form-item__body {
526
 ::v-deep .u-form-item__body {
@@ -444,20 +530,17 @@ export default {
444
 
530
 
445
 ::v-deep .u-form-item__body__left__content__label {
531
 ::v-deep .u-form-item__body__left__content__label {
446
 	color: rgb(107 114 128 / 1) !important;
532
 	color: rgb(107 114 128 / 1) !important;
447
-	font-size: 0.75rem;
448
-	line-height: 1rem;
533
+	font-size: 28rpx;
449
 	font-weight: 700;
534
 	font-weight: 700;
450
 }
535
 }
451
 
536
 
452
-
453
 .u-button {
537
 .u-button {
454
 	border-radius: 40rpx;
538
 	border-radius: 40rpx;
455
-	background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1));
456
-	--tw-text-opacity: 1;
457
-	color: rgb(255 255 255 / var(--tw-text-opacity, 1));
539
+	background-color:#2563eb;
540
+	border:none;
541
+	color:#fff;
458
 	font-weight: 700;
542
 	font-weight: 700;
459
-	font-size: 1rem;
460
-	line-height: 1.5rem;
543
+	font-size: 40rpx;
461
 	height: 100rpx;
544
 	height: 100rpx;
462
 }
545
 }
463
 
546
 
@@ -478,7 +561,7 @@ export default {
478
 	line-height: 80rpx;
561
 	line-height: 80rpx;
479
 	text-align: center;
562
 	text-align: center;
480
 	border-radius: 30rpx;
563
 	border-radius: 30rpx;
481
-	background-color: #f5f5f5;
564
+	background-color: #f9fafb;
482
 	color: rgb(107 114 128 / 1);
565
 	color: rgb(107 114 128 / 1);
483
 	font-size: 28rpx;
566
 	font-size: 28rpx;
484
 	transition: all 0.3s ease;
567
 	transition: all 0.3s ease;
@@ -486,8 +569,9 @@ export default {
486
 }
569
 }
487
 
570
 
488
 .tactic-button.active {
571
 .tactic-button.active {
489
-	border-color: rgb(29 78 216 / 1);
490
-	color: rgb(29 78 216 / 1);
572
+	border-color: #3b82f6;
573
+	color: #3b82f6;
574
+	background-color: #eff6ff;
491
 }
575
 }
492
 
576
 
493
 .tactic-button::after {
577
 .tactic-button::after {
@@ -503,7 +587,7 @@ export default {
503
 	width: 25rpx;
587
 	width: 25rpx;
504
 	height: 25rpx;
588
 	height: 25rpx;
505
 	border-radius: 50%;
589
 	border-radius: 50%;
506
-	background-color: rgb(29 78 216 / 1);
590
+	background-color: #3b82f6;
507
 	opacity: 0;
591
 	opacity: 0;
508
 	transition: all 0.3s ease;
592
 	transition: all 0.3s ease;
509
 }
593
 }