Преглед изворни кода

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

zhangxin пре 2 месеци
родитељ
комит
6de1aa0189
1 измењених фајлова са 173 додато и 89 уклоњено
  1. 173 89
      pages/orderForm/index.vue

+ 173 - 89
pages/orderForm/index.vue

@@ -7,76 +7,73 @@
7 7
 		<view class="form_wrap">
8 8
 			<u--form labelPosition="top" labelWidth="100" :model="form" :rules="rules" ref="form" class="form_wrap"
9 9
 				:errorType="'toast'">
10
-				<u-form-item label="物品品牌" prop="brand">
10
+				<u-form-item label="品牌" prop="brand" class="brand_wrap">
11 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 13
 					<u-icon slot="right" name="arrow-right"></u-icon>
14 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 25
 					</u-form-item>
26
+                    </u-col>
29 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 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 63
 					<date-time-picker v-model="form.visitTime" :value-format="'YYYY-MM-DD HH:mm:ss'" :type="'datetime'">
67 64
 					</date-time-picker>
68 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 73
 				</u-form-item>
75 74
 
76
-
77
-
78 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 77
 				</u-form-item>
81 78
 
82 79
 				<u-form-item label="战术选择" prop="tactic">
@@ -88,8 +85,8 @@
88 85
 					</view>
89 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 90
 				</u-form-item>
94 91
 
95 92
 			</u--form>
@@ -263,12 +260,31 @@ export default {
263 260
 			this.form.province = provinceData.name;
264 261
 			this.form.city = cityData.name;
265 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 289
 		updateChatFiles(fileList) {
274 290
 			this.form.chatAttachmentList = fileList;
@@ -385,21 +401,16 @@ export default {
385 401
 
386 402
 <style lang="scss" scoped>
387 403
 .oder_form_wrap {
388
-	background-color: #f5f5f5;
404
+	background-color: #f8f9fa;
389 405
 	min-height: 100vh;
390
-	padding-bottom: 100rpx;
406
+	padding-bottom: 10rpx;
391 407
 	padding-top: 10px;
392 408
 	padding-left: 20rpx;
393 409
 	padding-right: 20rpx;
394 410
 }
395 411
 
396
-.form_wrap {
397
-	/* 移除整体背景和边框,让每个form-item成为独立卡片 */
398
-}
399
-
400 412
 .upload_area {
401
-	padding: 0 0rpx;
402
-	margin: 20rpx 0;
413
+	padding: 0 10rpx;
403 414
 }
404 415
 
405 416
 .bottom_btn {
@@ -412,9 +423,7 @@ export default {
412 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 428
 ::v-deep .u-form-item {
420 429
 	/* 移除底部边框 */
@@ -422,19 +431,96 @@ export default {
422 431
 	/* 添加卡片样式 */
423 432
 	// background-color: #fff;
424 433
 	border-radius: 16rpx;
425
-	/* 添加阴影效果 */
426
-	/* 添加外边距 */
427
-	margin-bottom: 20rpx;
428 434
 	/* 添加内边距 */
429
-	padding: 20rpx;
435
+	padding: 10rpx;
430 436
 	/* 确保内容不会溢出 */
431 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 462
 	background-color: #fff;
436 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 526
 ::v-deep .u-form-item__body {
@@ -444,20 +530,17 @@ export default {
444 530
 
445 531
 ::v-deep .u-form-item__body__left__content__label {
446 532
 	color: rgb(107 114 128 / 1) !important;
447
-	font-size: 0.75rem;
448
-	line-height: 1rem;
533
+	font-size: 28rpx;
449 534
 	font-weight: 700;
450 535
 }
451 536
 
452
-
453 537
 .u-button {
454 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 542
 	font-weight: 700;
459
-	font-size: 1rem;
460
-	line-height: 1.5rem;
543
+	font-size: 40rpx;
461 544
 	height: 100rpx;
462 545
 }
463 546
 
@@ -478,7 +561,7 @@ export default {
478 561
 	line-height: 80rpx;
479 562
 	text-align: center;
480 563
 	border-radius: 30rpx;
481
-	background-color: #f5f5f5;
564
+	background-color: #f9fafb;
482 565
 	color: rgb(107 114 128 / 1);
483 566
 	font-size: 28rpx;
484 567
 	transition: all 0.3s ease;
@@ -486,8 +569,9 @@ export default {
486 569
 }
487 570
 
488 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 577
 .tactic-button::after {
@@ -503,7 +587,7 @@ export default {
503 587
 	width: 25rpx;
504 588
 	height: 25rpx;
505 589
 	border-radius: 50%;
506
-	background-color: rgb(29 78 216 / 1);
590
+	background-color: #3b82f6;
507 591
 	opacity: 0;
508 592
 	transition: all 0.3s ease;
509 593
 }