|
|
@@ -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
|
}
|