vue2-client 1.2.0 → 1.2.3

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 (134) hide show
  1. package/README.md +65 -65
  2. package/babel.config.js +1 -0
  3. package/docs/notice.md +22 -0
  4. package/index.js +28 -28
  5. package/package.json +1 -1
  6. package/src/App.vue +93 -93
  7. package/src/assets/img/SunClientDownload.png +0 -0
  8. package/src/assets/img/SunClientManual/1.png +0 -0
  9. package/src/assets/img/SunClientManual/2.png +0 -0
  10. package/src/assets/img/SunClientManual/3.png +0 -0
  11. package/src/assets/img/SunClientManual/4.png +0 -0
  12. package/src/assets/img/ToDeskDownload.png +0 -0
  13. package/src/assets/img/ToDeskManual/1.png +0 -0
  14. package/src/assets/img/ToDeskManual/2.png +0 -0
  15. package/src/assets/img/ToDeskManual/3.png +0 -0
  16. package/src/assets/img/ToDeskManual/4.png +0 -0
  17. package/src/assets/sound/newNote.mp3 +0 -0
  18. package/src/base-client/all.js +57 -57
  19. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +1157 -1159
  20. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  21. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +540 -540
  22. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  23. package/src/base-client/components/common/CustomColumnsDrawer/index.md +46 -46
  24. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +150 -150
  25. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  26. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  27. package/src/base-client/components/common/XAddForm/XAddForm.vue +323 -323
  28. package/src/base-client/components/common/XAddForm/index.md +60 -60
  29. package/src/base-client/components/common/XBadge/index.md +39 -39
  30. package/src/base-client/components/common/XCard/index.md +43 -43
  31. package/src/base-client/components/common/XForm/XForm.vue +275 -275
  32. package/src/base-client/components/common/XForm/XFormItem.vue +217 -217
  33. package/src/base-client/components/common/XForm/index.md +196 -196
  34. package/src/base-client/components/common/XFormCol/index.md +35 -35
  35. package/src/base-client/components/common/XFormTable/XFormTable.vue +407 -405
  36. package/src/base-client/components/common/XFormTable/index.md +89 -89
  37. package/src/base-client/components/common/XTable/XTable.vue +262 -262
  38. package/src/base-client/components/common/XTable/index.md +255 -255
  39. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +105 -105
  40. package/src/base-client/components/iot/CustomerDetailsView/CustomerDetailsView.vue +226 -226
  41. package/src/base-client/components/iot/CustomerDetailsView/index.md +41 -41
  42. package/src/base-client/components/iot/DataAnalysisUser/DataAnalysisUser.vue +127 -127
  43. package/src/base-client/components/iot/DataAnalysisView/DataAnalysisView.vue +244 -250
  44. package/src/base-client/components/iot/DataAnalysisViewGD/DataAnalysisViewGD.vue +548 -548
  45. package/src/base-client/components/iot/DeviceBrandDetailsView/DeviceBrandDetailsView.vue +453 -453
  46. package/src/base-client/components/iot/DeviceDetailsView/DeviceDetailsView.vue +231 -231
  47. package/src/base-client/components/iot/DeviceDetailsView/index.md +43 -43
  48. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsCount.vue +330 -330
  49. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsException.vue +57 -57
  50. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsInstruct.vue +122 -122
  51. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsInstructOperate.vue +122 -122
  52. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsMain.vue +225 -225
  53. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsRead.vue +135 -135
  54. package/src/base-client/components/iot/DeviceTypeDetailsView/DeviceTypeDetailsView.vue +277 -277
  55. package/src/base-client/components/iot/InstructDetailsView/InstructDetailsView.vue +472 -472
  56. package/src/base-client/components/iot/InstructDetailsView/index.md +45 -45
  57. package/src/base-client/components/iot/LogDetailsView/LogDetailsView.vue +380 -380
  58. package/src/base-client/components/iot/LogDetailsView/index.md +43 -43
  59. package/src/base-client/components/iot/MeterDetailsView/MeterDetailsView.vue +360 -360
  60. package/src/base-client/components/iot/MeterDetailsView/index.md +43 -43
  61. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsCount.vue +335 -335
  62. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsException.vue +185 -185
  63. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsHandPlan.vue +292 -292
  64. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsInstruct.vue +237 -237
  65. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsMain.vue +257 -257
  66. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsSellGas.vue +190 -190
  67. package/src/base-client/components/iot/WebmeterAnalysisView/WebmeterAnalysisView.vue +723 -723
  68. package/src/base-client/components/iot/WebmeterAnalysisView/index.md +48 -48
  69. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  70. package/src/base-client/components/system/DictionaryDetailsView/index.md +41 -41
  71. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +248 -248
  72. package/src/base-client/components/ticket/EmployeeDetailsView/EmployeeDetailsView.vue +371 -406
  73. package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +838 -486
  74. package/src/base-client/components/ticket/TicketDetailsView/part/TicketDetailsFlow.vue +261 -184
  75. package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +528 -303
  76. package/src/base-client/plugins/AppData.js +69 -69
  77. package/src/base-client/plugins/GetLoginInfoService.js +221 -221
  78. package/src/base-client/plugins/index.js +21 -21
  79. package/src/bootstrap.js +27 -27
  80. package/src/components/Ellipsis/Ellipsis.vue +64 -64
  81. package/src/components/Ellipsis/index.md +38 -38
  82. package/src/components/NumberInfo/index.md +43 -43
  83. package/src/components/STable/README.md +341 -341
  84. package/src/components/Trend/index.md +45 -45
  85. package/src/components/cache/AKeepAlive.js +172 -172
  86. package/src/components/checkbox/index.js +7 -7
  87. package/src/components/index.js +36 -36
  88. package/src/components/menu/menu.js +273 -273
  89. package/src/components/setting/Setting.vue +237 -237
  90. package/src/components/table/advance/AdvanceTable.vue +275 -275
  91. package/src/components/transition/PageToggleTransition.vue +97 -97
  92. package/src/layouts/CommonLayout.vue +42 -42
  93. package/src/layouts/PageLayout.vue +151 -151
  94. package/src/layouts/SinglePageView.vue +74 -74
  95. package/src/layouts/header/AdminHeader.vue +109 -109
  96. package/src/layouts/header/HeaderAvatar.vue +60 -60
  97. package/src/layouts/header/HeaderNotice.vue +97 -97
  98. package/src/layouts/tabs/TabsHead.vue +190 -190
  99. package/src/layouts/tabs/TabsView.vue +355 -355
  100. package/src/main.js +20 -20
  101. package/src/mock/goods/index.js +108 -108
  102. package/src/mock/index.js +12 -12
  103. package/src/mock/project/index.js +17 -17
  104. package/src/mock/user/current.js +13 -13
  105. package/src/mock/user/login.js +39 -39
  106. package/src/mock/workplace/index.js +15 -15
  107. package/src/pages/exception/403.vue +25 -25
  108. package/src/pages/exception/404.vue +25 -25
  109. package/src/pages/exception/500.vue +25 -25
  110. package/src/pages/login/Login.vue +194 -194
  111. package/src/pages/report/ReportTableHome.vue +28 -28
  112. package/src/pages/resourceManage/resourceManageMain.vue +55 -55
  113. package/src/pages/system/applyInstallView/Core.vue +570 -570
  114. package/src/pages/system/applyInstallView/index.vue +34 -34
  115. package/src/pages/system/dictionary/index.vue +41 -41
  116. package/src/pages/system/queryParams/index.vue +41 -41
  117. package/src/router/async/config.async.js +25 -25
  118. package/src/router/async/router.map.js +59 -59
  119. package/src/router/guards.js +104 -104
  120. package/src/router/index.js +27 -27
  121. package/src/services/api/EmployeeDetailsViewApi.js +3 -1
  122. package/src/services/api/TicketDetailsViewApi.js +9 -1
  123. package/src/services/api/common.js +37 -39
  124. package/src/services/api/restTools.js +23 -23
  125. package/src/services/dataSource.js +12 -12
  126. package/src/services/user.js +34 -34
  127. package/src/store/modules/setting.js +114 -114
  128. package/src/utils/i18n.js +80 -80
  129. package/src/utils/indexedDB.js +146 -146
  130. package/src/utils/request.js +197 -197
  131. package/src/utils/routerUtil.js +15 -2
  132. package/tests/unit/ReportTable.spec.js +15 -15
  133. package/vue.config.js +153 -153
  134. package/webpack.config.js +12 -12
@@ -1,74 +1,74 @@
1
- <template>
2
- <page-toggle-transition :disabled="animate.disabled" :animate="animate.name" :direction="animate.direction">
3
- <template v-if="login">
4
- <iframe
5
- id="singlepageview"
6
- @load="load"
7
- :src="url"
8
- frameborder="0"
9
- ref="singlepage">
10
- </iframe>
11
- </template>
12
- </page-toggle-transition>
13
- </template>
14
-
15
- <script>
16
- import PageToggleTransition from '../components/transition/PageToggleTransition'
17
- import { ACCESS_TOKEN } from '@vue2-client/store/mutation-types'
18
- import { mapState, mapMutations } from 'vuex'
19
-
20
- export default {
21
- name: 'SinglePageView',
22
- components: { PageToggleTransition },
23
- props: {
24
- singlePageUrl: {
25
- type: Object,
26
- default: () => {
27
- return { url: '' }
28
- }
29
- }
30
- },
31
- data () {
32
- return {
33
- url: '../singlepage/page.html',
34
- // singlePageUrl: null,
35
- iframe: {}
36
- }
37
- },
38
- computed: {
39
- ...mapState('setting', ['multiPage', 'animate']),
40
- ...mapState('account', ['login'])
41
- },
42
- mounted () {
43
- if (!this.login) {
44
- this.setLogin(JSON.parse(sessionStorage.getItem(process.env.VUE_APP_LOGIN_KEY)))
45
- }
46
- },
47
- methods: {
48
- ...mapMutations('account', ['setLogin']),
49
- load () {
50
- this.iframe = this.$refs.singlepage.contentWindow
51
- const appdata = {
52
- singleValues: this.$appdata.getSingleValues(),
53
- params: this.$appdata.getParams()
54
- }
55
- const data = {
56
- token: localStorage.getItem(ACCESS_TOKEN),
57
- login: this.login,
58
- appdata: appdata,
59
- page: this.singlePageUrl.url
60
- }
61
- console.log('发送参数', data)
62
- this.iframe.postMessage(data, '*')
63
- }
64
- }
65
- }
66
- </script>
67
-
68
- <style lang="less">
69
- #singlepageview {
70
- width: 100%;
71
- height: calc(100vh - 117px);
72
- border: none;
73
- }
74
- </style>
1
+ <template>
2
+ <page-toggle-transition :disabled="animate.disabled" :animate="animate.name" :direction="animate.direction">
3
+ <template v-if="login">
4
+ <iframe
5
+ id="singlepageview"
6
+ @load="load"
7
+ :src="url"
8
+ frameborder="0"
9
+ ref="singlepage">
10
+ </iframe>
11
+ </template>
12
+ </page-toggle-transition>
13
+ </template>
14
+
15
+ <script>
16
+ import PageToggleTransition from '../components/transition/PageToggleTransition'
17
+ import { ACCESS_TOKEN } from '@vue2-client/store/mutation-types'
18
+ import { mapState, mapMutations } from 'vuex'
19
+
20
+ export default {
21
+ name: 'SinglePageView',
22
+ components: { PageToggleTransition },
23
+ props: {
24
+ singlePageUrl: {
25
+ type: Object,
26
+ default: () => {
27
+ return { url: '' }
28
+ }
29
+ }
30
+ },
31
+ data () {
32
+ return {
33
+ url: '../singlepage/page.html',
34
+ // singlePageUrl: null,
35
+ iframe: {}
36
+ }
37
+ },
38
+ computed: {
39
+ ...mapState('setting', ['multiPage', 'animate']),
40
+ ...mapState('account', ['login'])
41
+ },
42
+ mounted () {
43
+ if (!this.login) {
44
+ this.setLogin(JSON.parse(sessionStorage.getItem(process.env.VUE_APP_LOGIN_KEY)))
45
+ }
46
+ },
47
+ methods: {
48
+ ...mapMutations('account', ['setLogin']),
49
+ load () {
50
+ this.iframe = this.$refs.singlepage.contentWindow
51
+ const appdata = {
52
+ singleValues: this.$appdata.getSingleValues(),
53
+ params: this.$appdata.getParams()
54
+ }
55
+ const data = {
56
+ token: localStorage.getItem(ACCESS_TOKEN),
57
+ login: this.login,
58
+ appdata: appdata,
59
+ page: this.singlePageUrl.url
60
+ }
61
+ console.log('发送参数', data)
62
+ this.iframe.postMessage(data, '*')
63
+ }
64
+ }
65
+ }
66
+ </script>
67
+
68
+ <style lang="less">
69
+ #singlepageview {
70
+ width: 100%;
71
+ height: calc(100vh - 117px);
72
+ border: none;
73
+ }
74
+ </style>
@@ -1,109 +1,109 @@
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="@/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'" to="/" :class="['logo', isMobile ? null : 'pc', headerTheme]">
5
+ <img width="32" src="@/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,60 +1,60 @@
1
- <template>
2
- <a-dropdown>
3
- <div class="header-avatar" style="cursor: pointer">
4
- <a-avatar class="avatar" size="small" shape="circle" :src="user.avatar"/>
5
- <span class="name">{{ user.name }}</span>
6
- </div>
7
- <a-menu :class="['avatar-menu']" slot="overlay">
8
- <a-menu-item>
9
- <a-icon type="user" />
10
- <span>个人中心</span>
11
- </a-menu-item>
12
- <a-menu-item>
13
- <a-icon type="setting" />
14
- <span>设置</span>
15
- </a-menu-item>
16
- <a-menu-divider />
17
- <a-menu-item @click="logout">
18
- <a-icon style="margin-right: 8px;" type="poweroff" />
19
- <span>退出登录</span>
20
- </a-menu-item>
21
- </a-menu>
22
- </a-dropdown>
23
- </template>
24
-
25
- <script>
26
- import { mapGetters } from 'vuex'
27
- import { logout } from '@vue2-client/services/user'
28
-
29
- export default {
30
- name: 'HeaderAvatar',
31
- computed: {
32
- ...mapGetters('account', ['user'])
33
- },
34
- methods: {
35
- logout () {
36
- logout()
37
- this.$router.push('/login')
38
- }
39
- }
40
- }
41
- </script>
42
-
43
- <style lang="less">
44
- .header-avatar{
45
- display: inline-flex;
46
- .avatar, .name{
47
- align-self: center;
48
- }
49
- .avatar{
50
- margin-right: 8px;
51
- }
52
- .name{
53
- font-weight: 500;
54
- }
55
- }
56
- .avatar-menu{
57
- width: 150px;
58
- }
59
-
60
- </style>
1
+ <template>
2
+ <a-dropdown>
3
+ <div class="header-avatar" style="cursor: pointer">
4
+ <a-avatar class="avatar" size="small" shape="circle" :src="user.avatar"/>
5
+ <span class="name">{{ user.name }}</span>
6
+ </div>
7
+ <a-menu :class="['avatar-menu']" slot="overlay">
8
+ <a-menu-item>
9
+ <a-icon type="user" />
10
+ <span>个人中心</span>
11
+ </a-menu-item>
12
+ <a-menu-item>
13
+ <a-icon type="setting" />
14
+ <span>设置</span>
15
+ </a-menu-item>
16
+ <a-menu-divider />
17
+ <a-menu-item @click="logout">
18
+ <a-icon style="margin-right: 8px;" type="poweroff" />
19
+ <span>退出登录</span>
20
+ </a-menu-item>
21
+ </a-menu>
22
+ </a-dropdown>
23
+ </template>
24
+
25
+ <script>
26
+ import { mapGetters } from 'vuex'
27
+ import { logout } from '@vue2-client/services/user'
28
+
29
+ export default {
30
+ name: 'HeaderAvatar',
31
+ computed: {
32
+ ...mapGetters('account', ['user'])
33
+ },
34
+ methods: {
35
+ logout () {
36
+ logout()
37
+ this.$router.push('/login')
38
+ }
39
+ }
40
+ }
41
+ </script>
42
+
43
+ <style lang="less">
44
+ .header-avatar{
45
+ display: inline-flex;
46
+ .avatar, .name{
47
+ align-self: center;
48
+ }
49
+ .avatar{
50
+ margin-right: 8px;
51
+ }
52
+ .name{
53
+ font-weight: 500;
54
+ }
55
+ }
56
+ .avatar-menu{
57
+ width: 150px;
58
+ }
59
+
60
+ </style>