gxd-uni-library-editx 1.0.0

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 (215) hide show
  1. package/.editorconfig +14 -0
  2. package/README.md +447 -0
  3. package/index.js +3 -0
  4. package/package.json +104 -0
  5. package/postcss.config.js +22 -0
  6. package/settings.js.tpl +68 -0
  7. package/src/XdAppClass.1.0.js +257 -0
  8. package/src/XdAppClass.js +150 -0
  9. package/src/components/XdAddress/XdAddress.vue +579 -0
  10. package/src/components/XdAddressSelect/XdAddressSelect.vue +243 -0
  11. package/src/components/XdBaiduMap/XdBaiduMap.vue +204 -0
  12. package/src/components/XdBaiduOverlay/XdBaiduOverlay.vue +345 -0
  13. package/src/components/XdBaiduSearch/XdBaiduSearch.vue +354 -0
  14. package/src/components/XdBar/XdBar.vue +339 -0
  15. package/src/components/XdButton/XdButton.vue +288 -0
  16. package/src/components/XdCartList/XdCartList.vue +791 -0
  17. package/src/components/XdCartNoStoreList/XdCartNoStoreList.vue +747 -0
  18. package/src/components/XdCity/XdCity.vue +620 -0
  19. package/src/components/XdCity/city.js +93 -0
  20. package/src/components/XdCity/testData.js +124 -0
  21. package/src/components/XdCityLocation/XdCityLocation.vue +314 -0
  22. package/src/components/XdCityLocation/jweixin.js +72 -0
  23. package/src/components/XdCityShow/XdCityShow.vue +354 -0
  24. package/src/components/XdClipImage/XdClipImage.vue +879 -0
  25. package/src/components/XdCoins/XdCoins.vue +66 -0
  26. package/src/components/XdConfirm/XdConfirm.vue +240 -0
  27. package/src/components/XdContentXss/XdContentXss.vue +71 -0
  28. package/src/components/XdDailog/XdDailog.vue +258 -0
  29. package/src/components/XdDate/XdDataItemOne.vue +236 -0
  30. package/src/components/XdDate/XdDate.vue +1081 -0
  31. package/src/components/XdDate/XdDateItem.vue +316 -0
  32. package/src/components/XdDate/XdDateTime.vue +929 -0
  33. package/src/components/XdDate/i18n/en.json +19 -0
  34. package/src/components/XdDate/i18n/index.js +8 -0
  35. package/src/components/XdDate/i18n/zh-Hans.json +19 -0
  36. package/src/components/XdDate/i18n/zh-Hant.json +19 -0
  37. package/src/components/XdDate/keypress.js +45 -0
  38. package/src/components/XdDate/util.js +418 -0
  39. package/src/components/XdDownDrawer/XdDownDrawer.vue +176 -0
  40. package/src/components/XdEditPwd/XdEditPwd.vue +305 -0
  41. package/src/components/XdEnterOrderList/XdEnterOrderList.vue +413 -0
  42. package/src/components/XdExpressTimeLine/XdExpressTimeLine.vue +280 -0
  43. package/src/components/XdFilter/XdFilter.vue +541 -0
  44. package/src/components/XdFontIcon/XdFontIcon.vue +165 -0
  45. package/src/components/XdFontIcon/css/icon.less +498 -0
  46. package/src/components/XdFooterBar/XdFooterBar.vue +291 -0
  47. package/src/components/XdFooterTabbar/XdFooterTabbar.vue +284 -0
  48. package/src/components/XdForm/XdForm.vue +481 -0
  49. package/src/components/XdForm/validate.js +486 -0
  50. package/src/components/XdFormCheckbox/XdFormCheckbox.vue +858 -0
  51. package/src/components/XdFormDate.vue +187 -0
  52. package/src/components/XdFormInput/XdFormInput.vue +535 -0
  53. package/src/components/XdFormInput/common.js +56 -0
  54. package/src/components/XdFormItem/XdFormItem.vue +583 -0
  55. package/src/components/XdFormSelect/XdFormSelect.vue +119 -0
  56. package/src/components/XdImage/XdImage.vue +113 -0
  57. package/src/components/XdItemCardUser/XdItemCardUser.vue +232 -0
  58. package/src/components/XdItemFilmImage/XdItemFilmImage.vue +146 -0
  59. package/src/components/XdItemFilmText/XdItemFilmText.vue +83 -0
  60. package/src/components/XdItemPhysical/XdItemPhysical.vue +410 -0
  61. package/src/components/XdItemPhysicalPack/XdItemPhysicalPack.vue +240 -0
  62. package/src/components/XdItemStore/XdItemStore.vue +236 -0
  63. package/src/components/XdItemUserInfo/XdItemUserInfo.vue +175 -0
  64. package/src/components/XdJson/XdJson.vue +398 -0
  65. package/src/components/XdKeyValue/XdKeyValue.vue +150 -0
  66. package/src/components/XdLabelNew/XdLabelNew.vue +193 -0
  67. package/src/components/XdLayout/XdLayout.vue +634 -0
  68. package/src/components/XdLoading/XdLoading.vue +165 -0
  69. package/src/components/XdMore/XdMore.vue +66 -0
  70. package/src/components/XdMpHtml/XdMpHtml.vue +458 -0
  71. package/src/components/XdMpHtml/node/node.vue +536 -0
  72. package/src/components/XdMpHtml/parser.js +1260 -0
  73. package/src/components/XdMpHtml/static/js/handler.js +1 -0
  74. package/src/components/XdMpHtml/static/js/uni.webview.min.js +1 -0
  75. package/src/components/XdMpHtml/static/local.html +1 -0
  76. package/src/components/XdMy/XdMy.vue +294 -0
  77. package/src/components/XdMySuccess/XdMySuccess.vue +603 -0
  78. package/src/components/XdNavTab/XdNavTab.vue +147 -0
  79. package/src/components/XdNoData/XdNoData.vue +87 -0
  80. package/src/components/XdNoticeBar/XdNoticeBar.vue +501 -0
  81. package/src/components/XdNumber/XdNumber.vue +210 -0
  82. package/src/components/XdNumberUni/XdNumberUni.vue +270 -0
  83. package/src/components/XdNumberUni/readme.md +42 -0
  84. package/src/components/XdOnlineConfirm/XdOnlineConfirm.vue +385 -0
  85. package/src/components/XdOnlineDetail/XdOnlineDetail.vue +332 -0
  86. package/src/components/XdOnlinePay/XdOnlinePay.vue +349 -0
  87. package/src/components/XdOnlineSchedule/XdOnlineSchedule.vue +453 -0
  88. package/src/components/XdOnlineSeat/XdOnlineSeat.vue +796 -0
  89. package/src/components/XdOnlineSeatMove/XdOnlineSeatMove.vue +1012 -0
  90. package/src/components/XdPayCombo/XdPayCombo.vue +118 -0
  91. package/src/components/XdPreviewImage/XdPreviewImage.vue +372 -0
  92. package/src/components/XdPwPay/XdPwPay.vue +214 -0
  93. package/src/components/XdRadio/XdRadio.vue +151 -0
  94. package/src/components/XdRangeSlider/XdRangeSlider.vue +355 -0
  95. package/src/components/XdRedName/XdRedName.vue +35 -0
  96. package/src/components/XdSearchBar/XdSearchBar.vue +286 -0
  97. package/src/components/XdSelect/XdSelect.vue +382 -0
  98. package/src/components/XdSelectCity/XdSelectCity.vue +270 -0
  99. package/src/components/XdSelectTime/XdSelectTime.vue +342 -0
  100. package/src/components/XdStar/XdStar.vue +261 -0
  101. package/src/components/XdStoreCashier/XdStoreCashier.vue +526 -0
  102. package/src/components/XdStoreItem/XdStoreItem.vue +400 -0
  103. package/src/components/XdStoreOrderDetail/XdStoreOrderDetail.vue +1571 -0
  104. package/src/components/XdStoreOrderList/XdStoreOrderList.vue +450 -0
  105. package/src/components/XdStoreProductInfo/XdStoreProductInfo.vue +940 -0
  106. package/src/components/XdStoreProductType/XdStoreProductType.vue +307 -0
  107. package/src/components/XdSuccess/XdSuccess.vue +527 -0
  108. package/src/components/XdSwipeSelect/XdSwipeSelect.vue +99 -0
  109. package/src/components/XdSwiper/XdSwiper.vue +124 -0
  110. package/src/components/XdSwitch/XdSwitch.vue +204 -0
  111. package/src/components/XdTab/XdTab.vue +220 -0
  112. package/src/components/XdTabScroll/XdTabScroll.vue +212 -0
  113. package/src/components/XdTag/XdTag.vue +423 -0
  114. package/src/components/XdTimeLine/XdTimeLine.vue +121 -0
  115. package/src/components/XdTips/XdTips.vue +212 -0
  116. package/src/components/XdTipsBlock/XdTipsBlock.vue +141 -0
  117. package/src/components/XdTitleSection/XdTitleSection.vue +152 -0
  118. package/src/components/XdTitleTab/XdTitleTab.vue +227 -0
  119. package/src/components/XdUnit/XdUnit.vue +206 -0
  120. package/src/components/XdUpload/XdUpload.vue +197 -0
  121. package/src/components/XdUploadImage/XdUploadImage.vue +145 -0
  122. package/src/components/Xdlogs/XdLogs.vue +144 -0
  123. package/src/components/autoload.js +211 -0
  124. package/src/components/swipeAction/UniSwipeAction.vue +43 -0
  125. package/src/components/swipeActionItem/UniSwipeActionItem.vue +386 -0
  126. package/src/components/swipeActionItem/bindingx.js +298 -0
  127. package/src/components/swipeActionItem/index.wxs +321 -0
  128. package/src/components/swipeActionItem/isPC.js +18 -0
  129. package/src/components/swipeActionItem/mpalipay.js +210 -0
  130. package/src/components/swipeActionItem/mpother.js +252 -0
  131. package/src/components/swipeActionItem/mpwxs.js +140 -0
  132. package/src/dome/dome/address.vue +415 -0
  133. package/src/dome/dome/auth/login.vue +166 -0
  134. package/src/dome/dome/baidu_show.vue +20 -0
  135. package/src/dome/dome/cake.vue +186 -0
  136. package/src/dome/dome/cart.vue +205 -0
  137. package/src/dome/dome/cart_store.vue +149 -0
  138. package/src/dome/dome/cashier/cashier.vue +73 -0
  139. package/src/dome/dome/cashier/check_cashier.vue +469 -0
  140. package/src/dome/dome/cashier/success.vue +127 -0
  141. package/src/dome/dome/city.vue +148 -0
  142. package/src/dome/dome/cityData.js +9 -0
  143. package/src/dome/dome/clip.vue +82 -0
  144. package/src/dome/dome/date/date.vue +273 -0
  145. package/src/dome/dome/date/selected.js +315 -0
  146. package/src/dome/dome/dcom/app1.vue +13 -0
  147. package/src/dome/dome/dcom/app2.vue +13 -0
  148. package/src/dome/dome/dcom/app3.vue +13 -0
  149. package/src/dome/dome/dcom/app4.vue +13 -0
  150. package/src/dome/dome/dcom/app5.vue +13 -0
  151. package/src/dome/dome/dcom/index.vue +1 -0
  152. package/src/dome/dome/debug/debug.vue +95 -0
  153. package/src/dome/dome/docache/docache.vue +88 -0
  154. package/src/dome/dome/express.vue +269 -0
  155. package/src/dome/dome/form.vue +312 -0
  156. package/src/dome/dome/icon.js +125 -0
  157. package/src/dome/dome/icon.vue +93 -0
  158. package/src/dome/dome/index.vue +725 -0
  159. package/src/dome/dome/item.vue +236 -0
  160. package/src/dome/dome/json/json.vue +88 -0
  161. package/src/dome/dome/layout.vue +105 -0
  162. package/src/dome/dome/line.vue +113 -0
  163. package/src/dome/dome/map/search.vue +70 -0
  164. package/src/dome/dome/my.vue +171 -0
  165. package/src/dome/dome/notice.vue +93 -0
  166. package/src/dome/dome/online/confirm.vue +92 -0
  167. package/src/dome/dome/online/detail.vue +80 -0
  168. package/src/dome/dome/online/pay.vue +78 -0
  169. package/src/dome/dome/online/schedule.vue +73 -0
  170. package/src/dome/dome/online/seat.vue +98 -0
  171. package/src/dome/dome/order/detail.vue +166 -0
  172. package/src/dome/dome/order/enter_order.vue +294 -0
  173. package/src/dome/dome/order/list.vue +219 -0
  174. package/src/dome/dome/order/order.js +18 -0
  175. package/src/dome/dome/order/success.vue +68 -0
  176. package/src/dome/dome/product.vue +179 -0
  177. package/src/dome/dome/store_cashier.vue +67 -0
  178. package/src/dome/dome/swiper.vue +32 -0
  179. package/src/dome/dome/webview.vue +61 -0
  180. package/src/install.js +183 -0
  181. package/src/main/address/address.vue +251 -0
  182. package/src/main/cart/cart.vue +149 -0
  183. package/src/main/cashier/cashier.vue +72 -0
  184. package/src/main/cashier/check_cashier.vue +483 -0
  185. package/src/main/city/city.vue +149 -0
  186. package/src/main/date/date.vue +260 -0
  187. package/src/main/order/order.js +19 -0
  188. package/src/main/order/order.vue +222 -0
  189. package/src/main/product/detail.vue +121 -0
  190. package/src/main/product/type.vue +108 -0
  191. package/src/main/search/search.vue +501 -0
  192. package/src/pages.json +337 -0
  193. package/src/plugins/CreatedComponentsPlugin.js +19 -0
  194. package/src/plugins/JsonRename.js +72 -0
  195. package/src/plugins/SetAppParams.js +171 -0
  196. package/src/project.js +18 -0
  197. package/src/utils/Cookie.js +68 -0
  198. package/src/utils/Runtime.js +105 -0
  199. package/src/utils/Storage.js +104 -0
  200. package/src/utils/XdNetwork.js +133 -0
  201. package/src/utils/helper.js +1321 -0
  202. package/src/utils/nourl.js +95 -0
  203. package/src/utils/project.js +17 -0
  204. package/src/utils/xd.auth.js +61 -0
  205. package/src/utils/xd.base.js +474 -0
  206. package/src/utils/xd.common.js +240 -0
  207. package/src/utils/xd.event.js +99 -0
  208. package/src/utils/xd.frame.js +96 -0
  209. package/src/utils/xd.path.js +96 -0
  210. package/src/utils/xdAppLog.js +170 -0
  211. package/src/utils/xdWxLog.js +302 -0
  212. package/src/utils/xdh5log.js +307 -0
  213. package/src/websetting.js +64 -0
  214. package/tsconfig.json +9 -0
  215. package/xd.less +180 -0
@@ -0,0 +1,858 @@
1
+ <template>
2
+ <view class="uni-data-checklist" :style="{'margin-top':isTop+'px'}" v-if="styles !== null">
3
+ <checkbox-group
4
+ v-if="multiple"
5
+ class="checklist-group"
6
+ :class="{'is-list':mode==='list' || wrap}"
7
+ @change="chagne"
8
+ >
9
+ <label
10
+ class="checklist-box"
11
+ :class="['is--'+mode,item.selected?'is-checked':'',(disabled || !!item.disabled)?'is-disable':'',index!==0&&mode==='list'?'is-list-border':'']"
12
+ :style="item.styleBackgroud" v-for="(item,index) in dataList"
13
+ :key="index"
14
+ >
15
+ <checkbox
16
+ class="hidden"
17
+ hidden
18
+ :disabled="disabled || !!item.disabled"
19
+ :value="item[map.value]+''"
20
+ :checked="item.selected"
21
+ ></checkbox>
22
+ <view
23
+ v-if="(mode !=='tag' && mode !== 'list') || ( mode === 'list' && icon === 'left')"
24
+ class="checkbox__inner"
25
+ :style="item.styleIcon"
26
+ >
27
+ <view class="checkbox__inner-icon"></view>
28
+ </view>
29
+ <view class="checklist-content" :class="{'list-content':mode === 'list' && icon ==='left'}">
30
+ <text class="checklist-text" :style="item.styleIconText">{{item[map.text]}}</text>
31
+ <view
32
+ v-if="mode === 'list' && icon === 'right'"
33
+ class="checkobx__list"
34
+ :style="item.styleBackgroud"
35
+ ></view>
36
+ </view>
37
+ </label>
38
+ </checkbox-group>
39
+ <radio-group
40
+ v-else
41
+ class="checklist-group"
42
+ :class="{'is-list':mode==='list','is-wrap':wrap}"
43
+ @change="chagne"
44
+ >
45
+ <label
46
+ class="checklist-box"
47
+ :class="['is--'+mode,item.selected?'is-checked':'',(disabled || !!item.disabled)?'is-disable':'',index!==0&&mode==='list'?'is-list-border':'']"
48
+ :style="item.styleBackgroud" v-for="(item,index) in dataList"
49
+ :key="index"
50
+ >
51
+ <radio
52
+ class="hidden"
53
+ hidden
54
+ :disabled="disabled || item.disabled" :value="item[map.value]+''"
55
+ :checked="item.selected"
56
+ ></radio>
57
+ <view
58
+ v-if="(mode !=='tag' && mode !== 'list') || ( mode === 'list' && icon === 'left')"
59
+ class="radio__inner"
60
+ :style="item.styleBackgroud"
61
+ >
62
+ <view class="radio__inner-icon" :style="item.styleIcon"></view>
63
+ </view>
64
+ <view class="checklist-content" :class="{'list-content':mode === 'list' && icon ==='left'}">
65
+ <text class="checklist-text" :style="item.styleIconText">{{item[map.text]}}</text>
66
+ <view v-if="mode === 'list' && icon === 'right'" :style="item.styleRightIcon" class="checkobx__list"></view>
67
+ </view>
68
+ </label>
69
+ </radio-group>
70
+ </view>
71
+ </template>
72
+
73
+ <script>
74
+ /**
75
+ * DataChecklist 数据选择器
76
+ * @description 通过数据渲染 checkbox 和 radio
77
+ * @tutorial https://ext.dcloud.net.cn/plugin?id=xxx
78
+ * @property {String} mode = [default| list | button | tag] 显示模式
79
+ * @value default 默认横排模式
80
+ * @value list 列表模式
81
+ * @value button 按钮模式
82
+ * @value tag 标签模式
83
+ * @property {Boolean} multiple = [true|false] 是否多选
84
+ * @property {Array|String|Number} value 默认值
85
+ * @property {Array} localdata 本地数据 ,格式 [{text:'',value:''}]
86
+ * @property {Number|String} min 最小选择个数 ,multiple为true时生效
87
+ * @property {Number|String} max 最大选择个数 ,multiple为true时生效
88
+ * @property {Boolean} wrap 是否换行显示
89
+ * @property {String} icon = [left|right] list 列表模式下icon显示位置
90
+ * @property {Boolean} selectedColor 选中颜色
91
+ * @property {Boolean} emptyText 没有数据时显示的文字 ,本地数据无效
92
+ * @property {Boolean} selectedTextColor 选中文本颜色,如不填写则自动显示
93
+ * @property {Object} map 字段映射, 默认 map={text:'text',value:'value'}
94
+ * @value left 左侧显示
95
+ * @value right 右侧显示
96
+ * @event {Function} change 选中发生变化触发
97
+ */
98
+
99
+ import {
100
+ getParentsStyle,
101
+ } from '@/utils/xd.base';
102
+
103
+ export default {
104
+ name: 'XdFormCheckbox',
105
+ mixins: [uniCloud.mixinDatacom || {}],
106
+ emits:['input','update:modelValue','change'],
107
+ props: {
108
+ mode: {
109
+ type: String,
110
+ default: 'default'
111
+ },
112
+
113
+ multiple: {
114
+ type: Boolean,
115
+ default: false
116
+ },
117
+ value: {
118
+ type: [Array, String, Number],
119
+ default () {
120
+ return ''
121
+ }
122
+ },
123
+ // TODO vue3
124
+ modelValue: {
125
+ type: [Array, String, Number],
126
+ default() {
127
+ return '';
128
+ }
129
+ },
130
+ localdata: {
131
+ type: Array,
132
+ default () {
133
+ return []
134
+ }
135
+ },
136
+ min: {
137
+ type: [Number, String],
138
+ default: ''
139
+ },
140
+ max: {
141
+ type: [Number, String],
142
+ default: ''
143
+ },
144
+ wrap: {
145
+ type: Boolean,
146
+ default: false
147
+ },
148
+ icon: {
149
+ type: String,
150
+ default: 'left'
151
+ },
152
+ selectedColor: {
153
+ type: String,
154
+ default: ''
155
+ },
156
+ selectedTextColor: {
157
+ type: String,
158
+ default: ''
159
+ },
160
+ emptyText:{
161
+ type: String,
162
+ default: '暂无数据'
163
+ },
164
+ disabled:{
165
+ type: Boolean,
166
+ default: false
167
+ },
168
+ map:{
169
+ type: Object,
170
+ default(){
171
+ return {
172
+ text:'text',
173
+ value:'value'
174
+ }
175
+ }
176
+ }
177
+ },
178
+ watch: {
179
+ localdata: {
180
+ handler(newVal) {
181
+ this.range = newVal
182
+ this.dataList = this.getDataList(this.getSelectedValue(newVal))
183
+ },
184
+ deep: true
185
+ },
186
+ mixinDatacomResData(newVal) {
187
+ this.range = newVal
188
+ this.dataList = this.getDataList(this.getSelectedValue(newVal))
189
+ },
190
+ value(newVal) {
191
+ this.dataList = this.getDataList(newVal)
192
+ // fix by mehaotian is_reset 在 uni-forms 中定义
193
+ if(!this.is_reset){
194
+ this.is_reset = false
195
+ this.formItem && this.formItem.setValue(newVal)
196
+ }
197
+ },
198
+ modelValue(newVal) {
199
+ this.dataList = this.getDataList(newVal);
200
+ if(!this.is_reset){
201
+ this.is_reset = false
202
+ this.formItem && this.formItem.setValue(newVal)
203
+ }
204
+ }
205
+ },
206
+ data() {
207
+ return {
208
+ dataList: [],
209
+ range: [],
210
+ contentText: {
211
+ contentdown: '查看更多',
212
+ contentrefresh: '加载中',
213
+ contentnomore: '没有更多'
214
+ },
215
+ isLocal:true,
216
+ styles: null,
217
+ isTop:0,
218
+
219
+ styleMainColor: '', //选中颜色
220
+ };
221
+ },
222
+ computed:{
223
+ dataValue(){
224
+ if(this.value === '')return this.modelValue
225
+ if(this.modelValue === '') return this.value
226
+ return this.value
227
+ }
228
+ },
229
+ async created() {
230
+ this.form = this.getForm('XdForm')
231
+ this.formItem = this.getForm('XdFormItem')
232
+ this.styleMainColor = await getParentsStyle(this.$parent, '$mainColor');
233
+
234
+ if (this.formItem) {
235
+ this.isTop = 6
236
+ if (this.formItem.name) {
237
+ // 如果存在name添加默认值,否则formData 中不存在这个字段不校验
238
+ if(!this.is_reset){
239
+ this.is_reset = false
240
+ this.formItem.setValue(this.dataValue)
241
+ }
242
+ this.rename = this.formItem.name
243
+ this.form.inputChildrens.push(this)
244
+ }
245
+ }
246
+
247
+ if (this.localdata && this.localdata.length !== 0) {
248
+ this.isLocal = true
249
+ this.range = this.localdata
250
+ this.dataList = this.getDataList(this.getSelectedValue(this.range))
251
+ }
252
+ else {
253
+ if (this.collection) {
254
+ this.isLocal = false
255
+ this.loadData()
256
+ }
257
+ }
258
+
259
+ this.styles = {
260
+ selectedColor: this.styleMainColor,
261
+ selectedTextColor: '#666',
262
+ }
263
+ },
264
+ methods: {
265
+ loadData() {
266
+ this.mixinDatacomGet().then(res=>{
267
+ this.mixinDatacomResData = res.result.data
268
+ if(this.mixinDatacomResData.length === 0){
269
+ this.isLocal = false
270
+ this.mixinDatacomErrorMessage = this.emptyText
271
+ }else{
272
+ this.isLocal = true
273
+ }
274
+ }).catch(err=>{
275
+ this.mixinDatacomErrorMessage = err.message
276
+ })
277
+ },
278
+ /**
279
+ * 获取父元素实例
280
+ */
281
+ getForm(name = 'XdForm') {
282
+ let parent = this.$parent;
283
+ let parentName = parent.$options.name;
284
+ while (parentName !== name) {
285
+ parent = parent.$parent;
286
+ if (!parent) return false
287
+ parentName = parent.$options.name;
288
+ }
289
+ return parent;
290
+ },
291
+ chagne(e) {
292
+ const values = e.detail.value
293
+
294
+ let detail = {
295
+ value: [],
296
+ data: []
297
+ }
298
+
299
+ if (this.multiple) {
300
+ this.range.forEach(item => {
301
+
302
+ if (values.includes(item[this.map.value] + '')) {
303
+ detail.value.push(item[this.map.value])
304
+ detail.data.push(item)
305
+ }
306
+ })
307
+ } else {
308
+ const range = this.range.find(item => (item[this.map.value] + '') === values)
309
+ if (range) {
310
+ detail = {
311
+ value: range[this.map.value],
312
+ data: range
313
+ }
314
+ }
315
+ }
316
+ this.formItem && this.formItem.setValue(detail.value)
317
+ // TODO 兼容 vue2
318
+ this.$emit('input', detail.value);
319
+ // // TOTO 兼容 vue3
320
+ this.$emit('update:modelValue', detail.value);
321
+ this.$emit('change', {
322
+ detail
323
+ })
324
+ if (this.multiple) {
325
+ // 如果 v-model 没有绑定 ,则走内部逻辑
326
+ // if (this.value.length === 0) {
327
+ this.dataList = this.getDataList(detail.value, true)
328
+ // }
329
+ } else {
330
+ this.dataList = this.getDataList(detail.value)
331
+ }
332
+ },
333
+
334
+ /**
335
+ * 获取渲染的新数组
336
+ * @param {Object} value 选中内容
337
+ */
338
+ getDataList(value) {
339
+ // 解除引用关系,破坏原引用关系,避免污染源数据
340
+ let dataList = JSON.parse(JSON.stringify(this.range))
341
+ let list = []
342
+ if (this.multiple) {
343
+ if (!Array.isArray(value)) {
344
+ value = []
345
+ }
346
+ }
347
+ dataList.forEach((item, index) => {
348
+ item.disabled = item.disable || item.disabled || false
349
+ if (this.multiple) {
350
+ if (value.length > 0) {
351
+ let have = value.find(val => val === item[this.map.value])
352
+ item.selected = have !== undefined
353
+ } else {
354
+ item.selected = false
355
+ }
356
+ } else {
357
+ item.selected = value === item[this.map.value]
358
+ }
359
+
360
+ list.push(item)
361
+ })
362
+ return this.setRange(list)
363
+ },
364
+ /**
365
+ * 处理最大最小值
366
+ * @param {Object} list
367
+ */
368
+ setRange(list) {
369
+ let selectList = list.filter(item => item.selected)
370
+ let min = Number(this.min) || 0
371
+ let max = Number(this.max) || ''
372
+ list.forEach((item, index) => {
373
+ if (this.multiple) {
374
+ if (selectList.length <= min) {
375
+ let have = selectList.find(val => val[this.map.value] === item[this.map.value])
376
+ if (have !== undefined) {
377
+ item.disabled = true
378
+ }
379
+ }
380
+
381
+ if (selectList.length >= max && max !== '') {
382
+ let have = selectList.find(val => val[this.map.value] === item[this.map.value])
383
+ if (have === undefined) {
384
+ item.disabled = true
385
+ }
386
+ }
387
+ }
388
+ this.setStyles(item, index)
389
+ list[index] = item
390
+ })
391
+ return list
392
+ },
393
+ /**
394
+ * 设置 class
395
+ * @param {Object} item
396
+ * @param {Object} index
397
+ */
398
+ setStyles(item, index) {
399
+ // 设置自定义样式
400
+ item.styleBackgroud = this.setStyleBackgroud(item)
401
+ item.styleIcon = this.setStyleIcon(item)
402
+ item.styleIconText = this.setStyleIconText(item)
403
+ item.styleRightIcon = this.setStyleRightIcon(item);
404
+
405
+ },
406
+
407
+ /**
408
+ * 获取选中值
409
+ * @param {Object} range
410
+ */
411
+ getSelectedValue(range) {
412
+ if (!this.multiple) return this.dataValue
413
+ let selectedArr = []
414
+ range.forEach((item) => {
415
+ if (item.selected) {
416
+ selectedArr.push(item[this.map.value])
417
+ }
418
+ })
419
+ return this.dataValue.length > 0 ? this.dataValue : selectedArr
420
+ },
421
+
422
+ /**
423
+ * 设置背景样式
424
+ */
425
+ setStyleBackgroud(item) {
426
+ let styles = {}
427
+ let selectedColor = this.selectedColor?this.selectedColor: this.styleMainColor
428
+ if (this.mode !== 'list') {
429
+ styles['border-color'] = item.selected?selectedColor:'#DCDFE6'
430
+ }
431
+ if (this.mode === 'tag') {
432
+ styles['background-color'] = item.selected? selectedColor:'#f5f5f5'
433
+ }
434
+ let classles = ''
435
+ for (let i in styles) {
436
+ classles += `${i}:${styles[i]};`
437
+ }
438
+ return classles
439
+ },
440
+ setStyleIcon(item) {
441
+ let styles = {}
442
+ let classles = ''
443
+ let selectedColor = this.selectedColor?this.selectedColor: this.styleMainColor
444
+ styles['background-color'] = item.selected?selectedColor:'#fff'
445
+ styles['border-color'] = item.selected?selectedColor:'#DCDFE6'
446
+
447
+ if(!item.selected && item.disabled){
448
+ styles['background-color'] = '#F2F6FC'
449
+ styles['border-color'] = item.selected?selectedColor:'#DCDFE6'
450
+ }
451
+
452
+ for (let i in styles) {
453
+ classles += `${i}:${styles[i]};`
454
+ }
455
+ return classles
456
+ },
457
+ setStyleIconText(item) {
458
+ let styles = {}
459
+ let classles = ''
460
+ let selectedColor = this.selectedColor?this.selectedColor: this.styleMainColor
461
+ if (this.mode === 'tag') {
462
+ styles.color = item.selected?(this.selectedTextColor?this.selectedTextColor:'#fff'):'#666'
463
+ } else {
464
+ styles.color = item.selected?(this.selectedTextColor?this.selectedTextColor:selectedColor):'#666'
465
+ }
466
+ if(!item.selected && item.disabled){
467
+ styles.color = '#999'
468
+ }
469
+
470
+ for (let i in styles) {
471
+ classles += `${i}:${styles[i]};`
472
+ }
473
+ return classles
474
+ },
475
+ setStyleRightIcon(item) {
476
+ let styles = {}
477
+ let classles = ''
478
+ if (this.mode === 'list') {
479
+ styles['border-color'] = item.selected?this.styles.selectedColor:'#DCDFE6'
480
+ }
481
+ for (let i in styles) {
482
+ classles += `${i}:${styles[i]};`
483
+ }
484
+
485
+ return classles
486
+ }
487
+ }
488
+ }
489
+ </script>
490
+
491
+ <style lang="scss">
492
+ $checked-color: #2979ff;
493
+ $border-color: #DCDFE6;
494
+ $disable:0.4;
495
+
496
+ @mixin flex {
497
+ /* #ifndef APP-NVUE */
498
+ display: flex;
499
+ /* #endif */
500
+ }
501
+
502
+ .uni-data-loading {
503
+ @include flex;
504
+ flex-direction: row;
505
+ justify-content: center;
506
+ align-items: center;
507
+ height: 36px;
508
+ padding-left: 10px;
509
+ color: #999;
510
+ }
511
+
512
+ .uni-data-checklist {
513
+ position: relative;
514
+ z-index: 0;
515
+ flex: 1;
516
+ // 多选样式
517
+ .checklist-group {
518
+ @include flex;
519
+ flex-direction: row;
520
+ flex-wrap: wrap;
521
+
522
+ &.is-list {
523
+ flex-direction: column;
524
+ }
525
+
526
+ .checklist-box {
527
+ @include flex;
528
+ flex-direction: row;
529
+ align-items: center;
530
+ position: relative;
531
+ margin: 5px 0;
532
+ margin-right: 25px;
533
+
534
+ .hidden {
535
+ position: absolute;
536
+ opacity: 0;
537
+ }
538
+
539
+ // 文字样式
540
+ .checklist-content {
541
+ @include flex;
542
+ flex: 1;
543
+ flex-direction: row;
544
+ align-items: center;
545
+ justify-content: space-between;
546
+ .checklist-text {
547
+ font-size: 14px;
548
+ color: #666;
549
+ margin-left: 5px;
550
+ line-height: 14px;
551
+ }
552
+
553
+ .checkobx__list {
554
+ border-right-width: 1px;
555
+ border-right-color: #007aff;
556
+ border-right-style: solid;
557
+ border-bottom-width:1px;
558
+ border-bottom-color: #007aff;
559
+ border-bottom-style: solid;
560
+ height: 12px;
561
+ width: 6px;
562
+ left: -5px;
563
+ transform-origin: center;
564
+ transform: rotate(45deg);
565
+ opacity: 0;
566
+ }
567
+ }
568
+
569
+ // 多选样式
570
+ .checkbox__inner {
571
+ /* #ifndef APP-NVUE */
572
+ flex-shrink: 0;
573
+ box-sizing: border-box;
574
+ /* #endif */
575
+ position: relative;
576
+ width: 16px;
577
+ height: 16px;
578
+ border: 1px solid $border-color;
579
+ border-radius: 4px;
580
+ background-color: #fff;
581
+ z-index: 1;
582
+ .checkbox__inner-icon {
583
+ position: absolute;
584
+ /* #ifdef APP-NVUE */
585
+ top: 2px;
586
+ /* #endif */
587
+ /* #ifndef APP-NVUE */
588
+ top: 1px;
589
+ /* #endif */
590
+ left: 5px;
591
+ height: 8px;
592
+ width: 4px;
593
+ border-right-width: 1px;
594
+ border-right-color: #fff;
595
+ border-right-style: solid;
596
+ border-bottom-width:1px ;
597
+ border-bottom-color: #fff;
598
+ border-bottom-style: solid;
599
+ opacity: 0;
600
+ transform-origin: center;
601
+ transform: rotate(40deg);
602
+ }
603
+ }
604
+
605
+ // 单选样式
606
+ .radio__inner {
607
+ @include flex;
608
+ /* #ifndef APP-NVUE */
609
+ flex-shrink: 0;
610
+ box-sizing: border-box;
611
+ /* #endif */
612
+ justify-content: center;
613
+ align-items: center;
614
+ position: relative;
615
+ width: 16px;
616
+ height: 16px;
617
+ border: 1px solid $border-color;
618
+ border-radius: 16px;
619
+ background-color: #fff;
620
+ z-index: 1;
621
+
622
+ .radio__inner-icon {
623
+ width: 8px;
624
+ height: 8px;
625
+ border-radius: 10px;
626
+ opacity: 0;
627
+ }
628
+ }
629
+
630
+ // 默认样式
631
+ &.is--default {
632
+
633
+ // 禁用
634
+ &.is-disable {
635
+ /* #ifdef H5 */
636
+ cursor: not-allowed;
637
+ /* #endif */
638
+ .checkbox__inner {
639
+ background-color: #F2F6FC;
640
+ border-color: $border-color;
641
+ /* #ifdef H5 */
642
+ cursor: not-allowed;
643
+ /* #endif */
644
+ }
645
+
646
+ .radio__inner {
647
+ background-color: #F2F6FC;
648
+ border-color: $border-color;
649
+ }
650
+ .checklist-text {
651
+ color: #999;
652
+ }
653
+ }
654
+
655
+ // 选中
656
+ &.is-checked {
657
+ .checkbox__inner {
658
+ border-color: $checked-color;
659
+ background-color: $checked-color;
660
+
661
+ .checkbox__inner-icon {
662
+ opacity: 1;
663
+ transform: rotate(45deg);
664
+ }
665
+ }
666
+ .radio__inner {
667
+ border-color: $checked-color;
668
+ .radio__inner-icon {
669
+ opacity: 1;
670
+ background-color: $checked-color;
671
+ }
672
+ }
673
+ .checklist-text {
674
+ color: $checked-color;
675
+ }
676
+ // 选中禁用
677
+ &.is-disable {
678
+ .checkbox__inner {
679
+ opacity: $disable;
680
+ }
681
+
682
+ .checklist-text {
683
+ opacity: $disable;
684
+ }
685
+ .radio__inner {
686
+ opacity: $disable;
687
+ }
688
+ }
689
+ }
690
+ }
691
+
692
+ // 按钮样式
693
+ &.is--button {
694
+ margin-right: 10px;
695
+ padding: 5px 10px;
696
+ border: 1px $border-color solid;
697
+ border-radius: 3px;
698
+ transition: border-color 0.2s;
699
+
700
+ // 禁用
701
+ &.is-disable {
702
+ /* #ifdef H5 */
703
+ cursor: not-allowed;
704
+ /* #endif */
705
+ border: 1px #eee solid;
706
+ opacity: $disable;
707
+ .checkbox__inner {
708
+ background-color: #F2F6FC;
709
+ border-color: $border-color;
710
+ /* #ifdef H5 */
711
+ cursor: not-allowed;
712
+ /* #endif */
713
+ }
714
+ .radio__inner {
715
+ background-color: #F2F6FC;
716
+ border-color: $border-color;
717
+ /* #ifdef H5 */
718
+ cursor: not-allowed;
719
+ /* #endif */
720
+ }
721
+ .checklist-text {
722
+ color: #999;
723
+ }
724
+ }
725
+
726
+ &.is-checked {
727
+ border-color: $checked-color;
728
+ .checkbox__inner {
729
+ border-color: $checked-color;
730
+ background-color: $checked-color;
731
+ .checkbox__inner-icon {
732
+ opacity: 1;
733
+ transform: rotate(45deg);
734
+ }
735
+ }
736
+
737
+ .radio__inner {
738
+ border-color: $checked-color;
739
+
740
+ .radio__inner-icon {
741
+ opacity: 1;
742
+ background-color: $checked-color;
743
+ }
744
+ }
745
+
746
+ .checklist-text {
747
+ color: $checked-color;
748
+ }
749
+
750
+ // 选中禁用
751
+ &.is-disable {
752
+ opacity: $disable;
753
+ }
754
+ }
755
+ }
756
+
757
+ // 标签样式
758
+ &.is--tag {
759
+ margin-right: 10px;
760
+ padding: 5px 10px;
761
+ border: 1px $border-color solid;
762
+ border-radius: 3px;
763
+ background-color: #f5f5f5;
764
+
765
+ .checklist-text {
766
+ margin: 0;
767
+ color: #666;
768
+ }
769
+
770
+ // 禁用
771
+ &.is-disable {
772
+ /* #ifdef H5 */
773
+ cursor: not-allowed;
774
+ /* #endif */
775
+ opacity: $disable;
776
+ }
777
+
778
+ &.is-checked {
779
+ background-color: $checked-color;
780
+ border-color: $checked-color;
781
+
782
+ .checklist-text {
783
+ color: #fff;
784
+ }
785
+ }
786
+ }
787
+ // 列表样式
788
+ &.is--list {
789
+ /* #ifndef APP-NVUE */
790
+ display: flex;
791
+ /* #endif */
792
+ padding: 10px 15px;
793
+ padding-left: 0;
794
+ margin: 0;
795
+
796
+ &.is-list-border {
797
+ border-top: 1px #eee solid;
798
+ }
799
+
800
+ // 禁用
801
+ &.is-disable {
802
+ /* #ifdef H5 */
803
+ cursor: not-allowed;
804
+ /* #endif */
805
+ .checkbox__inner {
806
+ background-color: #F2F6FC;
807
+ border-color: $border-color;
808
+ /* #ifdef H5 */
809
+ cursor: not-allowed;
810
+ /* #endif */
811
+ }
812
+ .checklist-text {
813
+ color: #999;
814
+ }
815
+ }
816
+
817
+ &.is-checked {
818
+ .checkbox__inner {
819
+ border-color: $checked-color;
820
+ background-color: $checked-color;
821
+
822
+ .checkbox__inner-icon {
823
+ opacity: 1;
824
+ transform: rotate(45deg);
825
+ }
826
+ }
827
+ .radio__inner {
828
+ .radio__inner-icon {
829
+ opacity: 1;
830
+ }
831
+ }
832
+ .checklist-text {
833
+ color: $checked-color;
834
+ }
835
+
836
+ .checklist-content {
837
+ .checkobx__list {
838
+ opacity: 1;
839
+ border-color: $checked-color;
840
+ }
841
+ }
842
+
843
+ // 选中禁用
844
+ &.is-disable {
845
+ .checkbox__inner {
846
+ opacity: $disable;
847
+ }
848
+
849
+ .checklist-text {
850
+ opacity: $disable;
851
+ }
852
+ }
853
+ }
854
+ }
855
+ }
856
+ }
857
+ }
858
+ </style>