vue2-client 1.3.8 → 1.3.9

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 (50) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/package.json +1 -1
  3. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +3 -3
  4. package/src/base-client/components/common/CustomColumnsDrawer/index.md +46 -46
  5. package/src/base-client/components/common/JSONToTree/jsontotree.vue +275 -275
  6. package/src/base-client/components/system/LogDetailsView/LogDetailsView.vue +376 -372
  7. package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +13 -12
  8. package/src/base-client/components/ticket/TicketDetailsView/index.md +29 -29
  9. package/src/base-client/components/ticket/TicketDetailsView/part/TicketDetailsFlow.vue +260 -260
  10. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.md +29 -29
  11. package/src/base-client/plugins/AppData.js +4 -6
  12. package/src/base-client/plugins/GetLoginInfoService.js +252 -252
  13. package/src/base-client/plugins/PagedList.js +3 -3
  14. package/src/base-client/plugins/i18n-extend.js +32 -32
  15. package/src/components/Ellipsis/index.md +38 -38
  16. package/src/components/NumberInfo/index.md +43 -43
  17. package/src/components/STable/README.md +341 -341
  18. package/src/components/Trend/index.md +45 -45
  19. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  20. package/src/components/checkbox/ImgCheckbox.vue +163 -163
  21. package/src/components/exception/ExceptionPage.vue +70 -70
  22. package/src/components/form/FormRow.vue +52 -52
  23. package/src/components/menu/SideMenu.vue +62 -62
  24. package/src/components/menu/menu.js +273 -273
  25. package/src/components/setting/Setting.vue +235 -235
  26. package/src/components/table/advance/ActionColumns.vue +158 -158
  27. package/src/components/table/advance/SearchArea.vue +355 -355
  28. package/src/components/tool/AStepItem.vue +60 -60
  29. package/src/components/tool/AvatarList.vue +68 -69
  30. package/src/components/tool/Drawer.vue +142 -142
  31. package/src/components/transition/PageToggleTransition.vue +97 -97
  32. package/src/config/replacer/resolve.config.js +67 -67
  33. package/src/layouts/AdminLayout.vue +174 -174
  34. package/src/layouts/header/AdminHeader.vue +3 -3
  35. package/src/layouts/header/HeaderSearch.vue +67 -67
  36. package/src/layouts/header/InstitutionDetail.vue +181 -0
  37. package/src/layouts/tabs/TabsHead.vue +190 -190
  38. package/src/layouts/tabs/TabsView.vue +379 -379
  39. package/src/mock/goods/index.js +108 -108
  40. package/src/pages/report/ReportTable.js +124 -125
  41. package/src/theme/default/nprogress.less +76 -76
  42. package/src/utils/colors.js +103 -103
  43. package/src/utils/excel/Blob.js +53 -54
  44. package/src/utils/excel/Export2Excel.js +4 -4
  45. package/src/utils/formatter.js +68 -68
  46. package/src/utils/i18n.js +1 -1
  47. package/src/utils/routerUtil.js +3 -3
  48. package/src/utils/theme-color-replacer-extend.js +3 -3
  49. package/src/utils/themeUtil.js +100 -102
  50. package/src/utils/util.js +2 -2
@@ -1,174 +1,174 @@
1
- <template>
2
- <a-layout :class="['admin-layout', 'beauty-scroll']">
3
- <drawer v-if="isMobile" v-model="drawerOpen">
4
- <side-menu :theme="theme.mode" :menuData="menuData" :collapsed="false" :collapsible="false" @menuSelect="onMenuSelect"/>
5
- </drawer>
6
- <side-menu
7
- :class="[fixedSideBar ? 'fixed-side' : '']"
8
- :theme="theme.mode"
9
- v-else-if="layout === 'side' || layout === 'mix'"
10
- :menuData="sideMenuData"
11
- :collapsed="collapsed"
12
- :collapsible="true" />
13
- <div v-if="fixedSideBar && !isMobile" :style="`width: ${sideMenuWidth}; min-width: ${sideMenuWidth};max-width: ${sideMenuWidth};`" class="virtual-side"></div>
14
- <drawer v-if="!hideSetting" v-model="showSetting" placement="right">
15
- <div class="setting" slot="handler">
16
- <a-icon :type="showSetting ? 'close' : 'setting'"/>
17
- </div>
18
- <setting />
19
- </drawer>
20
- <a-layout class="admin-layout-main beauty-scroll">
21
- <admin-header :class="[{'fixed-tabs': fixedTabs, 'fixed-header': fixedHeader, 'multi-page': multiPage}]" :style="headerStyle" :menuData="headMenuData" :collapsed="collapsed" @toggleCollapse="toggleCollapse"/>
22
- <a-layout-header :class="['virtual-header', {'fixed-tabs' : fixedTabs, 'fixed-header': fixedHeader, 'multi-page': multiPage}]" v-show="fixedHeader"></a-layout-header>
23
- <a-layout-content class="admin-layout-content" :style="`min-height: ${minHeight}px;`">
24
- <div style="position: relative">
25
- <slot></slot>
26
- </div>
27
- </a-layout-content>
28
- <a-layout-footer style="padding: 0px">
29
- <page-footer :link-list="footerLinks" :copyright="copyright" />
30
- </a-layout-footer>
31
- </a-layout>
32
- </a-layout>
33
- </template>
34
-
35
- <script>
36
- import AdminHeader from './header/AdminHeader'
37
- import PageFooter from './footer/PageFooter'
38
- import Drawer from '../components/tool/Drawer'
39
- import SideMenu from '../components/menu/SideMenu'
40
- import Setting from '../components/setting/Setting'
41
- import { mapState, mapMutations, mapGetters } from 'vuex'
42
-
43
- // const minHeight = window.innerHeight - 64 - 122
44
-
45
- export default {
46
- name: 'AdminLayout',
47
- components: { Setting, SideMenu, Drawer, PageFooter, AdminHeader },
48
- data () {
49
- return {
50
- minHeight: window.innerHeight - 64 - 1,
51
- collapsed: false,
52
- showSetting: false,
53
- drawerOpen: false
54
- }
55
- },
56
- provide () {
57
- return {
58
- adminLayout: this
59
- }
60
- },
61
- watch: {
62
- $route (val) {
63
- this.setActivated(val)
64
- },
65
- layout () {
66
- this.setActivated(this.$route)
67
- },
68
- isMobile (val) {
69
- if (!val) {
70
- this.drawerOpen = false
71
- }
72
- }
73
- },
74
- computed: {
75
- ...mapState('setting', ['isMobile', 'theme', 'layout', 'footerLinks', 'copyright', 'fixedHeader', 'fixedSideBar',
76
- 'fixedTabs', 'hideSetting', 'multiPage']),
77
- ...mapGetters('setting', ['firstMenu', 'subMenu', 'menuData']),
78
- sideMenuWidth () {
79
- return this.collapsed ? '80px' : '256px'
80
- },
81
- headerStyle () {
82
- const width = (this.fixedHeader && this.layout !== 'head' && !this.isMobile) ? `calc(100% - ${this.sideMenuWidth})` : '100%'
83
- const position = this.fixedHeader ? 'fixed' : 'static'
84
- return `width: ${width}; position: ${position};`
85
- },
86
- headMenuData () {
87
- const { layout, menuData, firstMenu } = this
88
- return layout === 'mix' ? firstMenu : menuData
89
- },
90
- sideMenuData () {
91
- const { layout, menuData, subMenu } = this
92
- return layout === 'mix' ? subMenu : menuData
93
- }
94
- },
95
- methods: {
96
- ...mapMutations('setting', ['correctPageMinHeight', 'setActivatedFirst']),
97
- toggleCollapse () {
98
- this.collapsed = !this.collapsed
99
- },
100
- onMenuSelect () {
101
- this.toggleCollapse()
102
- },
103
- setActivated (route) {
104
- if (this.layout === 'mix') {
105
- let matched = route.matched
106
- matched = matched.slice(0, matched.length - 1)
107
- const { firstMenu } = this
108
- for (const menu of firstMenu) {
109
- if (matched.findIndex(item => item.path === menu.fullPath) !== -1) {
110
- this.setActivatedFirst(menu.fullPath)
111
- break
112
- }
113
- }
114
- }
115
- }
116
- },
117
- created () {
118
- this.correctPageMinHeight(this.minHeight - 24)
119
- this.setActivated(this.$route)
120
- },
121
- beforeDestroy () {
122
- this.correctPageMinHeight(-this.minHeight + 24)
123
- }
124
- }
125
- </script>
126
-
127
- <style lang="less" scoped>
128
- .admin-layout{
129
- .side-menu{
130
- &.fixed-side{
131
- position: fixed;
132
- height: 100vh;
133
- left: 0;
134
- top: 0;
135
- }
136
- }
137
- .virtual-side{
138
- transition: all 0.2s;
139
- }
140
- .virtual-header{
141
- transition: all 0.2s;
142
- opacity: 0;
143
- &.fixed-tabs.multi-page:not(.fixed-header){
144
- height: 0;
145
- }
146
- }
147
- .admin-layout-main{
148
- .admin-header{
149
- top: 0;
150
- right: 0;
151
- overflow: hidden;
152
- transition: all 0.2s;
153
- &.fixed-tabs.multi-page:not(.fixed-header){
154
- height: 0;
155
- }
156
- }
157
- }
158
- .admin-layout-content{
159
- padding: 24px;
160
- /*overflow-x: hidden;*/
161
- /*min-height: calc(100vh - 64px - 122px);*/
162
- }
163
- .setting{
164
- background-color: @primary-color;
165
- color: @base-bg-color;
166
- border-radius: 5px 0 0 5px;
167
- line-height: 40px;
168
- font-size: 22px;
169
- width: 40px;
170
- height: 40px;
171
- box-shadow: -2px 0 8px @shadow-color;
172
- }
173
- }
174
- </style>
1
+ <template>
2
+ <a-layout :class="['admin-layout', 'beauty-scroll']">
3
+ <drawer v-if="isMobile" v-model="drawerOpen">
4
+ <side-menu :theme="theme.mode" :menuData="menuData" :collapsed="false" :collapsible="false" @menuSelect="onMenuSelect"/>
5
+ </drawer>
6
+ <side-menu
7
+ :class="[fixedSideBar ? 'fixed-side' : '']"
8
+ :theme="theme.mode"
9
+ v-else-if="layout === 'side' || layout === 'mix'"
10
+ :menuData="sideMenuData"
11
+ :collapsed="collapsed"
12
+ :collapsible="true" />
13
+ <div v-if="fixedSideBar && !isMobile" :style="`width: ${sideMenuWidth}; min-width: ${sideMenuWidth};max-width: ${sideMenuWidth};`" class="virtual-side"></div>
14
+ <drawer v-if="!hideSetting" v-model="showSetting" placement="right">
15
+ <div class="setting" slot="handler">
16
+ <a-icon :type="showSetting ? 'close' : 'setting'"/>
17
+ </div>
18
+ <setting />
19
+ </drawer>
20
+ <a-layout class="admin-layout-main beauty-scroll">
21
+ <admin-header :class="[{'fixed-tabs': fixedTabs, 'fixed-header': fixedHeader, 'multi-page': multiPage}]" :style="headerStyle" :menuData="headMenuData" :collapsed="collapsed" @toggleCollapse="toggleCollapse"/>
22
+ <a-layout-header :class="['virtual-header', {'fixed-tabs' : fixedTabs, 'fixed-header': fixedHeader, 'multi-page': multiPage}]" v-show="fixedHeader"></a-layout-header>
23
+ <a-layout-content class="admin-layout-content" :style="`min-height: ${minHeight}px;`">
24
+ <div style="position: relative">
25
+ <slot></slot>
26
+ </div>
27
+ </a-layout-content>
28
+ <a-layout-footer style="padding: 0">
29
+ <page-footer :link-list="footerLinks" :copyright="copyright" />
30
+ </a-layout-footer>
31
+ </a-layout>
32
+ </a-layout>
33
+ </template>
34
+
35
+ <script>
36
+ import AdminHeader from './header/AdminHeader'
37
+ import PageFooter from './footer/PageFooter'
38
+ import Drawer from '../components/tool/Drawer'
39
+ import SideMenu from '../components/menu/SideMenu'
40
+ import Setting from '../components/setting/Setting'
41
+ import { mapState, mapMutations, mapGetters } from 'vuex'
42
+
43
+ // const minHeight = window.innerHeight - 64 - 122
44
+
45
+ export default {
46
+ name: 'AdminLayout',
47
+ components: { Setting, SideMenu, Drawer, PageFooter, AdminHeader },
48
+ data () {
49
+ return {
50
+ minHeight: window.innerHeight - 64 - 1,
51
+ collapsed: false,
52
+ showSetting: false,
53
+ drawerOpen: false
54
+ }
55
+ },
56
+ provide () {
57
+ return {
58
+ adminLayout: this
59
+ }
60
+ },
61
+ watch: {
62
+ $route (val) {
63
+ this.setActivated(val)
64
+ },
65
+ layout () {
66
+ this.setActivated(this.$route)
67
+ },
68
+ isMobile (val) {
69
+ if (!val) {
70
+ this.drawerOpen = false
71
+ }
72
+ }
73
+ },
74
+ computed: {
75
+ ...mapState('setting', ['isMobile', 'theme', 'layout', 'footerLinks', 'copyright', 'fixedHeader', 'fixedSideBar',
76
+ 'fixedTabs', 'hideSetting', 'multiPage']),
77
+ ...mapGetters('setting', ['firstMenu', 'subMenu', 'menuData']),
78
+ sideMenuWidth () {
79
+ return this.collapsed ? '80px' : '256px'
80
+ },
81
+ headerStyle () {
82
+ const width = (this.fixedHeader && this.layout !== 'head' && !this.isMobile) ? `calc(100% - ${this.sideMenuWidth})` : '100%'
83
+ const position = this.fixedHeader ? 'fixed' : 'static'
84
+ return `width: ${width}; position: ${position};`
85
+ },
86
+ headMenuData () {
87
+ const { layout, menuData, firstMenu } = this
88
+ return layout === 'mix' ? firstMenu : menuData
89
+ },
90
+ sideMenuData () {
91
+ const { layout, menuData, subMenu } = this
92
+ return layout === 'mix' ? subMenu : menuData
93
+ }
94
+ },
95
+ methods: {
96
+ ...mapMutations('setting', ['correctPageMinHeight', 'setActivatedFirst']),
97
+ toggleCollapse () {
98
+ this.collapsed = !this.collapsed
99
+ },
100
+ onMenuSelect () {
101
+ this.toggleCollapse()
102
+ },
103
+ setActivated (route) {
104
+ if (this.layout === 'mix') {
105
+ let matched = route.matched
106
+ matched = matched.slice(0, matched.length - 1)
107
+ const { firstMenu } = this
108
+ for (const menu of firstMenu) {
109
+ if (matched.findIndex(item => item.path === menu.fullPath) !== -1) {
110
+ this.setActivatedFirst(menu.fullPath)
111
+ break
112
+ }
113
+ }
114
+ }
115
+ }
116
+ },
117
+ created () {
118
+ this.correctPageMinHeight(this.minHeight - 24)
119
+ this.setActivated(this.$route)
120
+ },
121
+ beforeDestroy () {
122
+ this.correctPageMinHeight(-this.minHeight + 24)
123
+ }
124
+ }
125
+ </script>
126
+
127
+ <style lang="less" scoped>
128
+ .admin-layout{
129
+ .side-menu{
130
+ &.fixed-side{
131
+ position: fixed;
132
+ height: 100vh;
133
+ left: 0;
134
+ top: 0;
135
+ }
136
+ }
137
+ .virtual-side{
138
+ transition: all 0.2s;
139
+ }
140
+ .virtual-header{
141
+ transition: all 0.2s;
142
+ opacity: 0;
143
+ &.fixed-tabs.multi-page:not(.fixed-header){
144
+ height: 0;
145
+ }
146
+ }
147
+ .admin-layout-main{
148
+ .admin-header{
149
+ top: 0;
150
+ right: 0;
151
+ overflow: hidden;
152
+ transition: all 0.2s;
153
+ &.fixed-tabs.multi-page:not(.fixed-header){
154
+ height: 0;
155
+ }
156
+ }
157
+ }
158
+ .admin-layout-content{
159
+ padding: 24px;
160
+ /*overflow-x: hidden;*/
161
+ /*min-height: calc(100vh - 64px - 122px);*/
162
+ }
163
+ .setting{
164
+ background-color: @primary-color;
165
+ color: @base-bg-color;
166
+ border-radius: 5px 0 0 5px;
167
+ line-height: 40px;
168
+ font-size: 22px;
169
+ width: 40px;
170
+ height: 40px;
171
+ box-shadow: -2px 0 8px @shadow-color;
172
+ }
173
+ }
174
+ </style>
@@ -2,7 +2,7 @@
2
2
  <a-layout-header :class="[headerTheme, 'admin-header']">
3
3
  <div :class="['admin-header-wide', layout, pageWidth]">
4
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" />
5
+ <img src="@vue2-client/assets/img/logo.png" width="32" alt=""/>
6
6
  <h1 v-if="!isMobile">{{ systemName }}</h1>
7
7
  </router-link>
8
8
  <a-divider v-if="isMobile" type="vertical" />
@@ -59,13 +59,13 @@ export default {
59
59
  computed: {
60
60
  ...mapState('setting', ['theme', 'isMobile', 'layout', 'systemName', 'lang', 'pageWidth']),
61
61
  headerTheme () {
62
- if (this.layout == 'side' && this.theme.mode == 'dark' && !this.isMobile) {
62
+ if (this.layout === 'side' && this.theme.mode === 'dark' && !this.isMobile) {
63
63
  return 'light'
64
64
  }
65
65
  return this.theme.mode
66
66
  },
67
67
  langAlias () {
68
- const lang = this.langList.find(item => item.key == this.lang)
68
+ const lang = this.langList.find(item => item.key === this.lang)
69
69
  return lang.alias
70
70
  },
71
71
  menuWidth () {
@@ -1,67 +1,67 @@
1
- <template>
2
- <div class="header-search">
3
- <a-icon type="search" class="search-icon" @click="enterSearchMode"/>
4
- <a-auto-complete
5
- ref="input"
6
- :getPopupContainer="e => {return e.parentNode || document.body}"
7
- :dataSource="dataSource"
8
- :class="['search-input', searchMode ? 'enter' : 'leave']"
9
- placeholder="站内搜索"
10
- @blur="leaveSearchMode"
11
- >
12
- </a-auto-complete>
13
- </div>
14
- </template>
15
-
16
- <script>
17
- export default {
18
- name: 'HeaderSearch',
19
- data () {
20
- return {
21
- dataSource: ['选项一', '选项二'],
22
- searchMode: false
23
- }
24
- },
25
- methods: {
26
- enterSearchMode () {
27
- this.searchMode = true
28
- this.$emit('active', true)
29
- setTimeout(() => this.$refs.input.focus(), 300)
30
- },
31
- leaveSearchMode () {
32
- this.searchMode = false
33
- setTimeout(() => this.$emit('active', false), 300)
34
- }
35
- }
36
- }
37
- </script>
38
-
39
- <style lang="less">
40
- .header-search{
41
- .search-icon{
42
- font-size: 16px;
43
- cursor: pointer;
44
- }
45
- .search-input{
46
- border: 0;
47
- border-bottom: 1px solid @border-color-split;
48
- transition: width 0.3s ease-in-out;
49
- input{
50
- border: 0;
51
- box-shadow: 0 0 0 0;
52
- }
53
- &.leave{
54
- width: 0px;
55
- input{
56
- display: none;
57
- }
58
- }
59
- &.enter{
60
- width: 200px;
61
- input:focus{
62
- box-shadow: 0 0 0 0;
63
- }
64
- }
65
- }
66
- }
67
- </style>
1
+ <template>
2
+ <div class="header-search">
3
+ <a-icon type="search" class="search-icon" @click="enterSearchMode"/>
4
+ <a-auto-complete
5
+ ref="input"
6
+ :getPopupContainer="e => {return e.parentNode || document.body}"
7
+ :dataSource="dataSource"
8
+ :class="['search-input', searchMode ? 'enter' : 'leave']"
9
+ placeholder="站内搜索"
10
+ @blur="leaveSearchMode"
11
+ >
12
+ </a-auto-complete>
13
+ </div>
14
+ </template>
15
+
16
+ <script>
17
+ export default {
18
+ name: 'HeaderSearch',
19
+ data () {
20
+ return {
21
+ dataSource: ['选项一', '选项二'],
22
+ searchMode: false
23
+ }
24
+ },
25
+ methods: {
26
+ enterSearchMode () {
27
+ this.searchMode = true
28
+ this.$emit('active', true)
29
+ setTimeout(() => this.$refs.input.focus(), 300)
30
+ },
31
+ leaveSearchMode () {
32
+ this.searchMode = false
33
+ setTimeout(() => this.$emit('active', false), 300)
34
+ }
35
+ }
36
+ }
37
+ </script>
38
+
39
+ <style lang="less">
40
+ .header-search{
41
+ .search-icon{
42
+ font-size: 16px;
43
+ cursor: pointer;
44
+ }
45
+ .search-input{
46
+ border: 0;
47
+ border-bottom: 1px solid @border-color-split;
48
+ transition: width 0.3s ease-in-out;
49
+ input{
50
+ border: 0;
51
+ box-shadow: 0 0 0 0;
52
+ }
53
+ &.leave{
54
+ width: 0;
55
+ input{
56
+ display: none;
57
+ }
58
+ }
59
+ &.enter{
60
+ width: 200px;
61
+ input:focus{
62
+ box-shadow: 0 0 0 0;
63
+ }
64
+ }
65
+ }
66
+ }
67
+ </style>