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,89 @@
1
+ <template>
2
+ <van-sticky>
3
+ <van-nav-bar :title="title">
4
+ <template #left>
5
+ <div class="arrow-left" @click="back"></div>
6
+ </template>
7
+ <template v-if="hasExtend" #right>
8
+ <div :style="{backgroundImage: `../assets/icon/search-right.png`}" class="arrow-right" @click="more"></div>
9
+ </template>
10
+ </van-nav-bar>
11
+ </van-sticky>
12
+ </template>
13
+ <script>
14
+
15
+ export default {
16
+ name: 'LamboNavBar',
17
+ props: {
18
+ title: String,
19
+ icon: String,
20
+ hasExtend: {
21
+ type: Boolean,
22
+ default: false
23
+ },
24
+ },
25
+ data() {
26
+ return {}
27
+ },
28
+ methods: {
29
+ back() {
30
+ this.$emit("on-back")
31
+ },
32
+ more() {
33
+ this.$emit("on-extend")
34
+ }
35
+ },
36
+ // computed: {
37
+ // loadIcon() {
38
+ // if (!this.icon) {
39
+ // return url("../assets/icon/search-right.png");
40
+ //
41
+ // } else {
42
+ // return new URL('../assets/icon/' + this.icon, import.meta.url).href
43
+ // }
44
+ // }
45
+ // }
46
+ }
47
+ </script>
48
+ <style scoped>
49
+ @import "../styles/index.less";
50
+
51
+ .arrow-left {
52
+ width: 14px;
53
+ height: 14px;
54
+ line-height: 48px;
55
+ background-image: url("../assets/icon/arrow-left.png");
56
+ background-repeat: no-repeat;
57
+ background-size: 100% auto;
58
+ }
59
+
60
+ .arrow-right {
61
+ width: 14px;
62
+ height: 14px;
63
+ line-height: 48px;
64
+ background-repeat: no-repeat;
65
+ background-size: 100% auto;
66
+ }
67
+
68
+ .van-nav-bar {
69
+ background-color: #0070D2;
70
+ height: 48px;
71
+ }
72
+
73
+ ::v-deep .van-nav-bar__left {
74
+ padding: 0px 8px 0px 14px;
75
+ }
76
+
77
+ ::v-deep .van-nav-bar__right {
78
+ padding: 0px 14px 0px 8px;
79
+ }
80
+
81
+ ::v-deep .van-nav-bar__title {
82
+ color: #fff;
83
+ font-size: 16px;
84
+ }
85
+
86
+ ::v-deep .van-ellipsis {
87
+ color: #fff;
88
+ }
89
+ </style>
package/package.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "wl-design-mobile",
3
+ "version": "0.0.1",
4
+ "description": "",
5
+ "main": "index.js",
6
+ "author": "finch",
7
+ "license": "ISC",
8
+ "publishConfig": {
9
+ "access": "public",
10
+ "registry": "https://registry.npmjs.org/",
11
+ "files": [
12
+ "!**/.*",
13
+ "!**/CHANGELOG.md",
14
+ "**/*"
15
+ ]
16
+ },
17
+ "dependencies": {
18
+ "core-js": "^3.8.3",
19
+ "vant": "^2.13.2",
20
+ "vue-router": "^3.0.5"
21
+ },
22
+ "devDependencies": {
23
+ "vue": "^2.6.14"
24
+ },
25
+ "scripts": {}
26
+ }
@@ -0,0 +1,191 @@
1
+ <template>
2
+ <div class="time-div">
3
+ <div class="left" @click="onOpen">
4
+ <p class="time">{{ startDate }}</p>
5
+ </div>
6
+ <div class="middle" @click="replace">
7
+ <img class="img" :src="imgSrc"/>
8
+ <p class="nav"><img class="rest-img" :src="imgResetSrc">重置</p>
9
+ </div>
10
+ <div class="right" @click="onOpen">
11
+ <p class="time">{{ endDate }}</p>
12
+ </div>
13
+ <van-calendar v-model:show="showBottom" :default-date="defaultDateArr" :min-date="minDate" :max-date="maxDate"
14
+ type="range" :style="{ maxHeight: '65%' }" color="#0070D2" @confirm="onConfirm"/>
15
+ </div>
16
+ </template>
17
+ <script>
18
+ import time from '../assets/icon/interval/time.png'
19
+ import reset from '../assets/icon/interval/reset.png'
20
+ import moment from 'moment'
21
+ import { deepCopy } from '@/libs/assist'
22
+
23
+ export default {
24
+ name: "LamboDateRangePage",
25
+ props: {
26
+ defaultDate: {
27
+ type: Array,
28
+ default: () => []
29
+ },
30
+ },
31
+ data() {
32
+ return {
33
+ imgSrc: time,
34
+ imgResetSrc: reset,
35
+ showBottom: false,
36
+ selectItem: {
37
+ date: [],
38
+ date8: []
39
+ },
40
+ startDate: '',
41
+ endDate: '',
42
+ defaultDateArr: [],
43
+ minDate: new Date((new Date()).getFullYear() - 1, (new Date()).getMonth() + 1, (new Date()).getDate()),
44
+ maxDate: new Date((new Date()).getFullYear() + 1, (new Date()).getMonth() + 1, (new Date()).getDate()),
45
+ replaceDate: [],
46
+ }
47
+ },
48
+ created() {
49
+ this.initDefaultVal()
50
+ },
51
+ methods: {
52
+ initDefaultVal() {
53
+ if (this.defaultDate && Array.isArray(this.defaultDate) && this.defaultDate.length === 2) {
54
+ let defDateArr = this.defaultDate
55
+ this.replaceDate = this.defaultDate
56
+ if (defDateArr && defDateArr.length === 2 && defDateArr[0] && defDateArr[1]) {
57
+ this.selectItem.date8 = deepCopy(defDateArr)
58
+
59
+ let startDate8 = defDateArr[0]
60
+ let endDate8 = defDateArr[1]
61
+ let startDateFormat = moment(startDate8).format('yyyy-MM-DD') || ''
62
+ let endDateFormat = moment(endDate8).format('yyyy-MM-DD') || ''
63
+ this.selectItem.date[0] = startDateFormat
64
+ this.selectItem.date[1] = endDateFormat
65
+ this.startDate = startDateFormat
66
+ this.endDate = endDateFormat
67
+
68
+ let startDateObj = moment(startDate8).toDate()
69
+ let endDateObj = moment(endDate8).toDate()
70
+ this.defaultDateArr = [startDateObj, endDateObj]
71
+ }
72
+ }
73
+ },
74
+ onOpen() {
75
+ this.showBottom = true
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
+
86
+ if (startDate1 && endDate1) {
87
+ this.selectItem.date8 = [startDate1, endDate1]
88
+ this.selectItem.date = [startDateFormat, endDateFormat]
89
+ this.startDate = startDateFormat
90
+ this.endDate = endDateFormat
91
+ this.$emit("on-ok", this.selectItem)
92
+ }
93
+ }
94
+ }
95
+ this.showBottom = false
96
+ },
97
+ replace() {
98
+ if (this.replaceDate && Array.isArray(this.replaceDate) && this.replaceDate.length === 2) {
99
+ let defDateArr = this.replaceDate
100
+ this.replaceDate = this.replaceDate
101
+ if (defDateArr && defDateArr.length === 2 && defDateArr[0] && defDateArr[1]) {
102
+ this.selectItem.date8 = deepCopy(defDateArr)
103
+
104
+ let startDate8 = defDateArr[0]
105
+ let endDate8 = defDateArr[1]
106
+ let startDateFormat = moment(startDate8).format("yyyy-MM-DD") || ''
107
+ let endDateFormat = moment(endDate8).format("yyyy-MM-DD") || ''
108
+ this.selectItem.date[0] = startDateFormat
109
+ this.selectItem.date[1] = endDateFormat
110
+ this.startDate = startDateFormat
111
+ this.endDate = endDateFormat
112
+
113
+ let startDateObj = moment(startDate8).toDate()
114
+ let endDateObj = moment(endDate8).toDate()
115
+ this.defaultDateArr = [startDateObj, endDateObj]
116
+
117
+ this.$emit("on-ok", this.selectItem)
118
+ }
119
+ }
120
+
121
+ }
122
+ }
123
+ }
124
+ </script>
125
+ <style scoped>
126
+ @import "../styles/index.less";
127
+
128
+ .time-div {
129
+ height: 72px;
130
+ background-color: var(--scl-white-1);
131
+ display: flex;
132
+ align-items: center;
133
+ justify-content: center;
134
+ padding: 14px;
135
+ }
136
+
137
+ .left {
138
+ width: 37.5%;
139
+ height: 100%;
140
+ display: flex;
141
+ flex-direction: column;
142
+ align-items: flex-start;
143
+ justify-content: center;
144
+ padding-left: 14px;
145
+ text-align: left;
146
+ }
147
+
148
+ .right {
149
+ width: 37.5%;
150
+ height: 100%;
151
+ display: flex;
152
+ flex-direction: column;
153
+ align-items: flex-end;
154
+ justify-content: center;
155
+ padding-right: 14px;
156
+ text-align: right;
157
+ }
158
+
159
+ .middle {
160
+ width: 25%;
161
+ height: 100%;
162
+ display: flex;
163
+ flex-direction: column;
164
+ align-items: center;
165
+ justify-content: center;
166
+ }
167
+
168
+ .time {
169
+ font-size: 14px;
170
+ color: var(--scl-gray-1);
171
+ }
172
+
173
+ .nav {
174
+ font-size: 11px;
175
+ color: var(--scl-blue);
176
+ margin-top: 3px;
177
+ }
178
+
179
+ .img {
180
+ width: 100%;
181
+ height: auto;
182
+ margin-top: 15px;
183
+ }
184
+
185
+ .rest-img {
186
+ width: 15%;
187
+ height: auto;
188
+ margin-left: 10px;
189
+ margin-right: 2px;
190
+ }
191
+ </style>
@@ -0,0 +1,107 @@
1
+ <template>
2
+ <div>
3
+ <div class="search-row">
4
+ <!-- 必选的红色星号 -->
5
+ <lambo-required-red-star :required="required"></lambo-required-red-star>
6
+ <!-- 时间框的名字段 -->
7
+ <div class="search-input-title">{{ title }}</div>
8
+ <div class="search-lambo-input">{{ dateStr }}</div>
9
+ <lambo-vector-icon :icon="icon" @click="onOpen"></lambo-vector-icon>
10
+ </div>
11
+ <div>
12
+ <van-calendar v-model:show="showBottom" :default-date="defaultDateArr" :min-date="minDate" :max-date="maxDate" type="range"
13
+ :style="{ maxHeight: '65%' }" color="#0070D2" @confirm="onConfirm"/>
14
+ </div>
15
+ </div>
16
+ </template>
17
+ <script>
18
+ import { deepCopy } from '@/libs/assist'
19
+ import moment from 'moment'
20
+ import LamboRequiredRedStar from '@/components/lambo/icon/lambo-required-red-star.vue'
21
+ import LamboVectorIcon from '@/components/lambo/icon/lambo-vector-icon.vue'
22
+
23
+ export default {
24
+ name: 'LamboDateRange',
25
+ components: {LamboVectorIcon, LamboRequiredRedStar},
26
+ props: {
27
+ required: {
28
+ type: Boolean,
29
+ default: false
30
+ },
31
+ title: {
32
+ type: String,
33
+ default: false
34
+ },
35
+ defaultDate: {
36
+ type: Array,
37
+ default: () => []
38
+ }
39
+ },
40
+ data() {
41
+ return {
42
+ icon: 'date.png',
43
+ showBottom: false,
44
+ dateStr: '',
45
+ selectItem: {
46
+ date: [],
47
+ date8: []
48
+ },
49
+ minDate: new Date((new Date()).getFullYear() - 1, (new Date()).getMonth() + 1, (new Date()).getDate()),
50
+ maxDate: new Date((new Date()).getFullYear() + 1, (new Date()).getMonth() + 1, (new Date()).getDate()),
51
+ defaultDateArr: []
52
+ }
53
+ },
54
+ methods: {
55
+ onOpen() {
56
+ this.showBottom = true
57
+ },
58
+ onConfirm(time) {
59
+ console.log(" onConfirm time:", time)
60
+ if (Array.isArray(time)) {
61
+ if (time.length === 2) {
62
+ let startDate1 = moment(time[0]).format("yyyyMMDD") || ''
63
+ let endDate1 = moment(time[1]).format("yyyyMMDD") || ''
64
+ let startDateFormat = moment(time[0]).format('yyyy-MM-DD') || ''
65
+ let endDateFormat = moment(time[1]).format('yyyy-MM-DD') || ''
66
+ if (startDate1 && endDate1) {
67
+ this.selectItem.date8 = [startDate1, endDate1]
68
+ this.selectItem.date = [startDateFormat, endDateFormat]
69
+ this.dateStr = startDateFormat + "~" + endDateFormat
70
+
71
+ this.$emit("on-ok", this.selectItem)
72
+ }
73
+ }
74
+ }
75
+ this.showBottom = false
76
+ },
77
+ initDefaultVal() {
78
+ // 默认值处理
79
+ if (this.defaultDate && Array.isArray(this.defaultDate) && this.defaultDate.length === 2) {
80
+ let defDateArr = this.defaultDate
81
+ if (defDateArr && defDateArr.length === 2 && defDateArr[0] && defDateArr[1]) {
82
+ this.selectItem.date8 = deepCopy(defDateArr)
83
+
84
+ let startDate8 = defDateArr[0]
85
+ let endDate8 = defDateArr[1]
86
+ let startDateFormat = moment(startDate8).format('yyyy-MM-DD') || ''
87
+ let endDateFormat = moment(endDate8).format('yyyy-MM-DD') || ''
88
+ this.selectItem.date[0] = startDateFormat
89
+ this.selectItem.date[1] = endDateFormat
90
+ this.dateStr = startDateFormat + " ~ " + endDateFormat
91
+
92
+ let startDateObj = moment(startDate8).toDate()
93
+ let endDateObj = moment(endDate8).toDate()
94
+ this.defaultDateArr = [startDateObj, endDateObj]
95
+ }
96
+ }
97
+ }
98
+ },
99
+ created() {
100
+ this.initDefaultVal()
101
+ }
102
+ }
103
+ </script>
104
+ <style scoped>
105
+ @import "../styles/index.less";
106
+ @import "./styles/css/index.css";
107
+ </style>
@@ -0,0 +1,74 @@
1
+ <template>
2
+ <div class="search-row">
3
+ <!-- 必选的红色星号 -->
4
+ <lambo-required-red-star :required="required"></lambo-required-red-star>
5
+ <!-- 输入框的名字段 -->
6
+ <div class="search-input-title">{{ title }}</div>
7
+ <!-- 输入框的值 -->
8
+ <div class="search-lambo-input">
9
+ <van-field v-model="innerValue" :clearable="true" :maxlength="maxlength" :placeholder="placeholder"
10
+ :show-word-limit="showWordLimit"
11
+ :type="type" label="" v-bind="$attrs" @input="$emit('input', $event)"/>
12
+ </div>
13
+ </div>
14
+ </template>
15
+ <script>
16
+ import redIcon from '../assets/icon/required.png'
17
+ import LamboRequiredRedStar from '@/components/lambo/icon/lambo-required-red-star.vue'
18
+
19
+ export default {
20
+ name: 'LamboInput',
21
+ components: {LamboRequiredRedStar},
22
+ model: {
23
+ prop: 'value',
24
+ event: 'input',
25
+ },
26
+ props: {
27
+ required: {
28
+ type: Boolean,
29
+ default: false,
30
+ },
31
+ type: {
32
+ default: 'text',
33
+ },
34
+ maxlength: {
35
+ type: [String, Number],
36
+ },
37
+ placeholder: {
38
+ type: String,
39
+ default: '',
40
+ },
41
+ title: {
42
+ type: String,
43
+ default: false,
44
+ },
45
+ value: {
46
+ type: String,
47
+ default: '',
48
+ },
49
+ showWordLimit: {
50
+ type: Boolean,
51
+ default: false,
52
+ },
53
+ },
54
+ data() {
55
+ return {
56
+ requiredReadIcon: redIcon,
57
+ innerValue: this.value,
58
+ }
59
+ },
60
+ methods: {},
61
+ created() {
62
+
63
+ },
64
+ watch: {
65
+ value(newVal) {
66
+ this.innerValue = newVal
67
+ },
68
+ },
69
+ }
70
+ </script>
71
+ <style scoped>
72
+ @import "../styles/index.less";
73
+ @import "./styles/css/index.css";
74
+ </style>
@@ -0,0 +1,125 @@
1
+ <template>
2
+ <div>
3
+ <div class="search-row">
4
+ <lambo-required-red-star :required="required"></lambo-required-red-star>
5
+ <div class="search-input-title">{{ title }}</div>
6
+ <div class="search-lambo-input">{{ valName }}</div>
7
+ <lambo-vector-icon v-if="icon" :icon="icon" @click="onOpen"></lambo-vector-icon>
8
+ </div>
9
+ <div>
10
+ <van-popup v-model:show="showBottom" :style="{ height: '31%' }" position="bottom">
11
+ <van-checkbox-group v-model="selectItem.K">
12
+ <div class="search-top-div">
13
+ <van-button class="search-cancel-btn" size="normal" @click="cancel">取消</van-button>
14
+ <span class="search-select-title">请选择</span>
15
+ <van-button class="search-confirm-btn" size="normal" @click="onConfirm">确认</van-button>
16
+ </div>
17
+ <van-cell-group>
18
+ <van-cell v-for="(c, index) in data" :key="index" :title="`${c.V}`" clickable @click="checkboxClick(c)">
19
+ <template #right-icon>
20
+ <van-checkbox :name="c.K" shape="square" ref="checkboxes" checked-color="#0070D2"/>
21
+ </template>
22
+ </van-cell>
23
+ </van-cell-group>
24
+ </van-checkbox-group>
25
+ </van-popup>
26
+ </div>
27
+ </div>
28
+ </template>
29
+ <script>
30
+ import {Toast} from 'vant'
31
+ import LamboRequiredRedStar from '@/components/lambo/icon/lambo-required-red-star.vue'
32
+ import LamboVectorIcon from '@/components/lambo/icon/lambo-vector-icon.vue'
33
+
34
+ export default {
35
+ name: "LamboMultiSelect",
36
+ components: {LamboVectorIcon, LamboRequiredRedStar},
37
+ props: {
38
+ required: {
39
+ type: Boolean,
40
+ default: false
41
+ },
42
+ icon: {
43
+ type: String,
44
+ default: 'arrow-right-big.png'
45
+ },
46
+ title: {
47
+ type: String,
48
+ default: false
49
+ },
50
+ data: {
51
+ type: Array,
52
+ default: () => ([])
53
+ },
54
+ defaultItem: {
55
+ type: Object
56
+ }
57
+ },
58
+ data() {
59
+ return {
60
+ showBottom: false,
61
+ val: '',
62
+ valName: '',
63
+ selectItem: {
64
+ K: [],
65
+ V: []
66
+ },
67
+ firstLoad: true
68
+ }
69
+ },
70
+ watch: {
71
+ defaultItem: {
72
+ handler: function (val, oldVal) {
73
+ console.log("multi-select -- defaultItem -- val,oldVal,firstLoad:", {val, oldVal, "firstLoad": this.firstLoad})
74
+ if (val && val.K && this.firstLoad === true) {
75
+ this.val = val.K
76
+ this.valName = val.V.join()
77
+ this.selectItem.K = val.K
78
+ this.selectItem.V = val.V
79
+ this.firstLoad = false
80
+ }
81
+ },
82
+ deep: true,
83
+ immediate: true,
84
+ }
85
+ },
86
+ methods: {
87
+ onOpen() {
88
+ this.showBottom = true
89
+ },
90
+ cancel() {
91
+ this.showBottom = false
92
+ },
93
+ onConfirm() {
94
+ if (this.selectItem && typeof this.selectItem === 'object' && this.selectItem.K && this.selectItem.V) {
95
+ this.val = this.selectItem.K
96
+ this.valName = this.selectItem.V.join()
97
+ this.$emit('on-ok', this.selectItem)
98
+ } else {
99
+ Toast.fail("查询条件选择失败,请联系管理员");
100
+ console.error("multi-select -- 查询条件选择失败,this.selectItem:", this.selectItem)
101
+ this.val = []
102
+ this.valName = ''
103
+ this.$emit("on-ok", {K: [], V: []})
104
+ }
105
+ this.showBottom = false
106
+ },
107
+ checkboxClick(data) {
108
+ console.log("multi-select -- checkboxClick:", data)
109
+ if (data && data.K) {
110
+ if (this.selectItem.K.includes(data.K)) {
111
+ this.selectItem.K.splice(this.selectItem.K.indexOf(data.K), 1)
112
+ this.selectItem.V.splice(this.selectItem.V.indexOf(data.V), 1)
113
+ } else {
114
+ this.selectItem.K.push(data.K)
115
+ this.selectItem.V.push(data.V)
116
+ }
117
+ }
118
+ }
119
+ }
120
+ }
121
+ </script>
122
+ <style scoped>
123
+ @import "../styles/index.less";
124
+ @import "./styles/css/index.css";
125
+ </style>