vue2-client 1.1.0 → 1.2.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 (132) hide show
  1. package/.eslintrc.js +81 -81
  2. package/README.md +4 -2
  3. package/babel.config.js +14 -14
  4. package/docs/index.md +29 -29
  5. package/{src/index.js → index.js} +8 -8
  6. package/jest.config.js +3 -3
  7. package/package.json +1 -1
  8. package/public/index.html +27 -27
  9. package/src/App.vue +93 -93
  10. package/src/base-client/all.js +26 -26
  11. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +4 -4
  12. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  13. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +3 -3
  14. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  15. package/src/base-client/components/common/CustomColumnsDrawer/index.md +46 -46
  16. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +3 -3
  17. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  18. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  19. package/src/base-client/components/common/XAddForm/XAddForm.vue +3 -3
  20. package/src/base-client/components/common/XAddForm/index.md +60 -60
  21. package/src/base-client/components/common/XBadge/index.md +39 -39
  22. package/src/base-client/components/common/XCard/index.md +43 -43
  23. package/src/base-client/components/common/XForm/XForm.vue +2 -2
  24. package/src/base-client/components/common/XForm/XFormItem.vue +1 -1
  25. package/src/base-client/components/common/XForm/index.md +3 -3
  26. package/src/base-client/components/common/XFormCol/index.md +35 -35
  27. package/src/base-client/components/common/XFormTable/XFormTable.vue +6 -6
  28. package/src/base-client/components/common/XFormTable/index.md +89 -89
  29. package/src/base-client/components/common/XTable/XTable.vue +3 -3
  30. package/src/base-client/components/common/XTable/index.md +3 -3
  31. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +105 -105
  32. package/src/base-client/components/iot/CustomerDetailsView/CustomerDetailsView.vue +3 -3
  33. package/src/base-client/components/iot/CustomerDetailsView/index.md +41 -41
  34. package/src/base-client/components/iot/DataAnalysisUser/DataAnalysisUser.vue +127 -127
  35. package/src/base-client/components/iot/DataAnalysisViewGD/DataAnalysisViewGD.vue +5 -5
  36. package/src/base-client/components/iot/DeviceBrandDetailsView/DeviceBrandDetailsView.vue +3 -3
  37. package/src/base-client/components/iot/DeviceDetailsView/DeviceDetailsView.vue +3 -3
  38. package/src/base-client/components/iot/DeviceDetailsView/index.md +43 -43
  39. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsCount.vue +1 -1
  40. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsException.vue +57 -57
  41. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsInstruct.vue +122 -122
  42. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsInstructOperate.vue +4 -4
  43. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsMain.vue +225 -225
  44. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsRead.vue +135 -135
  45. package/src/base-client/components/iot/DeviceTypeDetailsView/DeviceTypeDetailsView.vue +3 -3
  46. package/src/base-client/components/iot/InstructDetailsView/InstructDetailsView.vue +5 -5
  47. package/src/base-client/components/iot/InstructDetailsView/index.md +45 -45
  48. package/src/base-client/components/iot/LogDetailsView/LogDetailsView.vue +3 -3
  49. package/src/base-client/components/iot/LogDetailsView/index.md +43 -43
  50. package/src/base-client/components/iot/MeterDetailsView/MeterDetailsView.vue +3 -3
  51. package/src/base-client/components/iot/MeterDetailsView/index.md +43 -43
  52. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsCount.vue +1 -1
  53. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsException.vue +3 -3
  54. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsHandPlan.vue +3 -3
  55. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsInstruct.vue +4 -4
  56. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsMain.vue +3 -3
  57. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsSellGas.vue +3 -3
  58. package/src/base-client/components/iot/WebmeterAnalysisView/WebmeterAnalysisView.vue +4 -4
  59. package/src/base-client/components/iot/WebmeterAnalysisView/index.md +48 -48
  60. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +4 -4
  61. package/src/base-client/components/system/DictionaryDetailsView/index.md +41 -41
  62. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +3 -3
  63. package/src/base-client/components/ticket/EmployeeDetailsView/EmployeeDetailsView.vue +5 -5
  64. package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +5 -5
  65. package/src/base-client/components/ticket/TicketDetailsView/part/TicketDetailsFlow.vue +3 -3
  66. package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +6 -6
  67. package/src/base-client/plugins/AppData.js +3 -3
  68. package/src/base-client/plugins/GetLoginInfoService.js +2 -2
  69. package/src/base-client/plugins/index.js +4 -4
  70. package/src/bootstrap.js +4 -4
  71. package/src/components/Ellipsis/Ellipsis.vue +64 -64
  72. package/src/components/Ellipsis/index.md +38 -38
  73. package/src/components/NumberInfo/index.md +43 -43
  74. package/src/components/STable/README.md +341 -341
  75. package/src/components/Trend/index.md +45 -45
  76. package/src/components/cache/AKeepAlive.js +172 -172
  77. package/src/components/checkbox/index.js +7 -7
  78. package/src/components/index.js +36 -36
  79. package/src/components/menu/menu.js +273 -273
  80. package/src/components/setting/Setting.vue +237 -237
  81. package/src/components/table/advance/AdvanceTable.vue +275 -275
  82. package/src/components/transition/PageToggleTransition.vue +97 -97
  83. package/src/config/default/setting.config.js +33 -33
  84. package/src/layouts/CommonLayout.vue +42 -42
  85. package/src/layouts/ComponentLayoutOne.vue +47 -47
  86. package/src/layouts/PageLayout.vue +151 -151
  87. package/src/layouts/SinglePageView.vue +74 -74
  88. package/src/layouts/header/AdminHeader.vue +109 -109
  89. package/src/layouts/header/HeaderAvatar.vue +60 -60
  90. package/src/layouts/header/HeaderNotice.vue +1 -1
  91. package/src/layouts/tabs/TabsHead.vue +190 -190
  92. package/src/layouts/tabs/TabsView.vue +355 -355
  93. package/src/main.js +2 -2
  94. package/src/mock/common/reportData.js +20 -20
  95. package/src/mock/goods/index.js +108 -108
  96. package/src/mock/index.js +12 -12
  97. package/src/mock/project/index.js +17 -17
  98. package/src/mock/user/current.js +13 -13
  99. package/src/mock/user/login.js +39 -39
  100. package/src/mock/user/routes.js +61 -61
  101. package/src/mock/workplace/index.js +15 -15
  102. package/src/pages/exception/403.vue +2 -2
  103. package/src/pages/exception/404.vue +2 -2
  104. package/src/pages/exception/500.vue +2 -2
  105. package/src/pages/login/Login.vue +8 -8
  106. package/src/pages/report/ReportTable.js +125 -125
  107. package/src/pages/report/ReportTableHome.vue +2 -2
  108. package/src/pages/resourceManage/resourceManageMain.vue +1 -1
  109. package/src/pages/system/applyInstallView/Core.vue +570 -570
  110. package/src/pages/system/applyInstallView/index.vue +34 -34
  111. package/src/pages/system/dictionary/index.vue +41 -41
  112. package/src/pages/system/queryParams/index.vue +41 -41
  113. package/src/router/async/config.async.js +25 -25
  114. package/src/router/async/router.map.js +13 -13
  115. package/src/router/guards.js +104 -104
  116. package/src/router/index.js +2 -2
  117. package/src/services/api/common.js +1 -1
  118. package/src/services/api/restTools.js +1 -1
  119. package/src/services/dataSource.js +12 -12
  120. package/src/services/user.js +34 -34
  121. package/src/store/index.js +5 -5
  122. package/src/store/modules/setting.js +114 -114
  123. package/src/theme/index.less +5 -5
  124. package/src/theme/reportTable.less +58 -58
  125. package/src/utils/i18n.js +80 -80
  126. package/src/utils/indexedDB.js +1 -1
  127. package/src/utils/request.js +1 -1
  128. package/src/utils/routerUtil.js +3 -3
  129. package/tests/unit/ReportTable.spec.js +2 -2
  130. package/vue.config.js +1 -0
  131. package/webpack.config.js +1 -1
  132. package/src/router/config.js +0 -23
@@ -1,275 +1,275 @@
1
- <template>
2
- <div ref="table" :id="id" class="advanced-table">
3
- <a-spin :spinning="loading">
4
- <div :class="['header-bar', size]">
5
- <div class="title">
6
- <template v-if="title">{{ title }}</template>
7
- <slot v-else-if="$slots.title" name="title"></slot>
8
- <template v-else>高级表格</template>
9
- </div>
10
- <div class="search">
11
- <search-area :format-conditions="formatConditions" @change="onSearchChange" :columns="columns" >
12
- <template :slot="slot" v-for="slot in slots">
13
- <slot :name="slot"></slot>
14
- </template>
15
- </search-area>
16
- </div>
17
- <div class="actions">
18
- <a-tooltip title="刷新">
19
- <a-icon @click="refresh" class="action" :type="loading ? 'loading' : 'reload'" />
20
- </a-tooltip>
21
- <action-size v-model="sSize" class="action" />
22
- <a-tooltip title="列配置">
23
- <action-columns :columns="columns" @reset="onColumnsReset" class="action">
24
- <template :slot="slot" v-for="slot in slots">
25
- <slot :name="slot"></slot>
26
- </template>
27
- </action-columns>
28
- </a-tooltip>
29
- <a-tooltip title="全屏">
30
- <a-icon @click="toggleScreen" class="action" :type="fullScreen ? 'fullscreen-exit' : 'fullscreen'" />
31
- </a-tooltip>
32
- </div>
33
- </div>
34
- <a-table
35
- v-bind="{...$props, columns: visibleColumns, title: undefined, loading: false}"
36
- :size="sSize"
37
- @expandedRowsChange="onExpandedRowsChange"
38
- @change="onChange"
39
- @expand="onExpand"
40
- >
41
- <template slot-scope="text, record, index" :slot="slot" v-for="slot in scopedSlots ">
42
- <slot :name="slot" v-bind="{text, record, index}"></slot>
43
- </template>
44
- <template :slot="slot" v-for="slot in slots">
45
- <slot :name="slot"></slot>
46
- </template>
47
- <template slot-scope="record, index, indent, expanded" :slot="$scopedSlots.expandedRowRender ? 'expandedRowRender' : ''">
48
- <slot v-bind="{record, index, indent, expanded}" :name="$scopedSlots.expandedRowRender ? 'expandedRowRender' : ''"></slot>
49
- </template>
50
- </a-table>
51
- </a-spin>
52
- </div>
53
- </template>
54
-
55
- <script>
56
- import ActionSize from '@/components/table/advance/ActionSize'
57
- import ActionColumns from '@/components/table/advance/ActionColumns'
58
- import SearchArea from '@/components/table/advance/SearchArea'
59
- export default {
60
- name: 'AdvanceTable',
61
- components: { SearchArea, ActionColumns, ActionSize },
62
- props: {
63
- // eslint-disable-next-line vue/require-default-prop
64
- tableLayout: String,
65
- bordered: Boolean,
66
- childrenColumnName: { type: String, default: 'children' },
67
- // eslint-disable-next-line vue/require-default-prop
68
- columns: Array,
69
- // eslint-disable-next-line vue/require-default-prop
70
- components: Object,
71
- // eslint-disable-next-line vue/require-default-prop
72
- dataSource: Array,
73
- // eslint-disable-next-line vue/require-default-prop
74
- defaultExpandAllRows: Array[String],
75
- // eslint-disable-next-line vue/require-default-prop
76
- expandedRowKeys: Array[String],
77
- // eslint-disable-next-line vue/require-default-prop
78
- expandedRowRender: Function,
79
- // eslint-disable-next-line vue/require-default-prop
80
- expandIcon: Function,
81
- // eslint-disable-next-line vue/require-default-prop
82
- expandRowByClick: Boolean,
83
- // eslint-disable-next-line vue/require-default-prop
84
- expandIconColumnIndex: Number,
85
- // eslint-disable-next-line vue/require-default-prop
86
- footer: Function,
87
- // eslint-disable-next-line vue/require-default-prop
88
- indentSize: Number,
89
- // eslint-disable-next-line vue/require-default-prop
90
- loading: Boolean,
91
- // eslint-disable-next-line vue/require-default-prop
92
- locale: Object,
93
- // eslint-disable-next-line vue/require-default-prop
94
- pagination: [Object, Boolean],
95
- // eslint-disable-next-line vue/require-default-prop
96
- rowClassName: Function,
97
- // eslint-disable-next-line vue/require-default-prop
98
- rowKey: [String, Function],
99
- // eslint-disable-next-line vue/require-default-prop
100
- rowSelection: Object,
101
- // eslint-disable-next-line vue/require-default-prop
102
- scroll: Object,
103
- // eslint-disable-next-line vue/require-default-prop
104
- showHeader: { type: Boolean, default: true },
105
- // eslint-disable-next-line vue/require-default-prop
106
- size: String,
107
- // eslint-disable-next-line vue/require-default-prop
108
- title: String,
109
- // eslint-disable-next-line vue/require-default-prop
110
- customHeaderRow: Function,
111
- // eslint-disable-next-line vue/require-default-prop
112
- customRow: Function,
113
- // eslint-disable-next-line vue/require-default-prop
114
- getPopupContainer: Function,
115
- // eslint-disable-next-line vue/require-default-prop
116
- transformCellText: Function,
117
- formatConditions: Boolean
118
- },
119
- provide () {
120
- return {
121
- table: this
122
- }
123
- },
124
- data () {
125
- return {
126
- id: `${new Date().getTime()}-${Math.floor(Math.random() * 10)}`,
127
- sSize: this.size || 'default',
128
- fullScreen: false,
129
- conditions: {}
130
- }
131
- },
132
- computed: {
133
- slots () {
134
- return Object.keys(this.$slots).filter(slot => slot !== 'title')
135
- },
136
- scopedSlots () {
137
- return Object.keys(this.$scopedSlots).filter(slot => slot !== 'expandedRowRender' && slot !== 'title')
138
- },
139
- visibleColumns () {
140
- return this.columns.filter(col => col.visible)
141
- }
142
- },
143
- created () {
144
- this.addListener()
145
- },
146
- beforeDestroy () {
147
- this.removeListener()
148
- },
149
- methods: {
150
- refresh () {
151
- this.$emit('refresh', this.conditions)
152
- },
153
- onSearchChange (conditions, searchOptions) {
154
- this.conditions = conditions
155
- this.$emit('search', conditions, searchOptions)
156
- },
157
- toggleScreen () {
158
- if (this.fullScreen) {
159
- this.outFullScreen()
160
- } else {
161
- this.inFullScreen()
162
- }
163
- },
164
- inFullScreen () {
165
- const el = this.$refs.table
166
- el.classList.add('beauty-scroll')
167
- if (el.requestFullscreen) {
168
- el.requestFullscreen()
169
- return true
170
- } else if (el.webkitRequestFullScreen) {
171
- el.webkitRequestFullScreen()
172
- return true
173
- } else if (el.mozRequestFullScreen) {
174
- el.mozRequestFullScreen()
175
- return true
176
- } else if (el.msRequestFullscreen) {
177
- el.msRequestFullscreen()
178
- return true
179
- }
180
- this.$message.warn('对不起,您的浏览器不支持全屏模式')
181
- el.classList.remove('beauty-scroll')
182
- return false
183
- },
184
- outFullScreen () {
185
- if (document.exitFullscreen) {
186
- document.exitFullscreen()
187
- } else if (document.webkitCancelFullScreen) {
188
- document.webkitCancelFullScreen()
189
- } else if (document.mozCancelFullScreen) {
190
- document.mozCancelFullScreen()
191
- } else if (document.msExitFullscreen) {
192
- document.msExitFullscreen()
193
- }
194
- this.$refs.table.classList.remove('beauty-scroll')
195
- },
196
- onColumnsReset (conditions) {
197
- this.$emit('reset', conditions)
198
- },
199
- onExpandedRowsChange (expandedRows) {
200
- this.$emit('expandedRowsChange', expandedRows)
201
- },
202
- onChange (pagination, filters, sorter, options) {
203
- this.$emit('change', pagination, filters, sorter, options)
204
- },
205
- onExpand (expanded, record) {
206
- this.$emit('expand', expanded, record)
207
- },
208
- addListener () {
209
- document.addEventListener('fullscreenchange', this.fullScreenListener)
210
- document.addEventListener('webkitfullscreenchange', this.fullScreenListener)
211
- document.addEventListener('mozfullscreenchange', this.fullScreenListener)
212
- document.addEventListener('msfullscreenchange', this.fullScreenListener)
213
- },
214
- removeListener () {
215
- document.removeEventListener('fullscreenchange', this.fullScreenListener)
216
- document.removeEventListener('webkitfullscreenchange', this.fullScreenListener)
217
- document.removeEventListener('mozfullscreenchange', this.fullScreenListener)
218
- document.removeEventListener('msfullscreenchange', this.fullScreenListener)
219
- },
220
- fullScreenListener (e) {
221
- if (e.target.id === this.id) {
222
- this.fullScreen = !this.fullScreen
223
- }
224
- }
225
- }
226
- }
227
- </script>
228
-
229
- <style scoped lang="less">
230
- .advanced-table{
231
- overflow-y: auto;
232
- background-color: @component-background;
233
- .header-bar{
234
- padding: 16px 24px;
235
- display: flex;
236
- align-items: center;
237
- border-radius: 4px;
238
- transition: all 0.3s;
239
- &.middle{
240
- padding: 12px 16px;
241
- }
242
- &.small{
243
- padding: 8px 12px;
244
- border: 1px solid @border-color;
245
- border-bottom: 0;
246
- .title{
247
- font-size: 16px;
248
- }
249
- }
250
- .title{
251
- transition: all 0.3s;
252
- font-size: 18px;
253
- color: @title-color;
254
- font-weight: 700;
255
- }
256
- .search{
257
- flex: 1;
258
- text-align: right;
259
- margin: 0 24px;
260
- }
261
- .actions{
262
- text-align: right;
263
- font-size: 17px;
264
- color: @text-color;
265
- .action{
266
- margin: 0 8px;
267
- cursor: pointer;
268
- &:hover{
269
- color: @primary-color;
270
- }
271
- }
272
- }
273
- }
274
- }
275
- </style>
1
+ <template>
2
+ <div ref="table" :id="id" class="advanced-table">
3
+ <a-spin :spinning="loading">
4
+ <div :class="['header-bar', size]">
5
+ <div class="title">
6
+ <template v-if="title">{{ title }}</template>
7
+ <slot v-else-if="$slots.title" name="title"></slot>
8
+ <template v-else>高级表格</template>
9
+ </div>
10
+ <div class="search">
11
+ <search-area :format-conditions="formatConditions" @change="onSearchChange" :columns="columns" >
12
+ <template :slot="slot" v-for="slot in slots">
13
+ <slot :name="slot"></slot>
14
+ </template>
15
+ </search-area>
16
+ </div>
17
+ <div class="actions">
18
+ <a-tooltip title="刷新">
19
+ <a-icon @click="refresh" class="action" :type="loading ? 'loading' : 'reload'" />
20
+ </a-tooltip>
21
+ <action-size v-model="sSize" class="action" />
22
+ <a-tooltip title="列配置">
23
+ <action-columns :columns="columns" @reset="onColumnsReset" class="action">
24
+ <template :slot="slot" v-for="slot in slots">
25
+ <slot :name="slot"></slot>
26
+ </template>
27
+ </action-columns>
28
+ </a-tooltip>
29
+ <a-tooltip title="全屏">
30
+ <a-icon @click="toggleScreen" class="action" :type="fullScreen ? 'fullscreen-exit' : 'fullscreen'" />
31
+ </a-tooltip>
32
+ </div>
33
+ </div>
34
+ <a-table
35
+ v-bind="{...$props, columns: visibleColumns, title: undefined, loading: false}"
36
+ :size="sSize"
37
+ @expandedRowsChange="onExpandedRowsChange"
38
+ @change="onChange"
39
+ @expand="onExpand"
40
+ >
41
+ <template slot-scope="text, record, index" :slot="slot" v-for="slot in scopedSlots ">
42
+ <slot :name="slot" v-bind="{text, record, index}"></slot>
43
+ </template>
44
+ <template :slot="slot" v-for="slot in slots">
45
+ <slot :name="slot"></slot>
46
+ </template>
47
+ <template slot-scope="record, index, indent, expanded" :slot="$scopedSlots.expandedRowRender ? 'expandedRowRender' : ''">
48
+ <slot v-bind="{record, index, indent, expanded}" :name="$scopedSlots.expandedRowRender ? 'expandedRowRender' : ''"></slot>
49
+ </template>
50
+ </a-table>
51
+ </a-spin>
52
+ </div>
53
+ </template>
54
+
55
+ <script>
56
+ import ActionSize from '@vue2-client/components/table/advance/ActionSize'
57
+ import ActionColumns from '@vue2-client/components/table/advance/ActionColumns'
58
+ import SearchArea from '@vue2-client/components/table/advance/SearchArea'
59
+ export default {
60
+ name: 'AdvanceTable',
61
+ components: { SearchArea, ActionColumns, ActionSize },
62
+ props: {
63
+ // eslint-disable-next-line vue/require-default-prop
64
+ tableLayout: String,
65
+ bordered: Boolean,
66
+ childrenColumnName: { type: String, default: 'children' },
67
+ // eslint-disable-next-line vue/require-default-prop
68
+ columns: Array,
69
+ // eslint-disable-next-line vue/require-default-prop
70
+ components: Object,
71
+ // eslint-disable-next-line vue/require-default-prop
72
+ dataSource: Array,
73
+ // eslint-disable-next-line vue/require-default-prop
74
+ defaultExpandAllRows: Array[String],
75
+ // eslint-disable-next-line vue/require-default-prop
76
+ expandedRowKeys: Array[String],
77
+ // eslint-disable-next-line vue/require-default-prop
78
+ expandedRowRender: Function,
79
+ // eslint-disable-next-line vue/require-default-prop
80
+ expandIcon: Function,
81
+ // eslint-disable-next-line vue/require-default-prop
82
+ expandRowByClick: Boolean,
83
+ // eslint-disable-next-line vue/require-default-prop
84
+ expandIconColumnIndex: Number,
85
+ // eslint-disable-next-line vue/require-default-prop
86
+ footer: Function,
87
+ // eslint-disable-next-line vue/require-default-prop
88
+ indentSize: Number,
89
+ // eslint-disable-next-line vue/require-default-prop
90
+ loading: Boolean,
91
+ // eslint-disable-next-line vue/require-default-prop
92
+ locale: Object,
93
+ // eslint-disable-next-line vue/require-default-prop
94
+ pagination: [Object, Boolean],
95
+ // eslint-disable-next-line vue/require-default-prop
96
+ rowClassName: Function,
97
+ // eslint-disable-next-line vue/require-default-prop
98
+ rowKey: [String, Function],
99
+ // eslint-disable-next-line vue/require-default-prop
100
+ rowSelection: Object,
101
+ // eslint-disable-next-line vue/require-default-prop
102
+ scroll: Object,
103
+ // eslint-disable-next-line vue/require-default-prop
104
+ showHeader: { type: Boolean, default: true },
105
+ // eslint-disable-next-line vue/require-default-prop
106
+ size: String,
107
+ // eslint-disable-next-line vue/require-default-prop
108
+ title: String,
109
+ // eslint-disable-next-line vue/require-default-prop
110
+ customHeaderRow: Function,
111
+ // eslint-disable-next-line vue/require-default-prop
112
+ customRow: Function,
113
+ // eslint-disable-next-line vue/require-default-prop
114
+ getPopupContainer: Function,
115
+ // eslint-disable-next-line vue/require-default-prop
116
+ transformCellText: Function,
117
+ formatConditions: Boolean
118
+ },
119
+ provide () {
120
+ return {
121
+ table: this
122
+ }
123
+ },
124
+ data () {
125
+ return {
126
+ id: `${new Date().getTime()}-${Math.floor(Math.random() * 10)}`,
127
+ sSize: this.size || 'default',
128
+ fullScreen: false,
129
+ conditions: {}
130
+ }
131
+ },
132
+ computed: {
133
+ slots () {
134
+ return Object.keys(this.$slots).filter(slot => slot !== 'title')
135
+ },
136
+ scopedSlots () {
137
+ return Object.keys(this.$scopedSlots).filter(slot => slot !== 'expandedRowRender' && slot !== 'title')
138
+ },
139
+ visibleColumns () {
140
+ return this.columns.filter(col => col.visible)
141
+ }
142
+ },
143
+ created () {
144
+ this.addListener()
145
+ },
146
+ beforeDestroy () {
147
+ this.removeListener()
148
+ },
149
+ methods: {
150
+ refresh () {
151
+ this.$emit('refresh', this.conditions)
152
+ },
153
+ onSearchChange (conditions, searchOptions) {
154
+ this.conditions = conditions
155
+ this.$emit('search', conditions, searchOptions)
156
+ },
157
+ toggleScreen () {
158
+ if (this.fullScreen) {
159
+ this.outFullScreen()
160
+ } else {
161
+ this.inFullScreen()
162
+ }
163
+ },
164
+ inFullScreen () {
165
+ const el = this.$refs.table
166
+ el.classList.add('beauty-scroll')
167
+ if (el.requestFullscreen) {
168
+ el.requestFullscreen()
169
+ return true
170
+ } else if (el.webkitRequestFullScreen) {
171
+ el.webkitRequestFullScreen()
172
+ return true
173
+ } else if (el.mozRequestFullScreen) {
174
+ el.mozRequestFullScreen()
175
+ return true
176
+ } else if (el.msRequestFullscreen) {
177
+ el.msRequestFullscreen()
178
+ return true
179
+ }
180
+ this.$message.warn('对不起,您的浏览器不支持全屏模式')
181
+ el.classList.remove('beauty-scroll')
182
+ return false
183
+ },
184
+ outFullScreen () {
185
+ if (document.exitFullscreen) {
186
+ document.exitFullscreen()
187
+ } else if (document.webkitCancelFullScreen) {
188
+ document.webkitCancelFullScreen()
189
+ } else if (document.mozCancelFullScreen) {
190
+ document.mozCancelFullScreen()
191
+ } else if (document.msExitFullscreen) {
192
+ document.msExitFullscreen()
193
+ }
194
+ this.$refs.table.classList.remove('beauty-scroll')
195
+ },
196
+ onColumnsReset (conditions) {
197
+ this.$emit('reset', conditions)
198
+ },
199
+ onExpandedRowsChange (expandedRows) {
200
+ this.$emit('expandedRowsChange', expandedRows)
201
+ },
202
+ onChange (pagination, filters, sorter, options) {
203
+ this.$emit('change', pagination, filters, sorter, options)
204
+ },
205
+ onExpand (expanded, record) {
206
+ this.$emit('expand', expanded, record)
207
+ },
208
+ addListener () {
209
+ document.addEventListener('fullscreenchange', this.fullScreenListener)
210
+ document.addEventListener('webkitfullscreenchange', this.fullScreenListener)
211
+ document.addEventListener('mozfullscreenchange', this.fullScreenListener)
212
+ document.addEventListener('msfullscreenchange', this.fullScreenListener)
213
+ },
214
+ removeListener () {
215
+ document.removeEventListener('fullscreenchange', this.fullScreenListener)
216
+ document.removeEventListener('webkitfullscreenchange', this.fullScreenListener)
217
+ document.removeEventListener('mozfullscreenchange', this.fullScreenListener)
218
+ document.removeEventListener('msfullscreenchange', this.fullScreenListener)
219
+ },
220
+ fullScreenListener (e) {
221
+ if (e.target.id === this.id) {
222
+ this.fullScreen = !this.fullScreen
223
+ }
224
+ }
225
+ }
226
+ }
227
+ </script>
228
+
229
+ <style scoped lang="less">
230
+ .advanced-table{
231
+ overflow-y: auto;
232
+ background-color: @component-background;
233
+ .header-bar{
234
+ padding: 16px 24px;
235
+ display: flex;
236
+ align-items: center;
237
+ border-radius: 4px;
238
+ transition: all 0.3s;
239
+ &.middle{
240
+ padding: 12px 16px;
241
+ }
242
+ &.small{
243
+ padding: 8px 12px;
244
+ border: 1px solid @border-color;
245
+ border-bottom: 0;
246
+ .title{
247
+ font-size: 16px;
248
+ }
249
+ }
250
+ .title{
251
+ transition: all 0.3s;
252
+ font-size: 18px;
253
+ color: @title-color;
254
+ font-weight: 700;
255
+ }
256
+ .search{
257
+ flex: 1;
258
+ text-align: right;
259
+ margin: 0 24px;
260
+ }
261
+ .actions{
262
+ text-align: right;
263
+ font-size: 17px;
264
+ color: @text-color;
265
+ .action{
266
+ margin: 0 8px;
267
+ cursor: pointer;
268
+ &:hover{
269
+ color: @primary-color;
270
+ }
271
+ }
272
+ }
273
+ }
274
+ }
275
+ </style>