@truenewx/tnxvue3 3.0.18 → 3.4.1

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 (55) hide show
  1. package/eslint.config.cjs +58 -0
  2. package/index.html +12 -12
  3. package/package.json +16 -40
  4. package/src/aj-captcha/Verify/VerifySlide.vue +9 -9
  5. package/src/aj-captcha/api/index.js +2 -10
  6. package/src/aj-captcha/utils/ase.js +1 -1
  7. package/src/bootstrap-vue/alert/Alert.vue +79 -79
  8. package/src/bootstrap-vue/button/Button.vue +40 -40
  9. package/src/bootstrap-vue/enum-select/EnumSelect.vue +4 -5
  10. package/src/bootstrap-vue/form/Form.vue +320 -320
  11. package/src/bootstrap-vue/form/FormGroup.vue +73 -73
  12. package/src/bootstrap-vue/loading-icon/LoadingIcon.vue +46 -46
  13. package/src/bootstrap-vue/paged/Paged.vue +119 -119
  14. package/src/bootstrap-vue/progress/Progress.vue +58 -58
  15. package/src/bootstrap-vue/query-table/QueryTable.vue +84 -84
  16. package/src/bootstrap-vue/region-cascader/RegionCascader.vue +119 -119
  17. package/src/bootstrap-vue/select/Select.vue +375 -375
  18. package/src/bootstrap-vue/submit-form/SubmitForm.vue +180 -176
  19. package/src/bootstrap-vue/tags-input/TagsInput.vue +64 -64
  20. package/src/bootstrap-vue/tnxbsv.css +107 -107
  21. package/src/bootstrap-vue/tnxbsv.js +113 -79
  22. package/src/bootstrap-vue/upload/Upload.vue +173 -173
  23. package/src/element-plus/avatar/Avatar.vue +8 -9
  24. package/src/element-plus/button/Button.vue +2 -2
  25. package/src/element-plus/curd/Curd.vue +20 -23
  26. package/src/element-plus/date-picker/DatePicker.vue +1 -1
  27. package/src/element-plus/detail-form/DetailForm.vue +1 -1
  28. package/src/element-plus/dialog/Dialog.vue +18 -20
  29. package/src/element-plus/drawer/Drawer.vue +10 -9
  30. package/src/element-plus/edit-table/EditTable.vue +3 -3
  31. package/src/element-plus/enum-select/EnumSelect.vue +3 -3
  32. package/src/element-plus/enum-view/EnumView.vue +41 -41
  33. package/src/element-plus/fetch-cascader/FetchCascader.vue +3 -4
  34. package/src/element-plus/fetch-select/FetchSelect.vue +10 -11
  35. package/src/element-plus/fetch-tags/FetchTags.vue +4 -5
  36. package/src/element-plus/fss-upload/FssUpload.vue +18 -18
  37. package/src/element-plus/fss-view/FssView.vue +1 -1
  38. package/src/element-plus/icon/Icon.vue +15 -0
  39. package/src/element-plus/input-dropdown/InputDropdown.vue +74 -74
  40. package/src/element-plus/query-form/QueryForm.vue +1 -1
  41. package/src/element-plus/query-table/QueryTable.vue +22 -26
  42. package/src/element-plus/region-cascader/RegionCascader.vue +4 -5
  43. package/src/element-plus/select/Select.vue +2 -2
  44. package/src/element-plus/steps-nav/StepsNav.vue +3 -4
  45. package/src/element-plus/submit-form/SubmitForm.vue +36 -39
  46. package/src/element-plus/tabs/Tabs.vue +1 -1
  47. package/src/element-plus/tnxel.css +22 -0
  48. package/src/element-plus/tnxel.js +125 -106
  49. package/src/element-plus/toolbar/ToolBarItem.js +15 -15
  50. package/src/element-plus/toolbar/Toolbar.vue +56 -56
  51. package/src/element-plus/transfer/Transfer.vue +8 -9
  52. package/src/element-plus/upload/Upload.vue +24 -24
  53. package/src/tnxvue-router.js +4 -4
  54. package/src/tnxvue-validator.js +8 -2
  55. package/src/tnxvue.js +14 -28
@@ -1,107 +1,107 @@
1
- ::placeholder {
2
- color: var(--bs-tertiary-color) !important;
3
- }
4
-
5
- ::-webkit-input-placeholder {
6
- color: var(--bs-tertiary-color) !important;
7
- }
8
-
9
- ::-moz-placeholder {
10
- color: var(--bs-tertiary-color) !important;
11
- }
12
-
13
- .text-placeholder {
14
- color: var(--bs-tertiary-color);
15
- }
16
-
17
- .btn-light {
18
- border-color: var(--bs-border-color);
19
- }
20
-
21
- .link {
22
- cursor: pointer;
23
- color: var(--bs-link-color);
24
- }
25
-
26
- .form-inline {
27
- display: flex;
28
- flex-wrap: wrap;
29
- }
30
-
31
- .form-inline .b-form-group {
32
- display: flex;
33
- flex-wrap: nowrap;
34
- height: fit-content;
35
- margin-right: 1.5rem;
36
- margin-bottom: 1rem;
37
- width: fit-content;
38
- }
39
-
40
- .badge {
41
- border: 1px solid transparent;
42
- }
43
-
44
- .badge.text-bg-light {
45
- border-color: var(--bs-border-color);
46
- }
47
-
48
- .accordion-button,
49
- .accordion-body {
50
- padding: 1rem;
51
- }
52
-
53
- .toast {
54
- width: fit-content;
55
- min-width: 5rem;
56
- text-align: center;
57
- }
58
-
59
- .toast::before {
60
- content: '';
61
- position: absolute;
62
- top: 0;
63
- left: 0;
64
- width: 100%;
65
- height: 100%;
66
- background-color: rgba(255, 255, 255, 0.3);
67
- }
68
-
69
- .form-check {
70
- margin-top: 0.125rem;
71
- }
72
-
73
- .form-check > * {
74
- cursor: pointer;
75
- }
76
-
77
- .tnxbsv-dialog-alert,
78
- .tnxbsv-dialog-success,
79
- .tnxbsv-dialog-error,
80
- .tnxbsv-dialog-confirm {
81
- display: flex;
82
- }
83
-
84
- .tnxbsv-dialog-alert i,
85
- .tnxbsv-dialog-success i,
86
- .tnxbsv-dialog-error i,
87
- .tnxbsv-dialog-confirm i {
88
- font-size: 1.5rem;
89
- line-height: 1;
90
- margin-right: 0.5rem;
91
- }
92
-
93
- .tnxbsv-dialog-alert i {
94
- color: var(--bs-info);
95
- }
96
-
97
- .tnxbsv-dialog-success i {
98
- color: var(--bs-success);
99
- }
100
-
101
- .tnxbsv-dialog-error i {
102
- color: var(--bs-danger);
103
- }
104
-
105
- .tnxbsv-dialog-confirm i {
106
- color: var(--bs-secondary-color);
107
- }
1
+ ::placeholder {
2
+ color: var(--bs-tertiary-color) !important;
3
+ }
4
+
5
+ ::-webkit-input-placeholder {
6
+ color: var(--bs-tertiary-color) !important;
7
+ }
8
+
9
+ ::-moz-placeholder {
10
+ color: var(--bs-tertiary-color) !important;
11
+ }
12
+
13
+ .text-placeholder {
14
+ color: var(--bs-tertiary-color);
15
+ }
16
+
17
+ .btn-light {
18
+ border-color: var(--bs-border-color);
19
+ }
20
+
21
+ .link {
22
+ cursor: pointer;
23
+ color: var(--bs-link-color);
24
+ }
25
+
26
+ .form-inline {
27
+ display: flex;
28
+ flex-wrap: wrap;
29
+ }
30
+
31
+ .form-inline .b-form-group {
32
+ display: flex;
33
+ flex-wrap: nowrap;
34
+ height: fit-content;
35
+ margin-right: 1.5rem;
36
+ margin-bottom: 1rem;
37
+ width: fit-content;
38
+ }
39
+
40
+ .badge {
41
+ border: 1px solid transparent;
42
+ }
43
+
44
+ .badge.text-bg-light {
45
+ border-color: var(--bs-border-color);
46
+ }
47
+
48
+ .accordion-button,
49
+ .accordion-body {
50
+ padding: 1rem;
51
+ }
52
+
53
+ .toast {
54
+ width: fit-content;
55
+ min-width: 5rem;
56
+ text-align: center;
57
+ }
58
+
59
+ .toast::before {
60
+ content: '';
61
+ position: absolute;
62
+ top: 0;
63
+ left: 0;
64
+ width: 100%;
65
+ height: 100%;
66
+ background-color: rgba(255, 255, 255, 0.3);
67
+ }
68
+
69
+ .form-check {
70
+ margin-top: 0.125rem;
71
+ }
72
+
73
+ .form-check > * {
74
+ cursor: pointer;
75
+ }
76
+
77
+ .tnxbsv-dialog-alert,
78
+ .tnxbsv-dialog-success,
79
+ .tnxbsv-dialog-error,
80
+ .tnxbsv-dialog-confirm {
81
+ display: flex;
82
+ }
83
+
84
+ .tnxbsv-dialog-alert i,
85
+ .tnxbsv-dialog-success i,
86
+ .tnxbsv-dialog-error i,
87
+ .tnxbsv-dialog-confirm i {
88
+ font-size: 1.5rem;
89
+ line-height: 1;
90
+ margin-right: 0.5rem;
91
+ }
92
+
93
+ .tnxbsv-dialog-alert i {
94
+ color: var(--bs-info);
95
+ }
96
+
97
+ .tnxbsv-dialog-success i {
98
+ color: var(--bs-success);
99
+ }
100
+
101
+ .tnxbsv-dialog-error i {
102
+ color: var(--bs-danger);
103
+ }
104
+
105
+ .tnxbsv-dialog-confirm i {
106
+ color: var(--bs-secondary-color);
107
+ }
@@ -81,101 +81,135 @@ export default build('tnxbsv', () => {
81
81
  document.body.removeChild(dialogContainer);
82
82
  });
83
83
  window.tnx.dialogInstances.push(dialog);
84
- return dialogVm;
84
+ return dialog;
85
+ },
86
+ closeDialog(all) {
87
+ return new Promise((resolve) => {
88
+ if (window.tnx.dialogInstances.length) {
89
+ let dialog = window.tnx.dialogInstances.pop();
90
+ while (dialog) {
91
+ const originalClose = dialog.close;
92
+ if (originalClose) {
93
+ dialog.close = function (cb) {
94
+ originalClose.call(this, () => {
95
+ if (typeof cb === 'function') {
96
+ cb();
97
+ }
98
+ resolve();
99
+ });
100
+ };
101
+ dialog.close();
102
+ } else {
103
+ resolve();
104
+ }
105
+
106
+ if (all) {
107
+ dialog = window.tnx.dialogInstances.pop();
108
+ } else {
109
+ break;
110
+ }
111
+ }
112
+ } else {
113
+ resolve();
114
+ }
115
+ });
85
116
  },
86
117
  _closeMessage() {
87
118
  this.hideLoading();
88
119
  this.removeToast();
89
120
  },
90
- alert(message, title, callback, options) {
91
- if (typeof title === 'function') {
92
- options = callback;
93
- callback = title;
94
- title = '提示';
95
- }
96
- let buttons = tnxvue.getDefaultDialogButtons('primary', callback);
97
- message =
98
- `<div class="tnxbsv-dialog-alert"><i class="bi bi-exclamation-circle-fill"></i><div>${message}</div></div>`;
99
- return this.dialog(message, title, buttons, options);
121
+ alert(message, title, options) {
122
+ return new Promise(resolve => {
123
+ let buttons = tnxvue.getDefaultDialogButtons('primary', close => {
124
+ return resolve(close);
125
+ });
126
+ message =
127
+ `<div class="tnxbsv-dialog-alert"><i class="bi bi-exclamation-circle-fill"></i><div>${message}</div></div>`;
128
+ this.dialog(message, title, buttons, options);
129
+ });
100
130
  },
101
- success(message, callback, options) {
102
- let buttons = tnxvue.getDefaultDialogButtons('primary', callback);
103
- message =
104
- `<div class="tnxbsv-dialog-success"><i class="bi bi-check-circle-fill"></i><div>${message}</div></div>`;
105
- return this.dialog(message, '成功', buttons, options);
131
+ success(message, options) {
132
+ return new Promise(resolve => {
133
+ let buttons = tnxvue.getDefaultDialogButtons('primary', close => {
134
+ return resolve(close);
135
+ });
136
+ message =
137
+ `<div class="tnxbsv-dialog-success"><i class="bi bi-check-circle-fill"></i><div>${message}</div></div>`;
138
+ this.dialog(message, '成功', buttons, options);
139
+ });
106
140
  },
107
- error(message, callback, options) {
108
- let buttons = tnxvue.getDefaultDialogButtons('primary', callback);
109
- message =
110
- `<div class="tnxbsv-dialog-error"><i class="bi bi-x-circle-fill"></i><div>${message}</div></div>`;
111
- return this.dialog(message, '错误', buttons, options);
141
+ error(message, options) {
142
+ return new Promise(resolve => {
143
+ let buttons = tnxvue.getDefaultDialogButtons('primary', close => {
144
+ return resolve(close);
145
+ });
146
+ message =
147
+ `<div class="tnxbsv-dialog-error"><i class="bi bi-x-circle-fill"></i><div>${message}</div></div>`;
148
+ this.dialog(message, '错误', buttons, options);
149
+ });
112
150
  },
113
- confirm(message, title, callback, options) {
114
- if (typeof title === 'function') {
115
- options = callback;
116
- callback = title;
117
- title = '确认';
118
- }
119
- let buttons = tnxvue.getDefaultDialogButtons('confirm', callback);
120
- message =
121
- `<div class="tnxbsv-dialog-confirm"><i class="bi bi-question-circle-fill"></i><div>${message}</div></div>`;
122
- return this.dialog(message, title, buttons, options);
151
+ confirm(message, title = '确认', options) {
152
+ return new Promise(resolve => {
153
+ let buttons = tnxvue.getDefaultDialogButtons('confirm', yes => {
154
+ return resolve(yes);
155
+ });
156
+ message =
157
+ `<div class="tnxbsv-dialog-confirm"><i class="bi bi-question-circle-fill"></i><div>${message}</div></div>`;
158
+ this.dialog(message, title, buttons, options);
159
+ });
123
160
  },
124
- toast(message, timeout, callback, options = {}) {
125
- if (typeof timeout === 'function') {
126
- options = callback || {};
127
- callback = timeout;
128
- timeout = undefined;
129
- }
130
-
161
+ toast(message, timeout, options = {}) {
131
162
  this._closeMessage();
132
163
 
133
164
  const div = document.createElement('div');
134
165
  document.body.appendChild(div);
135
166
 
136
- const Vue = window.tnx.libs.Vue;
137
- const ToastComponent = {
138
- components: {
139
- BToast: BootstrapVue.BToast
140
- },
141
- setup() {
142
- const visible = Vue.ref(true);
143
- Vue.onMounted(() => {
144
- setTimeout(() => {
145
- visible.value = false;
146
- // 延迟移除组件,确保动画效果完成
167
+ return new Promise(resolve => {
168
+ const Vue = window.tnx.libs.Vue;
169
+ const ToastComponent = {
170
+ components: {
171
+ BToast: BootstrapVue.BToast
172
+ },
173
+ setup() {
174
+ const visible = Vue.ref(true);
175
+ Vue.onMounted(() => {
147
176
  setTimeout(() => {
148
- window.tnx.toastInstance?.unmount();
149
- try {
150
- document.body.removeChild(div);
151
- } catch (e) {
152
- // 忽略异常
153
- }
154
- }, 500);
155
- }, timeout || 1500);
156
- });
157
- return {visible};
158
- },
159
- render() {
160
- return Vue.h(BootstrapVue.BToast, {
161
- modelValue: this.visible,
162
- variant: options.type || 'success',
163
- static: true,
164
- noCloseButton: true,
165
- class: 'position-fixed',
166
- style: {
167
- top: '50%',
168
- left: '50%',
169
- transform: 'translate(-50%, -50%)',
170
- zIndex: window.tnx.util.dom.minTopZIndex(),
171
- }
172
- }, () => message);
173
- }
174
- };
177
+ visible.value = false;
178
+ // 延迟移除组件,确保动画效果完成
179
+ setTimeout(() => {
180
+ window.tnx.toastInstance?.unmount();
181
+ try {
182
+ document.body.removeChild(div);
183
+ } catch (e) {
184
+ // 忽略异常
185
+ }
186
+ resolve();
187
+ }, 500);
188
+ }, timeout || 1500);
189
+ });
190
+ return {visible};
191
+ },
192
+ render() {
193
+ return Vue.h(BootstrapVue.BToast, {
194
+ modelValue: this.visible,
195
+ variant: options.type || 'success',
196
+ static: true,
197
+ noCloseButton: true,
198
+ class: 'position-fixed',
199
+ style: {
200
+ top: '50%',
201
+ left: '50%',
202
+ transform: 'translate(-50%, -50%)',
203
+ zIndex: window.tnx.util.dom.minTopZIndex(),
204
+ }
205
+ }, () => message);
206
+ }
207
+ };
175
208
 
176
- const instance = window.tnx.createVueInstance(ToastComponent);
177
- instance.mount(div);
178
- window.tnx.toastInstance = instance;
209
+ const instance = window.tnx.createVueInstance(ToastComponent);
210
+ instance.mount(div);
211
+ window.tnx.toastInstance = instance;
212
+ });
179
213
  },
180
214
  removeToast() {
181
215
  if (window.tnx.toastInstance) {