wl-design-mobile 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/assets/home/banner.png +0 -0
  2. package/assets/home/card-slot1.png +0 -0
  3. package/assets/home/card-slot2.png +0 -0
  4. package/assets/home/card-slot3.png +0 -0
  5. package/assets/home/card-slot4.png +0 -0
  6. package/assets/home/card-slot6.png +0 -0
  7. package/assets/home/grid-1.png +0 -0
  8. package/assets/home/icon-1-1.png +0 -0
  9. package/assets/home/icon-1.png +0 -0
  10. package/assets/home/icon-2-1.png +0 -0
  11. package/assets/home/icon-2.png +0 -0
  12. package/assets/home/placeholder.png +0 -0
  13. package/assets/home/top-bg.png +0 -0
  14. package/assets/home/top-car-bg.png +0 -0
  15. package/assets/icon/arrange.png +0 -0
  16. package/assets/icon/arrow-left.png +0 -0
  17. package/assets/icon/arrow-right-big.png +0 -0
  18. package/assets/icon/back.png +0 -0
  19. package/assets/icon/boxs.png +0 -0
  20. package/assets/icon/date.png +0 -0
  21. package/assets/icon/delete.png +0 -0
  22. package/assets/icon/down.png +0 -0
  23. package/assets/icon/fileImg.png +0 -0
  24. package/assets/icon/filter.png +0 -0
  25. package/assets/icon/filtrate.png +0 -0
  26. package/assets/icon/info.png +0 -0
  27. package/assets/icon/interval/location.png +0 -0
  28. package/assets/icon/interval/reset.png +0 -0
  29. package/assets/icon/interval/time.png +0 -0
  30. package/assets/icon/label/close.png +0 -0
  31. package/assets/icon/label/down.png +0 -0
  32. package/assets/icon/label/up.png +0 -0
  33. package/assets/icon/more.png +0 -0
  34. package/assets/icon/order.png +0 -0
  35. package/assets/icon/person.png +0 -0
  36. package/assets/icon/picture.png +0 -0
  37. package/assets/icon/pull-down.png +0 -0
  38. package/assets/icon/report-forms/gary-icon.png +0 -0
  39. package/assets/icon/report-forms/green-up-icon.png +0 -0
  40. package/assets/icon/report-forms/icon.png +0 -0
  41. package/assets/icon/report-forms/up-icon.png +0 -0
  42. package/assets/icon/required.png +0 -0
  43. package/assets/icon/search-right.png +0 -0
  44. package/assets/icon/search.png +0 -0
  45. package/assets/icon/sort.png +0 -0
  46. package/assets/icon/timeicon.png +0 -0
  47. package/assets/icon/title-icon.png +0 -0
  48. package/assets/icon/unfold.png +0 -0
  49. package/assets/icon/up.png +0 -0
  50. package/assets/icon/upload-img.png +0 -0
  51. package/assets/icon/upload.png +0 -0
  52. package/assets/icon/uploadImg.png +0 -0
  53. package/assets/img/card/card-big.png +0 -0
  54. package/assets/img/doc/excel.png +0 -0
  55. package/assets/img/doc/mp3.png +0 -0
  56. package/assets/img/doc/other.png +0 -0
  57. package/assets/img/doc/pdf.png +0 -0
  58. package/assets/img/doc/photo.png +0 -0
  59. package/assets/img/doc/ppt.png +0 -0
  60. package/assets/img/doc/txt.png +0 -0
  61. package/assets/img/doc/video.png +0 -0
  62. package/assets/img/doc/word.png +0 -0
  63. package/assets/img/doc/zip.png +0 -0
  64. package/assets/img/login-background-bottom.jpg +0 -0
  65. package/assets/img/login-background-top.jpg +0 -0
  66. package/assets/img/login-hello.png +0 -0
  67. package/assets/img/title1-display-page.png +0 -0
  68. package/assets/img/title1-edit-page.png +0 -0
  69. package/assets/logo.png +0 -0
  70. package/btn/lambo-big-button.vue +121 -0
  71. package/btn/lambo-button-group.vue +47 -0
  72. package/btn/lambo-icon-button.vue +50 -0
  73. package/btn/lambo-medium-button.vue +121 -0
  74. package/btn/lambo-small-button-group.vue +31 -0
  75. package/btn/lambo-small-button-select.vue +53 -0
  76. package/btn/lambo-small-button.vue +121 -0
  77. package/card-item/card-row-icon.vue +72 -0
  78. package/card-item/filtrate-row.vue +72 -0
  79. package/card-item/lambo-card-footer.vue +40 -0
  80. package/card-item/lambo-card-head.vue +64 -0
  81. package/card-item/lambo-card-row.vue +60 -0
  82. package/collapse/lambo-collapse.vue +80 -0
  83. package/detail/lambo-detail-grid.vue +57 -0
  84. package/detail/lambo-detail-row.vue +59 -0
  85. package/doc/file/lambo-file-upload.vue +179 -0
  86. package/doc/file/styles/css/index.css +118 -0
  87. package/doc/img/lambo-img-upload.vue +109 -0
  88. package/doc/img/styles/css/index.css +98 -0
  89. package/edit/list/Lambo-edit-list.vue +90 -0
  90. package/edit/list/lambo-edit-card-group.vue +103 -0
  91. package/edit/list/styles/css/index.css +39 -0
  92. package/edit/select/lambo-edit-date-range.vue +135 -0
  93. package/edit/select/lambo-edit-date.vue +108 -0
  94. package/edit/select/lambo-edit-input-textarea.vue +92 -0
  95. package/edit/select/lambo-edit-input.vue +92 -0
  96. package/edit/select/lambo-edit-multi-select.vue +160 -0
  97. package/edit/select/lambo-edit-single-select.vue +153 -0
  98. package/edit/select/styles/css/index.css +124 -0
  99. package/flow/lambo-flow-detail.vue +30 -0
  100. package/flow/lambo-flow-edit.vue +30 -0
  101. package/icon/lambo-required-red-star.vue +47 -0
  102. package/icon/lambo-vector-icon.vue +71 -0
  103. package/list/lambo-list.vue +236 -0
  104. package/nav/lambo-top-nav.vue +89 -0
  105. package/package.json +26 -0
  106. package/search/lambo-date-range-page.vue +191 -0
  107. package/search/lambo-date-range.vue +107 -0
  108. package/search/lambo-input.vue +74 -0
  109. package/search/lambo-multi-select.vue +125 -0
  110. package/search/lambo-org-select-page.vue +109 -0
  111. package/search/lambo-search-box.vue +55 -0
  112. package/search/lambo-single-select.vue +119 -0
  113. package/search/styles/css/index.css +126 -0
  114. package/styles/base.less +75 -0
  115. package/styles/components/btn.less +7 -0
  116. package/styles/components/search.less +33 -0
  117. package/styles/components/tag.less +181 -0
  118. package/styles/index.less +4 -0
  119. package/title/lambo-title1.vue +129 -0
  120. package/title/lambo-title2.vue +37 -0
  121. package/title/lambo-title3.vue +77 -0
@@ -0,0 +1,39 @@
1
+ .coll-div {
2
+ margin-bottom: 8px;
3
+ }
4
+
5
+ .indicator-title {
6
+ display: flex;
7
+ align-items: center;
8
+ color: var(--scl-blue);
9
+ font-size: 14px;
10
+ font-family: 微软雅黑, serif Regular;
11
+ }
12
+
13
+ .indicator-title .color-line {
14
+ width: 3px;
15
+ height: 14px;
16
+ margin-right: 8px;
17
+ }
18
+
19
+ .coll-title-icon {
20
+ justify-content: center;
21
+ align-items: center;
22
+ align-content: center;
23
+ }
24
+
25
+ /* 覆盖折叠面板的标题的padding */
26
+ /deep/ .van-cell {
27
+ padding: 12px 10px;
28
+ }
29
+
30
+ /* 覆盖去掉折叠面板的标题下面的线 */
31
+ /deep/ .van-cell::after {
32
+ border: none;
33
+ }
34
+
35
+ /* 覆盖折叠面板的内容的padding */
36
+ /deep/ .van-collapse-item__content {
37
+ padding: 0px 0px 0px 0px;
38
+ }
39
+
@@ -0,0 +1,135 @@
1
+ <template>
2
+ <div class="edit-box">
3
+ <div class="edit-left-box">
4
+ <div class="edit-left-top">
5
+ <div v-if="required" class="edit-red-icon">
6
+ <lambo-required-red-star :required="required"></lambo-required-red-star>
7
+ </div>
8
+ <div class="edit-title">{{ title }}</div>
9
+ </div>
10
+ <van-field v-model="valName" :placeholder="placeholder" :readonly="true"
11
+ class="edit-lambo-input" clear-trigger="focus"></van-field>
12
+ <van-calendar v-model:show="showBottom" :default-date="defaultDateArr" :max-date="maxDate" :min-date="minDate"
13
+ :style="{ maxHeight: '65%' }" color="#0070D2" type="range" @confirm="onConfirm"/>
14
+ </div>
15
+ <div v-if="icon" class="edit-right-icon">
16
+ <lambo-vector-icon :icon="icon" @click="changeColor"></lambo-vector-icon>
17
+ </div>
18
+ </div>
19
+ </template>
20
+ <script>
21
+ import LamboVectorIcon from '@/components/lambo/icon/lambo-vector-icon.vue'
22
+ import LamboRequiredRedStar from '@/components/lambo/icon/lambo-required-red-star.vue'
23
+ import moment from "moment/moment";
24
+ import {deepCopy} from "@/libs/assist";
25
+
26
+ export default {
27
+ name: 'LamboEditDateRange',
28
+ components: {LamboRequiredRedStar, LamboVectorIcon},
29
+ props: {
30
+ icon: {
31
+ type: String,
32
+ default: "date.png",
33
+ },
34
+ required: {
35
+ type: Boolean,
36
+ default: false,
37
+ },
38
+ title: {
39
+ type: String,
40
+ default: false,
41
+ },
42
+ placeholder: {
43
+ type: String,
44
+ default: '请选择',
45
+ },
46
+ defaultDate: {
47
+ type: Array,
48
+ default: () => []
49
+ }
50
+ },
51
+ data() {
52
+ return {
53
+ valName: '',
54
+ showBottom: false,
55
+ selectItem: {
56
+ date: [],
57
+ date8: []
58
+ },
59
+ minDate: new Date((new Date()).getFullYear() - 1, (new Date()).getMonth() + 1, (new Date()).getDate()),
60
+ maxDate: new Date((new Date()).getFullYear() + 1, (new Date()).getMonth() + 1, (new Date()).getDate()),
61
+ defaultDateArr: []
62
+ }
63
+ },
64
+ methods: {
65
+ changeColor() {
66
+ this.showBottom = !this.showBottom
67
+ let searchRows = document.querySelectorAll('.edit-box')
68
+ Array.from(searchRows).forEach(function (row, index) {
69
+ row.addEventListener('click', function () {
70
+ Array.from(searchRows).forEach(function (row) {
71
+ row.style.borderBottom = '1px solid var(--scl-white-2)'
72
+ })
73
+ row.style.borderBottom = '1px solid var(--scl-blue)'
74
+ })
75
+ })
76
+ },
77
+ onConfirm(time) {
78
+ console.log(" onConfirm time:", time)
79
+ if (Array.isArray(time)) {
80
+ if (time.length === 2) {
81
+ let startDate1 = moment(time[0]).format("yyyyMMDD") || ''
82
+ let endDate1 = moment(time[1]).format("yyyyMMDD") || ''
83
+ let startDateFormat = moment(time[0]).format('yyyy-MM-DD') || ''
84
+ let endDateFormat = moment(time[1]).format('yyyy-MM-DD') || ''
85
+ if (startDate1 && endDate1) {
86
+ this.selectItem.date8 = [startDate1, endDate1]
87
+ this.selectItem.date = [startDateFormat, endDateFormat]
88
+ this.valName = startDateFormat + "~" + endDateFormat
89
+ this.$emit("on-ok", this.selectItem)
90
+ }
91
+ }
92
+ }
93
+ this.showBottom = false
94
+ },
95
+ initDefaultVal() {
96
+ // 默认值处理
97
+ if (this.defaultDate && Array.isArray(this.defaultDate) && this.defaultDate.length === 2) {
98
+ let defDateArr = this.defaultDate
99
+ if (defDateArr && defDateArr.length === 2 && defDateArr[0] && defDateArr[1]) {
100
+ this.selectItem.date8 = deepCopy(defDateArr)
101
+
102
+ let startDate8 = defDateArr[0]
103
+ let endDate8 = defDateArr[1]
104
+ let startDateFormat = moment(startDate8).format('yyyy-MM-DD') || ''
105
+ let endDateFormat = moment(endDate8).format('yyyy-MM-DD') || ''
106
+
107
+ let startDate1 = moment(startDate8).format("yyyyMMDD") || ''
108
+ let endDate1 = moment(endDate8).format("yyyyMMDD") || ''
109
+
110
+ this.selectItem.date[0] = startDateFormat
111
+ this.selectItem.date[1] = endDateFormat
112
+
113
+ this.selectItem.date8 = [startDate1, endDate1]
114
+ this.valName = startDateFormat + " ~ " + endDateFormat
115
+
116
+ let startDateObj = moment(startDate8).toDate()
117
+ let endDateObj = moment(endDate8).toDate()
118
+ this.defaultDateArr = [startDateObj, endDateObj]
119
+
120
+ this.$emit("on-ok", this.selectItem)
121
+ }
122
+ }
123
+ }
124
+ },
125
+ created() {
126
+ this.initDefaultVal()
127
+ },
128
+ mounted() {
129
+ }
130
+ }
131
+ </script>
132
+ <style scoped>
133
+ @import "../../styles/index.less";
134
+ @import "styles/css/index.css";
135
+ </style>
@@ -0,0 +1,108 @@
1
+ <template>
2
+ <div class="edit-box">
3
+ <div class="edit-left-box">
4
+ <div class="edit-left-top">
5
+ <div v-if="required" class="edit-red-icon">
6
+ <lambo-required-red-star :required="required"></lambo-required-red-star>
7
+ </div>
8
+ <div class="edit-title">{{ title }}</div>
9
+ </div>
10
+ <van-field v-model="valName" :placeholder="placeholder" :readonly="true"
11
+ class="edit-lambo-input" clear-trigger="focus"></van-field>
12
+ <van-calendar v-model:show="showBottom" :default-date="defaultDate" :max-date="maxDate" :min-date="minDate"
13
+ :style="{ maxHeight: '65%' }" color="#0070D2" type="single" @confirm="onConfirm"/>
14
+ </div>
15
+ <div v-if="icon" class="edit-right-icon">
16
+ <lambo-vector-icon :icon="icon" @click="changeColor"></lambo-vector-icon>
17
+ </div>
18
+ </div>
19
+ </template>
20
+ <script>
21
+ import LamboVectorIcon from '@/components/lambo/icon/lambo-vector-icon.vue'
22
+ import LamboRequiredRedStar from '@/components/lambo/icon/lambo-required-red-star.vue'
23
+ import moment from "moment/moment";
24
+
25
+ export default {
26
+ name: 'LamboEditDate',
27
+ components: {LamboRequiredRedStar, LamboVectorIcon},
28
+ props: {
29
+ icon: {
30
+ type: String,
31
+ default: "date.png",
32
+ },
33
+ required: {
34
+ type: Boolean,
35
+ default: false,
36
+ },
37
+ title: {
38
+ type: String,
39
+ default: false,
40
+ },
41
+ placeholder: {
42
+ type: String,
43
+ default: '请选择',
44
+ },
45
+ defaultDate: {
46
+ type: Date,
47
+ default: () => null
48
+ },
49
+ minDate: {
50
+ type: Date,
51
+ default: () => new Date((new Date()).getFullYear() - 3, (new Date()).getMonth(), (new Date()).getDate())
52
+ },
53
+ maxDate: {
54
+ type: Date,
55
+ default: () => new Date((new Date()).getFullYear() + 3, (new Date()).getMonth(), (new Date()).getDate())
56
+ }
57
+ },
58
+ data() {
59
+ return {
60
+ valName: '',
61
+ showBottom: false,
62
+ selectItem: {
63
+ dateStr: '',
64
+ dateFormat: ''
65
+ },
66
+ }
67
+ },
68
+ methods: {
69
+ changeColor() {
70
+ this.showBottom = !this.showBottom
71
+ let searchRows = document.querySelectorAll('.edit-box')
72
+ Array.from(searchRows).forEach(function (row, index) {
73
+ row.addEventListener('click', function () {
74
+ Array.from(searchRows).forEach(function (row) {
75
+ row.style.borderBottom = '1px solid var(--scl-white-2)'
76
+ })
77
+ row.style.borderBottom = '1px solid var(--scl-blue)'
78
+ })
79
+ })
80
+ },
81
+ onConfirm(time) {
82
+ console.log(" onConfirm time:", time)
83
+ let dateStr = moment(time).format("yyyyMMDD") || ''
84
+ let dateFormat = moment(time).format("yyyy-MM-DD") || ''
85
+ this.valName = dateFormat
86
+ this.selectItem.dateStr = dateStr
87
+ this.selectItem.dateFormat = dateFormat
88
+ this.$emit("on-ok", this.selectItem)
89
+ this.showBottom = false
90
+ },
91
+ initDefaultVal() {
92
+ // 默认值处理
93
+ if (this.defaultDate) {
94
+ this.onConfirm(this.defaultDate)
95
+ }
96
+ }
97
+ },
98
+ created() {
99
+ this.initDefaultVal()
100
+ },
101
+ mounted() {
102
+ }
103
+ }
104
+ </script>
105
+ <style scoped>
106
+ @import "../../styles/index.less";
107
+ @import "styles/css/index.css";
108
+ </style>
@@ -0,0 +1,92 @@
1
+ <template>
2
+ <div class="edit-box" @click="changeColor">
3
+ <div class="edit-left-box">
4
+ <div class="edit-left-top">
5
+ <div v-if="required" class="edit-red-icon">
6
+ <lambo-required-red-star :required="required"></lambo-required-red-star>
7
+ </div>
8
+ <div class="edit-title">{{ title }}</div>
9
+ </div>
10
+ <van-field v-model="innerValue" :autosize="true" :clearable="true" :maxlength="maxlength"
11
+ :placeholder="placeholder" :show-word-limit="showWordLimit" :type="type"
12
+ class="edit-lambo-input-textarea" label="" v-bind="$attrs" @input="$emit('input', $event)"/>
13
+ </div>
14
+ <div v-if="icon" class="edit-right-icon">
15
+ <lambo-vector-icon :icon="icon"></lambo-vector-icon>
16
+ </div>
17
+ </div>
18
+ </template>
19
+ <script>
20
+ import redIcon from '../assets/icon/required.png'
21
+ import LamboRequiredRedStar from '@/components/lambo/icon/lambo-required-red-star.vue'
22
+ import LamboVectorIcon from "@/components/lambo/icon/lambo-vector-icon.vue"
23
+
24
+ export default {
25
+ name: 'LamboEditInputTextarea',
26
+ components: {LamboVectorIcon, LamboRequiredRedStar},
27
+ model: {
28
+ prop: 'value',
29
+ event: 'input',
30
+ },
31
+ props: {
32
+ required: {
33
+ type: Boolean,
34
+ default: false,
35
+ },
36
+ type: {
37
+ default: 'textarea',
38
+ },
39
+ maxlength: {
40
+ type: [String, Number],
41
+ },
42
+ placeholder: {
43
+ type: String,
44
+ default: '',
45
+ },
46
+ title: {
47
+ type: String,
48
+ default: false,
49
+ },
50
+ value: {
51
+ type: String,
52
+ default: '',
53
+ },
54
+ showWordLimit: {
55
+ type: Boolean,
56
+ default: false,
57
+ },
58
+ icon: {
59
+ type: String,
60
+ default: "",
61
+ },
62
+ },
63
+ data() {
64
+ return {
65
+ requiredReadIcon: redIcon,
66
+ innerValue: this.value
67
+ }
68
+ },
69
+ methods: {
70
+ changeColor() {
71
+ let searchRows = document.querySelectorAll('.edit-box')
72
+ Array.from(searchRows).forEach(function (row, index) {
73
+ row.addEventListener('click', function () {
74
+ Array.from(searchRows).forEach(function (row) {
75
+ row.style.borderBottom = '1px solid var(--scl-white-2)'
76
+ })
77
+ row.style.borderBottom = '1px solid var(--scl-blue)'
78
+ })
79
+ })
80
+ },
81
+ },
82
+ watch: {
83
+ value(newVal) {
84
+ this.innerValue = newVal
85
+ },
86
+ }
87
+ }
88
+ </script>
89
+ <style scoped>
90
+ @import "../../styles/index.less";
91
+ @import "styles/css/index.css";
92
+ </style>
@@ -0,0 +1,92 @@
1
+ <template>
2
+ <div class="edit-box" @click="changeColor">
3
+ <div class="edit-left-box">
4
+ <div class="edit-left-top">
5
+ <div class="edit-red-icon" v-if="required">
6
+ <lambo-required-red-star :required="required"></lambo-required-red-star>
7
+ </div>
8
+ <div class="edit-title">{{ title }}</div>
9
+ </div>
10
+ <van-field v-model="innerValue" :clearable="true" :maxlength="maxlength" :placeholder="placeholder"
11
+ class="edit-lambo-input" :show-word-limit="showWordLimit"
12
+ :type="type" label="" v-bind="$attrs" @input="$emit('input', $event)"/>
13
+ </div>
14
+ <div class="edit-right-icon" v-if="icon">
15
+ <lambo-vector-icon :icon="icon"></lambo-vector-icon>
16
+ </div>
17
+ </div>
18
+ </template>
19
+ <script>
20
+ import redIcon from '../assets/icon/required.png'
21
+ import LamboRequiredRedStar from '@/components/lambo/icon/lambo-required-red-star.vue'
22
+ import LamboVectorIcon from "@/components/lambo/icon/lambo-vector-icon.vue"
23
+
24
+ export default {
25
+ name: 'LamboEditInput',
26
+ components: {LamboVectorIcon, LamboRequiredRedStar},
27
+ model: {
28
+ prop: 'value',
29
+ event: 'input',
30
+ },
31
+ props: {
32
+ required: {
33
+ type: Boolean,
34
+ default: false,
35
+ },
36
+ type: {
37
+ default: 'text',
38
+ },
39
+ maxlength: {
40
+ type: [String, Number],
41
+ },
42
+ placeholder: {
43
+ type: String,
44
+ default: '',
45
+ },
46
+ title: {
47
+ type: String,
48
+ default: false,
49
+ },
50
+ value: {
51
+ type: String,
52
+ default: '',
53
+ },
54
+ showWordLimit: {
55
+ type: Boolean,
56
+ default: false,
57
+ },
58
+ icon: {
59
+ type: String,
60
+ default: "",
61
+ },
62
+ },
63
+ data() {
64
+ return {
65
+ requiredReadIcon: redIcon,
66
+ innerValue: this.value
67
+ }
68
+ },
69
+ methods: {
70
+ changeColor() {
71
+ let searchRows = document.querySelectorAll('.edit-box')
72
+ Array.from(searchRows).forEach(function (row, index) {
73
+ row.addEventListener('click', function () {
74
+ Array.from(searchRows).forEach(function (row) {
75
+ row.style.borderBottom = '1px solid var(--scl-white-2)'
76
+ })
77
+ row.style.borderBottom = '1px solid var(--scl-blue)'
78
+ })
79
+ })
80
+ },
81
+ },
82
+ watch: {
83
+ value(newVal) {
84
+ this.innerValue = newVal
85
+ },
86
+ }
87
+ }
88
+ </script>
89
+ <style scoped>
90
+ @import "../../styles/index.less";
91
+ @import "styles/css/index.css";
92
+ </style>
@@ -0,0 +1,160 @@
1
+ <template>
2
+ <div>
3
+ <div class="edit-box" @click="changeColor">
4
+ <div class="edit-left-box">
5
+ <div class="edit-left-top">
6
+ <div class="edit-red-icon" v-if="required">
7
+ <lambo-required-red-star :required="required"></lambo-required-red-star>
8
+ </div>
9
+ <div class="edit-title">{{ title }}222</div>
10
+ </div>
11
+ <van-field v-model="valName" :placeholder="placeholder" class="edit-lambo-input"
12
+ clear-trigger="focus"></van-field>
13
+ </div>
14
+ <div class="edit-right-icon" v-if="icon">
15
+ <lambo-vector-icon :icon="icon" @click="onOpen"></lambo-vector-icon>
16
+ </div>
17
+ </div>
18
+ <div>
19
+ <van-popup v-model:show="showBottom" :style="{ height: '33%' }" position="bottom">
20
+ <van-checkbox-group v-model="selectItem.K">
21
+ <div class="edit-top-div">
22
+ <van-button class="edit-cancel-btn" size="normal" @click="cancel">取消</van-button>
23
+ <span class="edit-select-title">请选择</span>
24
+ <van-button class="edit-confirm-btn" size="normal" @click="onConfirm">确认</van-button>
25
+ </div>
26
+ <van-cell-group>
27
+ <van-cell v-for="(c, index) in data" :key="index" :title="`${c.V}`" clickable @click="checkboxClick(c)">
28
+ <template #right-icon>
29
+ <van-checkbox ref="checkboxes" :name="c.K" checked-color="#0070D2" shape="square"/>
30
+ </template>
31
+ </van-cell>
32
+ </van-cell-group>
33
+ </van-checkbox-group>
34
+ </van-popup>
35
+ </div>
36
+ </div>
37
+ </template>
38
+ <script>
39
+ import LamboRequiredRedStar from '@/components/lambo/icon/lambo-required-red-star.vue'
40
+ import LamboVectorIcon from '@/components/lambo/icon/lambo-vector-icon.vue'
41
+ import {Toast} from 'vant'
42
+
43
+ export default {
44
+ name: 'LamboEditMultiSelect',
45
+ components: {LamboVectorIcon, LamboRequiredRedStar},
46
+ props: {
47
+ title: {
48
+ type: String,
49
+ default: '',
50
+ },
51
+ placeholder: {
52
+ type: String,
53
+ default: '请选择',
54
+ },
55
+ required: {
56
+ type: Boolean,
57
+ default: false,
58
+ },
59
+ icon: {
60
+ type: String,
61
+ default: 'arrow-right-big.png',
62
+ },
63
+ data: {
64
+ type: Array,
65
+ default: () => ([]),
66
+ },
67
+ defaultItem: {
68
+ type: Object,
69
+ },
70
+ },
71
+ data() {
72
+ return {
73
+ showBottom: false,
74
+ val: '',
75
+ valName: '',
76
+ selectItem: {
77
+ K: [],
78
+ V: [],
79
+ },
80
+ firstLoad: true,
81
+ }
82
+ },
83
+ watch: {
84
+ defaultItem: {
85
+ handler: function (val, oldVal) {
86
+ console.log('multi-select -- defaultItem -- val,oldVal,firstLoad:', {
87
+ val,
88
+ oldVal,
89
+ 'firstLoad': this.firstLoad,
90
+ })
91
+ if (this.defaultItem && this.defaultItem.K && this.firstLoad === true) {
92
+ this.val = this.defaultItem.K
93
+ this.valName = this.defaultItem.V.join()
94
+ this.selectItem.K = this.defaultItem.K
95
+ this.selectItem.V = this.defaultItem.V
96
+ this.firstLoad = false
97
+ this.$emit('on-ok', this.defaultItem)
98
+ }
99
+ },
100
+ deep: true,
101
+ immediate: true,
102
+ },
103
+ },
104
+ methods: {
105
+ onOpen() {
106
+ this.showBottom = true
107
+ },
108
+ cancel() {
109
+ this.showBottom = false
110
+ },
111
+ onConfirm() {
112
+ if (this.selectItem && typeof this.selectItem === 'object' && this.selectItem.K && this.selectItem.V) {
113
+ this.val = this.selectItem.K
114
+ this.valName = this.selectItem.V.join()
115
+ this.$emit('on-ok', this.selectItem)
116
+ } else {
117
+ Toast.fail('查询条件选择失败,请联系管理员')
118
+ console.error('multi-select -- 查询条件选择失败,this.selectItem:', this.selectItem)
119
+ this.val = []
120
+ this.valName = ''
121
+ this.$emit('on-ok', {K: [], V: []})
122
+ }
123
+ this.showBottom = false
124
+ },
125
+ checkboxClick(data) {
126
+ console.log('multi-select -- checkboxClick:', data)
127
+ if (data && data.K) {
128
+ if (this.selectItem.K.includes(data.K)) {
129
+ this.selectItem.K.splice(this.selectItem.K.indexOf(data.K), 1)
130
+ this.selectItem.V.splice(this.selectItem.V.indexOf(data.V), 1)
131
+ } else {
132
+ this.selectItem.K.push(data.K)
133
+ this.selectItem.V.push(data.V)
134
+ }
135
+ }
136
+ },
137
+ changeColor() {
138
+ let searchRows = document.querySelectorAll('.edit-box')
139
+ Array.from(searchRows).forEach(function (row, index) {
140
+ row.addEventListener('click', function () {
141
+ Array.from(searchRows).forEach(function (row) {
142
+ row.style.borderBottom = '1px solid var(--scl-white-2)'
143
+ })
144
+ row.style.borderBottom = '1px solid var(--scl-blue)'
145
+ })
146
+ })
147
+ },
148
+ },
149
+ created() {
150
+ }
151
+ ,
152
+ mounted() {
153
+ }
154
+ ,
155
+ }
156
+ </script>
157
+ <style scoped>
158
+ @import "../../styles/index.less";
159
+ @import "styles/css/index.css";
160
+ </style>