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