safecheck-client 3.0.34-42 → 3.0.34-43

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 (252) hide show
  1. package/.babelrc +5 -5
  2. package/.editorconfig +9 -9
  3. package/android.html +18 -18
  4. package/config/dev.env.js +6 -6
  5. package/config/index.js +38 -38
  6. package/config/prod.env.js +3 -3
  7. package/config/test.env.js +6 -6
  8. package/docs/AppBase.md +22 -22
  9. package/docs/Busy.md +14 -14
  10. package/docs/CriteriaPaged.md +47 -47
  11. package/docs/DataGrid.md +54 -54
  12. package/docs/DataModel.md +22 -22
  13. package/docs/Dynamic.md +42 -42
  14. package/docs/GetParams.md +11 -11
  15. package/docs/HttpBusy.md +13 -13
  16. package/docs/HttpStore.md +29 -29
  17. package/docs/MessageBox.md +28 -28
  18. package/docs/PagedList.md +29 -29
  19. package/docs/Pager.md +21 -21
  20. package/docs/Project.md +23 -23
  21. package/docs/Route.md +105 -105
  22. package/docs/SafetyCheck/AdjustPlan.md +13 -13
  23. package/docs/SafetyCheck/CheckerPlan.md +12 -12
  24. package/docs/Task.md +46 -46
  25. package/docs/TreeList.md +28 -28
  26. package/docs/TreeMixin.md +18 -18
  27. package/docs/all.md +10 -10
  28. package/docs/list.md +42 -42
  29. package/docs/partial.md +75 -75
  30. package/docs/selector.md +82 -82
  31. package/docs//345/274/200/345/217/221/346/226/207/346/241/243/Snippets.md +28 -28
  32. package/docs//345/274/200/345/217/221/346/226/207/346/241/243/vue-strap/345/217/230/346/233/264/350/256/260/345/275/225.md +7 -7
  33. package/docs//345/274/200/345/217/221/346/226/207/346/241/243/vue/345/217/230/346/233/264/350/256/260/345/275/225.md +13 -13
  34. package/docs//345/274/200/345/217/221/346/226/207/346/241/243//345/274/200/345/217/221/347/216/257/345/242/203/350/256/276/347/275/256.md +77 -77
  35. package/docs//347/225/214/351/235/242/345/210/266/344/275/234/350/247/204/350/214/203.md +54 -54
  36. package/examples/AddressList/App.vue +13 -13
  37. package/examples/AddressList/index.html +11 -11
  38. package/examples/DispatchList/App.vue +10 -10
  39. package/examples/DispatchList/BaseTree.vue +13 -13
  40. package/examples/DispatchList/Init.vue +22 -22
  41. package/examples/DispatchList/Test.vue +20 -20
  42. package/examples/DispatchList/index.html +11 -11
  43. package/examples/DispatchList/main.js +18 -18
  44. package/home.html +16 -16
  45. package/package.json +1 -1
  46. package/publish.bat +7 -7
  47. package/release.bat +5 -5
  48. package/src/Widget.vue +13 -13
  49. package/src/android-bootstrap/fonts/glyphicons-halflings-regular.svg +287 -287
  50. package/src/android-bootstrap/less/.csscomb.json +304 -304
  51. package/src/android-bootstrap/less/.csslintrc +19 -19
  52. package/src/android-bootstrap/less/alerts.less +73 -73
  53. package/src/android-bootstrap/less/badges.less +66 -66
  54. package/src/android-bootstrap/less/bootstrap.less +56 -56
  55. package/src/android-bootstrap/less/breadcrumbs.less +26 -26
  56. package/src/android-bootstrap/less/button-groups.less +247 -247
  57. package/src/android-bootstrap/less/buttons.less +173 -173
  58. package/src/android-bootstrap/less/carousel.less +269 -269
  59. package/src/android-bootstrap/less/close.less +34 -34
  60. package/src/android-bootstrap/less/code.less +69 -69
  61. package/src/android-bootstrap/less/component-animations.less +33 -33
  62. package/src/android-bootstrap/less/grid.less +84 -84
  63. package/src/android-bootstrap/less/input-groups.less +167 -167
  64. package/src/android-bootstrap/less/jumbotron.less +52 -52
  65. package/src/android-bootstrap/less/labels.less +64 -64
  66. package/src/android-bootstrap/less/list-group.less +141 -141
  67. package/src/android-bootstrap/less/media.less +66 -66
  68. package/src/android-bootstrap/less/mixins/alerts.less +14 -14
  69. package/src/android-bootstrap/less/mixins/background-variant.less +9 -9
  70. package/src/android-bootstrap/less/mixins/border-radius.less +18 -18
  71. package/src/android-bootstrap/less/mixins/buttons.less +69 -69
  72. package/src/android-bootstrap/less/mixins/center-block.less +7 -7
  73. package/src/android-bootstrap/less/mixins/clearfix.less +22 -22
  74. package/src/android-bootstrap/less/mixins/forms.less +90 -90
  75. package/src/android-bootstrap/less/mixins/gradients.less +59 -59
  76. package/src/android-bootstrap/less/mixins/grid-framework.less +92 -92
  77. package/src/android-bootstrap/less/mixins/grid.less +122 -122
  78. package/src/android-bootstrap/less/mixins/hide-text.less +21 -21
  79. package/src/android-bootstrap/less/mixins/image.less +33 -33
  80. package/src/android-bootstrap/less/mixins/labels.less +12 -12
  81. package/src/android-bootstrap/less/mixins/list-group.less +30 -30
  82. package/src/android-bootstrap/less/mixins/nav-divider.less +10 -10
  83. package/src/android-bootstrap/less/mixins/nav-vertical-align.less +9 -9
  84. package/src/android-bootstrap/less/mixins/opacity.less +8 -8
  85. package/src/android-bootstrap/less/mixins/pagination.less +24 -24
  86. package/src/android-bootstrap/less/mixins/panels.less +24 -24
  87. package/src/android-bootstrap/less/mixins/progress-bar.less +10 -10
  88. package/src/android-bootstrap/less/mixins/reset-filter.less +8 -8
  89. package/src/android-bootstrap/less/mixins/reset-text.less +18 -18
  90. package/src/android-bootstrap/less/mixins/resize.less +6 -6
  91. package/src/android-bootstrap/less/mixins/responsive-visibility.less +15 -15
  92. package/src/android-bootstrap/less/mixins/size.less +10 -10
  93. package/src/android-bootstrap/less/mixins/tab-focus.less +9 -9
  94. package/src/android-bootstrap/less/mixins/table-row.less +44 -44
  95. package/src/android-bootstrap/less/mixins/text-emphasis.less +9 -9
  96. package/src/android-bootstrap/less/mixins/text-overflow.less +8 -8
  97. package/src/android-bootstrap/less/mixins/vendor-prefixes.less +227 -227
  98. package/src/android-bootstrap/less/mixins.less +40 -40
  99. package/src/android-bootstrap/less/modals.less +151 -151
  100. package/src/android-bootstrap/less/navbar.less +660 -660
  101. package/src/android-bootstrap/less/navs.less +290 -290
  102. package/src/android-bootstrap/less/normalize.less +424 -424
  103. package/src/android-bootstrap/less/pager.less +76 -76
  104. package/src/android-bootstrap/less/pagination.less +89 -89
  105. package/src/android-bootstrap/less/panels.less +274 -274
  106. package/src/android-bootstrap/less/popovers.less +131 -131
  107. package/src/android-bootstrap/less/print.less +101 -101
  108. package/src/android-bootstrap/less/progress-bars.less +87 -87
  109. package/src/android-bootstrap/less/responsive-embed.less +35 -35
  110. package/src/android-bootstrap/less/responsive-utilities.less +194 -194
  111. package/src/android-bootstrap/less/scaffolding.less +161 -161
  112. package/src/android-bootstrap/less/tables.less +262 -262
  113. package/src/android-bootstrap/less/theme.less +291 -291
  114. package/src/android-bootstrap/less/thumbnails.less +36 -36
  115. package/src/android-bootstrap/less/tooltip.less +102 -102
  116. package/src/android-bootstrap/less/type.less +303 -303
  117. package/src/android-bootstrap/less/utilities.less +55 -55
  118. package/src/android-bootstrap/less/variables.less +896 -896
  119. package/src/android-bootstrap/less/wells.less +29 -29
  120. package/src/androidTest.js +20 -20
  121. package/src/bootstrap/less/.csscomb.json +304 -304
  122. package/src/bootstrap/less/.csslintrc +19 -19
  123. package/src/bootstrap/less/alerts.less +73 -73
  124. package/src/bootstrap/less/badges.less +66 -66
  125. package/src/bootstrap/less/breadcrumbs.less +26 -26
  126. package/src/bootstrap/less/button-groups.less +247 -247
  127. package/src/bootstrap/less/buttons.less +172 -172
  128. package/src/bootstrap/less/carousel.less +269 -269
  129. package/src/bootstrap/less/close.less +34 -34
  130. package/src/bootstrap/less/code.less +69 -69
  131. package/src/bootstrap/less/component-animations.less +33 -33
  132. package/src/bootstrap/less/dropdowns.less +216 -216
  133. package/src/bootstrap/less/forms.less +626 -626
  134. package/src/bootstrap/less/grid.less +84 -84
  135. package/src/bootstrap/less/input-groups.less +167 -167
  136. package/src/bootstrap/less/jumbotron.less +52 -52
  137. package/src/bootstrap/less/labels.less +64 -64
  138. package/src/bootstrap/less/list-group.less +141 -141
  139. package/src/bootstrap/less/media.less +66 -66
  140. package/src/bootstrap/less/mixins/alerts.less +14 -14
  141. package/src/bootstrap/less/mixins/background-variant.less +9 -9
  142. package/src/bootstrap/less/mixins/border-radius.less +18 -18
  143. package/src/bootstrap/less/mixins/buttons.less +69 -69
  144. package/src/bootstrap/less/mixins/center-block.less +7 -7
  145. package/src/bootstrap/less/mixins/clearfix.less +22 -22
  146. package/src/bootstrap/less/mixins/forms.less +90 -90
  147. package/src/bootstrap/less/mixins/gradients.less +59 -59
  148. package/src/bootstrap/less/mixins/grid-framework.less +92 -92
  149. package/src/bootstrap/less/mixins/grid.less +122 -122
  150. package/src/bootstrap/less/mixins/hide-text.less +21 -21
  151. package/src/bootstrap/less/mixins/image.less +33 -33
  152. package/src/bootstrap/less/mixins/labels.less +12 -12
  153. package/src/bootstrap/less/mixins/list-group.less +30 -30
  154. package/src/bootstrap/less/mixins/nav-divider.less +10 -10
  155. package/src/bootstrap/less/mixins/nav-vertical-align.less +9 -9
  156. package/src/bootstrap/less/mixins/opacity.less +8 -8
  157. package/src/bootstrap/less/mixins/pagination.less +24 -24
  158. package/src/bootstrap/less/mixins/panels.less +24 -24
  159. package/src/bootstrap/less/mixins/progress-bar.less +10 -10
  160. package/src/bootstrap/less/mixins/reset-filter.less +8 -8
  161. package/src/bootstrap/less/mixins/reset-text.less +18 -18
  162. package/src/bootstrap/less/mixins/resize.less +6 -6
  163. package/src/bootstrap/less/mixins/responsive-visibility.less +15 -15
  164. package/src/bootstrap/less/mixins/size.less +10 -10
  165. package/src/bootstrap/less/mixins/tab-focus.less +9 -9
  166. package/src/bootstrap/less/mixins/table-row.less +44 -44
  167. package/src/bootstrap/less/mixins/text-emphasis.less +9 -9
  168. package/src/bootstrap/less/mixins/text-overflow.less +8 -8
  169. package/src/bootstrap/less/mixins/vendor-prefixes.less +227 -227
  170. package/src/bootstrap/less/mixins.less +40 -40
  171. package/src/bootstrap/less/modals.less +151 -151
  172. package/src/bootstrap/less/navbar.less +660 -660
  173. package/src/bootstrap/less/normalize.less +424 -424
  174. package/src/bootstrap/less/pager.less +76 -76
  175. package/src/bootstrap/less/pagination.less +89 -89
  176. package/src/bootstrap/less/panels.less +275 -275
  177. package/src/bootstrap/less/popovers.less +131 -131
  178. package/src/bootstrap/less/print.less +101 -101
  179. package/src/bootstrap/less/progress-bars.less +87 -87
  180. package/src/bootstrap/less/responsive-embed.less +35 -35
  181. package/src/bootstrap/less/responsive-utilities.less +194 -194
  182. package/src/bootstrap/less/scaffolding.less +161 -161
  183. package/src/bootstrap/less/theme.less +291 -291
  184. package/src/bootstrap/less/thumbnails.less +36 -36
  185. package/src/bootstrap/less/tooltip.less +102 -102
  186. package/src/bootstrap/less/type.less +303 -303
  187. package/src/bootstrap/less/utilities.less +55 -55
  188. package/src/bootstrap/less/wells.less +29 -29
  189. package/src/components/FileUpload.vue +696 -696
  190. package/src/components/Hello.vue +39 -39
  191. package/src/components/LeftTree.vue +27 -27
  192. package/src/components/android/AddressList.vue +61 -61
  193. package/src/components/android/AttendanceTally.vue +116 -116
  194. package/src/components/android/Blank.vue +10 -10
  195. package/src/components/android/CheckUnplanPage.vue +56 -56
  196. package/src/components/android/Checker.vue +12 -12
  197. package/src/components/android/CheckerAnnual.vue +81 -81
  198. package/src/components/android/CheckerAvarta.vue +82 -82
  199. package/src/components/android/EquipmentInspection.vue +348 -348
  200. package/src/components/android/FootprintMap.vue +120 -120
  201. package/src/components/android/HiddentroubleInvestigation.vue +192 -192
  202. package/src/components/android/MasterMain.vue +77 -77
  203. package/src/components/android/Menu.vue +132 -132
  204. package/src/components/android/NavBottom.vue +157 -157
  205. package/src/components/android/PaperAlarm.vue +85 -85
  206. package/src/components/android/PaperDeviceNoncivil.vue +214 -214
  207. package/src/components/android/PlumberAnnual.vue +83 -83
  208. package/src/components/android/PlumberAnnualDetail.vue +65 -65
  209. package/src/components/android/PlumberMonthly.vue +84 -84
  210. package/src/components/android/PostMap.vue +83 -83
  211. package/src/components/android/QRCode/QRCodeBinding.vue +300 -300
  212. package/src/components/android/QRCode/QRCodePage.vue +212 -212
  213. package/src/components/android/QueryCheckHistory.vue +122 -122
  214. package/src/components/android/QueryCheckHistoryItem.vue +62 -62
  215. package/src/components/android/RepairMain.vue +60 -60
  216. package/src/components/android/Repairman.vue +12 -12
  217. package/src/components/android/StationMaster.vue +12 -12
  218. package/src/components/android/examples/SafeListExamples.vue +1 -1
  219. package/src/components/android/examples/UserExamples.vue +1 -1
  220. package/src/components/defects/DefectModal.vue +101 -101
  221. package/src/components/defects/DevicesAndItem.vue +39 -39
  222. package/src/components/issueplan/IssuePlanMain.vue +23 -23
  223. package/src/components/notice/NoticeForm.vue +100 -100
  224. package/src/components/notice/NoticeIssue.vue +20 -20
  225. package/src/components/paper/PicViewer.vue +18 -18
  226. package/src/components/phonestate/MonthlyTraffic.vue +66 -66
  227. package/src/components/phonestate/MonthlyTrafficRouter.vue +15 -15
  228. package/src/components/phonestate/PostMap.vue +82 -82
  229. package/src/components/querycheckpaper/PaperItem.vue +59 -59
  230. package/src/components/userfile/MeterFile.vue +145 -145
  231. package/src/components/userfile/MeterModify.vue +46 -46
  232. package/src/components/userfileaudit/MeterAuditFile.vue +129 -129
  233. package/src/filiale/bayan/android/SafecheckOrderV.vue +2889 -2889
  234. package/src/filiale/tongchuan/android/Select.vue +421 -421
  235. package/src/filiale/tongchuan/android.js +21 -21
  236. package/src/filiale/tongchuan/pc/PaperDefectMain.vue +1060 -1060
  237. package/src/filiale/tongchuan/utils/EventListener.js +29 -29
  238. package/src/filiale/tongchuan/utils/coerceBoolean.js +7 -7
  239. package/src/filiale/weinan/pc/CheckBookSearchUserList.vue +57 -59
  240. package/src/filiale/weinan/pc/checkUserList.vue +34 -113
  241. package/src/plugins/LoadData.js +10 -10
  242. package/src/plugins/LoadParams.js +24 -24
  243. package/src/stores/wxconfig.js +10 -10
  244. package/src/utils/getNowDate.js +33 -33
  245. package/test/e2e/custom-assertions/elementCount.js +26 -26
  246. package/test/e2e/nightwatch.conf.js +40 -40
  247. package/test/e2e/runner.js +30 -30
  248. package/test/e2e/specs/test.js +13 -13
  249. package/test/unit/.eslintrc +5 -5
  250. package/test/unit/TestUtil.js +62 -62
  251. package/test/unit/context.html +20 -20
  252. package/test/unit/index.js +13 -13
@@ -1,421 +1,421 @@
1
- <template>
2
- <div v-el:group class="btn-group" v-bind:class="{open: show, dropup: direction === 'up'}" :style="{width:width, fontSize: fontSize}">
3
- <button v-el:btn type="button" class="btn btn-default dropdown-toggle select-style" :style="{minWidth: '100%', fontSize: fontSize}"
4
- :id="'vc-select-button-'+attach"
5
- @click="toggleDropdown"
6
- @blur="show = (search ? show : false)"
7
- v-bind="{disabled: disabled}"
8
- >
9
- <span class="btn-placeholder" v-show="showPlaceholder">{{placeholder}}</span>
10
- <span class="btn-content" :style="{textOverflow:'ellipsis',overflow: 'hidden'}">{{ selectedItems }}</span>
11
- <span class="caret"></span>
12
- </button>
13
- <ul class="dropdown-menu" v-bind:class="{'menu-align-right': align=== 'right'}" :style="{overflow:'scroll',maxHeight: maxHeight + 'px',width: menuWidth,minWidth:minWidth,left:left+'px', fontSize: fontSize }" v-el:dropdown>
14
- <template v-if="options.length">
15
- <li v-if="search" class="bs-searchbox" style="white-space: nowrap">
16
- <input type="text" placeholder="Search"
17
- style="width: 80%;display: inline"
18
- v-model="searchText"
19
- class="form-control" autocomplete="off"
20
- @keyup.enter="putOptions(searchText)">
21
-
22
- <span style="width: 20%;display: inline"
23
- v-if="search&&multiple&&show&&!isSelectAll"
24
- @mousedown.prevent="selectAll(options)">全选</span>
25
- <span style="width: 20%;display: inline"
26
- v-if="search&&multiple&&show&&isSelectAll"
27
- @mousedown.prevent="selectAll(options)">取消</span>
28
- </li>
29
- <li v-for="option in options | findBy searchText " style="position:relative">
30
- <a @mousedown.prevent="select(option.value,null)" style="cursor:pointer" :id="'vc-select-a-'+attach+'-'+$index">
31
- {{ option.label }}
32
- <span class="glyphicon glyphicon-ok check-mark" v-show="isSelected(option.value)"></span>
33
- </a>
34
- </li>
35
- </template>
36
- <slot v-else></slot>
37
- <div class="notify" v-show="showNotify" transition="fadein">Limit reached ({{limit}} items max).
38
- </div>
39
- </ul>
40
- </div>
41
- </template>
42
-
43
- <script>
44
- import EventListener from '../utils/EventListener'
45
- import coerceBoolean from '../utils/coerceBoolean.js'
46
-
47
- export default {
48
- props: {
49
- options: {
50
- type: Array,
51
- default() { return [] },
52
- },
53
- value: {
54
- twoWay: true
55
- },
56
- placeholder: {
57
- type: String,
58
- default: '请选择'
59
- },
60
- multiple: {
61
- type: Boolean,
62
- coerce: coerceBoolean,
63
- default: false
64
- },
65
- search: { // Allow searching (only works when options are provided)
66
- type: Boolean,
67
- coerce: coerceBoolean,
68
- default: true
69
- },
70
- limit: {
71
- type: Number,
72
- default: 1024
73
- },
74
- closeOnSelect: { // only works when multiple==false
75
- type: Boolean,
76
- coerce: coerceBoolean,
77
- default: false
78
- },
79
- disabled: {
80
- type: Boolean,
81
- coerce: coerceBoolean,
82
- default: false
83
- },
84
- attach: {
85
- type: String,
86
- default: 'vuestrap'
87
- },
88
- enterPush: {
89
- type: Boolean,
90
- dafault: false
91
- },
92
- maxHeight: {
93
- type: [Number,String],
94
- default: 300
95
- },
96
- minWidth:{
97
- type:[Number,String],
98
- default:'100%'
99
- },
100
- valueSingle: {
101
- type: Boolean,
102
- default: false
103
- },
104
- //全选标志位
105
- isSelectAll: {
106
- type: Boolean,
107
- default: false
108
- },
109
- filerKey: {
110
- default: 'id'
111
- },
112
- direction: { // 展开方向,默认为向下,可以向上up
113
- type: String,
114
- default: 'down'
115
- },
116
- align: {
117
- type: String,
118
- default: 'left' // 内内容框对齐方式,默认是左对齐,也可以right,右对齐
119
- },
120
- width:{
121
- type:String,
122
- default:'60%'
123
- },
124
- timeout: {
125
- type: Number,
126
- default: 300
127
- },
128
- fontSize: {
129
- type: String,
130
- default: '16px'
131
- },
132
- menuMode: {
133
- type: String
134
- }
135
- },
136
- ready() {
137
- if(this.search&&this.multiple){
138
- this.minWidth='190px'
139
- }
140
- // 如果this.value不存在或正length不等于0
141
- if ((this.value === false? false :!this.value) || this.value.length === 0) {
142
- if (this.valueSingle) {
143
- this.value = ''
144
- } else {
145
- this.value = []
146
- }
147
- }else {
148
- // 如果this.value不是数组
149
- if (this.value.constructor !== Array) {
150
- if (!this.valueSingle) {
151
- this.value = [this.value]
152
- }
153
- } else {
154
- // this.value不是数组并且不是多选
155
- if (!this.multiple && this.value.length > 1) {
156
- this.value = this.value.slice(0, 1)
157
- } else if (this.multiple && this.value.length > this.limit) {
158
- this.value = this.value.slice(0, this.limit)
159
- }
160
- }
161
- }
162
- let el = this.$els.dropdown
163
- let elbtn = this.$els.btn
164
- this._closeEvent = EventListener.listen(window, 'mouseup', (e)=> {
165
- if (!el.contains(e.target) && this.show && !elbtn.contains(e.target)) {
166
- this.show = false
167
- }
168
- })
169
- },
170
- data() {
171
- return {
172
- left:'0',
173
-
174
- searchText: null,
175
- show: false,
176
- showNotify: false,
177
- paramsData: [],
178
- // isShowModify: false
179
- timer: null,
180
- menuwidth: 'auto'
181
- }
182
- },
183
- computed: {
184
- // 返回显示的选择内容
185
- selectedItems() {
186
- // 值为空,返回空串
187
- if (this.value === false? false: !this.value) {
188
- return ''
189
- }
190
- // 把单选变成数组
191
- let value
192
- if (this.valueSingle) {
193
- value = [this.value]
194
- } else {
195
- value = this.value
196
- }
197
-
198
- // 根据value值,找到label
199
- let foundItems = []
200
- if (value === false?true:value && value.length) {
201
- for (var item of value) {
202
- // 如果没有可选项,直接value内容
203
- if (this.options.length === 0)
204
- {
205
- foundItems = value;
206
- }
207
- // 有可选项
208
- else
209
- {
210
- // 如果是对象,显示对象给定的列
211
- if (typeof item === "object") {
212
- for(let o of this.options) {
213
- // 选中对象鱼可选项value值相同,取选项的label
214
- if((o.value === false?true:o.value)&& o.value[this.filerKey] === item[this.filerKey]) {
215
- foundItems.push(o.label)
216
- break
217
- }
218
- }
219
- } else {
220
- // 否则,显示值本身
221
- let option
222
- this.options.some(o => {
223
- if(o.value === item) {
224
- option = o
225
- return true
226
- }
227
- })
228
- option && foundItems.push(option.label)
229
- }
230
- }
231
- }
232
- if (foundItems.length === 0 || foundItems[0].constructor === Object) {
233
- return ''
234
- }
235
- //选中的
236
- let str= foundItems.join(', ')
237
- // if(str.length > 4)
238
- // return str.substring(0,4)+'...'
239
- // else
240
- return str
241
- }
242
- },
243
- showPlaceholder() {
244
- if (this.value ===false? true :this.value) {
245
- return this.value.length === 0 || this.selectedItems === ''
246
- }
247
- return true
248
- }
249
- },
250
- watch: {
251
- menuMode: {
252
- immediate: true,
253
- handler() {
254
- if (this.menuMode == 'align-button'){
255
- this.menuWidth = '100%'
256
- }
257
- }
258
- },
259
- value(val) {
260
- this.$emit('change', val)
261
- this.$emit('selected', this.selected)
262
- if (val && val.length > this.limit) {
263
- this.showNotify = true
264
- this.value.pop()
265
- setTimeout(() => this.showNotify = false, 1000)
266
- }
267
- },
268
- show(){
269
- this.judgBoundary();
270
- },
271
- searchText() {
272
- // 防抖
273
- if (this.timer) {
274
- clearTimeout(this.timer)
275
- }
276
- this.timer = setTimeout(() => {
277
- this.$emit('select-search', this.searchText)
278
- }, this.timeout)
279
- }
280
- },
281
- methods: {
282
- //全选
283
- selectAll(v) {
284
- this.isSelectAll=!this.isSelectAll
285
- if(this.searchText === null){
286
- v.forEach((item) => {
287
- this.select(item.value, this.isSelectAll)
288
- })
289
- }else {
290
- let result= v.filter((item) => {
291
- return item.label.includes(this.searchText)
292
- }).forEach((item) => {
293
- this.select(item.value, this.isSelectAll)
294
- })
295
- }
296
- },
297
- select (v, flag) {
298
- if (flag == true) {
299
- if (this.multiple) {
300
- this.value.$remove(v)
301
- this.value.push(v)
302
- } else if (this.closeOnSelect) {
303
- this.toggleDropdown()
304
- }
305
- } else if (flag == false) {
306
- if (this.multiple) {
307
- this.value.$remove(v)
308
- } else if (this.closeOnSelect) {
309
- this.toggleDropdown()
310
- }
311
- } else if (flag == null) {
312
- if (this.valueSingle || !this.value || this.value.indexOf(v) === -1) {
313
- if (this.multiple) {
314
- this.value.push(v)
315
- } else {
316
- if (this.value == v) {
317
- this.value = undefined
318
- } else if (this.valueSingle) {
319
- this.value = v
320
- } else {
321
- this.value = [v]
322
- }
323
- }
324
- } else {
325
- if (this.multiple || this.value) {
326
- this.value.$remove(v)
327
- }
328
- }
329
- if (this.closeOnSelect) {
330
- this.toggleDropdown()
331
- }
332
- }
333
- this.judgBoundary()
334
- this.$emit('select-changed', v)
335
- },
336
-
337
- isSelected(v) {
338
- if (this.value === false? false: !this.value) {
339
- return false
340
- }
341
- if (this.value.constructor !== Array) {
342
- return this.value == v
343
- } else {
344
- return this.value.indexOf(v) !== -1
345
- }
346
-
347
- },
348
- toggleDropdown() {
349
- this.width = this.$els.group.clientWidth * this.width +'px'
350
- this.show = !this.show
351
- },
352
- putOptions (val) {
353
- if (this.enterPush) {
354
- let sign = false
355
- this.options.forEach((item) => {
356
- if (val === item.label) {
357
- sign = true
358
- }
359
- })
360
- }
361
- this.judgBoundary();
362
- },
363
- judgBoundary(){
364
- //判断是否超出边界,超出移动
365
- if(this.menuMode != 'align-button' && document.documentElement.offsetWidth< this.$els.dropdown.getBoundingClientRect().right){
366
- this.left = document.documentElement.offsetWidth - this.$els.dropdown.getBoundingClientRect().right - 25
367
- }
368
- }
369
- },
370
- beforeDestroy() {
371
- if (this._closeEvent) this._closeEvent.remove()
372
- }
373
- }
374
- </script>
375
-
376
- <style scoped>
377
- .bs-searchbox {
378
- padding: 4px 8px;
379
- }
380
- .menu-align-right {
381
- left: unset;
382
- right: 0;
383
- }
384
- .btn-group .dropdown-menu .notify {
385
- position: absolute;
386
- bottom: 5px;
387
- width: 96%;
388
- margin: 0 2%;
389
- min-height: 26px;
390
- padding: 3px 5px;
391
- background: #f5f5f5;
392
- /*border: 1px solid #e3e3e3;*/
393
- box-shadow: inset 0 1px 1px rgba(0,0,0,.05);
394
- pointer-events: none;
395
- opacity: .9;
396
- overflow: hidden;
397
- text-overflow: ellipsis;
398
- }
399
- .select-style {
400
- border: 0px;
401
- /*border-bottom: 2px solid #C9CCCF;*/
402
- border: 1px solid #93B2D3;
403
- border-radius: 0px;
404
- color: #555;
405
- overflow:hidden;text-overflow:ellipsis;
406
- }
407
- /* 为新产品增加修改菜单选项 */
408
- .vselect-self-style {
409
- text-align: center;
410
- border: 2px dashed #ccc;
411
- margin: 5px 10px;
412
- border-radius: 5px;
413
- }
414
- /* 当内容超过最大时,显示省略,长度不能超过最大值 */
415
- .btn-group > button {
416
- max-width: 100%;
417
- }
418
- .btn-group > button .btn-content {
419
- max-width: 100%;
420
- }
421
- </style>
1
+ <template>
2
+ <div v-el:group class="btn-group" v-bind:class="{open: show, dropup: direction === 'up'}" :style="{width:width, fontSize: fontSize}">
3
+ <button v-el:btn type="button" class="btn btn-default dropdown-toggle select-style" :style="{minWidth: '100%', fontSize: fontSize}"
4
+ :id="'vc-select-button-'+attach"
5
+ @click="toggleDropdown"
6
+ @blur="show = (search ? show : false)"
7
+ v-bind="{disabled: disabled}"
8
+ >
9
+ <span class="btn-placeholder" v-show="showPlaceholder">{{placeholder}}</span>
10
+ <span class="btn-content" :style="{textOverflow:'ellipsis',overflow: 'hidden'}">{{ selectedItems }}</span>
11
+ <span class="caret"></span>
12
+ </button>
13
+ <ul class="dropdown-menu" v-bind:class="{'menu-align-right': align=== 'right'}" :style="{overflow:'scroll',maxHeight: maxHeight + 'px',width: menuWidth,minWidth:minWidth,left:left+'px', fontSize: fontSize }" v-el:dropdown>
14
+ <template v-if="options.length">
15
+ <li v-if="search" class="bs-searchbox" style="white-space: nowrap">
16
+ <input type="text" placeholder="Search"
17
+ style="width: 80%;display: inline"
18
+ v-model="searchText"
19
+ class="form-control" autocomplete="off"
20
+ @keyup.enter="putOptions(searchText)">
21
+
22
+ <span style="width: 20%;display: inline"
23
+ v-if="search&&multiple&&show&&!isSelectAll"
24
+ @mousedown.prevent="selectAll(options)">全选</span>
25
+ <span style="width: 20%;display: inline"
26
+ v-if="search&&multiple&&show&&isSelectAll"
27
+ @mousedown.prevent="selectAll(options)">取消</span>
28
+ </li>
29
+ <li v-for="option in options | findBy searchText " style="position:relative">
30
+ <a @mousedown.prevent="select(option.value,null)" style="cursor:pointer" :id="'vc-select-a-'+attach+'-'+$index">
31
+ {{ option.label }}
32
+ <span class="glyphicon glyphicon-ok check-mark" v-show="isSelected(option.value)"></span>
33
+ </a>
34
+ </li>
35
+ </template>
36
+ <slot v-else></slot>
37
+ <div class="notify" v-show="showNotify" transition="fadein">Limit reached ({{limit}} items max).
38
+ </div>
39
+ </ul>
40
+ </div>
41
+ </template>
42
+
43
+ <script>
44
+ import EventListener from '../utils/EventListener'
45
+ import coerceBoolean from '../utils/coerceBoolean.js'
46
+
47
+ export default {
48
+ props: {
49
+ options: {
50
+ type: Array,
51
+ default() { return [] },
52
+ },
53
+ value: {
54
+ twoWay: true
55
+ },
56
+ placeholder: {
57
+ type: String,
58
+ default: '请选择'
59
+ },
60
+ multiple: {
61
+ type: Boolean,
62
+ coerce: coerceBoolean,
63
+ default: false
64
+ },
65
+ search: { // Allow searching (only works when options are provided)
66
+ type: Boolean,
67
+ coerce: coerceBoolean,
68
+ default: true
69
+ },
70
+ limit: {
71
+ type: Number,
72
+ default: 1024
73
+ },
74
+ closeOnSelect: { // only works when multiple==false
75
+ type: Boolean,
76
+ coerce: coerceBoolean,
77
+ default: false
78
+ },
79
+ disabled: {
80
+ type: Boolean,
81
+ coerce: coerceBoolean,
82
+ default: false
83
+ },
84
+ attach: {
85
+ type: String,
86
+ default: 'vuestrap'
87
+ },
88
+ enterPush: {
89
+ type: Boolean,
90
+ dafault: false
91
+ },
92
+ maxHeight: {
93
+ type: [Number,String],
94
+ default: 300
95
+ },
96
+ minWidth:{
97
+ type:[Number,String],
98
+ default:'100%'
99
+ },
100
+ valueSingle: {
101
+ type: Boolean,
102
+ default: false
103
+ },
104
+ //全选标志位
105
+ isSelectAll: {
106
+ type: Boolean,
107
+ default: false
108
+ },
109
+ filerKey: {
110
+ default: 'id'
111
+ },
112
+ direction: { // 展开方向,默认为向下,可以向上up
113
+ type: String,
114
+ default: 'down'
115
+ },
116
+ align: {
117
+ type: String,
118
+ default: 'left' // 内内容框对齐方式,默认是左对齐,也可以right,右对齐
119
+ },
120
+ width:{
121
+ type:String,
122
+ default:'60%'
123
+ },
124
+ timeout: {
125
+ type: Number,
126
+ default: 300
127
+ },
128
+ fontSize: {
129
+ type: String,
130
+ default: '16px'
131
+ },
132
+ menuMode: {
133
+ type: String
134
+ }
135
+ },
136
+ ready() {
137
+ if(this.search&&this.multiple){
138
+ this.minWidth='190px'
139
+ }
140
+ // 如果this.value不存在或正length不等于0
141
+ if ((this.value === false? false :!this.value) || this.value.length === 0) {
142
+ if (this.valueSingle) {
143
+ this.value = ''
144
+ } else {
145
+ this.value = []
146
+ }
147
+ }else {
148
+ // 如果this.value不是数组
149
+ if (this.value.constructor !== Array) {
150
+ if (!this.valueSingle) {
151
+ this.value = [this.value]
152
+ }
153
+ } else {
154
+ // this.value不是数组并且不是多选
155
+ if (!this.multiple && this.value.length > 1) {
156
+ this.value = this.value.slice(0, 1)
157
+ } else if (this.multiple && this.value.length > this.limit) {
158
+ this.value = this.value.slice(0, this.limit)
159
+ }
160
+ }
161
+ }
162
+ let el = this.$els.dropdown
163
+ let elbtn = this.$els.btn
164
+ this._closeEvent = EventListener.listen(window, 'mouseup', (e)=> {
165
+ if (!el.contains(e.target) && this.show && !elbtn.contains(e.target)) {
166
+ this.show = false
167
+ }
168
+ })
169
+ },
170
+ data() {
171
+ return {
172
+ left:'0',
173
+
174
+ searchText: null,
175
+ show: false,
176
+ showNotify: false,
177
+ paramsData: [],
178
+ // isShowModify: false
179
+ timer: null,
180
+ menuwidth: 'auto'
181
+ }
182
+ },
183
+ computed: {
184
+ // 返回显示的选择内容
185
+ selectedItems() {
186
+ // 值为空,返回空串
187
+ if (this.value === false? false: !this.value) {
188
+ return ''
189
+ }
190
+ // 把单选变成数组
191
+ let value
192
+ if (this.valueSingle) {
193
+ value = [this.value]
194
+ } else {
195
+ value = this.value
196
+ }
197
+
198
+ // 根据value值,找到label
199
+ let foundItems = []
200
+ if (value === false?true:value && value.length) {
201
+ for (var item of value) {
202
+ // 如果没有可选项,直接value内容
203
+ if (this.options.length === 0)
204
+ {
205
+ foundItems = value;
206
+ }
207
+ // 有可选项
208
+ else
209
+ {
210
+ // 如果是对象,显示对象给定的列
211
+ if (typeof item === "object") {
212
+ for(let o of this.options) {
213
+ // 选中对象鱼可选项value值相同,取选项的label
214
+ if((o.value === false?true:o.value)&& o.value[this.filerKey] === item[this.filerKey]) {
215
+ foundItems.push(o.label)
216
+ break
217
+ }
218
+ }
219
+ } else {
220
+ // 否则,显示值本身
221
+ let option
222
+ this.options.some(o => {
223
+ if(o.value === item) {
224
+ option = o
225
+ return true
226
+ }
227
+ })
228
+ option && foundItems.push(option.label)
229
+ }
230
+ }
231
+ }
232
+ if (foundItems.length === 0 || foundItems[0].constructor === Object) {
233
+ return ''
234
+ }
235
+ //选中的
236
+ let str= foundItems.join(', ')
237
+ // if(str.length > 4)
238
+ // return str.substring(0,4)+'...'
239
+ // else
240
+ return str
241
+ }
242
+ },
243
+ showPlaceholder() {
244
+ if (this.value ===false? true :this.value) {
245
+ return this.value.length === 0 || this.selectedItems === ''
246
+ }
247
+ return true
248
+ }
249
+ },
250
+ watch: {
251
+ menuMode: {
252
+ immediate: true,
253
+ handler() {
254
+ if (this.menuMode == 'align-button'){
255
+ this.menuWidth = '100%'
256
+ }
257
+ }
258
+ },
259
+ value(val) {
260
+ this.$emit('change', val)
261
+ this.$emit('selected', this.selected)
262
+ if (val && val.length > this.limit) {
263
+ this.showNotify = true
264
+ this.value.pop()
265
+ setTimeout(() => this.showNotify = false, 1000)
266
+ }
267
+ },
268
+ show(){
269
+ this.judgBoundary();
270
+ },
271
+ searchText() {
272
+ // 防抖
273
+ if (this.timer) {
274
+ clearTimeout(this.timer)
275
+ }
276
+ this.timer = setTimeout(() => {
277
+ this.$emit('select-search', this.searchText)
278
+ }, this.timeout)
279
+ }
280
+ },
281
+ methods: {
282
+ //全选
283
+ selectAll(v) {
284
+ this.isSelectAll=!this.isSelectAll
285
+ if(this.searchText === null){
286
+ v.forEach((item) => {
287
+ this.select(item.value, this.isSelectAll)
288
+ })
289
+ }else {
290
+ let result= v.filter((item) => {
291
+ return item.label.includes(this.searchText)
292
+ }).forEach((item) => {
293
+ this.select(item.value, this.isSelectAll)
294
+ })
295
+ }
296
+ },
297
+ select (v, flag) {
298
+ if (flag == true) {
299
+ if (this.multiple) {
300
+ this.value.$remove(v)
301
+ this.value.push(v)
302
+ } else if (this.closeOnSelect) {
303
+ this.toggleDropdown()
304
+ }
305
+ } else if (flag == false) {
306
+ if (this.multiple) {
307
+ this.value.$remove(v)
308
+ } else if (this.closeOnSelect) {
309
+ this.toggleDropdown()
310
+ }
311
+ } else if (flag == null) {
312
+ if (this.valueSingle || !this.value || this.value.indexOf(v) === -1) {
313
+ if (this.multiple) {
314
+ this.value.push(v)
315
+ } else {
316
+ if (this.value == v) {
317
+ this.value = undefined
318
+ } else if (this.valueSingle) {
319
+ this.value = v
320
+ } else {
321
+ this.value = [v]
322
+ }
323
+ }
324
+ } else {
325
+ if (this.multiple || this.value) {
326
+ this.value.$remove(v)
327
+ }
328
+ }
329
+ if (this.closeOnSelect) {
330
+ this.toggleDropdown()
331
+ }
332
+ }
333
+ this.judgBoundary()
334
+ this.$emit('select-changed', v)
335
+ },
336
+
337
+ isSelected(v) {
338
+ if (this.value === false? false: !this.value) {
339
+ return false
340
+ }
341
+ if (this.value.constructor !== Array) {
342
+ return this.value == v
343
+ } else {
344
+ return this.value.indexOf(v) !== -1
345
+ }
346
+
347
+ },
348
+ toggleDropdown() {
349
+ this.width = this.$els.group.clientWidth * this.width +'px'
350
+ this.show = !this.show
351
+ },
352
+ putOptions (val) {
353
+ if (this.enterPush) {
354
+ let sign = false
355
+ this.options.forEach((item) => {
356
+ if (val === item.label) {
357
+ sign = true
358
+ }
359
+ })
360
+ }
361
+ this.judgBoundary();
362
+ },
363
+ judgBoundary(){
364
+ //判断是否超出边界,超出移动
365
+ if(this.menuMode != 'align-button' && document.documentElement.offsetWidth< this.$els.dropdown.getBoundingClientRect().right){
366
+ this.left = document.documentElement.offsetWidth - this.$els.dropdown.getBoundingClientRect().right - 25
367
+ }
368
+ }
369
+ },
370
+ beforeDestroy() {
371
+ if (this._closeEvent) this._closeEvent.remove()
372
+ }
373
+ }
374
+ </script>
375
+
376
+ <style scoped>
377
+ .bs-searchbox {
378
+ padding: 4px 8px;
379
+ }
380
+ .menu-align-right {
381
+ left: unset;
382
+ right: 0;
383
+ }
384
+ .btn-group .dropdown-menu .notify {
385
+ position: absolute;
386
+ bottom: 5px;
387
+ width: 96%;
388
+ margin: 0 2%;
389
+ min-height: 26px;
390
+ padding: 3px 5px;
391
+ background: #f5f5f5;
392
+ /*border: 1px solid #e3e3e3;*/
393
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.05);
394
+ pointer-events: none;
395
+ opacity: .9;
396
+ overflow: hidden;
397
+ text-overflow: ellipsis;
398
+ }
399
+ .select-style {
400
+ border: 0px;
401
+ /*border-bottom: 2px solid #C9CCCF;*/
402
+ border: 1px solid #93B2D3;
403
+ border-radius: 0px;
404
+ color: #555;
405
+ overflow:hidden;text-overflow:ellipsis;
406
+ }
407
+ /* 为新产品增加修改菜单选项 */
408
+ .vselect-self-style {
409
+ text-align: center;
410
+ border: 2px dashed #ccc;
411
+ margin: 5px 10px;
412
+ border-radius: 5px;
413
+ }
414
+ /* 当内容超过最大时,显示省略,长度不能超过最大值 */
415
+ .btn-group > button {
416
+ max-width: 100%;
417
+ }
418
+ .btn-group > button .btn-content {
419
+ max-width: 100%;
420
+ }
421
+ </style>