@10yun/cv-mobile-ui 0.4.2 → 0.4.4

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 (168) hide show
  1. package/package.json +1 -1
  2. package/ui-cv/cv-form-item/cv-form-item.vue +1 -1
  3. package/ui-cv/cv-input-password/cv-input-password.vue +2 -2
  4. package/ui-uni/amap-wx/js/util.js +166 -158
  5. package/ui-uni/page-foot/page-foot.vue +38 -0
  6. package/ui-uni/page-head/page-head.vue +16 -0
  7. package/ui-uni/product.vue +52 -52
  8. package/ui-uni/u-charts/u-charts.js +743 -1092
  9. package/ui-uni/u-link/u-link.vue +59 -0
  10. package/ui-uni/uni-badge/uni-badge.vue +250 -0
  11. package/ui-uni/uni-calendar/calendar.js +546 -0
  12. package/ui-uni/uni-calendar/uni-calendar-item.vue +171 -0
  13. package/ui-uni/uni-calendar/uni-calendar.vue +504 -0
  14. package/{ui-cv/cv-calendar → ui-uni/uni-calendar}/util.js +0 -0
  15. package/ui-uni/uni-card/uni-card.vue +420 -0
  16. package/ui-uni/uni-col/uni-col.vue +2968 -0
  17. package/ui-uni/uni-collapse/uni-collapse.vue +146 -0
  18. package/ui-uni/uni-collapse-item/uni-collapse-item.vue +378 -0
  19. package/ui-uni/uni-combox/uni-combox.vue +237 -0
  20. package/ui-uni/uni-countdown/uni-countdown.vue +234 -0
  21. package/ui-uni/uni-data-checkbox/uni-data-checkbox.vue +792 -0
  22. package/{ui-cv/cv-data-indexed-list → ui-uni/uni-data-indexed-list}/clientdb.js +0 -0
  23. package/ui-uni/uni-data-indexed-list/uni-data-indexed-list-item.vue +142 -0
  24. package/ui-uni/uni-data-indexed-list/uni-data-indexed-list.vue +364 -0
  25. package/{ui-cv/cv-data-picker → ui-uni/uni-data-picker}/keypress.js +0 -0
  26. package/ui-uni/uni-data-picker/uni-data-picker.vue +468 -0
  27. package/{ui-cv/cv-data-pickerview/cv-data-picker.js → ui-uni/uni-data-pickerview/uni-data-picker.js} +0 -0
  28. package/ui-uni/uni-data-pickerview/uni-data-pickerview.vue +298 -0
  29. package/{ui-cv/cv-dateformat → ui-uni/uni-dateformat}/date-format.js +0 -0
  30. package/ui-uni/uni-dateformat/uni-dateformat.vue +88 -0
  31. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/calendar-item.vue +0 -0
  32. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/calendar.js +0 -0
  33. package/ui-uni/uni-datetime-picker/calendar.vue +747 -0
  34. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/keypress.js +0 -0
  35. package/ui-uni/uni-datetime-picker/time-picker.vue +899 -0
  36. package/ui-uni/uni-datetime-picker/uni-datetime-picker.vue +874 -0
  37. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/util.js +0 -0
  38. package/ui-uni/uni-drawer/keypress.js +45 -0
  39. package/ui-uni/uni-drawer/uni-drawer.vue +178 -0
  40. package/{ui-cv/cv-easyinput → ui-uni/uni-easyinput}/common.js +0 -0
  41. package/ui-uni/uni-easyinput/uni-easyinput.vue +438 -0
  42. package/ui-uni/uni-fab/uni-fab.vue +443 -0
  43. package/{ui-cv/cv-fab/cv-fab.vue.bak → ui-uni/uni-fab/uni-fab.vue.bak} +2 -2
  44. package/ui-uni/uni-fav/uni-fav.vue +136 -0
  45. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/choose-and-upload-file.js +0 -0
  46. package/ui-uni/uni-file-picker/uni-file-picker.vue +614 -0
  47. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/upload-file.vue +0 -0
  48. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/upload-image.vue +0 -0
  49. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/utils.js +0 -0
  50. package/ui-uni/uni-forms/uni-forms.vue +467 -0
  51. package/ui-uni/uni-forms/validate.js +486 -0
  52. package/ui-uni/uni-forms-item/uni-forms-item.vue +500 -0
  53. package/{ui-cv/cv-goods-nav/cv-goods-nav.vue → ui-uni/uni-goods-nav/uni-goods-nav.vue} +1 -1
  54. package/ui-uni/uni-grid/uni-grid.vue +141 -0
  55. package/ui-uni/uni-grid-item/uni-grid-item.vue +123 -0
  56. package/ui-uni/uni-group/uni-group.vue +123 -0
  57. package/ui-uni/uni-icons/icons.js +132 -0
  58. package/ui-uni/uni-icons/uni-icons.vue +72 -0
  59. package/{ui-cv/cv-icon2 → ui-uni/uni-icons}/uni.ttf +0 -0
  60. package/ui-uni/uni-indexed-list/uni-indexed-list-item.vue +142 -0
  61. package/ui-uni/uni-indexed-list/uni-indexed-list.vue +357 -0
  62. package/ui-uni/uni-link/uni-link.vue +117 -0
  63. package/ui-uni/uni-list/uni-list.vue +107 -0
  64. package/ui-uni/uni-list/uni-refresh.vue +65 -0
  65. package/{ui-cv/cv-list → ui-uni/uni-list}/uni-refresh.wxs +0 -0
  66. package/ui-uni/uni-list-ad/uni-list-ad.vue +106 -0
  67. package/{ui-cv/cv-list-chat/cv-list-chat.scss → ui-uni/uni-list-chat/uni-list-chat.scss} +0 -0
  68. package/{ui-cv/cv-list-chat/cv-list-chat.vue → ui-uni/uni-list-chat/uni-list-chat.vue} +0 -0
  69. package/ui-uni/uni-list-item/uni-list-item.vue +428 -0
  70. package/ui-uni/uni-load-more/uni-load-more.vue +366 -0
  71. package/ui-uni/uni-nav-bar/uni-nav-bar.vue +244 -0
  72. package/{ui-cv/cv-nav-bar/cv-status-bar.vue → ui-uni/uni-nav-bar/uni-status-bar.vue} +0 -0
  73. package/ui-uni/uni-notice-bar/uni-notice-bar.vue +394 -0
  74. package/ui-uni/uni-number-box/uni-number-box.vue +224 -0
  75. package/ui-uni/uni-pagination/uni-pagination.vue +376 -0
  76. package/{ui-cv/cv-popup → ui-uni/uni-popup}/keypress.js +0 -0
  77. package/{ui-cv/cv-popup → ui-uni/uni-popup}/popup.js +0 -0
  78. package/ui-uni/uni-popup/uni-popup.vue +412 -0
  79. package/{ui-cv/cv-popup-dialog → ui-uni/uni-popup-dialog}/keypress.js +0 -0
  80. package/{ui-cv/cv-popup-dialog/cv-popup-dialog.vue → ui-uni/uni-popup-dialog/uni-popup-dialog.vue} +0 -0
  81. package/ui-uni/uni-popup-message/uni-popup-message.vue +143 -0
  82. package/{ui-cv/cv-popup-share/cv-popup-share.vue → ui-uni/uni-popup-share/uni-popup-share.vue} +0 -0
  83. package/ui-uni/uni-rate/uni-rate.vue +357 -0
  84. package/ui-uni/uni-row/uni-row.vue +155 -0
  85. package/ui-uni/uni-search-bar/uni-search-bar.vue +262 -0
  86. package/{ui-cv/cv-section/cv-section.vue → ui-uni/uni-section/uni-section.vue} +0 -0
  87. package/{ui-cv/cv-segmented-control/cv-segmented-control.vue → ui-uni/uni-segmented-control/uni-segmented-control.vue} +0 -0
  88. package/{ui-cv/cv-status-bar/cv-status-bar.vue → ui-uni/uni-status-bar/uni-status-bar.vue} +0 -0
  89. package/ui-uni/uni-steps/uni-steps.vue +250 -0
  90. package/{ui-cv/cv-swipe-action/cv-swipe-action.vue → ui-uni/uni-swipe-action/uni-swipe-action.vue} +0 -0
  91. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/bindingx.js +0 -0
  92. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/index.wxs +0 -0
  93. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/isPC.js +0 -0
  94. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/mpalipay.js +0 -0
  95. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/mpother.js +0 -0
  96. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/mpwxs.js +0 -0
  97. package/{ui-cv/cv-swipe-action-item/cv-swipe-action-item.vue → ui-uni/uni-swipe-action-item/uni-swipe-action-item.vue} +0 -0
  98. package/ui-uni/uni-swiper-dot/uni-swiper-dot.vue +205 -0
  99. package/ui-uni/uni-table/uni-table.vue +455 -0
  100. package/ui-uni/uni-tag/uni-tag.vue +283 -0
  101. package/ui-uni/uni-tbody/uni-tbody.vue +30 -0
  102. package/ui-uni/uni-td/uni-td.vue +88 -0
  103. package/{ui-cv/cv-test/cv-test.vue → ui-uni/uni-test/uni-test.vue} +0 -0
  104. package/{ui-cv/cv-th → ui-uni/uni-th}/filter-dropdown.vue +0 -0
  105. package/ui-uni/uni-th/uni-th.vue +259 -0
  106. package/ui-uni/uni-thead/uni-thead.vue +114 -0
  107. package/ui-uni/uni-title/uni-title.vue +171 -0
  108. package/{ui-cv/cv-tr → ui-uni/uni-tr}/table-checkbox.vue +0 -0
  109. package/ui-uni/uni-tr/uni-tr.vue +156 -0
  110. package/{ui-cv/cv-transition → ui-uni/uni-transition}/createAnimation.js +0 -0
  111. package/ui-uni/uni-transition/uni-transition.vue +287 -0
  112. package/ui-cv/cv-badge/cv-badge.vue +0 -249
  113. package/ui-cv/cv-calendar/calendar.js +0 -963
  114. package/ui-cv/cv-calendar/cv-calendar-item.vue +0 -198
  115. package/ui-cv/cv-calendar/cv-calendar.vue +0 -508
  116. package/ui-cv/cv-card/cv-card.vue +0 -427
  117. package/ui-cv/cv-col/cv-col.vue +0 -2965
  118. package/ui-cv/cv-collapse/cv-collapse.vue +0 -146
  119. package/ui-cv/cv-collapse-item/cv-collapse-item.vue +0 -395
  120. package/ui-cv/cv-combox/cv-combox.vue +0 -250
  121. package/ui-cv/cv-countdown/cv-countdown.vue +0 -245
  122. package/ui-cv/cv-data-checkbox/cv-data-checkbox.vue +0 -841
  123. package/ui-cv/cv-data-indexed-list/cv-data-indexed-list-item.vue +0 -154
  124. package/ui-cv/cv-data-indexed-list/cv-data-indexed-list.vue +0 -376
  125. package/ui-cv/cv-data-picker/cv-data-picker.vue +0 -486
  126. package/ui-cv/cv-data-pickerview/cv-data-pickerview.vue +0 -304
  127. package/ui-cv/cv-dateformat/cv-dateformat.vue +0 -86
  128. package/ui-cv/cv-datetime-picker/calendar.vue +0 -761
  129. package/ui-cv/cv-datetime-picker/cv-datetime-picker.vue +0 -958
  130. package/ui-cv/cv-datetime-picker/time-picker.vue +0 -907
  131. package/ui-cv/cv-drawer/cv-drawer.vue +0 -185
  132. package/ui-cv/cv-drawer/keypress.js +0 -45
  133. package/ui-cv/cv-easyinput/cv-easyinput.vue +0 -514
  134. package/ui-cv/cv-fab/cv-fab.vue +0 -465
  135. package/ui-cv/cv-fav/cv-fav.vue +0 -150
  136. package/ui-cv/cv-file-picker/cv-file-picker.vue +0 -619
  137. package/ui-cv/cv-form-base/cv-form-base.vue +0 -470
  138. package/ui-cv/cv-form-base/validate.js +0 -477
  139. package/ui-cv/cv-grid-group/cv-grid-group.vue +0 -148
  140. package/ui-cv/cv-grid-item/cv-grid-item.vue +0 -132
  141. package/ui-cv/cv-icon2/cv-icon2.vue +0 -78
  142. package/ui-cv/cv-icon2/icons.js +0 -132
  143. package/ui-cv/cv-indexed-list/cv-indexed-list-item.vue +0 -154
  144. package/ui-cv/cv-indexed-list/cv-indexed-list.vue +0 -371
  145. package/ui-cv/cv-link2/cv-link2.vue +0 -130
  146. package/ui-cv/cv-list/cv-list.vue +0 -107
  147. package/ui-cv/cv-list/cv-refresh.vue +0 -65
  148. package/ui-cv/cv-list-ad/cv-list-ad.vue +0 -113
  149. package/ui-cv/cv-list-item/cv-list-item.vue +0 -449
  150. package/ui-cv/cv-nav-bar/cv-nav-bar.vue +0 -256
  151. package/ui-cv/cv-notice-bar/cv-notice-bar.vue +0 -453
  152. package/ui-cv/cv-number-box/cv-number-box.vue +0 -223
  153. package/ui-cv/cv-pagination/cv-pagination.vue +0 -397
  154. package/ui-cv/cv-popup/cv-popup.vue +0 -429
  155. package/ui-cv/cv-popup-message/cv-popup-message.vue +0 -143
  156. package/ui-cv/cv-row/cv-row.vue +0 -157
  157. package/ui-cv/cv-search-bar/cv-search-bar.vue +0 -280
  158. package/ui-cv/cv-steps/cv-steps.vue +0 -293
  159. package/ui-cv/cv-swiper-dot/cv-swiper-dot.vue +0 -255
  160. package/ui-cv/cv-table/cv-table.vue +0 -460
  161. package/ui-cv/cv-tag/cv-tag.vue +0 -276
  162. package/ui-cv/cv-tbody/cv-tbody.vue +0 -28
  163. package/ui-cv/cv-td/cv-td.vue +0 -93
  164. package/ui-cv/cv-th/cv-th.vue +0 -270
  165. package/ui-cv/cv-thead/cv-thead.vue +0 -114
  166. package/ui-cv/cv-title/cv-title.vue +0 -168
  167. package/ui-cv/cv-tr/cv-tr.vue +0 -166
  168. package/ui-cv/cv-transition/cv-transition.vue +0 -279
@@ -0,0 +1,142 @@
1
+ <template>
2
+ <view>
3
+ <view v-if="loaded || list.itemIndex < 15" class="uni-indexed-list__title-wrapper">
4
+ <text v-if="list.items && list.items.length > 0" class="uni-indexed-list__title">{{ list.title }}</text>
5
+ </view>
6
+ <view v-if="(loaded || list.itemIndex < 15) && list.items && list.items.length > 0" class="uni-indexed-list__list">
7
+ <view v-for="(item, index) in list.items" :key="index" class="uni-indexed-list__item" hover-class="uni-indexed-list__item--hover">
8
+ <view class="uni-indexed-list__item-container" @click="onClick(idx, index)">
9
+ <view class="uni-indexed-list__item-border" :class="{'uni-indexed-list__item-border--last':index===list.items.length-1}">
10
+ <view v-if="showSelect" style="margin-right: 20rpx;">
11
+ <uni-icons :type="item.checked ? 'checkbox-filled' : 'circle'" :color="item.checked ? '#007aff' : '#aaa'" size="24" />
12
+ </view>
13
+ <text class="uni-indexed-list__item-content">{{ item.text }}</text>
14
+ </view>
15
+ </view>
16
+ </view>
17
+ </view>
18
+ </view>
19
+ </template>
20
+
21
+ <script>
22
+ import uniIcons from '../uni-icons/uni-icons.vue'
23
+ export default {
24
+ name: 'UniIndexedList',
25
+ components: {
26
+ uniIcons
27
+ },
28
+ props: {
29
+ loaded: {
30
+ type: Boolean,
31
+ default: false
32
+ },
33
+ idx: {
34
+ type: Number,
35
+ default: 0
36
+ },
37
+ list: {
38
+ type: Object,
39
+ default () {
40
+ return {}
41
+ }
42
+ },
43
+ showSelect: {
44
+ type: Boolean,
45
+ default: false
46
+ }
47
+ },
48
+ methods: {
49
+ onClick(idx, index) {
50
+ this.$emit("itemClick", {
51
+ idx,
52
+ index
53
+ })
54
+ }
55
+ }
56
+ }
57
+ </script>
58
+
59
+ <style scoped>
60
+ .uni-indexed-list__list {
61
+ background-color: #ffffff;
62
+ /* #ifndef APP-NVUE */
63
+ display: flex;
64
+ /* #endif */
65
+ flex-direction: column;
66
+ border-top-style: solid;
67
+ border-top-width: 1px;
68
+ border-top-color: #e5e5e5;
69
+ }
70
+
71
+ .uni-indexed-list__item {
72
+ font-size: 16px;
73
+ /* #ifndef APP-NVUE */
74
+ display: flex;
75
+ /* #endif */
76
+ flex: 1;
77
+ flex-direction: row;
78
+ justify-content: space-between;
79
+ align-items: center;
80
+ }
81
+
82
+ .uni-indexed-list__item-container {
83
+ padding-left: 15px;
84
+ flex: 1;
85
+ position: relative;
86
+ /* #ifndef APP-NVUE */
87
+ display: flex;
88
+ box-sizing: border-box;
89
+ /* #endif */
90
+ flex-direction: row;
91
+ justify-content: space-between;
92
+ align-items: center;
93
+ }
94
+
95
+ .uni-indexed-list__item-border {
96
+ flex: 1;
97
+ position: relative;
98
+ /* #ifndef APP-NVUE */
99
+ display: flex;
100
+ box-sizing: border-box;
101
+ /* #endif */
102
+ flex-direction: row;
103
+ justify-content: space-between;
104
+ align-items: center;
105
+ height: 50px;
106
+ padding: 15px;
107
+ padding-left: 0;
108
+ border-bottom-style: solid;
109
+ border-bottom-width: 1px;
110
+ border-bottom-color: #e5e5e5;
111
+ }
112
+
113
+ .uni-indexed-list__item-border--last {
114
+ border-bottom-width: 0px;
115
+ }
116
+
117
+ .uni-indexed-list__item-content {
118
+ flex: 1;
119
+ font-size: 14px;
120
+ }
121
+
122
+ .uni-indexed-list {
123
+ /* #ifndef APP-NVUE */
124
+ display: flex;
125
+ /* #endif */
126
+ flex-direction: row;
127
+ }
128
+
129
+ .uni-indexed-list__title-wrapper {
130
+ /* #ifndef APP-NVUE */
131
+ display: flex;
132
+ width: 100%;
133
+ /* #endif */
134
+ background-color: #f7f7f7;
135
+ }
136
+
137
+ .uni-indexed-list__title {
138
+ padding: 6px 12px;
139
+ line-height: 24px;
140
+ font-size: 12px;
141
+ }
142
+ </style>
@@ -0,0 +1,364 @@
1
+ <template>
2
+ <view class="uni-indexed-list" ref="list" id="list">
3
+ <!-- #ifdef APP-NVUE -->
4
+ <list class="uni-indexed-list__scroll" scrollable="true" show-scrollbar="false">
5
+ <cell v-for="(list, idx) in lists" :key="idx" :ref="'uni-indexed-list-' + idx">
6
+ <!-- #endif -->
7
+ <!-- #ifndef APP-NVUE -->
8
+ <scroll-view :scroll-into-view="scrollViewId" class="uni-indexed-list__scroll" scroll-y>
9
+ <view v-for="(list, idx) in lists" :key="idx" :id="'uni-indexed-list-' + idx">
10
+ <!-- #endif -->
11
+ <uni-indexed-list-item :list="list" :loaded="loaded" :idx="idx" :showSelect="showSelect" @itemClick="onClick"></uni-indexed-list-item>
12
+ <!-- #ifndef APP-NVUE -->
13
+ </view>
14
+ </scroll-view>
15
+ <!-- #endif -->
16
+ <!-- #ifdef APP-NVUE -->
17
+ </cell>
18
+ </list>
19
+ <!-- #endif -->
20
+ <view :class="touchmove ? 'uni-indexed-list__menu--active' : ''" @touchstart="touchStart" @touchmove.stop.prevent="touchMove" @touchend="touchEnd" class="uni-indexed-list__menu">
21
+ <view v-for="(list, key) in lists" :key="key" class="uni-indexed-list__menu-item">
22
+ <text class="uni-indexed-list__menu-text" :class="touchmoveIndex == key ? 'uni-indexed-list__menu-text--active' : ''">{{ list.value }}</text>
23
+ </view>
24
+ </view>
25
+ <view v-if="touchmove" class="uni-indexed-list__alert-wrapper">
26
+ <text class="uni-indexed-list__alert">{{ lists[touchmoveIndex] }}</text>
27
+ </view>
28
+ </view>
29
+ </template>
30
+ <script>
31
+ import uniIcons from '../uni-icons/uni-icons.vue'
32
+ import uniIndexedListItem from './uni-data-indexed-list-item.vue'
33
+ import clientdb from './clientdb.js'
34
+ // #ifdef APP-NVUE
35
+ const dom = weex.requireModule('dom');
36
+ // #endif
37
+ // #ifdef APP-PLUS
38
+ function throttle(func, delay) {
39
+ var prev = Date.now();
40
+ return function() {
41
+ var context = this;
42
+ var args = arguments;
43
+ var now = Date.now();
44
+ if (now - prev >= delay) {
45
+ func.apply(context, args);
46
+ prev = Date.now();
47
+ }
48
+ }
49
+ }
50
+
51
+ function touchMove(e) {
52
+ let pageY = e.touches[0].pageY
53
+ let index = Math.floor((pageY - this.winOffsetY) / this.itemHeight)
54
+ if (this.touchmoveIndex === index) {
55
+ return false
56
+ }
57
+ let item = this.lists[index]
58
+ if (item) {
59
+ // #ifndef APP-NVUE
60
+ this.scrollViewId = 'uni-indexed-list-' + index
61
+ this.touchmoveIndex = index
62
+ // #endif
63
+ // #ifdef APP-NVUE
64
+ dom.scrollToElement(this.$refs['uni-indexed-list-' + index][0], {
65
+ animated: false
66
+ })
67
+ this.touchmoveIndex = index
68
+ // #endif
69
+ }
70
+ }
71
+ const throttleTouchMove = throttle(touchMove, 40)
72
+ // #endif
73
+
74
+ /**
75
+ * IndexedList 索引列表
76
+ * @description 用于展示索引列表
77
+ * @tutorial https://ext.dcloud.net.cn/plugin?id=375
78
+ * @property {Boolean} showSelect = [true|false] 展示模式
79
+ * @value true 展示模式
80
+ * @value false 选择模式
81
+ * @property {Object} options 索引列表需要的数据对象
82
+ * @property {String|DBCollectionString} collection 表名
83
+ * @property {String|ClientDBActionString} action 云端执行数据库查询的前或后,触发某个action函数操作,进行预处理或后处理
84
+ * @property {String|DBFieldString} field 查询字段,多个字段用 `,` 分割
85
+ * @property {String} orderby 排序字段及正序倒叙设置
86
+ * @property {String|JQLString} where 查询条件
87
+ * @event {Function} click 点击列表事件 ,返回当前选择项的事件对象
88
+ * @example <uni-indexed-list options="" showSelect="false" @click=""></uni-indexed-list>
89
+ */
90
+ export default {
91
+ name: 'UniDataIndexedList',
92
+ mixins: [clientdb],
93
+ components: {
94
+ uniIcons,
95
+ uniIndexedListItem
96
+ },
97
+ props: {
98
+ options: {
99
+ type: Array,
100
+ default () {
101
+ return []
102
+ }
103
+ },
104
+ localdata: {
105
+ type: Array,
106
+ default () {
107
+ return []
108
+ }
109
+ },
110
+ showSelect: {
111
+ type: Boolean,
112
+ default: false
113
+ }
114
+ },
115
+ data() {
116
+ return {
117
+ lists: [],
118
+ winHeight: 0,
119
+ itemHeight: 0,
120
+ winOffsetY: 0,
121
+ touchmove: false,
122
+ touchmoveIndex: -1,
123
+ scrollViewId: '',
124
+ touchmoveTimeout: '',
125
+ loaded: false
126
+ }
127
+ },
128
+ watch: {
129
+ options: {
130
+ handler: function() {
131
+ this.setList()
132
+ },
133
+ deep: true
134
+ }
135
+ },
136
+ mounted() {
137
+ if (this.localdata.length || this.options.length) {
138
+ setTimeout(() => {
139
+ this.setList()
140
+ }, 50)
141
+ setTimeout(() => {
142
+ this.loaded = true
143
+ }, 300);
144
+ } else if (this.collection) {
145
+ if (!this.manual) {
146
+ this._execLoadData((data) => {
147
+ this.lists = this.groupData(data);
148
+ })
149
+ }
150
+ }
151
+ },
152
+ methods: {
153
+ groupData(data) {
154
+ let groups = {};
155
+ for (let i = 0; i < data.length; i++) {
156
+ let item = data[i];
157
+ let group = item.group;
158
+ if (!groups[group]) {
159
+ groups[group] = {
160
+ "title": group,
161
+ "value": group,
162
+ "itemIndex": i,
163
+ "items": []
164
+ }
165
+ }
166
+ groups[group].items.push(item);
167
+ }
168
+ let result = []
169
+ for (let g in groups) {
170
+ let group = groups[g];
171
+ let items = group.items;
172
+ for (let j = 0; j < items.length; j++) {
173
+ items[j].itemIndex = j;
174
+ }
175
+ result.push(group);
176
+ }
177
+ return result;
178
+ },
179
+ setList(data) {
180
+ let index = 0;
181
+ this.lists = []
182
+ this.options.forEach((value, index) => {
183
+ if (value.data.length === 0) {
184
+ return
185
+ }
186
+ let indexBefore = index
187
+ let items = value.data.map(item => {
188
+ let obj = {}
189
+ obj['value'] = value.letter
190
+ obj['text'] = item
191
+ obj['itemIndex'] = index
192
+ index++
193
+ obj.checked = item.checked ? item.checked : false
194
+ return obj
195
+ })
196
+ this.lists.push({
197
+ title: value.letter,
198
+ value: value.letter,
199
+ items: items,
200
+ itemIndex: indexBefore
201
+ })
202
+ })
203
+ // #ifndef APP-NVUE
204
+ uni.createSelectorQuery()
205
+ .in(this)
206
+ .select('#list')
207
+ .boundingClientRect()
208
+ .exec(ret => {
209
+ this.winOffsetY = ret[0].top
210
+ this.winHeight = ret[0].height
211
+ this.itemHeight = this.winHeight / this.lists.length
212
+ })
213
+ // #endif
214
+ // #ifdef APP-NVUE
215
+ dom.getComponentRect(this.$refs['list'], (res) => {
216
+ this.winOffsetY = res.size.top
217
+ this.winHeight = res.size.height
218
+ this.itemHeight = this.winHeight / this.lists.length
219
+ })
220
+ // #endif
221
+ },
222
+ touchStart(e) {
223
+ this.touchmove = true
224
+ let pageY = e.touches[0].pageY
225
+ let index = Math.floor((pageY - this.winOffsetY) / this.itemHeight)
226
+ let item = this.lists[index]
227
+ if (item) {
228
+ this.scrollViewId = 'uni-indexed-list-' + index
229
+ this.touchmoveIndex = index
230
+ // #ifdef APP-NVUE
231
+ dom.scrollToElement(this.$refs['uni-indexed-list-' + index][0], {
232
+ animated: false
233
+ })
234
+ // #endif
235
+ }
236
+ },
237
+ touchMove(e) {
238
+ // #ifndef APP-PLUS
239
+ let pageY = e.touches[0].pageY
240
+ let index = Math.floor((pageY - this.winOffsetY) / this.itemHeight)
241
+ if (this.touchmoveIndex === index) {
242
+ return false
243
+ }
244
+ let item = this.lists[index]
245
+ if (item) {
246
+ this.scrollViewId = 'uni-indexed-list-' + index
247
+ this.touchmoveIndex = index
248
+ }
249
+ // #endif
250
+ // #ifdef APP-PLUS
251
+ throttleTouchMove.call(this, e)
252
+ // #endif
253
+ },
254
+ touchEnd() {
255
+ this.touchmove = false
256
+ this.touchmoveIndex = -1
257
+ },
258
+ onClick(e) {
259
+ let {
260
+ idx,
261
+ index
262
+ } = e
263
+ let obj = {}
264
+ for (let key in this.lists[idx].items[index]) {
265
+ obj[key] = this.lists[idx].items[index][key]
266
+ }
267
+ let select = []
268
+ if (this.showSelect) {
269
+ this.lists[idx].items[index].checked = !this.lists[idx].items[index].checked
270
+ this.lists.forEach((value, idx) => {
271
+ value.items.forEach((item, index) => {
272
+ if (item.checked) {
273
+ let obj = {}
274
+ for (let key in this.lists[idx].items[index]) {
275
+ obj[key] = this.lists[idx].items[index][key]
276
+ }
277
+ select.push(obj)
278
+ }
279
+ })
280
+ })
281
+ }
282
+ this.$emit('click', {
283
+ item: obj,
284
+ select: select
285
+ })
286
+ }
287
+ }
288
+ }
289
+ </script>
290
+ <style scoped>
291
+ .uni-indexed-list {
292
+ position: absolute;
293
+ left: 0;
294
+ top: 0;
295
+ right: 0;
296
+ bottom: 0;
297
+ /* #ifndef APP-NVUE */
298
+ display: flex;
299
+ /* #endif */
300
+ flex-direction: row;
301
+ }
302
+
303
+ .uni-indexed-list__scroll {
304
+ flex: 1;
305
+ }
306
+
307
+ .uni-indexed-list__menu {
308
+ width: 24px;
309
+ background-color: lightgrey;
310
+ /* #ifndef APP-NVUE */
311
+ display: flex;
312
+ /* #endif */
313
+ flex-direction: column;
314
+ }
315
+
316
+ .uni-indexed-list__menu-item {
317
+ /* #ifndef APP-NVUE */
318
+ display: flex;
319
+ /* #endif */
320
+ flex: 1;
321
+ align-items: center;
322
+ justify-content: center;
323
+ }
324
+
325
+ .uni-indexed-list__menu-text {
326
+ line-height: 20px;
327
+ font-size: 12px;
328
+ text-align: center;
329
+ color: #aaa;
330
+ }
331
+
332
+ .uni-indexed-list__menu--active {
333
+ background-color: #c8c8c8;
334
+ }
335
+
336
+ .uni-indexed-list__menu-text--active {
337
+ color: #007aff;
338
+ }
339
+
340
+ .uni-indexed-list__alert-wrapper {
341
+ position: absolute;
342
+ left: 0;
343
+ top: 0;
344
+ right: 0;
345
+ bottom: 0;
346
+ /* #ifndef APP-NVUE */
347
+ display: flex;
348
+ /* #endif */
349
+ flex-direction: row;
350
+ align-items: center;
351
+ justify-content: center;
352
+ }
353
+
354
+ .uni-indexed-list__alert {
355
+ width: 80px;
356
+ height: 80px;
357
+ border-radius: 80px;
358
+ text-align: center;
359
+ line-height: 80px;
360
+ font-size: 35px;
361
+ color: #fff;
362
+ background-color: rgba(0, 0, 0, 0.5);
363
+ }
364
+ </style>