vue2-client 1.3.1 → 1.3.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 (108) hide show
  1. package/CHANGELOG.md +9 -1
  2. package/index.js +30 -28
  3. package/package.json +1 -1
  4. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +225 -225
  5. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +777 -777
  6. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +553 -553
  7. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +165 -163
  8. package/src/base-client/components/common/ScrollList/ScrollList.vue +113 -0
  9. package/src/base-client/components/common/ScrollList/index.js +3 -0
  10. package/src/base-client/components/common/Upload/Upload.vue +161 -158
  11. package/src/base-client/components/common/XAddForm/XAddForm.vue +349 -349
  12. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +321 -322
  13. package/src/base-client/components/common/XForm/XForm.vue +273 -268
  14. package/src/base-client/components/common/XForm/XFormItem.vue +387 -371
  15. package/src/base-client/components/common/XFormTable/XFormTable.vue +6 -5
  16. package/src/base-client/components/common/XTable/XTable.vue +278 -274
  17. package/src/base-client/components/{iot → system}/LogDetailsView/LogDetailsView.vue +0 -0
  18. package/src/base-client/components/{iot → system}/LogDetailsView/index.js +0 -0
  19. package/src/base-client/components/{iot → system}/LogDetailsView/index.md +0 -0
  20. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -280
  21. package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +806 -804
  22. package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +24 -24
  23. package/src/base-client/plugins/PagedList.js +177 -176
  24. package/src/components/STable/index.js +318 -316
  25. package/src/components/index.js +36 -36
  26. package/src/components/table/StandardTable.vue +141 -142
  27. package/src/components/tool/TagSelect.vue +83 -83
  28. package/src/layouts/header/AdminHeader.vue +104 -109
  29. package/src/layouts/header/HeaderNotice.vue +167 -199
  30. package/src/layouts/header/InstitutionDetail.vue +181 -182
  31. package/src/pages/CreateQueryPage.vue +65 -59
  32. package/src/pages/system/dictionary/index.vue +43 -41
  33. package/src/pages/system/file/Info.vue +56 -0
  34. package/src/pages/system/file/index.vue +317 -0
  35. package/src/pages/system/queryParams/index.vue +43 -41
  36. package/src/pages/system/ticket/index.vue +458 -452
  37. package/src/pages/system/ticket/submitTicketSuccess.vue +206 -203
  38. package/src/router/async/config.async.js +2 -1
  39. package/src/router/async/router.map.js +56 -60
  40. package/src/services/api/DictionaryDetailsViewApi.js +6 -6
  41. package/src/services/api/LogDetailsViewApi.js +10 -10
  42. package/src/services/api/QueryParamsDetailsViewApi.js +6 -6
  43. package/src/services/api/TicketDetailsViewApi.js +42 -40
  44. package/src/services/api/commonTempTable.js +10 -0
  45. package/src/services/api/index.js +2 -24
  46. package/src/services/api/manage.js +8 -16
  47. package/src/utils/excel/Blob.js +181 -181
  48. package/src/utils/excel/Export2Excel.js +141 -142
  49. package/src/utils/i18n.js +80 -80
  50. package/src/utils/request.js +4 -4
  51. package/src/utils/routerUtil.js +358 -350
  52. package/src/utils/theme-color-replacer-extend.js +91 -92
  53. package/vue.config.js +109 -163
  54. package/src/base-client/all.js +0 -62
  55. package/src/base-client/components/iot/CustomerDetailsView/CustomerDetailsView.vue +0 -225
  56. package/src/base-client/components/iot/CustomerDetailsView/index.js +0 -3
  57. package/src/base-client/components/iot/CustomerDetailsView/index.md +0 -40
  58. package/src/base-client/components/iot/DataAnalysisUser/DataAnalysisUser.vue +0 -127
  59. package/src/base-client/components/iot/DataAnalysisUser/index.js +0 -3
  60. package/src/base-client/components/iot/DeviceBrandDetailsView/DeviceBrandDetailsView.vue +0 -452
  61. package/src/base-client/components/iot/DeviceBrandDetailsView/index.js +0 -3
  62. package/src/base-client/components/iot/DeviceDetailsView/DeviceDetailsView.vue +0 -232
  63. package/src/base-client/components/iot/DeviceDetailsView/index.js +0 -3
  64. package/src/base-client/components/iot/DeviceDetailsView/index.md +0 -41
  65. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsCount.vue +0 -678
  66. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsException.vue +0 -57
  67. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsInstruct.vue +0 -122
  68. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsInstructOperate.vue +0 -121
  69. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsMain.vue +0 -269
  70. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsRead.vue +0 -131
  71. package/src/base-client/components/iot/DeviceDetailsView/part/index.js +0 -8
  72. package/src/base-client/components/iot/DeviceTypeDetailsView/DeviceTypeDetailsView.vue +0 -300
  73. package/src/base-client/components/iot/DeviceTypeDetailsView/index.js +0 -3
  74. package/src/base-client/components/iot/InstructDetailsView/InstructDetailsView.vue +0 -464
  75. package/src/base-client/components/iot/InstructDetailsView/index.js +0 -3
  76. package/src/base-client/components/iot/InstructDetailsView/index.md +0 -43
  77. package/src/base-client/components/iot/MeterDetailsView/MeterDetailsView.vue +0 -352
  78. package/src/base-client/components/iot/MeterDetailsView/index.js +0 -3
  79. package/src/base-client/components/iot/MeterDetailsView/index.md +0 -41
  80. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsCount.vue +0 -330
  81. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsException.vue +0 -179
  82. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsHandPlan.vue +0 -285
  83. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsInstruct.vue +0 -230
  84. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsMain.vue +0 -251
  85. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsSellGas.vue +0 -184
  86. package/src/base-client/components/iot/MeterDetailsView/part/index.js +0 -9
  87. package/src/base-client/components/iot/WebmeterAnalysisView/WebmeterAnalysisView.vue +0 -960
  88. package/src/base-client/components/iot/WebmeterAnalysisView/index.js +0 -3
  89. package/src/base-client/components/iot/WebmeterAnalysisView/index.md +0 -42
  90. package/src/base-client/components/ticket/EmployeeDetailsView/EmployeeDetailsView.vue +0 -370
  91. package/src/base-client/components/ticket/EmployeeDetailsView/index.js +0 -3
  92. package/src/base-client/components/ticket/EmployeeDetailsView/index.md +0 -28
  93. package/src/components/Charts/DataUserOrderSituation.vue +0 -77
  94. package/src/components/Charts/DataUserReporting.vue +0 -74
  95. package/src/components/Charts/DataUserSituation.vue +0 -107
  96. package/src/services/api/CustomerDetailsViewApi.js +0 -6
  97. package/src/services/api/DeviceBrandDetailsViewApi.js +0 -14
  98. package/src/services/api/DeviceDetailsViewApi.js +0 -10
  99. package/src/services/api/DeviceTypeDetailsViewApi.js +0 -6
  100. package/src/services/api/EmployeeDetailsViewApi.js +0 -12
  101. package/src/services/api/FormGroupEditApi.js +0 -6
  102. package/src/services/api/InstructDetailsViewApi.js +0 -12
  103. package/src/services/api/MeterDetailsViewApi.js +0 -24
  104. package/src/services/api/WebmeterAnalysisViewApi.js +0 -24
  105. package/src/services/api/applyInstallApi.js +0 -14
  106. package/src/services/api/iot/DeviceDetailsView/DeviceDetailsCountApi.js +0 -18
  107. package/src/services/api/iot.js +0 -7
  108. package/src/services/api/service.js +0 -12
@@ -1,36 +1,36 @@
1
- // chart
2
- import Bar from '@vue2-client/components/Charts/Bar'
3
- import ChartCard from '@vue2-client/components/Charts/ChartCard'
4
- import Liquid from '@vue2-client/components/Charts/Liquid'
5
- import MiniArea from '@vue2-client/components/Charts/MiniArea'
6
- import MiniSmoothArea from '@vue2-client/components/Charts/MiniSmoothArea'
7
- import MiniBar from '@vue2-client/components/Charts/MiniBar'
8
- import MiniProgress from '@vue2-client/components/Charts/MiniProgress'
9
- import Radar from '@vue2-client/components/Charts/Radar'
10
- import RankList from '@vue2-client/components/Charts/RankList'
11
- import TransferBar from '@vue2-client/components/Charts/TransferBar'
12
- import TagCloud from '@vue2-client/components/Charts/TagCloud'
13
-
14
- // pro components
15
- import Ellipsis from '@vue2-client/components/Ellipsis'
16
- import NumberInfo from '@vue2-client/components/NumberInfo'
17
- import STable from '@vue2-client/components/STable'
18
- import Trend from '@vue2-client/components/Trend'
19
-
20
- export {
21
- Bar,
22
- ChartCard,
23
- Liquid,
24
- MiniArea,
25
- MiniSmoothArea,
26
- MiniBar,
27
- MiniProgress,
28
- Radar,
29
- TagCloud,
30
- RankList,
31
- TransferBar,
32
- Ellipsis,
33
- NumberInfo,
34
- STable,
35
- Trend
36
- }
1
+ // chart
2
+ import Bar from '@vue2-client/components/Charts/Bar'
3
+ import ChartCard from '@vue2-client/components/Charts/ChartCard'
4
+ import Liquid from '@vue2-client/components/Charts/Liquid'
5
+ import MiniArea from '@vue2-client/components/Charts/MiniArea'
6
+ import MiniSmoothArea from '@vue2-client/components/Charts/MiniSmoothArea'
7
+ import MiniBar from '@vue2-client/components/Charts/MiniBar'
8
+ import MiniProgress from '@vue2-client/components/Charts/MiniProgress'
9
+ import Radar from '@vue2-client/components/Charts/Radar'
10
+ import RankList from '@vue2-client/components/Charts/RankList'
11
+ import TagCloud from '@vue2-client/components/Charts/TagCloud'
12
+ import TransferBar from '@vue2-client/components/Charts/TransferBar'
13
+ import Trend from '@vue2-client/components/Trend'
14
+
15
+ // pro components
16
+ import Ellipsis from '@vue2-client/components/Ellipsis'
17
+ import NumberInfo from '@vue2-client/components/NumberInfo'
18
+ import STable from '@vue2-client/components/STable'
19
+
20
+ export {
21
+ Bar,
22
+ ChartCard,
23
+ Liquid,
24
+ MiniArea,
25
+ MiniSmoothArea,
26
+ MiniBar,
27
+ MiniProgress,
28
+ Radar,
29
+ TagCloud,
30
+ RankList,
31
+ TransferBar,
32
+ Ellipsis,
33
+ NumberInfo,
34
+ STable,
35
+ Trend
36
+ }
@@ -1,142 +1,141 @@
1
- <template>
2
- <div class="standard-table">
3
- <div class="alert">
4
- <a-alert type="info" :show-icon="true" v-if="selectedRows">
5
- <div class="message" slot="message">
6
- 已选择&nbsp;<a>{{ selectedRows.length }}</a>&nbsp;项 <a class="clear" @click="onClear">清空</a>
7
- <template v-for="(item, index) in needTotalList" >
8
- <div v-if="item.needTotal" :key="index">
9
- {{ item.title }}总计&nbsp;
10
- <a>{{ item.customRender ? item.customRender(item.total) : item.total }}</a>
11
- </div>
12
- </template>
13
- </div>
14
- </a-alert>
15
- </div>
16
- <a-table
17
- :bordered="bordered"
18
- :loading="loading"
19
- :columns="columns"
20
- :dataSource="dataSource"
21
- :rowKey="rowKey"
22
- :pagination="pagination"
23
- :expandedRowKeys="expandedRowKeys"
24
- :expandedRowRender="expandedRowRender"
25
- @change="onChange"
26
- :rowSelection="selectedRows ? {selectedRowKeys: selectedRowKeys, onChange: updateSelect} : undefined"
27
- >
28
- <template slot-scope="text, record, index" :slot="slot" v-for="slot in Object.keys($scopedSlots).filter(key => key !== 'expandedRowRender') ">
29
- <slot :name="slot" v-bind="{text, record, index}"></slot>
30
- </template>
31
- <template :slot="slot" v-for="slot in Object.keys($slots)">
32
- <slot :name="slot"></slot>
33
- </template>
34
- <template slot-scope="record, index, indent, expanded" :slot="$scopedSlots.expandedRowRender ? 'expandedRowRender' : ''">
35
- <slot v-bind="{record, index, indent, expanded}" :name="$scopedSlots.expandedRowRender ? 'expandedRowRender' : ''"></slot>
36
- </template>
37
- </a-table>
38
- </div>
39
- </template>
40
-
41
- <script>
42
- export default {
43
- name: 'StandardTable',
44
- props: {
45
- bordered: Boolean,
46
- // eslint-disable-next-line vue/require-default-prop
47
- loading: [Boolean, Object],
48
- // eslint-disable-next-line vue/require-default-prop
49
- columns: Array,
50
- // eslint-disable-next-line vue/require-default-prop
51
- dataSource: Array,
52
- rowKey: {
53
- type: [String, Function],
54
- default: 'key'
55
- },
56
- pagination: {
57
- type: [Object, Boolean],
58
- default: true
59
- },
60
- // eslint-disable-next-line vue/require-default-prop
61
- selectedRows: Array,
62
- // eslint-disable-next-line vue/require-default-prop
63
- expandedRowKeys: Array,
64
- // eslint-disable-next-line vue/require-default-prop
65
- expandedRowRender: Function
66
- },
67
- data () {
68
- return {
69
- needTotalList: []
70
- }
71
- },
72
- methods: {
73
- updateSelect (selectedRowKeys, selectedRows) {
74
- this.$emit('update:selectedRows', selectedRows)
75
- this.$emit('selectedRowChange', selectedRowKeys, selectedRows)
76
- },
77
- initTotalList (columns) {
78
- const totalList = columns.filter(item => item.needTotal)
79
- .map(item => {
80
- return {
81
- ...item,
82
- total: 0
83
- }
84
- })
85
- return totalList
86
- },
87
- onClear () {
88
- this.updateSelect([], [])
89
- this.$emit('clear')
90
- },
91
- onChange (pagination, filters, sorter, { currentDataSource }) {
92
- this.$emit('change', pagination, filters, sorter, { currentDataSource })
93
- }
94
- },
95
- created () {
96
- this.needTotalList = this.initTotalList(this.columns)
97
- },
98
- watch: {
99
- selectedRows (selectedRows) {
100
- this.needTotalList = this.needTotalList.map(item => {
101
- return {
102
- ...item,
103
- total: selectedRows.reduce((sum, val) => {
104
- let v
105
- try {
106
- // eslint-disable-next-line no-eval
107
- v = val[item.dataIndex] ? val[item.dataIndex] : eval(`val.${item.dataIndex}`)
108
- } catch (_) {
109
- v = val[item.dataIndex]
110
- }
111
- v = !isNaN(parseFloat(v)) ? parseFloat(v) : 0
112
- return sum + v
113
- }, 0)
114
- }
115
- })
116
- }
117
- },
118
- computed: {
119
- selectedRowKeys () {
120
- return this.selectedRows.map(record => {
121
- return (typeof this.rowKey === 'function') ? this.rowKey(record) : record[this.rowKey]
122
- })
123
- }
124
- }
125
- }
126
- </script>
127
-
128
- <style scoped lang="less">
129
- .standard-table{
130
- .alert{
131
- margin-bottom: 16px;
132
- .message{
133
- a{
134
- font-weight: 600;
135
- }
136
- }
137
- .clear{
138
- float: right;
139
- }
140
- }
141
- }
142
- </style>
1
+ <template>
2
+ <div class="standard-table">
3
+ <div class="alert">
4
+ <a-alert v-if="selectedRows" :show-icon="true" type="info">
5
+ <div slot="message" class="message">
6
+ 已选择&nbsp;<a>{{ selectedRows.length }}</a>&nbsp;项 <a class="clear" @click="onClear">清空</a>
7
+ <template v-for="(item, index) in needTotalList" >
8
+ <div v-if="item.needTotal" :key="index">
9
+ {{ item.title }}总计&nbsp;
10
+ <a>{{ item.customRender ? item.customRender(item.total) : item.total }}</a>
11
+ </div>
12
+ </template>
13
+ </div>
14
+ </a-alert>
15
+ </div>
16
+ <a-table
17
+ :bordered="bordered"
18
+ :columns="columns"
19
+ :dataSource="dataSource"
20
+ :expandedRowKeys="expandedRowKeys"
21
+ :expandedRowRender="expandedRowRender"
22
+ :loading="loading"
23
+ :pagination="pagination"
24
+ :rowKey="rowKey"
25
+ :rowSelection="selectedRows ? {selectedRowKeys: selectedRowKeys, onChange: updateSelect} : undefined"
26
+ @change="onChange"
27
+ >
28
+ <template v-for="slot in Object.keys($scopedSlots).filter(key => key !== 'expandedRowRender') " :slot="slot" slot-scope="text, record, index">
29
+ <slot :name="slot" v-bind="{text, record, index}"></slot>
30
+ </template>
31
+ <template v-for="slot in Object.keys($slots)" :slot="slot">
32
+ <slot :name="slot"></slot>
33
+ </template>
34
+ <template :slot="$scopedSlots.expandedRowRender ? 'expandedRowRender' : ''" slot-scope="record, index, indent, expanded">
35
+ <slot :name="$scopedSlots.expandedRowRender ? 'expandedRowRender' : ''" v-bind="{record, index, indent, expanded}"></slot>
36
+ </template>
37
+ </a-table>
38
+ </div>
39
+ </template>
40
+
41
+ <script>
42
+ export default {
43
+ name: 'StandardTable',
44
+ props: {
45
+ bordered: Boolean,
46
+ // eslint-disable-next-line vue/require-default-prop
47
+ loading: [Boolean, Object],
48
+ // eslint-disable-next-line vue/require-default-prop
49
+ columns: Array,
50
+ // eslint-disable-next-line vue/require-default-prop
51
+ dataSource: Array,
52
+ rowKey: {
53
+ type: [String, Function],
54
+ default: 'key'
55
+ },
56
+ pagination: {
57
+ type: [Object, Boolean],
58
+ default: true
59
+ },
60
+ // eslint-disable-next-line vue/require-default-prop
61
+ selectedRows: Array,
62
+ // eslint-disable-next-line vue/require-default-prop
63
+ expandedRowKeys: Array,
64
+ // eslint-disable-next-line vue/require-default-prop
65
+ expandedRowRender: Function
66
+ },
67
+ data () {
68
+ return {
69
+ needTotalList: []
70
+ }
71
+ },
72
+ methods: {
73
+ updateSelect (selectedRowKeys, selectedRows) {
74
+ this.$emit('update:selectedRows', selectedRows)
75
+ this.$emit('selectedRowChange', selectedRowKeys, selectedRows)
76
+ },
77
+ initTotalList (columns) {
78
+ return columns.filter(item => item.needTotal)
79
+ .map(item => {
80
+ return {
81
+ ...item,
82
+ total: 0
83
+ }
84
+ })
85
+ },
86
+ onClear () {
87
+ this.updateSelect([], [])
88
+ this.$emit('clear')
89
+ },
90
+ onChange (pagination, filters, sorter, { currentDataSource }) {
91
+ this.$emit('change', pagination, filters, sorter, { currentDataSource })
92
+ }
93
+ },
94
+ created () {
95
+ this.needTotalList = this.initTotalList(this.columns)
96
+ },
97
+ watch: {
98
+ selectedRows (selectedRows) {
99
+ this.needTotalList = this.needTotalList.map(item => {
100
+ return {
101
+ ...item,
102
+ total: selectedRows.reduce((sum, val) => {
103
+ let v
104
+ try {
105
+ // eslint-disable-next-line no-eval
106
+ v = val[item.dataIndex] ? val[item.dataIndex] : eval(`val.${item.dataIndex}`)
107
+ } catch (_) {
108
+ v = val[item.dataIndex]
109
+ }
110
+ v = !isNaN(parseFloat(v)) ? parseFloat(v) : 0
111
+ return sum + v
112
+ }, 0)
113
+ }
114
+ })
115
+ }
116
+ },
117
+ computed: {
118
+ selectedRowKeys () {
119
+ return this.selectedRows.map(record => {
120
+ return (typeof this.rowKey === 'function') ? this.rowKey(record) : record[this.rowKey]
121
+ })
122
+ }
123
+ }
124
+ }
125
+ </script>
126
+
127
+ <style lang="less" scoped>
128
+ .standard-table{
129
+ .alert{
130
+ margin-bottom: 16px;
131
+ .message{
132
+ a{
133
+ font-weight: 600;
134
+ }
135
+ }
136
+ .clear{
137
+ float: right;
138
+ }
139
+ }
140
+ }
141
+ </style>
@@ -1,83 +1,83 @@
1
- <template>
2
- <div class="tag-select">
3
- <tag-select-option @click="toggleCheck">全部</tag-select-option>
4
- <slot></slot>
5
- <a @click="toggle" v-show="showTrigger" ref="trigger" class="trigger">展开<a-icon style="margin-left: 5px" :type="collapsed ? 'down' : 'up'"/></a>
6
- </div>
7
- </template>
8
-
9
- <script>
10
- import TagSelectOption from './TagSelectOption'
11
- export default {
12
- name: 'TagSelect',
13
- Option: TagSelectOption,
14
- components: { TagSelectOption },
15
- data () {
16
- return {
17
- showTrigger: false,
18
- collapsed: true,
19
- screenWidth: document.body.clientWidth,
20
- checkAll: false
21
- }
22
- },
23
- watch: {
24
- screenWidth: function () {
25
- this.showTrigger = this.needTrigger()
26
- },
27
- collapsed: function (val) {
28
- this.$el.style.maxHeight = val ? '39px' : '78px'
29
- }
30
- },
31
- mounted () {
32
- const _this = this
33
- // 此处延迟执行,是为解决mouted未完全完成情况下引发的trigger显示bug
34
- setTimeout(() => {
35
- _this.showTrigger = _this.needTrigger()
36
- _this.$refs.trigger.style.display = _this.showTrigger ? 'inline' : 'none'
37
- }, 1)
38
- window.onresize = () => {
39
- return (() => {
40
- window.screenWidth = document.body.clientWidth
41
- _this.screenWidth = window.screenWidth
42
- })()
43
- }
44
- },
45
- methods: {
46
- needTrigger () {
47
- return this.$el.clientHeight < this.$el.scrollHeight || this.$el.scrollHeight > 39
48
- },
49
- toggle () {
50
- this.collapsed = !this.collapsed
51
- },
52
- getAllTags () {
53
- const tagList = this.$children.filter((item) => {
54
- return item.isTagSelectOption
55
- })
56
- return tagList
57
- },
58
- toggleCheck () {
59
- this.checkAll = !this.checkAll
60
- const tagList = this.getAllTags()
61
- tagList.forEach((item) => {
62
- item.checked = this.checkAll
63
- })
64
- }
65
- }
66
- }
67
- </script>
68
-
69
- <style lang="less" scoped>
70
- .tag-select{
71
- user-select: none;
72
- position: relative;
73
- overflow: hidden;
74
- max-height: 39px;
75
- padding-right: 50px;
76
- display: inline-block;
77
- }
78
- .trigger{
79
- position: absolute;
80
- top: 0;
81
- right: 0;
82
- }
83
- </style>
1
+ <template>
2
+ <div class="tag-select">
3
+ <tag-select-option @click="toggleCheck">全部</tag-select-option>
4
+ <slot></slot>
5
+ <a v-show="showTrigger" ref="trigger" class="trigger" @click="toggle">展开<a-icon :type="collapsed ? 'down' : 'up'" style="margin-left: 5px"/></a>
6
+ </div>
7
+ </template>
8
+
9
+ <script>
10
+ import TagSelectOption from './TagSelectOption'
11
+
12
+ export default {
13
+ name: 'TagSelect',
14
+ Option: TagSelectOption,
15
+ components: { TagSelectOption },
16
+ data () {
17
+ return {
18
+ showTrigger: false,
19
+ collapsed: true,
20
+ screenWidth: document.body.clientWidth,
21
+ checkAll: false
22
+ }
23
+ },
24
+ watch: {
25
+ screenWidth: function () {
26
+ this.showTrigger = this.needTrigger()
27
+ },
28
+ collapsed: function (val) {
29
+ this.$el.style.maxHeight = val ? '39px' : '78px'
30
+ }
31
+ },
32
+ mounted () {
33
+ const _this = this
34
+ // 此处延迟执行,是为解决mouted未完全完成情况下引发的trigger显示bug
35
+ setTimeout(() => {
36
+ _this.showTrigger = _this.needTrigger()
37
+ _this.$refs.trigger.style.display = _this.showTrigger ? 'inline' : 'none'
38
+ }, 1)
39
+ window.onresize = () => {
40
+ return (() => {
41
+ window.screenWidth = document.body.clientWidth
42
+ _this.screenWidth = window.screenWidth
43
+ })()
44
+ }
45
+ },
46
+ methods: {
47
+ needTrigger () {
48
+ return this.$el.clientHeight < this.$el.scrollHeight || this.$el.scrollHeight > 39
49
+ },
50
+ toggle () {
51
+ this.collapsed = !this.collapsed
52
+ },
53
+ getAllTags () {
54
+ return this.$children.filter((item) => {
55
+ return item.isTagSelectOption
56
+ })
57
+ },
58
+ toggleCheck () {
59
+ this.checkAll = !this.checkAll
60
+ const tagList = this.getAllTags()
61
+ tagList.forEach((item) => {
62
+ item.checked = this.checkAll
63
+ })
64
+ }
65
+ }
66
+ }
67
+ </script>
68
+
69
+ <style lang="less" scoped>
70
+ .tag-select{
71
+ user-select: none;
72
+ position: relative;
73
+ overflow: hidden;
74
+ max-height: 39px;
75
+ padding-right: 50px;
76
+ display: inline-block;
77
+ }
78
+ .trigger{
79
+ position: absolute;
80
+ top: 0;
81
+ right: 0;
82
+ }
83
+ </style>