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,109 +1,104 @@
1
- <template>
2
- <a-layout-header :class="[headerTheme, 'admin-header']">
3
- <div :class="['admin-header-wide', layout, pageWidth]">
4
- <router-link v-if="isMobile || layout === 'head'" to="/" :class="['logo', isMobile ? null : 'pc', headerTheme]">
5
- <img width="32" src="@vue2-client/assets/img/logo.png" />
6
- <h1 v-if="!isMobile">{{ systemName }}</h1>
7
- </router-link>
8
- <a-divider v-if="isMobile" type="vertical" />
9
- <a-icon v-if="layout !== 'head'" class="trigger" :type="collapsed ? 'menu-unfold' : 'menu-fold'" @click="toggleCollapse"/>
10
- <div v-if="layout !== 'side' && !isMobile" class="admin-header-menu" :style="`width: ${menuWidth};`">
11
- <i-menu class="head-menu" :theme="headerTheme" mode="horizontal" :options="menuData" @select="onSelect"/>
12
- </div>
13
- <div :class="['admin-header-right', headerTheme]">
14
- <header-search class="header-item" @active="val => searchActive = val" />
15
- <a-tooltip class="header-item" title="清理查询缓存" placement="bottom" >
16
- <a @click="handleToClearCache">
17
- <a-icon type="reload" />
18
- </a>
19
- </a-tooltip>
20
- <a-tooltip class="header-item" title="帮助文档" placement="bottom" >
21
- <a href="https://iczer.gitee.io/vue-antd-admin-docs/" target="_blank">
22
- <a-icon type="question-circle-o" />
23
- </a>
24
- </a-tooltip>
25
- <header-notice class="header-item"/>
26
- <header-avatar class="header-item"/>
27
- <a-dropdown class="lang header-item">
28
- <div>
29
- <a-icon type="global"/> {{ langAlias }}
30
- </div>
31
- <a-menu @click="val => setLang(val.key)" :selected-keys="[lang]" slot="overlay">
32
- <a-menu-item v-for=" lang in langList" :key="lang.key">{{ lang.key.toLowerCase() + ' ' + lang.name }}</a-menu-item>
33
- </a-menu>
34
- </a-dropdown>
35
- </div>
36
- </div>
37
- </a-layout-header>
38
- </template>
39
-
40
- <script>
41
- import HeaderSearch from './HeaderSearch'
42
- import HeaderNotice from './HeaderNotice'
43
- import HeaderAvatar from './HeaderAvatar'
44
- import IMenu from '@vue2-client/components/menu/menu'
45
- import { mapState, mapMutations } from 'vuex'
46
- import { Modal } from 'ant-design-vue'
47
- import { indexedDB } from '@vue2-client/utils/indexedDB'
48
-
49
- export default {
50
- name: 'AdminHeader',
51
- components: { IMenu, HeaderAvatar, HeaderNotice, HeaderSearch },
52
- // eslint-disable-next-line vue/require-prop-types
53
- props: ['collapsed', 'menuData'],
54
- data () {
55
- return {
56
- langList: [
57
- { key: 'CN', name: '简体中文', alias: '简体' },
58
- { key: 'HK', name: '繁體中文', alias: '繁體' },
59
- { key: 'US', name: 'English', alias: 'English' }
60
- ],
61
- searchActive: false
62
- }
63
- },
64
- computed: {
65
- ...mapState('setting', ['theme', 'isMobile', 'layout', 'systemName', 'lang', 'pageWidth']),
66
- headerTheme () {
67
- if (this.layout == 'side' && this.theme.mode == 'dark' && !this.isMobile) {
68
- return 'light'
69
- }
70
- return this.theme.mode
71
- },
72
- langAlias () {
73
- const lang = this.langList.find(item => item.key == this.lang)
74
- return lang.alias
75
- },
76
- menuWidth () {
77
- const { layout, searchActive } = this
78
- const headWidth = layout === 'head' ? '100% - 188px' : '100%'
79
- const extraWidth = searchActive ? '600px' : '400px'
80
- return `calc(${headWidth} - ${extraWidth})`
81
- }
82
- },
83
- methods: {
84
- toggleCollapse () {
85
- this.$emit('toggleCollapse')
86
- },
87
- onSelect (obj) {
88
- this.$emit('menuSelect', obj)
89
- },
90
- handleToClearCache () {
91
- Modal.confirm({
92
- title: '信息',
93
- content: '您确定要清除查询配置缓存吗?',
94
- onOk: () => {
95
- indexedDB.clear(() => {
96
- location.reload()
97
- })
98
- },
99
- onCancel () {}
100
- })
101
- },
102
- ...mapMutations('setting', ['setLang'])
103
- }
104
- }
105
- </script>
106
-
107
- <style lang="less" scoped>
108
- @import "index";
109
- </style>
1
+ <template>
2
+ <a-layout-header :class="[headerTheme, 'admin-header']">
3
+ <div :class="['admin-header-wide', layout, pageWidth]">
4
+ <router-link v-if="isMobile || layout === 'head'" :class="['logo', isMobile ? null : 'pc', headerTheme]" to="/">
5
+ <img src="@vue2-client/assets/img/logo.png" width="32" />
6
+ <h1 v-if="!isMobile">{{ systemName }}</h1>
7
+ </router-link>
8
+ <a-divider v-if="isMobile" type="vertical" />
9
+ <a-icon v-if="layout !== 'head'" :type="collapsed ? 'menu-unfold' : 'menu-fold'" class="trigger" @click="toggleCollapse"/>
10
+ <div v-if="layout !== 'side' && !isMobile" :style="`width: ${menuWidth};`" class="admin-header-menu">
11
+ <i-menu :options="menuData" :theme="headerTheme" class="head-menu" mode="horizontal" @select="onSelect"/>
12
+ </div>
13
+ <div :class="['admin-header-right', headerTheme]">
14
+ <header-search class="header-item" @active="val => searchActive = val" />
15
+ <a-tooltip class="header-item" placement="bottom" title="清理查询缓存" >
16
+ <a @click="handleToClearCache">
17
+ <a-icon type="reload" />
18
+ </a>
19
+ </a-tooltip>
20
+ <header-notice class="header-item"/>
21
+ <header-avatar class="header-item"/>
22
+ <a-dropdown class="lang header-item">
23
+ <div>
24
+ <a-icon type="global"/> {{ langAlias }}
25
+ </div>
26
+ <a-menu slot="overlay" :selected-keys="[lang]" @click="val => setLang(val.key)">
27
+ <a-menu-item v-for=" lang in langList" :key="lang.key">{{ lang.key.toLowerCase() + ' ' + lang.name }}</a-menu-item>
28
+ </a-menu>
29
+ </a-dropdown>
30
+ </div>
31
+ </div>
32
+ </a-layout-header>
33
+ </template>
34
+
35
+ <script>
36
+ import HeaderSearch from './HeaderSearch'
37
+ import HeaderNotice from './HeaderNotice'
38
+ import HeaderAvatar from './HeaderAvatar'
39
+ import IMenu from '@vue2-client/components/menu/menu'
40
+ import { mapState, mapMutations } from 'vuex'
41
+ import { Modal } from 'ant-design-vue'
42
+ import { indexedDB } from '@vue2-client/utils/indexedDB'
43
+
44
+ export default {
45
+ name: 'AdminHeader',
46
+ components: { IMenu, HeaderAvatar, HeaderNotice, HeaderSearch },
47
+ // eslint-disable-next-line vue/require-prop-types
48
+ props: ['collapsed', 'menuData'],
49
+ data () {
50
+ return {
51
+ langList: [
52
+ { key: 'CN', name: '简体中文', alias: '简体' },
53
+ { key: 'HK', name: '繁體中文', alias: '繁體' },
54
+ { key: 'US', name: 'English', alias: 'English' }
55
+ ],
56
+ searchActive: false
57
+ }
58
+ },
59
+ computed: {
60
+ ...mapState('setting', ['theme', 'isMobile', 'layout', 'systemName', 'lang', 'pageWidth']),
61
+ headerTheme () {
62
+ if (this.layout == 'side' && this.theme.mode == 'dark' && !this.isMobile) {
63
+ return 'light'
64
+ }
65
+ return this.theme.mode
66
+ },
67
+ langAlias () {
68
+ const lang = this.langList.find(item => item.key == this.lang)
69
+ return lang.alias
70
+ },
71
+ menuWidth () {
72
+ const { layout, searchActive } = this
73
+ const headWidth = layout === 'head' ? '100% - 188px' : '100%'
74
+ const extraWidth = searchActive ? '600px' : '400px'
75
+ return `calc(${headWidth} - ${extraWidth})`
76
+ }
77
+ },
78
+ methods: {
79
+ toggleCollapse () {
80
+ this.$emit('toggleCollapse')
81
+ },
82
+ onSelect (obj) {
83
+ this.$emit('menuSelect', obj)
84
+ },
85
+ handleToClearCache () {
86
+ Modal.confirm({
87
+ title: '信息',
88
+ content: '您确定要清除查询配置缓存吗?',
89
+ onOk: () => {
90
+ indexedDB.clear(() => {
91
+ location.reload()
92
+ })
93
+ },
94
+ onCancel () {}
95
+ })
96
+ },
97
+ ...mapMutations('setting', ['setLang'])
98
+ }
99
+ }
100
+ </script>
101
+
102
+ <style lang="less" scoped>
103
+ @import "index";
104
+ </style>
@@ -1,199 +1,167 @@
1
- <template>
2
- <a-dropdown :trigger="['click']" v-model="show">
3
- <div slot="overlay">
4
- <a-spin :spinning="loading">
5
- <a-tabs
6
- class="dropdown-tabs"
7
- :tabBarStyle="{textAlign: 'center'}"
8
- :style="{width: '297px'}"
9
- v-model="activeKey">
10
- <a-tab-pane tab="通知" key="1">
11
- <a-list>
12
- <a-list-item :key="item.id" class="tab-pane" v-for=" item in exception">
13
- <a-list-item-meta
14
- :title="'设备号'+ item.e_f_device_id"
15
- :description="item.e_f_error_msg"
16
- @click="read(item)">
17
- <a-avatar
18
- style="background-color: white"
19
- slot="avatar"
20
- src="https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png"/>
21
- </a-list-item-meta>
22
- </a-list-item>
23
- </a-list>
24
- </a-tab-pane>
25
- <a-tab-pane tab="消息" key="2">
26
- <a-list class="tab-pane"></a-list>
27
- </a-tab-pane>
28
- <a-tab-pane tab="待办" key="3">
29
- <a-list item-layout="horizontal" :data-source="backlog" :bordered="true">
30
- <a-list-item slot="renderItem" slot-scope="item, index">
31
- <a slot="actions" v-if="item.type==='制度待确认'" @click="confirm_institution(item)">查看</a>
32
- <a-list-item-meta :title="item.title" :description="item.description"/>
33
- </a-list-item>
34
- </a-list>
35
- </a-tab-pane>
36
- <a-drawer
37
- placement="right"
38
- :width="screenWidth * 0.5"
39
- :visible="institutionDetailVisible"
40
- :closable="false"
41
- @close="onClose"
42
- >
43
- <institution-detail
44
- :institutionId="institution"
45
- :affirmInstitution="affirmInstitution"
46
- @get_to_be_confirmed="getToBeConfirmed"/>
47
- </a-drawer>
48
- </a-tabs>
49
- </a-spin>
50
- </div>
51
- <span @click="fetchNotice" class="header-notice">
52
- <a-badge class="notice-badge" :count="exception.length + backlog.length">
53
- <a-icon :class="['header-notice-icon']" type="bell"/>
54
- </a-badge>
55
- </span>
56
- </a-dropdown>
57
- </template>
58
-
59
- <script>
60
- import { post } from '@vue2-client/services/api'
61
- import InstitutionDetail from './InstitutionDetail'
62
-
63
- export default {
64
- name: 'HeaderNotice',
65
- data () {
66
- return {
67
- loading: false,
68
- screenWidth: document.documentElement.clientWidth,
69
- show: false,
70
- institutionDetailVisible: false,
71
- institution: undefined,
72
- affirmInstitution: undefined,
73
- exception: [],
74
- backlog: [],
75
- activeKey: '1'
76
- }
77
- },
78
- components: { InstitutionDetail },
79
- computed: {},
80
- created () {
81
- this.getToBeConfirmed()
82
- },
83
- methods: {
84
- onClose () {
85
- this.institutionDetailVisible = false
86
- this.getToBeConfirmed()
87
- },
88
- read (item) {
89
- post('/webmeterapi/saveSingleTable', {
90
- data: {
91
- tablename: 't_iot_device_exception',
92
- param: { id: item.e_id, f_is_read: 1 }
93
- }
94
- }).then(res => {
95
- this.refresh()
96
- })
97
- },
98
- getToBeConfirmed () {
99
- this.institutionDetailVisible = false
100
- try {
101
- if (this.$login.f.name) {
102
- post('/webmetersql/getToBeConfirmed', { data: { condition: `state = '待确认' and f_affirm_by = '${this.$login.f.name}'` } }).then(res => {
103
- this.backlog = [...res]
104
- if (this.backlog.length > 0) {
105
- const key = `open${Date.now()}`
106
- this.$notification.open({
107
- key,
108
- message: `您有${this.backlog.length}条待办需要确认`,
109
- top: '50px',
110
- description: this.backlog.map((item, index) => index + 1 + '、' + item.title).join(';'),
111
- icon: <a-icon type="container" style="color: #f5222d"/>,
112
- btn: h => {
113
- return h(
114
- 'a-button',
115
- {
116
- props: {
117
- type: 'primary',
118
- size: 'small',
119
- },
120
- on: {
121
- click: () => this.viewBacklog(key),
122
- },
123
- },
124
- '查看',
125
- )
126
- }
127
- })
128
- }
129
- })
130
- }
131
- } catch (e) {
132
- console.log(e)
133
- }
134
- },
135
- viewBacklog (key) {
136
- this.$notification.close(key)
137
- this.show = true
138
- this.activeKey = '3'
139
- },
140
- confirm_institution (item) {
141
- this.institutionDetailVisible = true
142
- this.show = false
143
- this.institution = item.institution
144
- this.affirmInstitution = item.id
145
- },
146
- refresh () {
147
- post('/webmeterapi/commonQuery', {
148
- queryParamsName: 'deviceExceptionQueryParams',
149
- conditionParams: { e_f_is_read: 0 },
150
- pageNo: 1,
151
- pageSize: 999999
152
- }).then(res => {
153
- this.exception = res.data
154
- })
155
- },
156
- fetchNotice () {
157
- if (this.loading) {
158
- this.loading = false
159
- return
160
- }
161
- this.loadding = true
162
- setTimeout(() => {
163
- this.loadding = false
164
- }, 1000)
165
- }
166
- }
167
- }
168
- </script>
169
-
170
- <style lang="less">
171
- .header-notice {
172
- display: inline-block;
173
- transition: all 0.3s;
174
-
175
- span {
176
- vertical-align: initial;
177
- }
178
-
179
- .notice-badge {
180
- color: inherit;
181
-
182
- .header-notice-icon {
183
- font-size: 16px;
184
- padding: 4px;
185
- }
186
- }
187
- }
188
-
189
- .dropdown-tabs {
190
- background-color: @base-bg-color;
191
- box-shadow: 0 2px 8px @shadow-color;
192
- border-radius: 4px;
193
-
194
- .tab-pane {
195
- padding: 0 24px 12px;
196
- min-height: 250px;
197
- }
198
- }
199
- </style>
1
+ <template>
2
+ <a-dropdown v-model="show" :trigger="['click']">
3
+ <div slot="overlay">
4
+ <a-spin :spinning="loading">
5
+ <a-tabs
6
+ v-model="activeKey"
7
+ :style="{width: '297px'}"
8
+ :tabBarStyle="{textAlign: 'center'}"
9
+ class="dropdown-tabs">
10
+ <a-tab-pane key="1" tab="通知">
11
+ <a-list class="tab-pane">
12
+ </a-list>
13
+ </a-tab-pane>
14
+ <a-tab-pane key="2" tab="消息">
15
+ <a-list class="tab-pane"></a-list>
16
+ </a-tab-pane>
17
+ <a-tab-pane key="3" tab="待办">
18
+ <a-list :data-source="backlog" class="tab-pane" item-layout="horizontal">
19
+ <a-list-item slot="renderItem" slot-scope="item">
20
+ <a v-if="item.type==='制度待确认'" slot="actions" @click="confirm_institution(item)">查看</a>
21
+ <a-list-item-meta :description="item.description" :title="item.title"/>
22
+ </a-list-item>
23
+ </a-list>
24
+ </a-tab-pane>
25
+ <a-drawer
26
+ :closable="false"
27
+ :visible="institutionDetailVisible"
28
+ :width="screenWidth * 0.5"
29
+ placement="right"
30
+ @close="onClose"
31
+ >
32
+ <institution-detail
33
+ :affirmInstitution="affirmInstitution"
34
+ :institutionId="institution"
35
+ @get_to_be_confirmed="getToBeConfirmed"/>
36
+ </a-drawer>
37
+ </a-tabs>
38
+ </a-spin>
39
+ </div>
40
+ <span class="header-notice" @click="fetchNotice">
41
+ <a-badge :count="backlog.length" class="notice-badge">
42
+ <a-icon :class="['header-notice-icon']" type="bell"/>
43
+ </a-badge>
44
+ </span>
45
+ </a-dropdown>
46
+ </template>
47
+
48
+ <script>
49
+ import { post } from '@vue2-client/services/api'
50
+ import InstitutionDetail from './InstitutionDetail'
51
+
52
+ export default {
53
+ name: 'HeaderNotice',
54
+ data () {
55
+ return {
56
+ loading: false,
57
+ screenWidth: document.documentElement.clientWidth,
58
+ show: false,
59
+ institutionDetailVisible: false,
60
+ institution: undefined,
61
+ affirmInstitution: undefined,
62
+ backlog: [],
63
+ activeKey: '1'
64
+ }
65
+ },
66
+ components: { InstitutionDetail },
67
+ computed: {},
68
+ created () {
69
+ this.getToBeConfirmed()
70
+ },
71
+ methods: {
72
+ onClose () {
73
+ this.institutionDetailVisible = false
74
+ this.getToBeConfirmed()
75
+ },
76
+ getToBeConfirmed () {
77
+ this.institutionDetailVisible = false
78
+ try {
79
+ if (this.$login.f.name) {
80
+ post('/af-system/getTodo', { name: this.$login.f.name }).then(res => {
81
+ this.backlog = [...res]
82
+ if (this.backlog.length > 0) {
83
+ const key = `open${Date.now()}`
84
+ this.$notification.open({
85
+ key,
86
+ message: `您有${this.backlog.length}条待办需要确认`,
87
+ top: '50px',
88
+ description: this.backlog.map((item, index) => index + 1 + '、' + item.title).join(';'),
89
+ icon: <a-icon type="container" style="color: #f5222d"/>,
90
+ btn: h => {
91
+ return h(
92
+ 'a-button',
93
+ {
94
+ props: {
95
+ type: 'primary',
96
+ size: 'small',
97
+ },
98
+ on: {
99
+ click: () => this.viewBacklog(key),
100
+ },
101
+ },
102
+ '查看',
103
+ )
104
+ }
105
+ })
106
+ }
107
+ })
108
+ }
109
+ } catch (e) {
110
+ console.log(e)
111
+ }
112
+ },
113
+ viewBacklog (key) {
114
+ this.$notification.close(key)
115
+ this.show = true
116
+ this.activeKey = '3'
117
+ },
118
+ confirm_institution (item) {
119
+ this.institutionDetailVisible = true
120
+ this.show = false
121
+ this.institution = item.institution
122
+ this.affirmInstitution = item.id
123
+ },
124
+ fetchNotice () {
125
+ if (this.loading) {
126
+ this.loading = false
127
+ return
128
+ }
129
+ this.loadding = true
130
+ setTimeout(() => {
131
+ this.loadding = false
132
+ }, 1000)
133
+ }
134
+ }
135
+ }
136
+ </script>
137
+
138
+ <style lang="less">
139
+ .header-notice {
140
+ display: inline-block;
141
+ transition: all 0.3s;
142
+
143
+ span {
144
+ vertical-align: initial;
145
+ }
146
+
147
+ .notice-badge {
148
+ color: inherit;
149
+
150
+ .header-notice-icon {
151
+ font-size: 16px;
152
+ padding: 4px;
153
+ }
154
+ }
155
+ }
156
+
157
+ .dropdown-tabs {
158
+ background-color: @base-bg-color;
159
+ box-shadow: 0 2px 8px @shadow-color;
160
+ border-radius: 4px;
161
+
162
+ .tab-pane {
163
+ padding: 0 24px 12px;
164
+ min-height: 250px;
165
+ }
166
+ }
167
+ </style>