t20-common-lib 0.9.13 → 0.10.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 (41) hide show
  1. package/package.json +64 -85
  2. package/packages/branch-bank-select/index.js +8 -8
  3. package/packages/branch-bank-select/src/main.vue +179 -179
  4. package/packages/common-collapse/index.js +8 -8
  5. package/packages/common-collapse/src/main.vue +147 -147
  6. package/packages/form-page/index.js +8 -8
  7. package/packages/form-page/src/main.vue +55 -55
  8. package/packages/input-number/index.js +8 -0
  9. package/packages/input-number/src/main.vue +184 -0
  10. package/packages/main-page/index.js +8 -8
  11. package/packages/main-page/src/main.vue +43 -43
  12. package/packages/multi-currency-statistics/index.js +8 -8
  13. package/packages/multi-currency-statistics/src/main.vue +229 -229
  14. package/packages/page-header/index.js +8 -8
  15. package/packages/page-header/src/main.vue +95 -95
  16. package/packages/statis-card/index.js +8 -8
  17. package/packages/statis-card/src/main.vue +250 -250
  18. package/packages/tab-page/index.js +8 -8
  19. package/packages/tab-page/src/main.vue +101 -101
  20. package/packages/tab-pane/index.js +8 -8
  21. package/packages/tab-pane/src/main.vue +185 -185
  22. package/packages/table-page/index.js +8 -8
  23. package/packages/table-page/src/main.vue +42 -42
  24. package/packages/theme-chalk/src/common/element-variables.scss +1045 -1045
  25. package/packages/theme-chalk/src/common/normalize.scss +869 -869
  26. package/packages/theme-chalk/src/index.scss +8 -8
  27. package/src/api/common.js +20 -20
  28. package/src/i18n.json +4 -4
  29. package/src/index.js +75 -71
  30. package/src/store/index.js +25 -25
  31. package/src/store/modules/user.js +42 -42
  32. package/src/utils/asciiWidth.js +107 -107
  33. package/src/utils/common.js +12 -12
  34. package/src/utils/date.js +43 -43
  35. package/src/utils/exportFile.js +6 -6
  36. package/src/utils/i18n/cn2hk.json +1270 -1270
  37. package/src/utils/i18n/index.js +69 -69
  38. package/src/utils/repairElementUI.js +141 -141
  39. package/src/utils/tableCellUtils.js +54 -54
  40. package/src/utils/tableheaderFilterpanel.vue +257 -257
  41. package/style/index.css +26 -0
@@ -1,102 +1,102 @@
1
- <template>
2
- <div class="flex-column" :class="rootClasses">
3
- <div v-if="hasHeader" class="header">
4
- <slot name="back"></slot>
5
- <slot name="unit"></slot>
6
- </div>
7
- <div v-if="$slots.tab" class="tab-container">
8
- <div class="tab" :class="tabClasses">
9
- <slot name="tab"></slot>
10
- </div>
11
- </div>
12
- <div class="content-wrapper flex-1 overflow" :class="contentClasses">
13
- <slot></slot>
14
- </div>
15
- </div>
16
- </template>
17
-
18
- <script>
19
- export default {
20
- name: 'TabPage',
21
- props: {
22
- level: {
23
- type: Number,
24
- default: 1
25
- }
26
- },
27
- computed: {
28
- hasUnitSlot() {
29
- return !!this.$slots.unit;
30
- },
31
- hasHeader() {
32
- return !!this.$slots.back || this.hasUnitSlot;
33
- },
34
- rootClasses() {
35
- return {
36
- tabPage: this.hasUnitSlot,
37
- 'level2-content': this.level === 2
38
- };
39
- },
40
- tabClasses() {
41
- return {
42
- level1: this.level === 1 && this.hasUnitSlot,
43
- level2: !(this.level === 1 && this.hasUnitSlot)
44
- };
45
- },
46
- contentClasses() {
47
- return {
48
- 'px-8': this.hasUnitSlot,
49
- 'bg-white': true
50
- };
51
- }
52
- }
53
- }
54
- </script>
55
-
56
- <style lang="scss" scoped>
57
- .tabPage {
58
- padding: 0 !important; // 建议审查 !important 的必要性,优先通过提升选择器权重解决样式覆盖问题
59
- background: #f0f2f5;
60
- }
61
-
62
- .header {
63
- height: 32px;
64
- line-height: 32px;
65
- }
66
-
67
- .tab-container {
68
- position: relative;
69
- height: 0; // 容器不占位
70
- }
71
-
72
- .tab {
73
- position: absolute;
74
- bottom: -34px;
75
- z-index: 1; // 确保 tab 在内容区域之上
76
- }
77
-
78
- .tabPage .tab {
79
- bottom: -42px;
80
- }
81
-
82
- .level1 {
83
- padding-left: 8px;
84
- }
85
-
86
- .level2 {
87
- // 可以保留为空或添加 level2 的特定样式
88
- }
89
-
90
- .content-wrapper {
91
- position: relative; // 确保内容在 tab 下方
92
- }
93
-
94
- .level2-content {
95
- height: calc(100% - 34px);
96
- margin-top: 34px;
97
- }
98
-
99
- .bg-white {
100
- background-color: #fff !important; // 建议审查 !important 的必要性
101
- }
1
+ <template>
2
+ <div class="flex-column" :class="rootClasses">
3
+ <div v-if="hasHeader" class="header">
4
+ <slot name="back"></slot>
5
+ <slot name="unit"></slot>
6
+ </div>
7
+ <div v-if="$slots.tab" class="tab-container">
8
+ <div class="tab" :class="tabClasses">
9
+ <slot name="tab"></slot>
10
+ </div>
11
+ </div>
12
+ <div class="content-wrapper flex-1 overflow" :class="contentClasses">
13
+ <slot></slot>
14
+ </div>
15
+ </div>
16
+ </template>
17
+
18
+ <script>
19
+ export default {
20
+ name: 'TabPage',
21
+ props: {
22
+ level: {
23
+ type: Number,
24
+ default: 1
25
+ }
26
+ },
27
+ computed: {
28
+ hasUnitSlot() {
29
+ return !!this.$slots.unit;
30
+ },
31
+ hasHeader() {
32
+ return !!this.$slots.back || this.hasUnitSlot;
33
+ },
34
+ rootClasses() {
35
+ return {
36
+ tabPage: this.hasUnitSlot,
37
+ 'level2-content': this.level === 2
38
+ };
39
+ },
40
+ tabClasses() {
41
+ return {
42
+ level1: this.level === 1 && this.hasUnitSlot,
43
+ level2: !(this.level === 1 && this.hasUnitSlot)
44
+ };
45
+ },
46
+ contentClasses() {
47
+ return {
48
+ 'px-8': this.hasUnitSlot,
49
+ 'bg-white': true
50
+ };
51
+ }
52
+ }
53
+ }
54
+ </script>
55
+
56
+ <style lang="scss" scoped>
57
+ .tabPage {
58
+ padding: 0 !important; // 建议审查 !important 的必要性,优先通过提升选择器权重解决样式覆盖问题
59
+ background: #f0f2f5;
60
+ }
61
+
62
+ .header {
63
+ height: 32px;
64
+ line-height: 32px;
65
+ }
66
+
67
+ .tab-container {
68
+ position: relative;
69
+ height: 0; // 容器不占位
70
+ }
71
+
72
+ .tab {
73
+ position: absolute;
74
+ bottom: -34px;
75
+ z-index: 1; // 确保 tab 在内容区域之上
76
+ }
77
+
78
+ .tabPage .tab {
79
+ bottom: -42px;
80
+ }
81
+
82
+ .level1 {
83
+ padding-left: 8px;
84
+ }
85
+
86
+ .level2 {
87
+ // 可以保留为空或添加 level2 的特定样式
88
+ }
89
+
90
+ .content-wrapper {
91
+ position: relative; // 确保内容在 tab 下方
92
+ }
93
+
94
+ .level2-content {
95
+ height: calc(100% - 34px);
96
+ margin-top: 34px;
97
+ }
98
+
99
+ .bg-white {
100
+ background-color: #fff !important; // 建议审查 !important 的必要性
101
+ }
102
102
  </style>
@@ -1,8 +1,8 @@
1
- import TabPane from './src/main';
2
-
3
- /* istanbul ignore next */
4
- TabPane.install = function(Vue) {
5
- Vue.component(TabPane.name, TabPane);
6
- };
7
-
8
- export default TabPane;
1
+ import TabPane from './src/main';
2
+
3
+ /* istanbul ignore next */
4
+ TabPane.install = function(Vue) {
5
+ Vue.component(TabPane.name, TabPane);
6
+ };
7
+
8
+ export default TabPane;
@@ -1,186 +1,186 @@
1
- <template>
2
- <div v-if="data.length === 0" class="n20-secondary-tab m-b-s">
3
- <div class="el-tabs__item is-active" style="padding: 0;">{{ init }}</div>
4
- </div>
5
- <div v-else-if="data.length === 1" class="n20-secondary-tab m-b-s">
6
- <div class="el-tabs__item is-active" style="padding: 0;">
7
- <span v-if="data[0].icon" :class="data[0].icon"></span>
8
- <sup v-if="data[0].badge" class="el-tabs__item-badge"></sup>
9
- {{ data[0].name }}
10
- </div>
11
- </div>
12
- <el-tabs v-else :value="init" :class="classes" :tabPosition="tabPosition" :before-leave="beforeFn" @tab-click="clickFn">
13
- <el-tab-pane
14
- v-for="item of data"
15
- :key="item.name"
16
- :tab-info="item"
17
- :name="item.name"
18
- :icon="item.icon"
19
- :disabled="item.disabled"
20
- >
21
- <template slot="label">
22
- <span v-if="item.icon" :class="item.icon"></span>
23
- <sup v-if="item.badge" class="el-tabs__item-badge"></sup>
24
- <span v-if="item.content" v-title="`${item.content}`"> {{ item.name }}</span>
25
- <span v-else>{{ item.name }}</span>
26
- <i
27
- v-if="item.tips"
28
- v-title="item.tips"
29
- class="n20-icon-xinxitishi"
30
- style="color: var(--color-text-secondary); align-self: flex-start;"
31
- ></i>
32
- </template>
33
- </el-tab-pane>
34
- </el-tabs>
35
- </template>
36
-
37
- <script>
38
-
39
- export default {
40
- name: 'TabPane',
41
- props: {
42
- data: {
43
- type: Array,
44
- default: () => []
45
- },
46
- init: {
47
- type: String,
48
- default: ''
49
- },
50
- stop: {
51
- type: Boolean,
52
- default: false
53
- },
54
- tabPosition: {
55
- type: String,
56
- default: 'top'
57
- }
58
- },
59
- computed: {
60
- classes(){
61
- return {
62
- 'n20-secondary-tab': true,
63
- 'm-b-s': this.tabPosition == 'top',
64
- 'left-css': this.tabPosition == 'left'
65
- }
66
- }
67
- },
68
- methods: {
69
- getTooltip(name, tips) {
70
- return `<el-tooltip content="${tips}">${name}</el-tooltip>`
71
- },
72
- clickFn(C) {
73
- let item = C.$attrs['tab-info']
74
- if (this.$listeners['update:init']) {
75
- !item.disabled && this.$emit('update:init', item.name)
76
- }
77
- if (this.$listeners['click']) {
78
- this.$emit('click', item)
79
- }
80
- },
81
- beforeFn() {
82
- return !this.stop
83
- }
84
- }
85
- }
86
- </script>
87
-
88
- <style lang="scss" scoped>
89
- .tooltip {
90
- position: absolute;
91
- top: 100%;
92
- left: 0;
93
- z-index: 9999;
94
- background-color: black;
95
- color: white;
96
- padding: 5px;
97
- font-size: 12px;
98
- opacity: 0;
99
- transition: opacity 0.3s;
100
- }
101
-
102
- .tooltip::after {
103
- content: '';
104
- position: absolute;
105
- top: -5px;
106
- left: 50%;
107
- transform: translateX(-50%);
108
- border: 5px solid transparent;
109
- border-bottom-color: black;
110
- }
111
-
112
- .tooltip.show {
113
- opacity: 1;
114
- }
115
- .left-css .el-tabs__item.is-active:after{
116
- width: 2px;
117
- height: 20px!important;
118
- margin-top: -22px!important;
119
- margin-left: -10px;
120
- }
121
- .left-css .el-tabs__item.is-left {
122
- text-align: left!important;
123
- }
124
- .left-css .el-tabs__header.is-left{
125
- margin-right: 0!important;
126
- margin-left: 10px!important;
127
- }
128
-
129
- </style>
130
-
131
- <style lang="scss">
132
-
133
- .n20-secondary-tab {
134
- .el-tabs__header {
135
- margin-bottom: 0;
136
- }
137
- .el-tabs__nav-wrap::after {
138
- display: none;
139
- }
140
- .el-tabs__item {
141
- font-weight: 400;
142
- height: 27px;
143
- line-height: 26px;
144
- padding: 0 10px;
145
- &.is-active {
146
- font-weight: 500;
147
- &::after {
148
- content: '';
149
- height: 2px;
150
- background-color: #007aff;
151
- display: block;
152
- margin-top: -1px;
153
- }
154
- }
155
- &.is-disabled {
156
- cursor: no-drop;
157
- &::after {
158
- background-color: #cccccc;
159
- }
160
- }
161
- }
162
-
163
- .el-tabs__item-badge {
164
- width: 6px;
165
- height: 6px;
166
- background: var(--color-danger);
167
- position: absolute;
168
- right: 6px;
169
- top: 2px;
170
- border-radius: 3px;
171
- }
172
- .el-tabs__item.is-top:last-child {
173
- .el-tabs__item-badge {
174
- right: -4px;
175
- }
176
- }
177
- .el-tabs__active-bar {
178
- display: none;
179
- }
180
-
181
- .el-tabs__nav-prev,
182
- .el-tabs__nav-next {
183
- line-height: 28px;
184
- }
185
- }
1
+ <template>
2
+ <div v-if="data.length === 0" class="n20-secondary-tab m-b-s">
3
+ <div class="el-tabs__item is-active" style="padding: 0;">{{ init }}</div>
4
+ </div>
5
+ <div v-else-if="data.length === 1" class="n20-secondary-tab m-b-s">
6
+ <div class="el-tabs__item is-active" style="padding: 0;">
7
+ <span v-if="data[0].icon" :class="data[0].icon"></span>
8
+ <sup v-if="data[0].badge" class="el-tabs__item-badge"></sup>
9
+ {{ data[0].name }}
10
+ </div>
11
+ </div>
12
+ <el-tabs v-else :value="init" :class="classes" :tabPosition="tabPosition" :before-leave="beforeFn" @tab-click="clickFn">
13
+ <el-tab-pane
14
+ v-for="item of data"
15
+ :key="item.name"
16
+ :tab-info="item"
17
+ :name="item.name"
18
+ :icon="item.icon"
19
+ :disabled="item.disabled"
20
+ >
21
+ <template slot="label">
22
+ <span v-if="item.icon" :class="item.icon"></span>
23
+ <sup v-if="item.badge" class="el-tabs__item-badge"></sup>
24
+ <span v-if="item.content" v-title="`${item.content}`"> {{ item.name }}</span>
25
+ <span v-else>{{ item.name }}</span>
26
+ <i
27
+ v-if="item.tips"
28
+ v-title="item.tips"
29
+ class="n20-icon-xinxitishi"
30
+ style="color: var(--color-text-secondary); align-self: flex-start;"
31
+ ></i>
32
+ </template>
33
+ </el-tab-pane>
34
+ </el-tabs>
35
+ </template>
36
+
37
+ <script>
38
+
39
+ export default {
40
+ name: 'TabPane',
41
+ props: {
42
+ data: {
43
+ type: Array,
44
+ default: () => []
45
+ },
46
+ init: {
47
+ type: String,
48
+ default: ''
49
+ },
50
+ stop: {
51
+ type: Boolean,
52
+ default: false
53
+ },
54
+ tabPosition: {
55
+ type: String,
56
+ default: 'top'
57
+ }
58
+ },
59
+ computed: {
60
+ classes(){
61
+ return {
62
+ 'n20-secondary-tab': true,
63
+ 'm-b-s': this.tabPosition == 'top',
64
+ 'left-css': this.tabPosition == 'left'
65
+ }
66
+ }
67
+ },
68
+ methods: {
69
+ getTooltip(name, tips) {
70
+ return `<el-tooltip content="${tips}">${name}</el-tooltip>`
71
+ },
72
+ clickFn(C) {
73
+ let item = C.$attrs['tab-info']
74
+ if (this.$listeners['update:init']) {
75
+ !item.disabled && this.$emit('update:init', item.name)
76
+ }
77
+ if (this.$listeners['click']) {
78
+ this.$emit('click', item)
79
+ }
80
+ },
81
+ beforeFn() {
82
+ return !this.stop
83
+ }
84
+ }
85
+ }
86
+ </script>
87
+
88
+ <style lang="scss" scoped>
89
+ .tooltip {
90
+ position: absolute;
91
+ top: 100%;
92
+ left: 0;
93
+ z-index: 9999;
94
+ background-color: black;
95
+ color: white;
96
+ padding: 5px;
97
+ font-size: 12px;
98
+ opacity: 0;
99
+ transition: opacity 0.3s;
100
+ }
101
+
102
+ .tooltip::after {
103
+ content: '';
104
+ position: absolute;
105
+ top: -5px;
106
+ left: 50%;
107
+ transform: translateX(-50%);
108
+ border: 5px solid transparent;
109
+ border-bottom-color: black;
110
+ }
111
+
112
+ .tooltip.show {
113
+ opacity: 1;
114
+ }
115
+ .left-css .el-tabs__item.is-active:after{
116
+ width: 2px;
117
+ height: 20px!important;
118
+ margin-top: -22px!important;
119
+ margin-left: -10px;
120
+ }
121
+ .left-css .el-tabs__item.is-left {
122
+ text-align: left!important;
123
+ }
124
+ .left-css .el-tabs__header.is-left{
125
+ margin-right: 0!important;
126
+ margin-left: 10px!important;
127
+ }
128
+
129
+ </style>
130
+
131
+ <style lang="scss">
132
+
133
+ .n20-secondary-tab {
134
+ .el-tabs__header {
135
+ margin-bottom: 0;
136
+ }
137
+ .el-tabs__nav-wrap::after {
138
+ display: none;
139
+ }
140
+ .el-tabs__item {
141
+ font-weight: 400;
142
+ height: 27px;
143
+ line-height: 26px;
144
+ padding: 0 10px;
145
+ &.is-active {
146
+ font-weight: 500;
147
+ &::after {
148
+ content: '';
149
+ height: 2px;
150
+ background-color: #007aff;
151
+ display: block;
152
+ margin-top: -1px;
153
+ }
154
+ }
155
+ &.is-disabled {
156
+ cursor: no-drop;
157
+ &::after {
158
+ background-color: #cccccc;
159
+ }
160
+ }
161
+ }
162
+
163
+ .el-tabs__item-badge {
164
+ width: 6px;
165
+ height: 6px;
166
+ background: var(--color-danger);
167
+ position: absolute;
168
+ right: 6px;
169
+ top: 2px;
170
+ border-radius: 3px;
171
+ }
172
+ .el-tabs__item.is-top:last-child {
173
+ .el-tabs__item-badge {
174
+ right: -4px;
175
+ }
176
+ }
177
+ .el-tabs__active-bar {
178
+ display: none;
179
+ }
180
+
181
+ .el-tabs__nav-prev,
182
+ .el-tabs__nav-next {
183
+ line-height: 28px;
184
+ }
185
+ }
186
186
  </style>
@@ -1,8 +1,8 @@
1
- import TablePage from './src/main';
2
-
3
- /* istanbul ignore next */
4
- TablePage.install = function(Vue) {
5
- Vue.component(TablePage.name, TablePage);
6
- };
7
-
8
- export default TablePage;
1
+ import TablePage from './src/main';
2
+
3
+ /* istanbul ignore next */
4
+ TablePage.install = function(Vue) {
5
+ Vue.component(TablePage.name, TablePage);
6
+ };
7
+
8
+ export default TablePage;