Compare commits

...

754 Commits

Author SHA1 Message Date
zhaojisen
66f57af689 fixed: Filtering parameters 2024-07-31 15:29:45 +08:00
zhaojisen
cdac71876b fixed: Fixed page refresh when tree nodes are clicked 2024-07-31 11:19:34 +08:00
老广
414ff7b8bf Revert "fixed: Fixed page refresh when tree nodes are clicked" 2024-07-31 10:40:29 +08:00
ZhaoJiSen
e50d720e18 Merge pull request #4268 from jumpserver/pr@v4.0@fix_asset_tree_refresh
fixed: Fixed page refresh when tree nodes are clicked
2024-07-30 21:15:36 +08:00
zhaojisen
d1e7822b8f fixed: Fixed page refresh when tree nodes are clicked 2024-07-30 10:20:02 +08:00
zhaojisen
f7e6bd0169 fixed:Fixed an issue where the user was unable to enter non-MD content 2024-07-26 18:25:09 +08:00
ibuler
b3980e56de perf: view cache 2024-07-26 15:38:52 +08:00
ibuler
0f8a58209c perf: table search two times, one init one search 2024-07-26 15:38:52 +08:00
zhaojisen
620dcf25a0 fixed:Fixed an issue where the user was unable to enter non-MD content 2024-07-26 15:37:41 +08:00
Bai
1bf839ac5a perf: fix session i18n default 2024-07-23 19:24:29 +08:00
wangruidong
65ed7217cd fix: role display error when update user 2024-07-19 11:29:10 +08:00
feng
a0d3f6096e perf: Translate 2024-07-17 18:05:44 +08:00
zhaojisen
b75f10ec0c style: Code Editor style change 2024-07-17 16:51:34 +08:00
zhaojisen
c45e303127 fixed: Fixed the issue that parameter push parameters could not be saved 2024-07-17 16:03:48 +08:00
zhaojisen
c09d6c96a3 style: Asset tree style tweaks 2024-07-17 16:03:01 +08:00
zhaojisen
da03a92adb style: Editor style adjustments 2024-07-17 15:59:44 +08:00
feng
ef0d0cc260 perf: Translate 2024-07-17 11:40:36 +08:00
feng626
03aa4b60f7 Merge pull request #4231 from jumpserver/pr@v4.0@ticket
perf: Del ticket comment mistake date
2024-07-17 10:54:53 +08:00
feng
668d2e6fc4 perf: Del ticket comment mistake date 2024-07-17 10:52:28 +08:00
feng626
a0d443b8b0 Merge pull request #4223 from jumpserver/pr@v4.0@download
perf: Downloading files does not trigger the beforeunload event
2024-07-16 12:42:27 +08:00
feng
dc2a4d0c54 perf: Downloading files does not trigger the beforeunload event 2024-07-16 12:39:45 +08:00
wangruidong
389707a980 perf: 社区版移除magnus 2024-07-15 19:25:19 +08:00
feng626
40922f77b0 Merge pull request #4217 from jumpserver/pr@v4.0@translate
perf: Translate
2024-07-15 17:05:53 +08:00
feng
1702241ccd perf: Translate 2024-07-15 17:04:31 +08:00
wangruidong
29db60fef5 fix: foot content allow blank 2024-07-15 10:44:06 +08:00
吴小白
0c897e54a3 fix: FromAsCasing keywords 2024-07-09 16:01:51 +08:00
Bryan
4596887bf1 Merge pull request #4178 from jumpserver/dev
v4.0.0
2024-07-03 19:06:07 +08:00
zhaojisen
f873254248 fixed: remove acl rules table item 2024-07-03 15:35:40 +08:00
ZhaoJiSen
c569d0c21c Merge pull request #4176 from jumpserver/pr@dev@fix_cloud_sync
fixed: Online synchronous import
2024-07-03 15:09:09 +08:00
zhaojisen
95d1e23cf8 fixed: Online synchronous import 2024-07-03 15:06:07 +08:00
ibuler
a976948388 perf: cloud privider 2024-07-03 14:46:52 +08:00
ZhaoJiSen
38aadbd8e4 Merge pull request #4174 from jumpserver/pr@dev@fix_user_remove
fixed: User group remove item. TAPD: 1043469
2024-07-03 13:26:22 +08:00
zhaojisen
257ddd9517 fixed: User group remove item. TAPD: 1043469 2024-07-03 13:18:58 +08:00
ZhaoJiSen
2630eddb41 Merge pull request #4173 from jumpserver/pr@dev@fix_cloud_origin
fixed: cloud origin bug. TAPD: 1043263
2024-07-03 11:18:19 +08:00
zhaojisen
5d84b7c874 fixed: cloud origin bug. TAPD: 1043263 2024-07-03 11:11:40 +08:00
ZhaoJiSen
017884e7cc Merge pull request #4172 from jumpserver/pr@dev@fix_auth_refresh
fixed: Fixed the issue that the button text would not refresh when the personal information page unbind authentication. TAPD: 1043567
2024-07-03 10:25:18 +08:00
zhaojisen
682528367d fixed: Fixed the issue that the button text would not refresh when the personal information page unbind authentication. TAPD: 1043567 2024-07-03 10:17:23 +08:00
ibuler
d1b343dfd4 perf: sub form perfermence 2024-07-03 10:05:56 +08:00
wangruidong
1e120f6b77 fix: Resolve issue with update permissions preventing data import 2024-07-02 16:34:37 +08:00
ZhaoJiSen
e59c129e50 Merge pull request #4169 from jumpserver/pr@dev@fix_output_height
style: output height
2024-07-02 15:31:58 +08:00
zhaojisen
4ad17c33a5 style: output height 2024-07-02 15:28:03 +08:00
ZhaoJiSen
31179d665e Merge pull request #4167 from jumpserver/pr@dev@fix_action_width
style: Tweak the width of the action button in English mode
2024-07-02 15:11:27 +08:00
wangruidong
8476cd3dd9 fix: Adhoc chdir invalid 2024-07-02 15:06:28 +08:00
zhaojisen
d442f9bc7d style: Tweak the width of the action button in English mode 2024-07-02 14:58:59 +08:00
ZhaoJiSen
f7c48072c4 Merge pull request #4166 from jumpserver/pr@dev@fix_search_style
style: Fine-tune the search box style
2024-07-02 14:57:19 +08:00
zhaojisen
2690f1904b style: Fine-tune the search box style 2024-07-02 14:37:40 +08:00
wangruidong
6d72a5af4a fix: modify view_workbench deps 2024-07-02 14:28:12 +08:00
ibuler
c4ddfb7d64 perf: community user profile index err 2024-07-02 14:11:22 +08:00
ibuler
d388cb3059 perf: user detail permed assets 2024-07-02 14:10:34 +08:00
ibuler
07223c0e31 perf: select perform 2024-07-02 14:09:45 +08:00
ZhaoJiSen
6a492a83bf Merge pull request #4164 from jumpserver/pr@dev@fix_import_dialog
fixed: Fixed export button not clicking。 TAPD:1043498
2024-07-02 13:58:51 +08:00
zhaojisen
1f6346dbe1 fixed: Fixed export button not clicking。TAPD:1043498 2024-07-02 13:55:22 +08:00
feng626
4ab788364e Merge pull request #4161 from jumpserver/pr@dev@applet
perf: Applet rbac
2024-07-02 11:25:58 +08:00
feng
9849c0e47b perf: Applet rbac 2024-07-02 11:24:30 +08:00
wangruidong
3d86e75bc8 perf: Translate 2024-07-02 10:52:06 +08:00
ibuler
265466c549 perf: community user profile index err 2024-07-01 19:48:48 +08:00
ZhaoJiSen
7e3808c4b9 Merge pull request #4155 from jumpserver/pr@dev@fix_table_select
fixed: Fixed an issue with Select2 component and table in user list
2024-07-01 19:30:01 +08:00
ibuler
7c141b5183 perf: user detail tab user authorization rules 2024-07-01 19:29:02 +08:00
zhaojisen
cccec1aa1b fixed: Fixed an issue with Select2 component and table in user list 2024-07-01 19:28:00 +08:00
wangruidong
7c3effe1d9 fix: no perms can view workbench 2024-07-01 19:00:35 +08:00
wangruidong
4717b21abb fix: no perms can view workbench 2024-07-01 19:00:35 +08:00
wangruidong
44bd9cb8c7 perf: User filter by attribute add tags 2024-07-01 18:13:31 +08:00
feng626
117bccc520 Merge pull request #4151 from jumpserver/pr@dev@cloud_Account
perf: Cloud account error handling
2024-07-01 17:41:32 +08:00
feng
fb86ac4060 perf: Cloud account error handling 2024-07-01 17:40:47 +08:00
wangruidong
dae1fef629 fix: su_method undefined 2024-07-01 16:51:40 +08:00
feng626
455496adcf Merge pull request #4148 from jumpserver/pr@dev@mfa
perf: User first login mfa control
2024-07-01 16:48:00 +08:00
feng
3b50431e57 perf: User first login mfa control 2024-07-01 16:46:58 +08:00
ibuler
27765ca866 perf: view caches bug 2024-07-01 16:22:40 +08:00
feng626
9dad31c75a Merge pull request #4146 from jumpserver/pr@dev@platform_glolab_org
perf: Platform glolab org
2024-07-01 16:11:56 +08:00
feng
04067f5729 perf: Platform glolab org 2024-07-01 16:09:46 +08:00
ZhaoJiSen
edcff7d640 Merge pull request #4144 from jumpserver/pr@dev@fix_repeated_request
fixed: Fixed an issue with duplicate requests
2024-07-01 15:55:35 +08:00
zhaojisen
1b5f20f9e4 fixed: Fixed an issue with duplicate requests 2024-07-01 15:51:54 +08:00
ibuler
add8bd0f01 perf: version value 2024-07-01 15:45:22 +08:00
wangruidong
83c5cf4231 perf: Translate 2024-07-01 15:16:48 +08:00
ibuler
fc4ffe53a5 perf: json many to many field, set timeout to submit 2024-07-01 14:49:53 +08:00
ZhaoJiSen
92e66981a8 Merge pull request #4140 from jumpserver/pr@dev@fix_tag_dialog_close
fixed: Fixed an issue where Tag Dialog could not be closed when jumping
2024-07-01 13:58:38 +08:00
zhaojisen
98153ff98c fixed: Fixed an issue where Tag Dialog could not be closed when jumping 2024-07-01 13:54:55 +08:00
feng626
89246186d0 Merge pull request #4139 from jumpserver/pr@dev@translate
perf: Translate
2024-07-01 10:15:19 +08:00
feng
31faca5d3f perf: Translate 2024-07-01 10:14:11 +08:00
ibuler
ed371dba4f perf: account secret tool tip show delay 2024-06-28 19:02:03 +08:00
ibuler
0ac4337f98 perf: lang change 2024-06-28 19:01:43 +08:00
feng626
526a2eb1d8 Merge pull request #4138 from jumpserver/pr@dev@account_gather
perf: Account gather execution list add trigger
2024-06-28 18:55:27 +08:00
feng
9ce7ebd600 perf: Account gather execution list add trigger 2024-06-28 18:54:33 +08:00
ibuler
3e00c06766 perf: change dumplidate title to -dumplicate 2024-06-28 18:28:56 +08:00
feng626
2c9e1f6d3a Merge pull request #4136 from jumpserver/pr@dev@account_cloud_translate
perf: Cloud account strategy translate
2024-06-28 17:35:42 +08:00
feng
0a57f3afc7 perf: Cloud account strategy translate 2024-06-28 17:34:13 +08:00
ZhaoJiSen
ee31b501af Merge pull request #4135 from jumpserver/pr@dev@fix_file_transfer
perf: file transfer
2024-06-28 17:24:59 +08:00
zhaojisen
4e79074cef perf: file transfer 2024-06-28 17:19:51 +08:00
ibuler
ada6479177 perf: lang setting from core 2024-06-28 16:39:35 +08:00
wangruidong
32585e4abc perf: Modify Label to Tags 2024-06-28 15:28:28 +08:00
ZhaoJiSen
861bce244e Merge pull request #4132 from jumpserver/pr@dev@fix_remove_fields
fixed: The summary and parameter fields were removed
2024-06-28 11:20:58 +08:00
zhaojisen
5412647971 fixed: The summary and parameter fields were removed 2024-06-28 11:18:23 +08:00
ZhaoJiSen
887496fe51 Merge pull request #4131 from jumpserver/pr@dev@fix_assets_tree_refresh
fixed: Fixed an issue where the right table would not refresh when a node in the asset tree was clicked
2024-06-28 10:36:34 +08:00
zhaojisen
1f3d29560d fixed: Fixed an issue where the right table would not refresh when a node in the asset tree was clicked 2024-06-28 10:33:29 +08:00
wangruidong
d3c018dc4a perf: Task log optimize 2024-06-28 10:25:44 +08:00
ZhaoJiSen
8a7f358b06 Merge pull request #4129 from jumpserver/pr@dev@fix_jobs_adhoc
fixed: adhoc style change
2024-06-27 18:40:42 +08:00
zhaojisen
42ea79858f fixed: adhoc style change 2024-06-27 18:36:56 +08:00
wangruidong
e60dd28212 perf: add account backup execution perm 2024-06-27 16:23:40 +08:00
wangruidong
4eefb448ed perf: add change labeled resource perm 2024-06-27 16:06:08 +08:00
wangruidong
918b6dbe8e perf: add comment 2024-06-27 15:01:03 +08:00
wangruidong
34154178e2 fix: markdown not applying github styles 2024-06-27 11:01:52 +08:00
ibuler
060fc4719c perf: use other algo replace crypto uuid 2024-06-27 10:16:29 +08:00
ibuler
ea44fe7c13 perf: change krry paging 2024-06-26 19:29:12 +08:00
zhaojisen
6264caf8a8 fixed: route warning 2024-06-26 19:28:48 +08:00
ibuler
2b3537ac7e perf: translate some word 2024-06-26 19:28:23 +08:00
feng626
86efbbcd82 Merge pull request #4120 from jumpserver/pr@dev@asset_perm
fix: Asset authorization cannot be imported
2024-06-26 17:06:04 +08:00
feng
40b8b3f739 fix: Asset authorization cannot be imported 2024-06-26 17:04:14 +08:00
ZhaoJiSen
40a18d7efb Merge pull request #4119 from jumpserver/pr@dev@fix_tips_show
fixed: tip message show
2024-06-26 16:55:54 +08:00
zhaojisen
517917947a fixed: tip message show 2024-06-26 16:51:14 +08:00
wangruidong
b6b97cb3a5 perf: Translate ticket action 2024-06-26 15:47:53 +08:00
wangruidong
46a8e53c51 fix: allow class attribute 2024-06-26 15:47:32 +08:00
ZhaoJiSen
0a6a628be5 Merge pull request #4115 from jumpserver/pr@dev@fix_cloud_button
fixed: Fixed the issue that some button clicks of cloud platform account could not be operated
2024-06-26 14:39:16 +08:00
zhaojisen
1238a62a3c fixed: Fixed the issue that some button clicks of cloud platform account could not be operated 2024-06-26 14:33:42 +08:00
wangruidong
aaff23d261 perf: No filter content in template management search dropdown in task center 2024-06-26 11:29:17 +08:00
feng626
9df71344ed Merge pull request #4112 from jumpserver/pr@dev@rbac_translate
perf: Translate
2024-06-25 19:10:14 +08:00
feng
7acf008adc perf: Translate 2024-06-25 19:09:01 +08:00
ZhaoJiSen
7f2bab1a30 Merge pull request #4111 from jumpserver/pr@dev@fix_auto_search_export
fixed: Fixed the abnormal behavior of the export pop-up when exporting
2024-06-25 18:25:06 +08:00
zhaojisen
6eaa8b9a85 fixed: Fixed the abnormal behavior of the export pop-up when exporting 2024-06-25 18:21:15 +08:00
ibuler
ea9f067f35 perf: json many to many 2024-06-25 17:30:56 +08:00
ZhaoJiSen
564b04850a Merge pull request #4109 from jumpserver/pr@dev@fix_id_error
fixed: Fixed an issue where clicking the user/group field in the authorization rule of the user detail page would jump to an error
2024-06-25 17:10:22 +08:00
zhaojisen
3f42ad7d18 fixed: Fixed an issue where clicking the user/group field in the authorization rule of the user detail page would jump to an error 2024-06-25 17:06:52 +08:00
ZhaoJiSen
1b7ffaeda3 Merge pull request #4108 from jumpserver/pr@dev@fix_plateform_tab
fixed: Fixed an issue where the correct tab could not be located after creating the platform
2024-06-25 14:03:55 +08:00
zhaojisen
8fad0019f8 fixed: Fixed an issue where the correct tab could not be located after creating the platform 2024-06-25 13:59:39 +08:00
zhaojisen
f06d28dab1 fixed: Fixed an issue where MFA validation would open twice 2024-06-25 12:41:53 +08:00
fit2bot
5b3d20972a perf: ztree auto height (#4106)
Co-authored-by: ibuler <ibuler@qq.com>
2024-06-25 11:40:43 +08:00
ZhaoJiSen
20f97f96b8 Merge pull request #4105 from jumpserver/pr@dev@fix_auto_tarnsform
fixed: Fixed an issue where the message subscription page would not be automatically checked
2024-06-25 10:33:09 +08:00
zhaojisen
a952c0b216 fixed: Fixed an issue where the message subscription page would not be automatically checked 2024-06-25 10:29:07 +08:00
wangruidong
1edb374a90 perf: Make LDAP sync import interval optional in settings form 2024-06-25 10:16:39 +08:00
feng626
39b43d6eff Merge pull request #4103 from jumpserver/pr@dev@translate
perf: Translate
2024-06-24 20:07:19 +08:00
feng
0b3eb69749 perf: Translate 2024-06-24 20:06:00 +08:00
wangruidong
440a3fa7fe perf: favor & disfavor msg 2024-06-24 19:39:44 +08:00
ZhaoJiSen
16e9bf37ea Merge pull request #4101 from jumpserver/pr@dev@fix_table_reload
fixed: Fixed an issue where tables could not be refreshed after creation
2024-06-24 19:31:33 +08:00
zhaojisen
448e4fac32 fixed: Fixed an issue where tables could not be refreshed after creation 2024-06-24 19:27:30 +08:00
ZhaoJiSen
e819bc5aee Merge pull request #4100 from jumpserver/pr@dev@fix_table_action
style: Fixed the bottom border of the operation column button in the table
2024-06-24 19:20:28 +08:00
zhaojisen
662e29c4c7 style: Fixed the bottom border of the operation column button in the table 2024-06-24 19:12:20 +08:00
ZhaoJiSen
195f0cd69a Merge pull request #4099 from jumpserver/pr@dev@fix_mfa_dialog
fixed: Fixed an issue with MFA popover not closing
2024-06-24 17:05:48 +08:00
zhaojisen
d4fff004c9 fixed: Fixed an issue with MFA popover not closing 2024-06-24 17:00:11 +08:00
老广
de89e7e80a Merge pull request #4095 from jumpserver/v4
Merge v4 to dev
2024-06-24 16:46:10 +08:00
ibuler
cd94116465 perf: list table help tip 2024-06-24 16:42:27 +08:00
ibuler
78706a0fb6 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-24 16:21:52 +08:00
ibuler
bee96b9e09 perf: use v-sanitize except v-html 2024-06-24 16:21:34 +08:00
feng626
47b5e4ba90 Merge pull request #4098 from jumpserver/pr@v4@translate
perf: Translate
2024-06-24 15:56:53 +08:00
feng
6583c27600 perf: Translate 2024-06-24 15:55:40 +08:00
ZhaoJiSen
ebba329a0d Merge pull request #4097 from jumpserver/pr@v4@fix_cloud_sync
fixed:Fixed an issue where resources were not displayed in cloud synchronization
2024-06-24 15:24:17 +08:00
zhaojisen
0aadfe5d24 fixed:Fixed an issue where resources were not displayed in cloud synchronization 2024-06-24 15:16:50 +08:00
ibuler
5e7e4151a3 merge: with remote 2024-06-24 15:04:40 +08:00
ibuler
4d418221d6 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-24 14:54:58 +08:00
ibuler
2d81cc857b perf: bulk delete msg display 2024-06-24 14:51:32 +08:00
ZhaoJiSen
b0ab3bf434 Merge pull request #4096 from jumpserver/pr@v4@fix_perm_rules
fixed: Fixed the issue that the latest authorization rule could not be displayed when the asset authorization was clicked again after successfully creating the asset authorization
2024-06-24 14:49:19 +08:00
zhaojisen
8eb381b81c fixed: Fixed the issue that the latest authorization rule could not be displayed when the asset authorization was clicked again after successfully creating the asset authorization 2024-06-24 14:38:42 +08:00
wangruidong
2e7611ad92 perf: Disable scheduled tasks for the community edition in account push 2024-06-24 11:51:28 +08:00
ZhaoJiSen
7955afcf35 Merge pull request #4094 from jumpserver/pr@v4@fix_system_role
fixed: Fixed the empty error message when the role detail page was removed
2024-06-24 11:45:36 +08:00
zhaojisen
8e8ee7c495 fixed: Fixed the empty error message when the role detail page was removed 2024-06-24 11:42:57 +08:00
ZhaoJiSen
f3f1da452e Merge pull request #4092 from jumpserver/pr@v4@fix_assets_perms
fixed: Fixed asset authorization jump error
2024-06-24 11:37:13 +08:00
zhaojisen
3efe6efa0b fixed: Fixed asset authorization jump error 2024-06-24 11:32:43 +08:00
ibuler
37453aaa11 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-24 11:10:57 +08:00
ibuler
47c26e93df perf: passkey help info 2024-06-24 11:05:14 +08:00
wangruidong
e3f5f948c3 perf: Optimize SSH key form in personal information settings 2024-06-24 11:00:34 +08:00
feng626
17d0dab859 Merge pull request #4090 from jumpserver/pr@v4@translate
perf: Translate
2024-06-24 10:57:03 +08:00
feng
02f5f4261e perf: Translate 2024-06-24 10:48:33 +08:00
ibuler
fc4f10a7ea Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-24 09:55:30 +08:00
ibuler
6d127bdee7 perf: 修改图标 2024-06-24 09:55:20 +08:00
feng626
00c5968380 Merge pull request #4089 from jumpserver/pr@v4@rbac_perm
perf: Edit rbac perms
2024-06-21 19:07:16 +08:00
feng
0f8e02c738 perf: Edit rbac perms 2024-06-21 19:04:59 +08:00
wangruidong
77c1af3dcf fix: The left asset tree refreshes every time a shortcut command is executed 2024-06-21 18:03:15 +08:00
ZhaoJiSen
ad52d17bda Merge pull request #4085 from jumpserver/pr@v4@fix_remote_detail
fixed: Fixed an issue where the app card would not jump when clicked
2024-06-21 10:57:18 +08:00
zhaojisen
d45e18fac6 fixed: Fixed an issue where the app card would not jump when clicked 2024-06-21 10:53:35 +08:00
feng626
5432306b1a Merge pull request #4084 from jumpserver/pr@v4@rbac
perf: System setting perm
2024-06-20 19:18:56 +08:00
feng
b1000227c0 perf: System setting perm 2024-06-20 19:17:54 +08:00
ZhaoJiSen
9d86a63b52 Merge pull request #4083 from jumpserver/pr@v4@fix_white_page
fixed: Fixed a blank page when users logged in for the first time
2024-06-20 18:47:31 +08:00
zhaojisen
32d6fc95be fixed: Fixed a blank page when users logged in for the first time 2024-06-20 18:44:07 +08:00
ZhaoJiSen
d7ff7c8038 Merge pull request #4081 from jumpserver/pr@v4@fix_dialog_close
fixed: Fixed an issue where MFA forms could not be closed
2024-06-20 18:13:39 +08:00
zhaojisen
b042bf4b55 fixed: Fixed an issue where MFA forms could not be closed 2024-06-20 18:10:22 +08:00
ZhaoJiSen
b315f65bcd Merge pull request #4080 from jumpserver/pr@v4@fix_table_width
style: table width
2024-06-20 16:38:51 +08:00
zhaojisen
ead06c5eae style: table width 2024-06-20 16:34:31 +08:00
ZhaoJiSen
b8b488274f Merge pull request #4079 from jumpserver/pr@v4@fix_role_sys
fixed: Fixed an issue where the delete prompt was incorrect when the user had only one organization role
2024-06-20 15:49:58 +08:00
zhaojisen
e54ac05df2 fixed: Fixed an issue where the delete prompt was incorrect when the user had only one organization role 2024-06-20 15:45:08 +08:00
ZhaoJiSen
6146ffc9c3 Merge pull request #4078 from jumpserver/pr@v4@fix_privileged_show
fixed: Change the way the unprivileged account field is displayed in the table
2024-06-20 15:16:25 +08:00
zhaojisen
0fcd8c134d fixed: Change the way the unprivileged account field is displayed in the table 2024-06-20 15:10:25 +08:00
ZhaoJiSen
ccac4745ea Merge pull request #4077 from jumpserver/pr@v4@fix_tags
fixed: Fixed an issue where clicking the Delete flag
2024-06-20 14:57:59 +08:00
zhaojisen
70dba5a317 fixed: Fixed an issue where clicking the Delete flag 2024-06-20 14:55:08 +08:00
feng626
f6adb3b1c3 Merge pull request #4075 from jumpserver/pr@v4@translate_all
perf: Translate
2024-06-19 19:37:07 +08:00
feng
0b4b551d56 perf: Translate 2024-06-19 19:32:25 +08:00
Bryan
0a3dc30c85 Merge pull request #4072 from jumpserver/dev
v3.10.11-lts
2024-06-19 16:04:12 +08:00
ibuler
cd1e371acb Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-19 13:17:23 +08:00
ibuler
8e0117a100 fix: tree bug 2024-06-19 13:17:06 +08:00
ZhaoJiSen
1b0bb1a711 Merge pull request #4070 from jumpserver/pr@v4@fix_perm_delete
fixed: Fixed the issue that the authorization file could not be deleted
2024-06-19 11:45:24 +08:00
zhaojisen
392d150396 fixed: Fixed the issue that the authorization file could not be deleted 2024-06-19 11:42:09 +08:00
ZhaoJiSen
c3114609f5 Merge pull request #4069 from jumpserver/pr@v4@fix_phone_require
perf: Mobile phone is set as a required field
2024-06-19 11:32:13 +08:00
zhaojisen
1e82ca3f66 perf: Mobile phone is set as a required field 2024-06-19 11:27:55 +08:00
ZhaoJiSen
e4c7b1d8cf Merge pull request #4068 from jumpserver/pr@v4@fix_refresh
fixed: Fixed resource refresh issues
2024-06-19 10:58:50 +08:00
zhaojisen
942b74be8e fixed: Fixed resource refresh issues 2024-06-19 10:55:32 +08:00
feng626
7841669db7 Merge pull request #4067 from jumpserver/pr@v4@translate_account
perf: Translate account
2024-06-18 19:39:42 +08:00
feng
a0382dc984 perf: Translate account 2024-06-18 19:37:34 +08:00
ibuler
fdb52fb4f4 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-18 19:23:21 +08:00
ZhaoJiSen
38aa42ff9b Merge pull request #4066 from jumpserver/pr@v4@fix_account_template
fixed: Fixed the issue of abnormal automatic push items when editing template account
2024-06-18 19:22:31 +08:00
ibuler
802bf6f1e3 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-18 19:19:22 +08:00
zhaojisen
ae9312983a fixed: Fixed the issue of abnormal automatic push items when editing template account 2024-06-18 19:16:36 +08:00
ZhaoJiSen
c156250c90 Merge pull request #4065 from jumpserver/pr@v4@fix_export_default
fixed: Fixed export module default options
2024-06-18 18:07:40 +08:00
zhaojisen
5dcdbb702f fixed: Fixed export module default options 2024-06-18 18:02:20 +08:00
ibuler
4750f8388a Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-18 17:53:56 +08:00
ibuler
3fb47fb6ea perf: 优化资产创建更新 labels 2024-06-18 17:53:36 +08:00
feng626
eba323fb64 Merge pull request #4062 from jumpserver/pr@v4@account_edit
fix: Account tempalte update secret failed
2024-06-18 14:48:23 +08:00
feng
53b00421d2 fix: Account tempalte update secret failed 2024-06-18 14:47:18 +08:00
ZhaoJiSen
cc77c1ebaf Merge pull request #4060 from jumpserver/pr@v4@fix_account_tooltip
perf: Added tooltip information to view account secret
2024-06-18 11:27:13 +08:00
zhaojisen
5ea3ae3a0c perf: Added tooltip information to view account secret 2024-06-18 11:23:03 +08:00
ZhaoJiSen
76b6aebac4 Merge pull request #4059 from jumpserver/pr@v4@fix_plateform_database
fixed:Fixed issues with custom platform databases
2024-06-17 20:27:54 +08:00
zhaojisen
1e1f2f3bd9 fixed:Fixed issues with custom platform databases 2024-06-17 20:21:17 +08:00
feng626
085b11e262 Merge pull request #4058 from jumpserver/pr@v4@account_backup
perf: Account backup detail
2024-06-17 20:20:28 +08:00
feng
4eb556e1bb perf: Account backup detail 2024-06-17 20:18:38 +08:00
feng626
e4a0ef311b Merge pull request #4057 from jumpserver/pr@v4@record_secret
perf: Record secret translate
2024-06-17 19:50:21 +08:00
feng
9073e9fa68 perf: Record secret translate 2024-06-17 19:49:29 +08:00
feng626
29ceb66837 Merge pull request #4056 from jumpserver/pr@v4@translate
perf: Translate
2024-06-17 19:22:18 +08:00
feng
5184252e5f perf: Translate 2024-06-17 19:20:58 +08:00
ZhaoJiSen
cad65469a4 Merge pull request #4055 from jumpserver/pr@v4@fix_countdown
fixed: Fixed an issue where the countdown stopped at 2 seconds
2024-06-17 19:15:17 +08:00
zhaojisen
03051c6a8f fixed: Fixed an issue where the countdown stopped at 2 seconds 2024-06-17 19:11:34 +08:00
ZhaoJiSen
a25392f934 Merge pull request #4054 from jumpserver/pr@v4@fix_do_list
style: Perform the list button style
2024-06-17 18:42:25 +08:00
zhaojisen
ba4fc027e6 style: Perform the list button style 2024-06-17 18:38:30 +08:00
feng626
3b21e8f858 Merge pull request #4053 from jumpserver/pr@v4@change_account
fix: Change secret log not view
2024-06-17 17:52:01 +08:00
feng
31a2a97bee fix: Change secret log not view 2024-06-17 17:51:17 +08:00
ZhaoJiSen
bf1ae6570c Merge pull request #4052 from jumpserver/pr@v4@fix_cloud_import
fixed: Fixed the issue when clicking import during the process of creating cloud account
2024-06-17 17:49:35 +08:00
zhaojisen
29ddc06c4b fixed: Fixed the issue when clicking import during the process of creating cloud account 2024-06-17 17:24:31 +08:00
ZhaoJiSen
8a6d56e09f Merge pull request #4051 from jumpserver/pr@v4@fix_auth_rules
fixed: Fixed an issue where the jump of skippable table data failed
2024-06-17 16:22:46 +08:00
zhaojisen
b739d3f435 fixed: Fixed an issue where the jump of skippable table data failed 2024-06-17 16:22:04 +08:00
ZhaoJiSen
82d2c06eff Merge pull request #4050 from jumpserver/pr@v4@fix_account_privileged
fixed: The account list detail page does not refresh after opening and closing the privilege list field
2024-06-17 14:58:46 +08:00
zhaojisen
adf8617abf fixed: The account list detail page does not refresh after opening and closing the privilege list field 2024-06-17 14:57:58 +08:00
ZhaoJiSen
286275142a Merge pull request #4049 from jumpserver/pr@v4@fix_asset_perm
perf: Fixed an issue with the asset authorization detail page jumping to the basic page after adding a user
2024-06-17 11:38:29 +08:00
zhaojisen
1b0d46bdfb perf: Fixed an issue with the asset authorization detail page jumping to the basic page after adding a user 2024-06-17 11:34:46 +08:00
ZhaoJiSen
d9864afa8c Merge pull request #4048 from jumpserver/pr@v4@fix_blank_page
fixed: Fixed an issue where clicking on a task name would lead to a blank page
2024-06-17 10:38:03 +08:00
zhaojisen
c0beb480d4 fixed: Fixed an issue where clicking on a task name would lead to a blank page 2024-06-17 10:30:33 +08:00
ZhaoJiSen
20b7b87cff Merge pull request #4046 from jumpserver/pr@v4@fix_assets_clone
fixed: Fixed platform error when cloning assets
2024-06-14 19:48:55 +08:00
zhaojisen
e374906dee fixed: Fixed platform error when cloning assets 2024-06-14 19:43:54 +08:00
feng626
3459529d08 Merge pull request #4045 from jumpserver/pr@v4@activity
perf: Activities timestamp international
2024-06-14 19:12:17 +08:00
feng
4d67c7e2ff perf: Activities timestamp international 2024-06-14 19:11:06 +08:00
ZhaoJiSen
6cbec0c39e Merge pull request #4044 from jumpserver/pr@v4@fix_card_style
style: Fixed inconsistent card styles
2024-06-14 16:01:08 +08:00
zhaojisen
8c074a9f9a style: Fixed inconsistent card styles 2024-06-14 15:56:53 +08:00
ZhaoJiSen
e37ca4c34f Merge pull request #4043 from jumpserver/pr@v4@fix_validate_message
fixed: Fixed the problem that when the number of disabled days of inactive users in the authentication security page meets the required number of days, the verification content will still exist after successful submission
2024-06-14 15:00:03 +08:00
zhaojisen
a8c85826de fixed: Fixed the problem that when the number of disabled days of inactive users in the authentication security page meets the required number of days, the verification content will still exist after successful submission 2024-06-14 14:56:41 +08:00
ZhaoJiSen
91ed7636ff Merge pull request #4042 from jumpserver/pr@v4@fix_account_list_dialgo
fixed: Fixed the issue that the create account window did not close after creating an account in the account list
2024-06-14 11:00:32 +08:00
zhaojisen
8db03bf315 fixed: Fixed the issue that the create account window did not close after creating an account in the account list 2024-06-14 10:55:56 +08:00
ZhaoJiSen
793ced1758 Merge pull request #4041 from jumpserver/pr@v4@fix_reload_groups
fixed: Fixed the issue of manual refresh for batch update users
2024-06-13 19:05:04 +08:00
ZhaoJiSen
9ef07fb494 Merge pull request #4040 from jumpserver/pr@v4@fix_account_list_icon
style: Fixed the display layout for viewing account details in the account list
2024-06-13 19:03:12 +08:00
zhaojisen
349c5116ea fixed: Fixed the issue of manual refresh for batch update users 2024-06-13 19:01:30 +08:00
zhaojisen
93949d9fd7 style: Fixed the display layout for viewing account details in the account list 2024-06-13 17:46:13 +08:00
ibuler
eedcad947e Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-13 17:11:47 +08:00
ZhaoJiSen
5e17b74684 Merge pull request #4039 from jumpserver/pr@v4@fix_arrow_icon
style: Change shuttle box icon
2024-06-13 17:10:18 +08:00
zhaojisen
99f027e0ee style: Change shuttle box icon 2024-06-13 16:47:20 +08:00
ZhaoJiSen
04de130e02 Merge pull request #4038 from jumpserver/pr@v4@fix_assets_error
fixed: Fixed the Error message when updating assets
2024-06-13 15:44:58 +08:00
zhaojisen
30444565a8 fixed: Fixed the Error message when updating assets 2024-06-13 15:41:41 +08:00
ZhaoJiSen
c9b72491b6 Merge pull request #4037 from jumpserver/pr@v4@fix_assets_skip
fixed: Fixed an issue where Dialog does not close when the asset list is authorized for reclicking the jump
2024-06-13 15:06:18 +08:00
zhaojisen
86b687d27b fixed: Fixed an issue where Dialog does not close when the asset list is authorized for reclicking the jump 2024-06-13 15:02:37 +08:00
Bai
03b0219a1e Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-13 14:09:53 +08:00
Bai
8ddc2cda92 perf: i18n cookie default en and expired 365d and remove storage i18n 2024-06-13 14:09:34 +08:00
ibuler
c3d9da1186 perf: 修改 asset dialog 2024-06-13 13:02:19 +08:00
ZhaoJiSen
b1b28f93c5 Merge pull request #4035 from jumpserver/pr@v4@fix_ztree_input_style
style: Fine-tune the asset tree input style
2024-06-13 11:27:19 +08:00
zhaojisen
a465a093c9 style: Fine-tune the asset tree input style 2024-06-13 11:22:55 +08:00
zhaojisen
3d362db71a style: Fine-tune the asset tree input style 2024-06-13 11:04:43 +08:00
ZhaoJiSen
3ea506adca Merge pull request #4033 from jumpserver/pr@v4@fix_cloud_style_adjust
style: Fine-tuning styles
2024-06-13 10:31:40 +08:00
zhaojisen
bb37dde0e0 style: Fine-tuning styles 2024-06-13 10:27:23 +08:00
wangruidong
c1e21905df fix: Modify some translations 2024-06-12 19:36:52 +08:00
ibuler
9445ac1efe Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-12 19:29:44 +08:00
ibuler
0f6e12f80b fix: some i18n bug 2024-06-12 19:29:35 +08:00
feng626
94181dbb46 Merge pull request #4031 from jumpserver/pr@v4@remove_account
perf: Platform automation add remove account method
2024-06-12 19:23:28 +08:00
feng
988eec7224 perf: Platform automation add remove account method 2024-06-12 19:22:02 +08:00
ZhaoJiSen
4a604f4f6a Merge pull request #4030 from jumpserver/pr@v4@fix_plateform_create
fix: Fixed the issue that when creating a device in the platform list, the new device needs to refresh before it can be displayed
2024-06-12 19:14:28 +08:00
zhaojisen
cc244c6af6 fix: Fixed the issue that when creating a device in the platform list, the new device needs to refresh before it can be displayed 2024-06-12 19:11:10 +08:00
ibuler
b97ef23bf8 merge: with remote 2024-06-12 19:06:34 +08:00
ibuler
0952e9e9ae perf: change asset permission detail bug 2024-06-12 18:59:29 +08:00
ZhaoJiSen
7391c9e675 Merge pull request #4029 from jumpserver/pr@v4@fix_region
fix: Fixed the issue that the region was displayed incorrectly when updating the cloud platform account
2024-06-12 18:42:56 +08:00
zhaojisen
757184c459 fix: Fixed the issue that the region was displayed incorrectly when updating the cloud platform account 2024-06-12 18:38:53 +08:00
Bai
85a4247d9b perf: Update default language en 2024-06-12 18:38:05 +08:00
wangruidong
9b36f51015 fix: Viewing account collection task details leads to a blank page 2024-06-12 18:02:38 +08:00
wangruidong
60d8f00723 fix: Clicking on gateway numbers in domain list leads to blank page 2024-06-12 17:20:16 +08:00
feng626
d9d0f922bb Merge pull request #4026 from jumpserver/pr@v4@account_cloud_sync_del
fix: Deleting released assets, prompting deletion failure
2024-06-12 16:37:45 +08:00
feng
040d049742 fix: Deleting released assets, prompting deletion failure 2024-06-12 16:34:46 +08:00
ibuler
53044e0551 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-12 16:13:50 +08:00
ibuler
59f0a16544 perf: 优化 tag 2024-06-12 16:13:34 +08:00
feng626
60f44c6759 Merge pull request #4025 from jumpserver/pr@v4@account
perf: Account task filter optimization
2024-06-12 15:30:30 +08:00
feng
2cb1ae1ab7 perf: Account task filter optimization 2024-06-12 15:25:58 +08:00
ZhaoJiSen
bf8e6118c2 Merge pull request #4024 from jumpserver/pr@v4@fix_cloud_delete
fix: Fixed the issue that the data was not refrefied when jumping back to the page after clicking delete on the cloud synchronization detail page
2024-06-12 13:45:19 +08:00
zhaojisen
a561a62ef5 fix: Fixed the issue that the data was not refrefied when jumping back to the page after clicking delete on the cloud synchronization detail page 2024-06-12 13:42:09 +08:00
wangruidong
982f9e5635 fix: Gateway list not displaying data after create 2024-06-12 10:57:00 +08:00
ibuler
ca57e8106b Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-11 19:40:32 +08:00
ibuler
d0ae764ab6 perf: 优化 tags 关联 2024-06-11 19:39:59 +08:00
feng626
104e711aec Merge pull request #4022 from jumpserver/pr@v4@fix_cloud_params
fix: Cloud synchronization region parameters
2024-06-11 19:10:26 +08:00
zhaojisen
1dde0cba15 fix: Cloud synchronization region parameters 2024-06-11 19:00:15 +08:00
zhaojisen
3981570360 fix: Cloud synchronization region parameters 2024-06-11 18:59:14 +08:00
zhaojisen
bba9951b9b style: Modify the style of the cloud sync page when there is no data spatio-temporal state 2024-06-11 18:49:28 +08:00
feng
f3e55a58ce perf: Workbench session table spacing 2024-06-11 18:48:43 +08:00
ibuler
f706d38e2d Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-11 18:47:23 +08:00
ibuler
e88f84e438 perf: 优化高度 2024-06-11 18:47:17 +08:00
ZhaoJiSen
9ca80bda50 Merge pull request #4020 from jumpserver/pr@v4@fix_activeMenu
fix: Fixed activeMenu duplicate issue
2024-06-11 18:30:48 +08:00
zhaojisen
19c71d4ddd fix: Fixed activeMenu duplicate issue 2024-06-11 18:27:23 +08:00
feng626
601acb63bb Merge pull request #4018 from jumpserver/pr@v4@fix_region_style
style: Optimize the styling of region forms in cloud sync
2024-06-11 18:26:07 +08:00
zhaojisen
4f3a1cac43 style: Optimize the styling of region forms in cloud sync 2024-06-11 18:22:15 +08:00
ibuler
c1085cce70 perf: change >>> to ::v-deep 2024-06-11 18:06:03 +08:00
ibuler
8331e8b58c Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-11 17:13:59 +08:00
ibuler
8e81a9fca4 perf: 修改 icon 2024-06-11 17:13:40 +08:00
feng626
df11f56a40 Merge pull request #4011 from jumpserver/pr@v4@fix_cloud_style
style: Reconstruct the cloud synchronization part of the style
2024-06-11 15:23:56 +08:00
feng626
71b21f78e1 Merge branch 'v4' into pr@v4@fix_cloud_style 2024-06-11 15:23:47 +08:00
ZhaoJiSen
174117161e Merge pull request #4016 from jumpserver/pr@v4@fix_cloud_triggerMode
fix: Fixed the issue that the dialog box did not close when clicking the cloud platform account details to jump to the cloud platform details page during the last step of creating the cloud
2024-06-11 14:28:54 +08:00
ZhaoJiSen
affdcc3225 Merge pull request #4014 from jumpserver/pr@v4@fix_cloud_location
fix: Fixed the issue that the dialog box did not close when clicking the cloud platform account details to jump to the cloud platform details page during the last step of creating the cloud
2024-06-11 14:27:02 +08:00
zhaojisen
165d5dfef3 fix: Fixed the issue that the dialog box did not close when clicking the cloud platform account details to jump to the cloud platform details page during the last step of creating the cloud 2024-06-11 14:24:23 +08:00
ibuler
94ae70a2c2 perf: 修改 icon 2024-06-11 11:44:47 +08:00
ibuler
acef2eff3a perf: 修改一些 icon 2024-06-11 11:02:24 +08:00
zhaojisen
7d7208a1bf fix: Fixed the issue that the dialog box did not close when clicking the cloud platform account details to jump to the cloud platform details page during the last step of creating the cloud 2024-06-11 10:46:49 +08:00
ibuler
56f66a169c perf: 修改 icon 2024-06-11 10:24:49 +08:00
ibuler
4caf3b2f86 perf: change icon remote unuse attr 2024-06-07 18:35:55 +08:00
ibuler
e58911d9cf Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-07 18:17:05 +08:00
ibuler
c03c9dac30 perf: 统一 icon 大小 2024-06-07 18:15:39 +08:00
wangruidong
19858a4467 fix: ACls add User login page 2024-06-07 18:05:11 +08:00
zhaojisen
1b5b4188b5 style: Reconstruct the cloud synchronization part of the style 2024-06-07 17:16:17 +08:00
ibuler
689b25b743 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-07 17:01:40 +08:00
ibuler
5ee2ed14af perf: 修改 icon 2024-06-07 17:01:23 +08:00
feng626
eecfebe66f Merge pull request #4010 from jumpserver/pr@v4@cloud_account
perf: Cloud Sync Provider Error
2024-06-07 15:32:54 +08:00
feng
e1d48a62e2 perf: Cloud Sync Provider Error 2024-06-07 15:32:08 +08:00
zhaojisen
00bd0e52ef fix: Fixed the bug that the information returned by the interface would be displayed when creating a cloud platform account 2024-06-07 14:06:12 +08:00
wangruidong
aa3c9762c9 fix: Crontab - Failed to set minute range 2024-06-07 11:01:45 +08:00
ibuler
6fac279db7 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-07 10:35:04 +08:00
ibuler
0f013cd7a0 perf: 修改 accounts 2024-06-07 10:34:31 +08:00
wangruidong
dac84749fd fix: edit access key redirect blank page 2024-06-06 19:17:20 +08:00
wangruidong
b2f650cab0 perf: profile improvement mfa cancel hide 2024-06-06 17:34:37 +08:00
ibuler
a3a58040a0 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-06 16:55:24 +08:00
ibuler
659a3864f7 perf: rechange asset permission accounts 2024-06-06 16:55:07 +08:00
zhaojisen
a1a5dfdbfd fix: Under the asset authorization rule page, click on the table data to jump to the problem of failure 2024-06-06 15:19:11 +08:00
ibuler
a89c32e668 perf: 修改 asset permission 中的 accounts 2024-06-06 14:19:03 +08:00
fit2bot
903a1ecda4 style: Adjust the card style of cloud platform page (#3997)
Co-authored-by: zhaojisen <1301338853@qq.com>
Co-authored-by: 老广 <ibuler@qq.com>
2024-06-06 14:12:59 +08:00
ibuler
3802520958 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-05 19:34:16 +08:00
ibuler
54acd85586 perf: 修改 permission accounts 2024-06-05 19:33:21 +08:00
feng626
3c41aa44eb Merge pull request #3999 from jumpserver/pr@v4@asset_add_icons
perf: Asset platform add icon
2024-06-05 17:10:28 +08:00
feng
b830674abc perf: Asset platform add icon 2024-06-05 17:09:32 +08:00
wangruidong
1949d76654 fix: profile page click some button redirect to a blank page 2024-06-05 16:25:08 +08:00
wangruidong
82689b48ba If non-existent values are entered into the select component, won't trigger a search request. 2024-06-05 15:59:52 +08:00
ibuler
455f732250 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-04 19:07:07 +08:00
ibuler
5494bec24a perf: 修改 labels 支持颜色 2024-06-04 19:03:56 +08:00
feng626
1eedf42be0 Merge pull request #3996 from jumpserver/pr@v4@console_dashboard
perf: console dashboard add user asset route
2024-06-04 11:01:12 +08:00
feng
5d0c8535f2 perf: console dashboard add user asset route 2024-06-04 10:55:58 +08:00
ibuler
a0c9a72c1d perf: 修改 card table 2024-06-04 10:43:54 +08:00
ibuler
7fbbb75fed Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-03 19:36:29 +08:00
ibuler
897198b785 perf: 修改 cloud privider 2024-06-03 19:36:14 +08:00
Bai
04e7d66667 perf: Update cloud provider svg 2024-06-03 19:14:33 +08:00
Bai
b6c81dacf7 perf: Update i18n 2024-06-03 15:08:37 +08:00
Bai
f4c9637949 perf: Update i18n 2024-06-03 14:20:47 +08:00
Bai
141d4208e1 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-06-03 11:44:52 +08:00
Bai
46d1969254 perf: Update i18n 2024-06-03 11:44:30 +08:00
feng626
0cf0e04705 Merge pull request #3993 from jumpserver/pr@v4@workbench_mysession
perf: workbench my session translate
2024-06-03 11:12:31 +08:00
feng
e6a3b1e9e1 perf: workbench my session translate 2024-06-03 11:11:47 +08:00
feng626
35fa8ed374 Merge pull request #3992 from jumpserver/pr@v4@translate
perf: translate
2024-06-03 10:25:56 +08:00
feng
38856deaa7 perf: translate 2024-06-03 10:24:13 +08:00
wangruidong
f573a3a7ab perf: action i18n 2024-05-31 16:32:20 +08:00
ibuler
500d3e15c3 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-31 15:17:19 +08:00
ibuler
bbee6cafdf perf: 优化 ai chat bot 2024-05-31 15:17:03 +08:00
wangruidong
5053b0a89a perf: i18n 2024-05-31 15:12:09 +08:00
ibuler
024e4a1d96 perf: 修改 menu.scss 2024-05-30 17:40:58 +08:00
ibuler
f791a2cfcf Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-30 16:47:22 +08:00
ibuler
962bad10aa perf: 修改三级菜单激活的问题 2024-05-30 16:46:43 +08:00
wangruidong
288c6af300 fix: adhoc,file transfer select account error 2024-05-30 15:18:11 +08:00
ibuler
7eb5be9081 perf: 修复三级菜单 2024-05-30 15:04:50 +08:00
ibuler
fcd049721d Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-30 14:26:06 +08:00
ibuler
efaec831e8 perf: 修改菜单 2024-05-30 14:25:48 +08:00
吴小白
d2f9256fb0 Merge pull request #3988 from jumpserver/pr@v4@perf_docker_build
perf: 优化构建
2024-05-30 13:22:47 +08:00
吴小白
4811b4af5b perf: 优化构建 2024-05-30 13:18:47 +08:00
jiangweidong
bf2e9d4471 feat: refactoring sync module (#3980)
* feat: refactoring sync module

* perf: Optimization

* perf: Optimization

* perf: Optimization

* perf: Compress image size and remove console log

---------

Co-authored-by: feng <1304903146@qq.com>
Co-authored-by: Bryan <jiangjie.bai@fit2cloud.com>
2024-05-29 18:44:08 +08:00
ibuler
15978c968e perf: 修改菜单 2024-05-29 18:18:39 +08:00
zhaojisen
b46fc915f3 fix: 修复当存在遮罩层时按下 / 也会聚焦的 bug 2024-05-29 14:54:15 +08:00
zhaojisen
a12e17b39c style: 微调 nav title 样式 2024-05-29 14:53:49 +08:00
ibuler
1cc8b626a6 perf: 优化菜单 2024-05-28 19:29:13 +08:00
ibuler
f13f5e455b perf: modify menu style 2024-05-28 17:30:26 +08:00
ibuler
7de34ac9a2 merge: with remote 2024-05-28 16:05:41 +08:00
ibuler
fb38ba1c9d perf: 修改 chat 兼容 luna 2024-05-28 16:04:32 +08:00
zhaojisen
5d6a58421f style: 重写 menu 样式 2024-05-28 14:11:38 +08:00
ibuler
3cc89b8469 perf: 修改菜单 2024-05-28 14:11:38 +08:00
ibuler
c9826a7520 perf: 修改 tab 选择 2024-05-28 14:11:38 +08:00
Bai
2b7a874c1e perf: i18n import 2024-05-28 10:11:24 +08:00
ibuler
a8a79df6b4 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-27 17:30:27 +08:00
ibuler
f07e14e62f perf: 修改 tab 选择 2024-05-27 17:30:10 +08:00
Bai
ee1b38a88d Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-27 15:08:43 +08:00
Bai
32af035674 perf: i18n Tools 2024-05-27 15:08:32 +08:00
zhaojisen
6cbc7d0220 style: 微调切换按钮 hover 效果,修改 DataTree 隐藏按钮位置 2024-05-27 15:08:25 +08:00
zhaojisen
bfa3836cc2 style: 微调 datatree 样式 2024-05-27 15:07:48 +08:00
ibuler
c8f6d0b595 perf: 修改 tab page 定位 2024-05-27 15:06:44 +08:00
Bai
f6ddd44ccb perf: i18n bai 2024-05-27 11:12:54 +08:00
ibuler
e813ce3fef Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-27 11:07:03 +08:00
ibuler
8234ea338b perf: 修改 label 为 tag 2024-05-27 11:06:45 +08:00
feng626
7ba78302b0 Merge pull request #3979 from jumpserver/pr@v4@ticket
perf: ticket translate
2024-05-27 10:59:50 +08:00
feng
4143c2c32d perf: ticket translate 2024-05-27 10:58:39 +08:00
ibuler
68fa8f30c0 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-24 19:17:27 +08:00
ibuler
e0f9b819d2 perf: 高级感 2024-05-24 19:15:36 +08:00
zhaojisen
9b9b096749 style: 修复功能设置菜单中公告页面在移动端适配问题 2024-05-24 18:56:45 +08:00
fit2bot
c03c8b2299 style: 资产树样式微调 (#3976)
* style: 资产树样式微调

* style: 资产树样式微调

---------

Co-authored-by: zhaojisen <1301338853@qq.com>
2024-05-24 18:55:27 +08:00
zhaojisen
2e78e5e5c6 style: 微调 Dashboard 面板日期按钮边框以及侧边栏切换系统角色时默认展开项 2024-05-24 18:54:47 +08:00
ibuler
d2fc125642 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-24 18:05:29 +08:00
ibuler
51fb493462 perf: 优化菜单 2024-05-24 18:05:14 +08:00
wangruidong
838f6e06b5 perf: modify file transfer boot step help tips 2024-05-24 16:33:50 +08:00
ibuler
ebe131d4a4 perf: 修改菜单 2024-05-24 15:44:22 +08:00
zhaojisen
ccd739d570 style: 侧边菜单按钮头部样式微调 2024-05-24 14:57:42 +08:00
ibuler
503a2ed934 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-24 14:57:05 +08:00
ibuler
d1f59f2bde perf: 优化菜单 2024-05-24 14:56:56 +08:00
ibuler
48daa0f04a perf: 添加图标 2024-05-24 14:52:59 +08:00
Bai
28a2248491 Merge branch 'v4_baisse' into v4 2024-05-24 14:42:57 +08:00
Bai
c4433592f4 perf: i18n System Settings End 2024-05-24 14:41:39 +08:00
老广
576c51fcac Merge pull request #3972 from jumpserver/pr@v4@fix_menu_style
style: 整合改造 menu 样式以及 table button 样式
2024-05-24 10:54:08 +08:00
老广
aaf8b3ea51 Merge branch 'v4' into pr@v4@fix_menu_style 2024-05-24 10:53:55 +08:00
zhaojisen
d8ba39ebf2 style: 整合改造 menu 样式以及 table button 样式 2024-05-24 10:35:16 +08:00
ibuler
e9e63cd11b Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-23 19:10:17 +08:00
ibuler
5fc23c15f0 merge: with remote 2024-05-23 19:10:04 +08:00
feng626
8015ceeed5 Merge pull request #3971 from jumpserver/pr@v4@echart
fix: echarts init fail
2024-05-23 18:47:56 +08:00
feng
5068a126be fix: echarts init fail 2024-05-23 18:43:37 +08:00
ibuler
5996d89e4c perf: 修改 detail card 2024-05-23 18:26:36 +08:00
ibuler
23f6502d99 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-23 18:26:06 +08:00
ibuler
c4a13e06e5 perf: 修改 card 2024-05-23 18:24:35 +08:00
zhaojisen
080565bea6 perf: 新增按键 t 使得 Search 组件自动 focus 2024-05-23 18:24:18 +08:00
wangruidong
f7ab833cb8 fix: dashboard card alignment 2024-05-23 18:22:48 +08:00
ibuler
b8025ae5bb Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-23 15:19:12 +08:00
ibuler
9247c6c4f3 perf: 修改 help text warning 2024-05-23 15:13:54 +08:00
ibuler
061981688d perf: 修改 form help text,增加 warning 2024-05-23 14:58:31 +08:00
feng626
d2e07bcf69 Merge pull request #3969 from jumpserver/pr@v4@action
perf: table center
2024-05-22 19:19:30 +08:00
feng
d44d209c21 perf: table center 2024-05-22 19:18:17 +08:00
Bai
3672716ee6 merged: Merge to v4 (bai) 2024-05-22 18:08:52 +08:00
Bai
1ef850a09f perf: i18n System Settings -> Authentication-OIDC 2024-05-22 17:51:32 +08:00
wangruidong
ce4b3f2a35 perf: create asset authorization rule account display grid 2024-05-22 17:40:08 +08:00
ibuler
8f229001aa Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-22 16:47:06 +08:00
ibuler
035597d330 perf: 修改 auto form check box 2024-05-22 16:46:51 +08:00
feng626
4f0ec2e6e3 Merge pull request #3967 from jumpserver/pr@v4@adhoc_view_asset
perf: adhoc view asset tree
2024-05-22 15:42:12 +08:00
feng
ebe4cce3ac perf: adhoc view asset tree 2024-05-22 15:41:02 +08:00
feng626
4a0af806f5 Merge pull request #3966 from jumpserver/pr@v4@file_tranfer
perf: file tranfer view asset
2024-05-22 15:15:57 +08:00
feng
51b26395ad perf: file tranfer view asset 2024-05-22 15:14:19 +08:00
zhaojisen
73f75e6515 perf: 列表移除按钮新增 confirm 对话框 2024-05-22 14:01:25 +08:00
zhaojisen
771c3f5516 style: 统一 table 中按钮样式 2024-05-22 14:00:04 +08:00
ibuler
fd9d08eb0c perf: 优化 help text 位置 2024-05-22 11:27:19 +08:00
ibuler
44bfaad9cb Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-21 16:42:42 +08:00
ibuler
8931331466 perf: 修改 form 的 placeholder 2024-05-21 16:42:25 +08:00
feng626
a450c8d3dc Merge pull request #3961 from jumpserver/pr@v4@tree_width
perf: asset tree width
2024-05-21 16:36:52 +08:00
feng
1151d501f5 perf: asset tree width 2024-05-21 16:35:46 +08:00
zhaojisen
b6b042407d style:资产树 hover 样式与 header 右侧 icon 高度 2024-05-21 16:26:07 +08:00
zhaojisen
4f215cbc49 fix:修复点击不同 tab 标签时刷新页面后 tab 标签丢失或变为同一个的问题 2024-05-21 16:25:27 +08:00
Bai
dd7329930c perf: i18n System Settings -> Features 2024-05-21 16:11:24 +08:00
ibuler
acfc1fc942 perf: 统一 tooltip 2024-05-21 16:01:36 +08:00
ibuler
aed40c518e perf: tooltip 全局添加 delay 2024-05-21 15:30:29 +08:00
ibuler
2d7fae677b Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-21 14:50:40 +08:00
ibuler
50077dd0ac perf: button disable add tip 2024-05-21 14:50:24 +08:00
wangruidong
5dafd7217e perf: session detail page optimize 2024-05-21 10:47:37 +08:00
Bai
2ffcf7bd26 perf: i18n System Settings -> General,Org,Notifications 2024-05-20 18:39:12 +08:00
Eric
334fb0c6e9 perf: 调整组件日志显示 2024-05-20 18:32:16 +08:00
ibuler
51ffebb04f merge: with dev 2024-05-20 18:22:23 +08:00
ibuler
9754395e62 perf: 支持 help text as placeholder 2024-05-20 18:06:06 +08:00
zhaojisen
bb5766c85d fix:修复 Select2 组件中当没有初始选项时手动添加时样式隐藏的问题 2024-05-20 14:49:19 +08:00
ibuler
fc27497535 perf: 修改 form 样式 2024-05-20 11:18:30 +08:00
吴小白
31221c1d6e Merge pull request #3954 from jumpserver/pr@v4@fix_docker_build
perf: 修正构建缺失依赖
2024-05-20 08:57:39 +08:00
吴小白
1cf2ef60e8 perf: 修正构建缺失依赖 2024-05-20 08:52:47 +08:00
zhaojisen
13cad16712 fix:修复 Select2 组件中 tag 值在渲染时由id转为name导致的长度变化问题 2024-05-17 19:09:12 +08:00
ibuler
7c2f13f883 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-17 19:08:38 +08:00
ibuler
cbaef4cc6c perf: 修改样式 2024-05-17 19:08:24 +08:00
wangruidong
37182779f9 perf: column width modify 2024-05-17 18:33:02 +08:00
feng626
cc97affc16 Merge pull request #3949 from jumpserver/pr@v4@tree
perf: asset tree type tree width css
2024-05-17 17:45:44 +08:00
feng
af5d3778c3 perf: asset tree type tree width css 2024-05-17 17:44:32 +08:00
feng626
ef25720797 Merge pull request #3948 from jumpserver/pr@v4@tree
perf: gather account and connect asset tree css
2024-05-17 17:17:36 +08:00
feng
20a08e650d perf: gather account and connect asset tree css 2024-05-17 17:16:23 +08:00
feng626
fe8c610f3d Merge pull request #3947 from jumpserver/pr@v4@account
perf: account translate
2024-05-17 16:56:27 +08:00
feng
a33f907ba5 perf: account translate 2024-05-17 16:55:41 +08:00
ibuler
e78569b325 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-17 16:31:27 +08:00
ibuler
f6cb3fb118 perf: 整理 role permisson 2024-05-17 16:30:19 +08:00
zhaojisen
7798ae79d7 style:修复功能设置公告中两个文本域的边框与原样式冲突问题 2024-05-17 10:22:55 +08:00
zhaojisen
c8d1bb0276 style:修复复合型表单头部区域边框消失问题 2024-05-17 10:22:29 +08:00
ibuler
ce2a62d198 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-17 09:56:21 +08:00
ibuler
fd0e1a7b5e perf: 优化 account 2024-05-17 09:56:08 +08:00
feng626
c93fed32ef Merge pull request #3944 from jumpserver/pr@v4@account_related
perf: account related translate
2024-05-16 19:38:56 +08:00
feng
4023537b8a perf: account related translate 2024-05-16 19:37:40 +08:00
feng626
e2712005e4 Merge pull request #3943 from jumpserver/pr@v4@translate
perf: account automation translate
2024-05-16 19:12:43 +08:00
feng
aea72bcc6e perf: account automation translate 2024-05-16 19:10:09 +08:00
Eric
40ef074522 perf: Loki 日志 2024-05-16 19:01:19 +08:00
Bryan
51d24bc8e5 Merge pull request #3941 from jumpserver/dev
v3.10.10-lts
2024-05-16 16:05:04 +08:00
ibuler
6aa021e4a6 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-16 13:58:38 +08:00
zhaojisen
ac97dbf8ba style:alert 提示信息 2024-05-16 13:55:29 +08:00
zhaojisen
87d7a291f0 style:修复 organization 在禁用时的背景被覆盖 2024-05-16 13:54:57 +08:00
zhaojisen
e8f3950072 style:优化 organization 组件的样式 2024-05-16 13:54:15 +08:00
ibuler
2fd2fc5f62 perf: 修改布局 2024-05-16 13:31:47 +08:00
feng626
145e6db3ec Merge pull request #3936 from jumpserver/pr@v4@fix_card_table
perf: card table css
2024-05-16 11:14:53 +08:00
feng
63d1983914 perf: card table css 2024-05-16 11:13:44 +08:00
ibuler
333c68e33f Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-15 19:34:33 +08:00
ibuler
739ce9da27 perf: 优化菜单的 scrollbar 2024-05-15 19:32:48 +08:00
zhaojisen
aadc032b31 style:修复 header 组件中 Organization 组件下拉滚动条的样式 2024-05-15 19:22:02 +08:00
zhaojisen
2b90faa98e style:修复远程应用页面无法滚动的问题,以及 header 中 icon 未对齐的问题 2024-05-15 19:21:08 +08:00
zhaojisen
e68e4b2a24 style:改变 dashboard 中 buttonGroup 的样式 2024-05-15 19:20:39 +08:00
feng626
2c541d465c Merge pull request #3934 from jumpserver/pr@v4@translate
perf: translate
2024-05-15 18:53:22 +08:00
feng
329a02bf07 perf: translate 2024-05-15 18:51:44 +08:00
ibuler
2c7d662c22 perf: 修改 i18n 2024-05-15 16:14:23 +08:00
ibuler
920eeded4d perf: 修改 border-radius 2024-05-15 14:40:03 +08:00
ibuler
740b51d405 perf: 统一 bolder 2024-05-15 11:18:11 +08:00
ibuler
cee00b0382 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-14 19:17:59 +08:00
ibuler
4bbd59787a perf: 优化 card 2024-05-14 19:15:35 +08:00
wangruidong
acdc7c6e49 fix: number items select not display 2024-05-14 18:57:05 +08:00
ibuler
a5f190685b perf: 修改 view cache 2024-05-14 17:25:33 +08:00
ibuler
fd53727f12 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-14 16:29:17 +08:00
ibuler
cea843bcbc perf: 添加组件缓存 2024-05-14 16:29:08 +08:00
zhaojisen
dda5e79a77 style: 整合 navheader 中的样式 2024-05-14 13:55:06 +08:00
fit2bot
f9dd7bd74b style: 修改远程商店中,每个 card 的展示方式 (#3917)
Co-authored-by: zhaojisen <1301338853@qq.com>
Co-authored-by: Bryan <jiangjie.bai@fit2cloud.com>
2024-05-14 13:54:06 +08:00
zhaojisen
2ef68977bd style: 修复 form 表单中复合型输入框的 border 样式不一致问题 2024-05-14 13:51:30 +08:00
zhaojisen
673d2e3ef2 style: 调整批量上传中已上传区域提示信息样式,以及下方 output 区域当浏览器视口变小时内部的 Terminal 组件溢出容器的问题 2024-05-14 13:50:35 +08:00
zhaojisen
17b172e3f1 style: 修复 TagSearch 组件中下拉 icon 未居中的问题 2024-05-14 13:49:31 +08:00
wangruidong
acde080e48 perf: file transfer add boot step help tips 2024-05-14 10:39:53 +08:00
wangruidong
b139d8d049 perf: ad-hoc icon modify 2024-05-14 10:39:53 +08:00
jiangweidong
1c39041de2 perf: cloud sync module adjustment (#3912)
* perf: cloud sync module adjustment

* perf: optimize interface settings

* fix: cloud edit - previous step and next step will failed
2024-05-13 18:39:19 +08:00
Bai
cd6d9e1687 test 2024-05-13 16:06:48 +08:00
Bai
57746a9daf Merge branch 'v4_bai' into v4 2024-05-13 16:00:25 +08:00
ibuler
2e961e7875 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-13 15:28:57 +08:00
ibuler
5fc368c86b perf: 修改翻译 2024-05-13 15:28:29 +08:00
zhaojisen
37abeb5735 style: 修改 DataActions 中收缩框的样式 2024-05-13 10:44:01 +08:00
feng626
e34d34526f Merge pull request #3914 from jumpserver/pr@v4@account_backup_translate
perf: account backup translate
2024-05-11 19:48:30 +08:00
feng
3eb249dcfd perf: account backup translate 2024-05-11 19:46:52 +08:00
ibuler
3f96888e1a Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-11 19:39:55 +08:00
ibuler
59df06676d perf: 修改 help text 2024-05-11 19:34:23 +08:00
zhaojisen
26a0f39ee8 style: 修改下拉菜单存在禁用项时颜色值接近的问题 2024-05-11 14:58:25 +08:00
ibuler
b63df1eee3 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-11 14:42:08 +08:00
ibuler
fdd906c982 perf: 修改 domain -> zone 2024-05-11 14:41:34 +08:00
Bai
0f9d5b94ff perf: i18n Personal Settings -> All sub menu 2024-05-11 11:20:27 +08:00
zhaojisen
98b222a9bf style: 移除表单中 table 的圆角样式 2024-05-10 19:08:32 +08:00
ibuler
6c0c1aa9d4 perf: 统一样式 2024-05-10 14:03:06 +08:00
feng626
6f41ed1c27 Merge pull request #3908 from jumpserver/pr@v4@execytion
perf: Execution history output button is not displayed
2024-05-10 11:39:05 +08:00
feng
8b773e9899 perf: Execution history output button is not displayed 2024-05-10 11:38:00 +08:00
wangruidong
b51acbd268 perf: i18n && columns modify 2024-05-10 10:08:29 +08:00
wangruidong
6e66a17fe3 perf: batch transfer css && scroll button optimize 2024-05-10 10:07:40 +08:00
feng626
88855305e1 Merge pull request #3905 from jumpserver/pr@v4@system_tools
perf: System Tools Test Stop Button Optimization
2024-05-09 17:09:34 +08:00
feng
53f61ad31b perf: System Tools Test Stop Button Optimization 2024-05-09 17:07:32 +08:00
feng626
650b1c0102 Merge pull request #3900 from jumpserver/pr@v4@quick_job
perf: Workbench shortcut command execution and stop buttons switch each other
2024-05-09 15:56:40 +08:00
feng
77be9ddf8d perf: Workbench shortcut command execution and stop buttons switch each other 2024-05-09 15:53:29 +08:00
Bai
ad7527c4ae perf: i18n Personal Settings -> Profile 2024-05-09 15:29:10 +08:00
zhaojisen
68563a198d feat: 新增自定义 table 的 Dialog 中全选功能 2024-05-09 10:41:55 +08:00
feng626
8a6459e828 Merge pull request #3898 from jumpserver/pr@v4@account
perf: 优化账号相关翻译
2024-05-08 18:14:56 +08:00
feng
846f3c6c5b perf: 优化账号相关翻译 2024-05-08 18:13:06 +08:00
ibuler
f843dde3d6 perf: 修改主题设置方式 2024-05-08 16:24:16 +08:00
fit2bot
ef7db30658 style: 还原 table 中操作列按钮样式,以及步骤条相关样式 (#3896)
Co-authored-by: zhaojisen <1301338853@qq.com>
Co-authored-by: 老广 <ibuler@qq.com>
2024-05-08 11:07:00 +08:00
ibuler
b6f430c0db Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-05-08 11:00:26 +08:00
ibuler
8b07b6ca5d perf: 详情统一文案 2024-05-08 11:00:13 +08:00
吴小白
f1171d06a8 perf: 优化 Dockerfile 2024-05-08 09:53:22 +08:00
ibuler
e01201be81 perf: data form border 2024-05-07 19:27:44 +08:00
ibuler
1e21a5fb05 perf: change color 2024-05-07 18:58:06 +08:00
ibuler
df0e7ee6ae perf: 修改一些 css 2024-05-07 17:56:18 +08:00
fit2bot
d30066bcf9 style: v4 版本统一样式、颜色 (#3893)
Co-authored-by: zhaojisen <1301338853@qq.com>
Co-authored-by: 老广 <ibuler@qq.com>
2024-05-07 17:34:53 +08:00
ibuler
0ca7d3a2ad perf: 修改我的资产 table 2024-05-07 17:30:16 +08:00
ibuler
2b9af5070b perf: 统一修改一些翻译 2024-04-30 15:20:28 +08:00
ibuler
94065bb38c perf: change deps 2024-04-30 11:13:10 +08:00
ibuler
63c02eb14a perf: 修改 chatai 2024-04-29 18:58:16 +08:00
ibuler
a3c387d445 perf: 修改 yarn.lock 2024-04-29 14:24:27 +08:00
ibuler
9abca0ea0d merge: with dev 2024-04-29 10:53:14 +08:00
ibuler
b1c43d0b04 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-04-28 19:13:57 +08:00
ibuler
a1fcdb39b9 perf: 修改 v4 表现 2024-04-28 19:10:22 +08:00
feng626
077ea93bc3 Merge pull request #3887 from jumpserver/revert-3886-pr@v4@ticket
Revert "perf: remove ticket feature"
2024-04-28 18:26:33 +08:00
feng626
82b14b6542 Revert "perf: remove ticket feature" 2024-04-28 18:23:30 +08:00
feng626
6ef985207c Merge pull request #3886 from jumpserver/pr@v4@ticket
perf: remove ticket feature
2024-04-28 18:11:47 +08:00
feng
13d0c99e8c Revert yarn.lock to original state 2024-04-28 18:11:10 +08:00
feng626
0c7051eac0 Merge pull request #3880 from jumpserver/pr@v4@kael
perf: kael migrated koko
2024-04-28 18:06:39 +08:00
feng
b14c636f94 Revert yarn.lock to original state 2024-04-28 18:02:24 +08:00
feng
049cd35a1c perf: remove ticket model 2024-04-28 17:44:14 +08:00
ibuler
e7986b57b2 perf: workbench performence 2024-04-28 16:05:11 +08:00
ibuler
3dbac1fe2e perf: 优化菜单激活 2024-04-28 11:01:20 +08:00
ibuler
42425dc61b perf: 修改全局菜单 2024-04-26 17:33:15 +08:00
ibuler
5261dce34f perf: default open all menu 2024-04-26 11:32:53 +08:00
ibuler
1ef34efed6 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-04-26 11:14:05 +08:00
ibuler
593c97c165 perf: change left side menu height 2024-04-26 11:13:00 +08:00
feng
6540c0a165 perf: kael migrated koko 2024-04-25 18:38:56 +08:00
wangruidong
411051f921 perf: index page typo 2024-04-24 18:04:33 +08:00
ibuler
907e3ba729 perf: 优化自定义平台 2024-04-24 15:47:14 +08:00
ibuler
afa1a9fd9f perf: 修改 font 2024-04-23 19:00:45 +08:00
ibuler
07afdbe0f8 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-04-23 17:27:14 +08:00
ibuler
dcd59ca69f perf: 修改 labels 组件 2024-04-23 17:27:00 +08:00
zhaojisen
98ae943db0 fix: 修复侧边栏激活时文字右移的问题 2024-04-23 17:26:36 +08:00
Bryan
1b15a4d043 Merge pull request #3871 from jumpserver/dev
v3.10.9 (dev to master)
2024-04-22 19:44:33 +08:00
ibuler
8e06dde724 perf: 修改一些 table 宽度 2024-04-22 15:10:08 +08:00
ibuler
71ca5a87f1 perf: 优化菜单 2024-04-19 19:13:34 +08:00
ibuler
c9b1d2fb5b perf: 修改 table 显示 2024-04-18 21:25:15 +08:00
Bryan
7d3f818242 Merge pull request #3864 from jumpserver/v3.10
v3.10.8
2024-04-18 17:58:05 +08:00
Bryan
4e26f18d77 Merge pull request #3862 from jumpserver/dev
v3.10.8
2024-04-18 17:17:36 +08:00
ibuler
981fe00c5f perf: 优化修改 table label 2024-04-18 13:14:56 +08:00
ibuler
373661d35a perf: 优化 labels 宽度 2024-04-17 20:01:42 +08:00
ibuler
1be5f23204 perf: 修改 view hover 支持切换 2024-04-17 16:03:32 +08:00
ibuler
723123fa50 perf: 优化菜单展开 2024-04-17 14:10:35 +08:00
ibuler
7bf1c2056c perf: 优化菜单 2024-04-16 19:40:31 +08:00
ibuler
74c0a562e9 perf: 修改翻译和 ztree 高度 2024-04-15 16:28:10 +08:00
ibuler
65856db131 perf: 支持拖动 2024-04-15 11:23:08 +08:00
ibuler
5d67012121 perf: 优化 chat gpt 2024-04-12 14:21:00 +08:00
ibuler
573cf454ce perf: 修改 chat ai 2024-04-11 18:45:08 +08:00
ibuler
0d81b7839b perf: 修改一些布局 2024-04-11 14:56:00 +08:00
ibuler
5b00ab795d perf: 修改 ztree style 2024-04-11 13:47:22 +08:00
ibuler
86709e3604 perf: asset tree style 2024-04-10 18:58:12 +08:00
ibuler
38a9468fd2 perf: 修改 acls 和 automations 布局 2024-04-09 16:01:21 +08:00
ibuler
cf3ba419f4 perf: 修改自动化 2024-04-08 14:31:17 +08:00
ibuler
c94fad4145 perf: app 迁移位置 2024-04-08 11:11:08 +08:00
ibuler
f371a968b7 perf: 优化 page margin 2024-04-07 19:27:52 +08:00
ibuler
e163318c5a perf: deep 优化写法 2024-04-07 19:03:40 +08:00
ibuler
bb6be97bee perf: 兼容之前的 help message,更名 help tip 2024-04-07 18:06:07 +08:00
ibuler
cb454d83a1 perf: 修改样式 2024-04-07 17:46:24 +08:00
ibuler
6b5d13e8b8 perf: 统一 css 2024-04-07 17:03:05 +08:00
ibuler
5f9b124a7b perf: 优化 page help, tab help 2024-04-07 16:53:03 +08:00
ibuler
f7a48c04b8 perf: help tip and help text 2024-04-02 11:33:12 +08:00
ibuler
9315dab053 perf: form help tip style 2024-04-01 19:24:28 +08:00
ibuler
274d14d905 perf: account push and change secret 2024-04-01 17:51:55 +08:00
ibuler
9625dbf3ed perf: asset tree 2024-04-01 17:51:37 +08:00
ibuler
eef16080d4 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-03-29 18:59:57 +08:00
ibuler
66cf423598 perf: input with unit component 2024-03-29 18:59:44 +08:00
ibuler
53187cb8aa perf: cron tab better 2024-03-29 17:57:50 +08:00
老广
a8cdbc0b22 Merge pull request #3807 from jumpserver/pr@v4@fix_account_add_default_asset
fix: 修复创建账号时,资产没有默认值的问题
2024-03-28 18:15:25 +08:00
ibuler
7845a1901b perf: 修改账号相关的一些内容 2024-03-28 18:14:58 +08:00
ibuler
e3d8476396 fix: 修复创建账号时,资产没有默认值的问题 2024-03-28 07:11:18 +00:00
ibuler
88d9238c17 perf: 修改 table 布局 2024-03-28 14:47:48 +08:00
ibuler
fdb35eafc1 perf: 修改布局 2024-03-27 17:50:28 +08:00
Bryan
b22613617a Revert "build(deps): bump follow-redirects from 1.15.3 to 1.15.4"
This reverts commit e971cbf4a8.
2024-03-27 16:16:07 +08:00
dependabot[bot]
e971cbf4a8 build(deps): bump follow-redirects from 1.15.3 to 1.15.4
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.3 to 1.15.4.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.3...v1.15.4)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-27 16:11:26 +08:00
ibuler
2bbd785ada perf: 优化 sub form 缩进 2024-03-26 19:18:07 +08:00
ibuler
f30294c2ae perf: 优化子表单 2024-03-26 18:30:18 +08:00
ibuler
95267a5581 perf: 修改 ztree 2024-03-26 14:52:36 +08:00
ibuler
a860cf1a13 perf: 优化布局 2024-03-25 18:17:37 +08:00
ibuler
f2cf4fb4a0 perf: 修改 tab page 2024-03-21 19:12:37 +08:00
ibuler
3323a39767 perf: 修改 tab page 2024-03-21 16:42:29 +08:00
ibuler
9ed323321a perf: form hidden 改成 v-if 2024-03-21 14:43:50 +08:00
ibuler
968089201a Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-03-20 18:09:23 +08:00
ibuler
d232d61350 perf: 优化翻译和布局 2024-03-20 18:09:03 +08:00
wangruidong
3cc2be8874 fix: 快捷命令布局问题 2024-03-19 18:06:16 +08:00
ibuler
cd1d0c3746 perf: 修改 icon 大小 2024-03-19 17:53:51 +08:00
ibuler
780c55e99e perf: 优化 detail card 2024-03-15 19:19:05 +08:00
老广
2b9e508a5c Merge pull request #3785 from jumpserver/pr@v4@perf_asset_tree
perf: 优化资产树 root 节点宽度
2024-03-15 14:43:03 +08:00
ibuler
a68328ae83 perf: 优化资产树 root 节点宽度 2024-03-15 14:38:10 +08:00
ibuler
f9cd35ac74 perf: 修改 applet detail 2024-03-15 14:24:30 +08:00
ibuler
06cfed009a perf: 优化表单 2024-03-15 10:45:02 +08:00
ibuler
dc94ff58c3 perf: 修改 accounts 创建 2024-03-13 18:53:19 +08:00
ibuler
6b87a2ad31 perf: 修改翻译 2024-03-11 19:20:32 +08:00
ibuler
9c7606e59b perf: 修改 tab 变量 2024-03-11 17:09:29 +08:00
ibuler
5f0fdf326b perf: 修改 action 组件 2024-03-11 14:33:37 +08:00
ibuler
cd550054d8 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-03-07 18:32:29 +08:00
ibuler
cb634bea1e perf: 修改翻译 2024-03-07 18:32:21 +08:00
Bai
3d93f708be perf: i18n settings-tools not done. 2024-03-07 16:14:53 +08:00
Bai
6c315e1669 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-03-06 17:07:36 +08:00
Bai
0fee313f18 perf: 优化界面设置页面主题Logo预览的背景颜色 2024-03-06 17:07:16 +08:00
feng626
bcb817b30d Merge pull request #3770 from jumpserver/pr@v4@translate
perf: translate and width
2024-03-06 16:51:19 +08:00
ibuler
33c75915ca perf: 修改文案 2024-03-06 16:50:20 +08:00
feng
89ed35815c perf: translate and width 2024-03-06 16:44:26 +08:00
ibuler
69d244b227 perf: 修改文案 2024-03-05 19:01:24 +08:00
ibuler
047ed5a6f8 perf: 修改 detail 中的一些宽度 2024-03-05 16:23:31 +08:00
wangruidong
4672abae35 fix: 刷新页面根据搜索条件过滤出对应的资源 2024-03-04 19:17:05 +08:00
ibuler
61acec17ee Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-03-04 19:08:53 +08:00
ibuler
2438c2fd04 perf: 优化菜单显示 2024-03-04 19:08:45 +08:00
feng626
5f06b7bde9 Merge pull request #3765 from jumpserver/pr@v4@jpb
fix: job management route jump and translate
2024-03-04 14:44:36 +08:00
feng
59bb23232f fix: job management route jump and translate 2024-03-04 14:41:26 +08:00
ibuler
64eacb5237 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-03-01 17:14:15 +08:00
ibuler
7804d741a0 perf: 修改 asset tree 2024-03-01 17:13:58 +08:00
feng626
31b9158e3d Merge pull request #3762 from jumpserver/pr@v4@translate
perf: translate
2024-03-01 15:42:36 +08:00
feng
a5bd2965d0 perf: translate 2024-03-01 15:40:15 +08:00
Bryan
ba36d72602 Merge pull request #3761 from jumpserver/master
v3.10.4 (branch-v3.10)
2024-02-29 16:26:13 +08:00
Bryan
4bfbbba4c5 Merge pull request #3760 from jumpserver/dev
v3.10.4
2024-02-29 16:15:33 +08:00
wangruidong
191143fb17 perf:drag files tips add padding 2024-02-28 20:52:32 +08:00
feng626
8be48c87a8 Merge pull request #3754 from jumpserver/pr@v4@translate
perf: account translate
2024-02-28 17:32:37 +08:00
feng
5aeb57fb61 perf: account translate 2024-02-28 17:26:05 +08:00
ibuler
b0ae5d4299 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-02-28 17:05:30 +08:00
ibuler
fb6ac84fb3 perf: 修改布局 2024-02-28 17:05:21 +08:00
wangruidong
e32c44aaa3 perf: tab name capitalize first letter with / 2024-02-28 10:00:43 +08:00
ibuler
4baf71d8dc Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-02-27 19:37:00 +08:00
ibuler
8b0d7bb422 perf: 修改布局 2024-02-27 19:36:47 +08:00
feng626
80e44e302f Merge pull request #3753 from jumpserver/pr@v4@translate
perf: account translate
2024-02-27 19:17:25 +08:00
feng
009770bb04 perf: account translate 2024-02-27 19:16:21 +08:00
Bai
e2d7d8edd8 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-02-27 14:59:41 +08:00
Bai
2d9b4ddd0b perf: i18n settings-Storage done. 2024-02-27 14:59:32 +08:00
ibuler
a58ed5e1a9 perf: 优化布局 2024-02-27 14:57:15 +08:00
ibuler
2595b8bc8e perf: 优化 label 宽度 2024-02-26 19:34:36 +08:00
ibuler
ee270f419c Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-02-26 16:54:36 +08:00
ibuler
4b6c9d7705 perf: 优化布局 2024-02-26 16:54:07 +08:00
Bai
445eb31db1 perf: i18n settings-Features done. 2024-02-26 15:47:12 +08:00
Bai
c8151d94ba Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-02-23 18:01:21 +08:00
Bai
8dd5ca8bc8 perf: i18n settings-notifications done. 2024-02-23 18:01:13 +08:00
feng626
8a6f0b57d4 Merge pull request #3744 from jumpserver/pr@v4@translate
perf: 修改工作台相关翻译
2024-02-23 17:21:34 +08:00
feng
7b91c26689 perf: 修改工作台相关翻译 2024-02-23 17:20:59 +08:00
ibuler
6083a2a9aa Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-02-23 15:17:42 +08:00
ibuler
31608ce4ee perf: 美化 nav header 2024-02-23 15:17:32 +08:00
Bai
5e36cddca3 perf: i18n settings-org done. 2024-02-23 15:16:39 +08:00
wangruidong
56bae6ee84 perf: permissions table col modify 2024-02-22 18:34:34 +08:00
feng626
0d870b62de Merge pull request #3741 from jumpserver/pr@v4@translate
perf: 翻译
2024-02-22 17:45:57 +08:00
feng
c453134fa3 perf: 翻译 2024-02-22 17:44:45 +08:00
ibuler
8012a5783e perf: 修改按钮字体 2024-02-22 16:45:37 +08:00
ibuler
c9d231f8f4 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-02-22 11:35:41 +08:00
ibuler
97b182f06e perf: 修改字体 2024-02-22 11:34:49 +08:00
wangruidong
82b33b5ab4 perf: table col modify 2024-02-22 10:42:04 +08:00
ibuler
2f7d5336e2 perf: 修改 sql query counter 2024-02-21 15:22:30 +08:00
ibuler
f425da1555 Merge branch 'v4' of github.com:jumpserver/lina into v4 2024-02-20 19:02:07 +08:00
ibuler
2d5278aa80 perf: 修改翻译 2024-02-20 19:01:52 +08:00
ibuler
ed91112531 perf: 修改 ai chat 的位置 2024-02-06 17:58:52 +08:00
ibuler
e224f30de6 perf: 修改图标 2024-02-06 15:34:26 +08:00
老广
bb66fe6e98 Merge pull request #3724 from jumpserver/pr@v4@perf_i18n
perf: 修改翻译
2024-02-05 14:19:08 +08:00
ibuler
9d096dd994 perf: 修改翻译 2024-02-05 14:13:53 +08:00
ibuler
c0d4ec7dba merge: with dev 2024-02-05 10:06:15 +08:00
ibuler
b91287a974 perf: 优化菜单 2024-02-05 09:52:58 +08:00
ibuler
94bf737584 perf: 优化 i18n 2024-02-04 10:24:52 +08:00
fit2bot
6960ff471c perf: 整理了一遍翻译 (#3718)
* stash

* perf: 修改 i18n 支持

* perf: 修改翻译

* perf: 修改 i18n

* perf: 整理了一遍翻译

---------

Co-authored-by: ibuler <ibuler@qq.com>
2024-02-01 16:02:57 +08:00
Bryan
ea038ce43a Merge pull request #3697 from jumpserver/master
v3.10.2
2024-01-17 13:34:12 +00:00
Bryan
e16b19666c Merge pull request #3696 from jumpserver/dev
v3.10.2
2024-01-17 13:33:22 +00:00
Bryan
c7f5409eb6 Merge pull request #3694 from jumpserver/master
v3.10.2
2024-01-17 07:35:33 -04:00
Bryan
fdbd7d2222 Merge pull request #3693 from jumpserver/dev
v3.10.2
2024-01-17 07:24:50 -04:00
wangruidong
5bad1f397d fix: capitalizeFirst error 2024-01-15 19:35:16 +08:00
ibuler
327ebeaa53 perf: set default colunms width 2024-01-15 16:39:14 +08:00
ibuler
ea87c9d148 perf: 优化授权的资产 2024-01-12 18:14:50 +08:00
ibuler
2853b48144 perf: 优化搞定远端翻译 2024-01-11 14:37:19 +08:00
ibuler
3eb113a5cb perf: 修改翻译方式 2024-01-10 18:31:38 +08:00
ibuler
1b60735808 perf: 修改翻译不规范 2024-01-10 17:08:26 +08:00
Bryan
ddbaeeafea Merge pull request #3668 from jumpserver/master
v3.10.1
2023-12-29 11:34:04 +05:00
Bryan
efb0e9dacb Merge pull request #3665 from jumpserver/dev
v3.10.1
2023-12-29 11:14:54 +05:00
huailei
f6f8301ad5 Revert "perf: 账号收集翻译"
This reverts commit 9a63ae63d4.
2023-12-22 15:25:31 +08:00
“huailei000”
9a63ae63d4 perf: 账号收集翻译 2023-12-22 11:31:45 +08:00
Bryan
1e007ccda3 Merge pull request #3642 from jumpserver/dev
v3.10
2023-12-21 15:15:52 +05:00
老广
d1d0b06b53 Merge pull request #3546 from jumpserver/dev
v3.9.0
2023-11-16 18:25:10 +08:00
Bryan
5fb70d2f24 Merge pull request #3450 from jumpserver/dev
v3.8.0
2023-10-19 03:33:53 -05:00
Bryan
b54a95430f Merge pull request #3404 from jumpserver/dev
v3.7.0
2023-09-21 17:04:42 +08:00
Bryan
4d8b4c45af Merge pull request #3355 from jumpserver/dev
v3.6.0
2023-08-17 14:00:33 +05:00
Bryan
a6d642df60 Merge pull request #3283 from jumpserver/dev
v3.5.0
2023-07-20 19:04:29 +08:00
Jiangjie.Bai
2e74f1522f Merge pull request #3222 from jumpserver/dev
v3.4.0
2023-06-15 14:51:36 +08:00
Jiangjie.Bai
fe615e0314 Merge pull request #3219 from jumpserver/dev
v3.4.0
2023-06-15 14:17:46 +08:00
Jiangjie.Bai
09f734e6fc Merge pull request #3135 from jumpserver/dev
v3.3.0
2023-05-18 19:18:11 +08:00
Jiangjie.Bai
3117046342 Merge pull request #3061 from jumpserver/dev
v3.2.0
2023-04-20 18:40:08 +08:00
Bai
b68aecb5cc fix: 批量更新资产平台help-text 2023-04-20 18:39:22 +08:00
Jiangjie.Bai
1c9b155d97 Merge pull request #3057 from jumpserver/dev
v3.2.0
2023-04-20 18:22:46 +08:00
Jiangjie.Bai
75b1be9864 Merge pull request #3019 from jumpserver/dev
v3.2.0 rc2
2023-04-14 19:01:37 +08:00
Jiangjie.Bai
615c3c1cf4 Merge pull request #3014 from jumpserver/dev
v3.2.0 rc1
2023-04-13 20:02:38 +08:00
Jiangjie.Bai
4d82231af4 Merge pull request #3012 from jumpserver/dev
v3.2.0 rc1
2023-04-13 19:22:38 +08:00
“huailei000”
c6cf6571b6 perf: ldap导入用户列表-组织下拉框设置最大宽度 2023-03-16 16:44:36 +08:00
Bai
8ea990d070 fix: 修复创建资产添加账号模版报错问题 2023-03-16 16:44:36 +08:00
“huailei000”
f4a32170d5 perf: message 2023-03-16 16:44:36 +08:00
ibuler
073508675e perf: 添加默认的信息 2023-03-16 16:44:36 +08:00
Jiangjie.Bai
1d6ca0a93a Merge pull request #2924 from jumpserver/dev
v3.1.0 rc4
2023-03-15 19:46:31 +08:00
Jiangjie.Bai
36aea652d6 Merge pull request #2788 from jumpserver/dev
v3.0.0
2023-02-23 20:16:41 +08:00
Jiangjie.Bai
1a42ce90ab Merge pull request #2760 from jumpserver/dev
v3.0.0-rc-latest
2023-02-22 22:21:54 +08:00
Jiangjie.Bai
31a401b55d Merge pull request #2463 from jumpserver/dev
v3.0.0-rc4
2023-01-31 18:55:34 +08:00
Jiangjie.Bai
582a84178d Merge pull request #2187 from jumpserver/dev
v2.28.0
2022-11-17 17:44:19 +08:00
Jiangjie.Bai
9b9f7c936c Merge pull request #2184 from jumpserver/dev
v2.28.0-rc5
2022-11-17 14:18:15 +08:00
Jiangjie.Bai
2a6100957f Merge pull request #2182 from jumpserver/dev
v2.28.0-rc4
2022-11-16 21:08:55 +08:00
Jiangjie.Bai
16606d6a27 Merge pull request #2176 from jumpserver/dev
v2.28.0-rc2
2022-11-14 10:01:05 +08:00
Jiangjie.Bai
0a612f50e6 Merge pull request #2164 from jumpserver/dev
v2.28.0-rc1
2022-11-10 17:45:47 +08:00
Jiangjie.Bai
fe36fa9390 Merge pull request #2117 from jumpserver/dev
v2.27.0-rc4
2022-10-18 21:02:10 +08:00
Jiangjie.Bai
ba109900ec Merge pull request #2113 from jumpserver/dev
v2.27.0-rc3
2022-10-18 11:20:57 +08:00
Jiangjie.Bai
ec7768267f Merge pull request #2105 from jumpserver/dev
v2.27.0-rc2
2022-10-14 11:01:32 +08:00
Jiangjie.Bai
cc58b374ab Merge pull request #2101 from jumpserver/dev
v2.27.0-rc1
2022-10-13 17:44:53 +08:00
Jiangjie.Bai
04ffbb8fd6 Merge pull request #2097 from jumpserver/dev
v2.27.0-rc1
2022-10-13 15:14:40 +08:00
Jiangjie.Bai
49880f6739 Merge pull request #2059 from jumpserver/dev
v2.26.0
2022-09-15 17:49:44 +08:00
Jiangjie.Bai
e6f98d58c4 Merge pull request #2057 from jumpserver/dev
v2.26.0-rc4
2022-09-15 16:18:03 +08:00
Jiangjie.Bai
fd1f16d43c Merge pull request #2050 from jumpserver/dev
v2.26.0-rc2
2022-09-13 17:41:39 +08:00
Jiangjie.Bai
968b2415b1 Merge pull request #2043 from jumpserver/dev
v2.26.0-rc1
2022-09-08 15:46:44 +08:00
Jiangjie.Bai
776090d6ba Merge pull request #2001 from jumpserver/dev
v2.25.0
2022-08-18 16:12:45 +08:00
Jiangjie.Bai
3a37952288 Merge pull request #1996 from jumpserver/dev
v2.25.0-rc4
2022-08-17 16:53:23 +08:00
Jiangjie.Bai
62b8fc0e3b Merge pull request #1994 from jumpserver/dev
v2.25.0-rc3
2022-08-16 19:08:23 +08:00
Jiangjie.Bai
b2028869cb Merge pull request #1986 from jumpserver/dev
v2.25.0-rc2
2022-08-12 18:06:56 +08:00
Jiangjie.Bai
5277a725f8 Merge pull request #1973 from jumpserver/dev
v2.25.0-rc1
2022-08-11 14:11:59 +08:00
Jiangjie.Bai
f137788c1a Merge pull request #1957 from jumpserver/dev
v2.24.0-rc5
2022-07-20 19:06:03 +08:00
Jiangjie.Bai
f7d17c8de7 Merge pull request #1954 from jumpserver/dev
v2.24.0-rc4
2022-07-19 16:18:13 +08:00
Jiangjie.Bai
feea70b0be Merge pull request #1944 from jumpserver/dev
v2.24.0-rc3
2022-07-18 12:05:42 +08:00
Jiangjie.Bai
04696ef3d6 Merge pull request #1940 from jumpserver/dev
v2.24.0-rc2
2022-07-15 18:07:37 +08:00
Jiangjie.Bai
1731f4f788 Merge pull request #1934 from jumpserver/dev
v2.24.0-rc1
2022-07-14 18:27:51 +08:00
Jiangjie.Bai
6f25d93909 Merge pull request #1931 from jumpserver/dev
v2.24.0-rc1
2022-07-14 17:51:58 +08:00
Jiangjie.Bai
46461ec324 Merge pull request #1925 from jumpserver/dev
v2.24.0-rc1
2022-07-14 15:12:15 +08:00
867 changed files with 18082 additions and 21821 deletions

View File

@@ -22,5 +22,6 @@ VUE_APP_LOGOUT_PATH = '/core/auth/logout/'
# Dev server for core proxy
VUE_APP_CORE_HOST = 'http://localhost:8080'
VUE_APP_CORE_WS = 'ws://localhost:8080'
VUE_APP_KAEL_HOST = 'http://localhost:8083'
VUE_APP_KOKO_HOST = 'http://localhost:5000'
VUE_APP_KOKO_WS = 'ws://localhost:5000'
VUE_APP_ENV = 'development'

View File

@@ -1,32 +1,46 @@
name: "Run Build Test"
on:
push:
branches:
- pr@*
- repr@*
paths:
- 'Dockerfile'
- 'Dockerfile*'
- 'package.json'
- 'yarn.lock'
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
component: [lina]
version: [v4]
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
- uses: docker/setup-qemu-action@v2
- name: Prepare Build
run: |
sed -i 's@registry.npmmirror.com@registry.yarnpkg.com@g' yarn.lock
- uses: docker/setup-buildx-action@v2
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- uses: docker/build-push-action@v3
- name: Build Image
uses: docker/build-push-action@v5
with:
context: .
push: false
tags: jumpserver/lina:test
push: true
file: Dockerfile
tags: ghcr.io/jumpserver/${{ matrix.component }}:${{ matrix.version }}
platforms: linux/amd64
build-args: |
VERSION=${{ matrix.version }}
APT_MIRROR=http://deb.debian.org
NPM_REGISTRY=https://registry.yarnpkg.com
outputs: type=image,oci-mediatypes=true,compression=zstd,compression-level=3,force-compression=true
cache-from: type=gha
cache-to: type=gha,mode=max
- uses: LouisBrunner/checks-action@v1.5.0
if: always()
with:
token: ${{ secrets.GITHUB_TOKEN }}
name: Check Build
conclusion: ${{ job.status }}

View File

@@ -1,4 +1,4 @@
FROM node:16.20-bullseye-slim as stage-build
FROM node:16.20-bullseye-slim AS stage-build
ARG TARGETARCH
ARG DEPENDENCIES=" \
@@ -7,30 +7,35 @@ ARG DEPENDENCIES=" \
python3"
ARG APT_MIRROR=http://mirrors.ustc.edu.cn
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked,id=lina \
sed -i "s@http://.*.debian.org@${APT_MIRROR}@g" /etc/apt/sources.list \
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
set -ex \
&& rm -f /etc/apt/apt.conf.d/docker-clean \
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' >/etc/apt/apt.conf.d/keep-cache \
&& sed -i "s@http://.*.debian.org@${APT_MIRROR}@g" /etc/apt/sources.list \
&& apt-get update \
&& apt-get install -y --no-install-recommends ${DEPENDENCIES} \
&& echo "no" | dpkg-reconfigure dash \
&& rm -rf /var/lib/apt/lists/*
&& apt-get -y install --no-install-recommends ${DEPENDENCIES} \
&& echo "no" | dpkg-reconfigure dash
ARG NPM_REGISTRY="https://registry.npmmirror.com"
RUN set -ex \
&& npm config set registry ${NPM_REGISTRY} \
&& yarn config set registry ${NPM_REGISTRY}
WORKDIR /data
ADD package.json yarn.lock /data
RUN --mount=type=cache,target=/usr/local/share/.cache/yarn,sharing=locked,id=lina \
RUN --mount=type=cache,target=/usr/local/share/.cache/yarn,sharing=locked \
--mount=type=bind,source=package.json,target=package.json \
--mount=type=bind,source=yarn.lock,target=yarn.lock \
yarn install
ARG VERSION
ENV VERSION=$VERSION
ADD . /data
RUN --mount=type=cache,target=/usr/local/share/.cache/yarn,sharing=locked,id=lina \
RUN --mount=type=cache,target=/usr/local/share/.cache/yarn,sharing=locked \
sed -i "s@version-dev@${VERSION}@g" src/layout/components/NavHeader/About.vue \
&& yarn build

View File

@@ -1,9 +1,9 @@
{
"name": "vue-admin-template",
"version": "4.2.1",
"description": "A vue admin template with Element UI & axios & iconfont & permission control & lint",
"author": "Pan <panfree23@gmail.com>",
"license": "MIT",
"name": "Lina",
"version": "v4.0.0",
"description": "JumpServer Web UI",
"author": "JumpServer Team <support@fit2cloud.com>",
"license": "GPL-3.0-or-later",
"scripts": {
"dev": "vue-cli-service serve",
"serve": "vue-cli-service serve",
@@ -25,6 +25,7 @@
},
"dependencies": {
"@babel/plugin-proposal-optional-chaining": "^7.13.12",
"@fontsource/open-sans": "^5.0.24",
"@traptitech/markdown-it-katex": "^3.6.0",
"@ztree/ztree_v3": "3.5.44",
"axios": "0.28.0",
@@ -34,8 +35,9 @@
"css-color-function": "^1.3.3",
"decimal.js": "^10.4.3",
"deepmerge": "^4.2.2",
"dompurify": "^3.1.6",
"echarts": "4.7.0",
"element-ui": "2.13.2",
"element-ui": "2.15.14",
"eslint-plugin-html": "^6.0.0",
"highlight.js": "^11.9.0",
"install": "^0.13.0",
@@ -64,6 +66,7 @@
"npm": "^7.8.0",
"nprogress": "0.2.0",
"path-to-regexp": "2.4.0",
"v-sanitize": "^0.0.13",
"vue": "2.6.10",
"vue-codemirror": "4.0.6",
"vue-cookie": "^1.1.4",

View File

@@ -21,32 +21,39 @@
}
.el-alert--info.is-light {
background-color: light-9;
color: light-2;
background-color: rgba(255, 255, 255, 0.5);
color: info;
border: 1px solid;
}
.el-alert--info .el-alert__description {
color: light-2;
color: info;
}
.el-pagination.is-background {
.el-pagination__total,
.el-pagination__sizes,
.el-pager {
color: var(--color-icon-primary);
}
}
.el-pagination.is-background .el-pager li:not(.disabled):hover {
color: white;
color: #fff;
background-color: primary;
}
.el-pagination.is-background .btn-next,
.el-pagination.is-background .btn-prev,
.el-pagination.is-background .el-pager li {
margin: 0 5px;
background-color: white;
color: #606266;
min-width: 28px;
border-radius: 2px;
border: 1px solid #DCDFE6;
font-size: 12px;
line-height: 26px;
font-weight: 400;
margin: 0 5px;
background-color: #fff;
color: var(--color-icon-primary);
min-width: 28px;
border-radius: 2px;
border: 1px solid #DCDFE6;
font-size: 12px;
font-weight: 400;
}
.el-breadcrumb__inner,
@@ -85,8 +92,12 @@
td .el-button.el-button--mini {
padding: 1px 5px;
padding: 1px 6px;
line-height: 1.5;
.el-icon--right {
margin-bottom: 2px;
}
}
.el-tabs__item.is-active, .el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active {
@@ -191,7 +202,7 @@ td .el-button.el-button--mini {
}
.el-input--small .el-input__icon {
line-height: 34px;
line-height: 30px;
}
.option-group .el-select-dropdown__item.hover, .option-group .el-select-dropdown__item.selected {
@@ -224,8 +235,10 @@ td .el-button.el-button--mini {
}
.el-tag.el-tag--info .el-tag__close {
color: #333333!important;
background-color: inherit;
display: inline-block;
margin-top: 3px;
color: var(--color-text-primary);
background-color: inherit;
}
.el-tag.el-tag--info.is-hit {
@@ -280,7 +293,7 @@ td .el-button.el-button--mini {
}
.el-textarea__inner {
border-radius: 0;
color: var(--color-text-primary);
}
.el-pagination.is-background .number {
@@ -313,11 +326,11 @@ td .el-button.el-button--mini {
.el-tooltip__popper.is-light {
background: #FFF;
max-width: 500px;
border: 1px solid #e7eaec;
}
.el-tooltip__popper.is-light .popper__arrow {
border-bottom-color: #e7eaec !important;
box-shadow: 0 1.6px 3.6px 0 rgba(0, 0, 0, .132), 0 .3px .9px 0 rgba(0, 0, 0, .108);
line-height: 1.5;
padding: 10px;
}
.el-dialog__headerbtn .el-dialog__close {
@@ -326,7 +339,7 @@ td .el-button.el-button--mini {
}
.el-table__header thead tr th {
border-bottom: 1px solid #e7e7e7 !important;
/*border-bottom: 1px solid #e7e7e7 !important;*/
}
.el-table .cell,
@@ -423,14 +436,34 @@ td .el-button.el-button--mini {
flex-direction: column;
}
.el-dialog .el-dialog__header .el-dialog__title {
color: var(--color-text-primary);
}
.el-dialog .el-dialog__body {
max-height: 80vh;
overflow: auto;
padding: 30px;
}
.el-dialog .el-dialog__body .el-transfer-panel .el-transfer-panel__body .el-input__inner,
.el-dialog .el-dialog__body .el-transfer-panel .el-transfer-panel__header .el-checkbox__label,
.el-dialog .el-dialog__body .el-transfer-panel .el-transfer-panel__body .el-checkbox-group .el-checkbox.el-transfer-panel__item {
color: var(--color-text-primary);
}
.el-dialog .el-dialog__body .opera .el-button.is-disabled,
.el-dialog .el-dialog__body .el-transfer-panel .vip-footer .el-button.is-disabled {
color: var(--color-input-border);
}
.el-dialog .el-dialog__body .opera .el-button.is-disabled.el-button--primary {
color: #fff;
}
.el-dialog .el-dialog__body form {
padding-right: 20px;
margin-right: 20px;
}
.el-dialog .el-dialog__footer {

View File

@@ -16,6 +16,3 @@ export default {
}
}
</script>
<style>
</style>

9
src/api/component.js Normal file
View File

@@ -0,0 +1,9 @@
import request from '@/utils/request'
export function getLokiLog(data) {
return request({
url: `/api/v1/terminal/loki/logs/`,
method: 'get',
params: data
})
}

View File

@@ -0,0 +1 @@
<svg t="1717741737122" class="icon" viewBox="0 0 1653 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5514" width="200" height="200"><path d="M344.8620198 721.82988526a57.857089 57.857089 0 0 1-46.13274501-56.07295017v-308.4012244a59.89610558 59.89610558 0 0 1 46.13274501-56.07295017l286.35436058-62.06256065 30.07549089-122.72329718H328.80476645A210.78331632 210.78331632 0 0 0 116.61962599 327.28021902v364.47417458a213.71440233 213.71440233 0 0 0 212.18514046 212.31257895h332.48710482l-30.07549089-122.21354321zM1178.05508073 116.49690269H843.01920461l30.58524561 122.72329718 286.35436059 62.06256065a57.98452749 57.98452749 0 0 1 46.132745 56.07295017v308.4012244a60.15098257 60.15098257 0 0 1-46.13274502 56.07295017l-286.35436057 62.06256066-30.58524561 122.72329716H1178.05508073a212.44001744 212.44001744 0 0 0 212.94977139-212.82233291V327.28021902A213.33208686 213.33208686 0 0 0 1178.05508073 116.49690269z" fill="#F76E05" p-id="5515"></path><path d="M631.21638038 495.49906876h244.29964793v30.07549166H631.21638038z" fill="#F76E05" p-id="5516"></path></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.7 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.7 KiB

View File

@@ -0,0 +1 @@
<svg t="1717743450082" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="39383" width="200" height="200"><path d="M18.753 17.145h468.424l-0.02 468.426H18.774V17.145h-0.02z m0 0" fill="#F25022" p-id="39384"></path><path d="M534.999 17.145h468.422c0 156.141 0.022 312.283-0.02 468.426H535.038c-0.06-156.162-0.039-312.285-0.039-468.426z m0 0" fill="#80BA01" p-id="39385"></path><path d="M18.753 533.352c156.141 0.058 312.282-0.019 468.424 0.058v468.386H18.753V533.352z m0 0" fill="#02A4EF" p-id="39386"></path><path d="M535.018 533.41c156.124-0.058 312.243-0.019 468.383-0.019v468.422H534.999c0.019-156.163-0.02-312.28 0.019-468.403z m0 0" fill="#FFB902" p-id="39387"></path></svg>

After

Width:  |  Height:  |  Size: 721 B

View File

@@ -0,0 +1 @@
<svg t="1717743450082" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="39383" width="200" height="200"><path d="M18.753 17.145h468.424l-0.02 468.426H18.774V17.145h-0.02z m0 0" fill="#F25022" p-id="39384"></path><path d="M534.999 17.145h468.422c0 156.141 0.022 312.283-0.02 468.426H535.038c-0.06-156.162-0.039-312.285-0.039-468.426z m0 0" fill="#80BA01" p-id="39385"></path><path d="M18.753 533.352c156.141 0.058 312.282-0.019 468.424 0.058v468.386H18.753V533.352z m0 0" fill="#02A4EF" p-id="39386"></path><path d="M535.018 533.41c156.124-0.058 312.243-0.019 468.383-0.019v468.422H534.999c0.019-156.163-0.02-312.28 0.019-468.403z m0 0" fill="#FFB902" p-id="39387"></path></svg>

After

Width:  |  Height:  |  Size: 721 B

View File

@@ -0,0 +1 @@
<svg t="1717743183519" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="34140" width="200" height="200"><path d="M521.30666655 248.79999969c4.93333313 0 9.14666625 0.73333312 12.66666657 2.17333406l181.97333343 106.71999938a34.00000031 34.00000031 0 0 0 26.83999969-0.61333313l168.72-94.69333312L520.06666624 36.26666656 128.02666624 262.38666687l171.20000063 95.93333344c3.69333375 1.63999969 7.8 2.46666656 12.33333281 2.46666656 4.93333313 0 9.04000031-0.82666687 12.33333375-2.46666656l184.45333312-107.04c4.32-1.63999969 8.64-2.46666656 12.96-2.46666656" fill="#5BCA87" p-id="34141"></path><path d="M763.02666687 421.28a34.39999969 34.39999969 0 0 0-9.52000032 23.28l3 200.17333312a28.74666656 28.74666656 0 0 1-9.86666625 22.04000063l-4.54666687 4.38666656-167.49333375 103.39999969a34.89333375 34.89333375 0 0 0-10.39999969 7.56c-5.86666687 5.83999969-8.93333344 13.39999969-9.19999969 22.65333375l2.79999938 186.6 384-230.04-6.61333313-441.36-161.47999968 93.43999969a40.89333375 40.89333375 0 0 0-10.68 7.86666656" fill="#EC5D3E" p-id="34142"></path><path d="M292.4400003 667.69333344a30.40000031 30.40000031 0 0 1-9.86666718-21.58666688V444.68c0-8.44000031-3.29333344-16.13333344-9.87999938-23.13333375a55.63999969 55.63999969 0 0 0-10.8-7.71999938l-162.85333406-90.66666656V765.46666625l387.42666656 222.40000031V801.25333344c-0.21333375-9.25333312-3.40000031-16.75999969-9.57333281-22.51999969a31.81333312 31.81333312 0 0 0-10.8-7.40000063l-168.72-99.31999968-4.93333313-4.32z" fill="#2464F5" p-id="34143"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1 @@
<svg t="1717743357432" class="icon" viewBox="0 0 1228 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="37305" width="200" height="200"><path d="M779.7248 289.8944h37.4784l106.8032-106.8032 5.2736-45.3632A480.1024 480.1024 0 0 0 148.224 371.968c11.8784-4.864 25.088-5.632 37.4784-2.2528l213.6064-35.2256s10.9056-17.9712 16.4864-16.896a266.496 266.496 0 0 1 364.6976-27.6992h-0.768z" fill="#EA4335" p-id="37306"></path><path d="M1076.224 371.9168a481.28 481.28 0 0 0-145.1008-233.8304l-149.9136 149.9136a266.496 266.496 0 0 1 97.792 211.3536v26.624a133.4272 133.4272 0 1 1 0 266.8544h-266.752l-26.624 26.9824v160l26.624 26.624h266.752A347.0336 347.0336 0 0 0 1076.224 371.9168" fill="#4285F4" p-id="37307"></path><path d="M344.9856 1004.9536h266.8544v-213.6064H344.9856a132.608 132.608 0 0 1-55.0912-12.032l-37.4784 11.6224-107.5712 106.8032-9.3696 37.4784a345.1904 345.1904 0 0 0 209.5104 69.7344" fill="#34A853" p-id="37308"></path><path d="M344.9856 311.9616a347.0336 347.0336 0 0 0-209.5104 622.1312l154.7776-154.7776a133.4272 133.4272 0 1 1 176.5376-176.4864L621.568 448a346.6752 346.6752 0 0 0-276.5824-136.0384" fill="#FBBC05" p-id="37309"></path></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1 @@
<svg t="1717743147068" class="icon" viewBox="0 0 1027 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="32927" width="200" height="200"><path d="M402.3125 208.25c16.875-5.62500027 33.75-8.4375 50.625-11.24999973 19.68749973 25.3125 25.3125 59.0625 33.75 89.99999946 5.62500027 33.75 11.24999973 67.5 11.24999973 101.25 5.62500027 22.50000027 2.81249973 47.81250027 2.81250054 70.31250054s-2.81249973 42.1875 0 64.68749946c0 30.93750027-2.81249973 59.0625-2.81250054 90.00000027-5.62500027 19.68749973 0 39.37500027-5.62499946 59.0625-8.4375-2.81249973-11.24999973-11.24999973-14.06250027-16.875-33.75-50.625-64.68750027-101.25-92.8125-154.68749973-28.12499973-56.25000027-56.25000027-112.49999973-59.0625-177.1875-5.62500027-50.625 28.12499973-98.43750027 75.9375-115.31250027z m174.37500027-8.4375c5.62500027-2.81249973 8.4375 0 14.06249946 0 22.50000027 5.62500027 47.81250027 8.4375 67.5 22.50000027s36.56249973 33.75 42.1875 56.24999946c8.4375 28.12499973 5.62500027 59.0625 0 87.18750054-8.4375 36.56249973-25.3125 70.31249973-42.1875 104.06249973-5.62500027 11.24999973-11.24999973 19.68749973-16.875 30.93750027-8.4375 19.68749973-22.50000027 39.37500027-33.75 59.0625-19.68749973 33.75-39.37500027 61.87499973-59.0625 95.62499973-2.81249973 2.81249973-5.62500027 11.24999973-11.24999973 5.62500027-2.81249973-33.75-5.62500027-67.5-8.4375-104.06250054-5.62500027-44.99999973-2.81249973-87.18749973-2.81249973-132.18749946 2.81249973-28.12499973 2.81249973-59.0625 5.62499946-87.18750054 5.62500027-33.75 11.24999973-70.31249973 22.50000027-104.06249973 11.24999973-8.4375 11.24999973-25.3125 22.50000027-33.75zM222.31250027 309.5c2.81249973 0 5.62500027 5.62500027 8.4375 8.4375 81.56250027 106.87500027 154.68749973 219.375 213.74999973 340.31249973 5.62500027 8.4375 11.24999973 19.68749973 11.24999973 30.93750027-11.24999973-2.81249973-19.68749973-8.4375-28.12499973-14.06250027-53.43749973-28.12499973-106.87500027-59.0625-160.3125-89.99999946-19.68749973-14.06250027-39.37500027-28.12499973-56.25000027-42.1875-33.75-22.50000027-56.25000027-64.68750027-53.43749973-106.87500027 2.81249973-50.625 30.93750027-92.8125 64.68750027-126.5625z m582.1875 0h5.62499946c14.06250027 19.68749973 33.75 39.37500027 45.00000054 61.87499973 11.24999973 19.68749973 16.875 44.99999973 19.68749973 67.5 0 25.3125-8.4375 53.43749973-28.12499973 73.12500027-11.24999973 11.24999973-19.68749973 22.50000027-33.75 30.93750027-64.68750027 50.625-135 90.00000027-208.12500027 126.5625-11.24999973 5.62500027-19.68749973 14.06250027-33.75 14.06249946 2.81249973-14.06250027 11.24999973-28.12499973 16.875-39.37499946 47.81250027-98.43750027 106.87500027-191.25000027 171.56249973-281.25000054 14.06250027-14.06250027 30.93750027-33.75 45.00000054-53.43749973z m-705.93750027 225.00000027c2.81249973-2.81249973 0-8.4375 5.62500027-11.25000054 8.4375 2.81249973 16.875 8.4375 22.49999946 11.25000054 101.25 56.25000027 202.5 112.49999973 300.93750027 174.37499946 2.81249973 2.81249973 5.62500027 5.62500027 5.62500027 8.4375H239.18750027c-39.37500027 0-75.9375-16.875-104.06250054-44.99999973-22.50000027-25.3125-42.1875-59.0625-44.99999973-92.8125 5.62500027-14.06250027 2.81249973-28.12499973 8.4375-44.99999973z m810-2.81250054c5.62500027-2.81249973 14.06250027-8.4375 19.68749973-5.62499946 0 14.06250027 5.62500027 30.93750027 5.62500027 44.99999973-2.81249973 19.68749973-2.81249973 36.56249973-11.24999973 53.43749973-5.62500027 14.06250027-14.06250027 30.93750027-25.3125 42.1875-14.06250027 11.24999973-22.50000027 25.3125-39.37500027 33.75-16.875 14.06250027-42.1875 16.875-61.87499973 19.68750054h-202.5c2.81249973-2.81249973 2.81249973-5.62500027 5.62499946-8.4375 101.25-64.68750027 205.31249973-123.75000027 309.37500027-180.00000054zM242 748.25c36.56249973-2.81249973 73.12500027 0 109.6875-5.62500027 25.3125 0 53.43749973-2.81249973 78.74999973 0-5.62500027 11.24999973-19.68749973 16.875-28.12499973 22.50000027-28.12499973 19.68749973-56.25000027 36.56249973-87.18749973 50.625s-67.5 8.4375-92.8125-11.24999973c-19.68749973-14.06250027-36.56249973-36.56249973-47.81250027-56.25000027h67.5z m357.18749973-5.62500027c25.3125-2.81249973 50.625 0 78.75000054 0 33.75 2.81249973 70.31249973 0 106.87499946 5.62500027 25.3125 2.81249973 50.625 0 73.12500027 2.81249973-8.4375 16.875-22.50000027 33.75-36.56249973 47.81250027-22.50000027 22.50000027-56.25000027 33.75-87.18750054 28.12499973-28.12499973-8.4375-50.625-25.3125-75.9375-39.37499946-14.06250027-8.4375-25.3125-16.875-39.37499946-25.3125-8.4375-8.4375-14.06250027-11.24999973-19.68750054-19.68750054z" fill="#C71F1E" p-id="32928"></path></svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@@ -0,0 +1 @@
<svg t="1717743099498" class="icon" viewBox="0 0 2030 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="30911" width="200" height="200"><path d="M1669.09384945 432.48813594c15.51186469 21.69491531 27.11864437 51.1457625 25.81694906 112.86779625-17.46440719 193.78983094-181.96610156 316.14915281-345.76271156 316.14915281-177.24745781 0-302.04745781-127.56610125-377.111865-270.10169531C954.30062883 557.72203344 941.44639195 520.13559312 929.35147664 487.59322063c-23.701695 32.21694937-73.6542375 84.77288156-99.09152531 109.23389812A629.15254219 629.15254219 0 0 0 890.24639133 720.81355906c20.01355969 31.18644094 70.508475 101.74915219 142.69830562 157.61355938 65.62711875 50.60338969 128.59661062 81.68135625 199.81016906 99.41694937a487.81016906 487.81016906 0 0 0 354.65762719-50.00677968c128.81355937-73.81694906 219.60678-209.78983031 236.04067781-350.96949188-31.72881375-52.61016937-100.501695-114.76610156-154.35932156-144.37966031zM585.37859508 381.12542375a238.96949156 238.96949156 0 0 1 126.96949125 36.39322031c30.53559281-32.5423725 57.54576281-66.16949156 85.58644125-100.06779656A370.54915219 370.54915219 0 0 0 214.66673039 621.01694937a373.09830469 373.09830469 0 0 0 4.39322062 57.00339c10.3593225 12.79999969 114.71186438 4.12203375 130.98305063-10.52203406a242.49491531 242.49491531 0 0 1-4.55593219-46.48135594 239.89152563 239.89152563 0 0 1 239.89152563-239.89152562zM585.37859508 992a370.6576275 370.6576275 0 0 1-320.97627094-185.38305094c4.98983062-6.61694906 121.60000031-19.57966125 149.42372812-18.00678a239.07796594 239.07796594 0 0 0 171.55254282 72.29830594s147.52542375 11.33559281 285.39661031-97.62711937c0 0 51.85084781 73.87118625 91.66101656 101.64067781 0 0-130.00677938 127.07796656-377.05762687 127.07796656z" fill="#E1251B" p-id="30912"></path><path d="M1545.05317101 74.305085C1369.9209682 0.70508469 1199.0735107 22.18305125 1030.23283195 146.27796594 881.35147664 255.67457656 822.1243582 365.88474594 726.88367976 460.47457625c-113.89830469 113.13898313-199.32203344 151.21355906-267.06440718 176.81355938-69.96610125 26.46779625-167.59322062 44.52881344-240.75932157 40.51525406a371.41694906 371.41694906 0 0 0 45.34237313 128.59661062c186.79322063-3.19999969 318.48135562-74.68474594 403.41694875-126.48135656 74.2508475-45.28813594 185.97966094-159.34915219 244.61016937-233.22033844 94.21016906-118.56271219 216.94915219-231.97288125 329.16610219-267.55254281 156.7457625-49.62711844 309.1525425 19.79661 383.02372875 117.85762688 6.61694906 8.62372875 145.13898281 58.3593225 188.691525 95.78305125C1797.31079883 324.88135625 1721.8124932 148.61016969 1545.05317101 74.305085z" fill="#E1251B" p-id="30913" class="custom-cursor-on-hover"></path><path d="M1809.24300164 377.81694875A497.35593188 497.35593188 0 0 0 1526.39554383 286.91525469c-122.63050875 0-245.42372906 47.78305125-331.82372813 132.88135594-62.86101656 61.83050812-93.4508475 112.00000031-163.14576281 195.57966093a570.35932219 570.35932219 0 0 0 92.63728781 108.47457563c9.00339-13.12542375 59.66101688-84.82711875 97.62711844-135.21355875 48.81355969-64.10847469 98.38644094-115.36271156 173.5593225-145.03050844a350.04745781 350.04745781 0 0 1 427.498305 139.3355925A486.02033906 486.02033906 0 0 0 1809.24300164 377.81694875z" fill="#E1251B" p-id="30914" class="custom-cursor-on-hover"></path></svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -0,0 +1 @@
<svg t="1717743116713" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="31939" width="200" height="200"><path d="M718.5408 453.8368c-4.1984 0-8.3968-0.7168-12.5952-0.7168a103.8336 103.8336 0 0 0-67.8912 25.088 139.6736 139.6736 0 0 0 13.6192-60.3136 133.12 133.12 0 0 0-2.4576-25.7024 139.5712 139.5712 0 0 0-274.432 0 133.12 133.12 0 0 0-2.4576 25.7024 139.6736 139.6736 0 0 0 13.6192 60.3136 103.8336 103.8336 0 0 0-67.8912-25.088c-4.1984 0-8.3968 0-12.5952 0.7168a104.5504 104.5504 0 1 0 101.0688 159.4368 116.736 116.736 0 0 0 6.144-11.0592 105.1648 105.1648 0 0 0 4.9152-76.6976 62.6688 62.6688 0 0 1 27.3408 20.48l2.6624 3.8912a83.2512 83.2512 0 0 1 133.9392-3.3792l4.7104 6.8608 51.2 73.9328a84.0704 84.0704 0 0 0 62.464 34.6112h5.5296a104.5504 104.5504 0 0 0 12.5952-208.384z" fill="#E6002D" p-id="31940"></path><path d="M512 0a512 512 0 1 0 512 512A512 512 0 0 0 512 0z m200.8064 732.3648h-6.8608a152.4736 152.4736 0 0 1-120.5248-58.9824S509.2352 564.6336 508.0064 563.2a42.1888 42.1888 0 0 0-32.4608-15.2576 40.96 40.96 0 0 0-24.064 7.5776l122.88 175.4112a62.5664 62.5664 0 0 0 77.0048 20.48A97.5872 97.5872 0 0 1 593.92 783.5648a97.0752 97.0752 0 0 1-95.5392-39.1168l-49.4592-70.656a174.8992 174.8992 0 1 1-143.36-290.5088 209.7152 209.7152 0 0 1 413.9008 0 174.7968 174.7968 0 0 1-6.144 349.0816z" fill="#E6002D" p-id="31941"></path></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -0,0 +1 @@
<svg t="1717746661932" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="60936" width="200" height="200"><path d="M29.696 541.696A30.72 30.72 0 0 0 59.52 512 452.16 452.16 0 0 1 512 59.456a439.68 439.68 0 0 1 225.664 61.44l16.704 10.432 7.04 4.608-3.84 7.488c-1.216 2.496-1.536 6.592-1.536 16.64 0 44.352 37.504 81.856 81.856 81.856s81.856-37.504 81.856-81.856a83.008 83.008 0 0 0-108.544-77.824l-8.96 3.136-4.48 1.792-4.096-2.624A520.768 520.768 0 0 0 512 0C230.4 0 0 230.4 0 512c0 15.68 14.08 29.696 29.696 29.696z m588.16-186.24c-13.056-93.568-37.12-164.224-62.336-203.584a383.808 383.808 0 0 0-43.776-2.752c-14.784 0-29.568 1.088-43.776 2.752-25.216 39.36-49.28 109.44-62.4 203.584z m221.696 0a365.504 365.504 0 0 0-203.52-184.96c21.312 51.392 36.608 115.456 45.888 184.96z m-497.472 0c9.28-69.504 24.576-133.568 45.952-184.96a365.504 365.504 0 0 0-203.584 184.96z m520.512 250.688a358.4 358.4 0 0 0 0-188.288H688c2.688 31.232 3.84 62.4 3.84 94.144 0 31.744-1.664 62.912-3.84 94.144z m-237.568 0c2.176-29.568 3.84-61.312 3.84-94.144 0-33.408-1.664-64.64-3.84-94.144H398.976c-2.752 29.568-3.84 61.312-3.84 94.144 0 33.408 1.664 64.64 3.84 94.144z m-289.024 0A1073.92 1073.92 0 0 1 332.16 512c0-31.744 1.152-62.912 3.84-94.144H161.408a358.4 358.4 0 0 0 0 188.288zM512 1024c281.6 0 512-230.4 512-512a30.72 30.72 0 0 0-29.696-29.696 30.72 30.72 0 0 0-29.76 29.696A452.16 452.16 0 0 1 512 964.544a439.68 439.68 0 0 1-225.664-61.44l-16.704-10.432-7.04-4.608 3.84-7.488c1.216-2.496 1.536-6.592 1.536-16.64 0-44.352-37.504-81.856-81.856-81.856s-81.856 37.504-81.856 81.856a83.008 83.008 0 0 0 108.544 77.824l8.96-3.136 4.48-1.792 4.096 2.624A520.768 520.768 0 0 0 512 1024z m-0.256-149.12c14.72 0 29.568-1.088 43.776-2.752 25.152-39.36 49.28-109.44 62.4-203.584H405.568c13.12 93.568 37.184 164.224 62.4 203.584 14.208 1.664 28.992 2.752 43.776 2.752z m124.224-21.312a365.504 365.504 0 0 0 203.584-185.024h-157.632c-9.28 69.504-24.576 133.568-45.952 184.96z m-247.936 0c-21.376-51.456-36.672-115.52-45.952-185.024H184.448a365.504 365.504 0 0 0 203.52 184.96z" fill="#448CF7" p-id="60937"></path></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1 @@
<svg t="1717747391666" class="icon" viewBox="0 0 1333 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4694" width="200" height="200"><path d="M1018.488284 0.541672L1314.82427 0a18.458499 18.458499 0 0 1 13.083451 31.500282L894.070504 465.337499a18.458499 18.458499 0 0 1-26.104401 0L720.079363 317.450758a18.458499 18.458499 0 0 1 0-26.093983L1005.477751 5.937553a18.458499 18.458499 0 0 1 13.02095-5.406298zM1018.488284 1023.446662l296.335986 0.552088a18.458499 18.458499 0 0 0 13.083451-31.500282L894.070504 558.650834a18.458499 18.458499 0 0 0-26.104401 0L720.079363 706.547992a18.458499 18.458499 0 0 0 0 26.1044l285.398388 285.398388a18.458499 18.458499 0 0 0 13.02095 5.406298z" fill="#054496" p-id="4695"></path><path d="M821.319852 500.275312L327.34668 5.416715A18.437665 18.437665 0 0 0 314.29448 0H18.510582A18.479332 18.479332 0 0 0 5.437549 31.531532l466.566676 467.400018a18.500166 18.500166 0 0 1 0 26.146067L5.458382 992.425551a18.489749 18.489749 0 0 0 13.083451 31.562782h295.74223a18.437665 18.437665 0 0 0 13.052201-5.416715l493.973172-494.858596a16.593899 16.593899 0 0 0 0-23.448127z" fill="#87BB4C" p-id="4696"></path></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1 @@
<svg t="1717746166860" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="51952" width="200" height="200"><path d="M928.856 10.912H95.142C42.814 10.912 0 53.726 0 106.054v224.202h231.25v-36.64c0-28.418 23.046-51.454 51.464-51.454h458.58c28.42 0 51.456 23.036 51.456 51.456v36.64H1024V106.052c0-52.328-42.816-95.142-95.144-95.142zM792.75 730.38c0 28.42-23.036 51.466-51.456 51.466h-458.58c-28.418 0-51.464-23.046-51.464-51.466v-36.63H0v224.194c0 52.336 42.816 95.142 95.144 95.142h833.714c52.328 0 95.142-42.806 95.142-95.142V693.752H792.75v36.63zM0.006 627.628h231.25V396.38H0.006v231.25z m792.74 0h231.25V396.38H792.748v231.25z" fill="#E72F52" p-id="51953"></path></svg>

After

Width:  |  Height:  |  Size: 713 B

View File

@@ -0,0 +1 @@
<svg t="1717743207396" class="icon" viewBox="0 0 1402 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="35171" width="200" height="200"><path d="M1216.84017881 832.26669714c-22.01770438 22.42169837-66.05311315 55.95324845-143.01407896 55.95324845H600.84945441c143.01407897-139.88312044 264.01045355-257.44554135 275.01930505-268.65639054a860.50843905 860.50843905 0 0 1 65.9521143-61.60917245c55.04426026-50.29732444 98.9786702-55.8522496 137.45915242-55.85224962 55.04426026 0 98.9786702 22.32069952 137.56015263 55.95324846 76.96096581 72.71902281 76.96096581 201.4922929 0 274.2113157z m93.42374503-363.79711171a304.81390494 304.81390494 0 0 0-225.42897111-100.79664655c-77.06196465 0-143.01407897 27.97662354-203.51226695 72.71902278-22.01770438 22.52269721-54.94326142 44.84339811-82.51589098 78.47594568-21.91670555 22.32069952-494.89335097 492.5703818-494.89335097 492.57038317 27.47163072 5.55492517 60.59918544 5.55492517 87.96981869 5.55492517h599.42694635c44.03540877 0 76.96096581 0 110.08852053-5.55492517a335.11349765 335.11349765 0 0 0 203.41126672-89.58579738c126.45030092-123.21834493 126.45030092-330.265563 5.45392772-453.3829077z" fill="#00A3FF" p-id="35172"></path><path d="M528.73642327 435.44302817c-60.80118311-45.14639325-121.70336508-67.66909045-193.51339969-67.66909045a306.02588827 306.02588827 0 0 0-226.74195328 101.60463453 333.80051551 333.80051551 0 0 0 5.55492517 462.97777956c55.24625795 50.80231726 110.59351474 78.98093847 176.94962165 84.63686387l127.1572928-124.22833194h-71.91103484c-71.91103347-5.65592402-116.14843991-28.27962006-143.72106809-56.45824128a206.03723244 206.03723244 0 0 1-5.55492656-282.29120635c38.68247989-39.49046924 82.91988635-56.45824127 138.26714315-56.45824267 33.12755473 0 82.91988635 5.65592402 132.71221657 56.55924012 22.11870323 22.52269721 82.91988635 67.66909045 105.03858956 90.29278788h5.55492518l82.91988496-84.73786132v-5.65592401c-38.68247989-39.49046924-99.58466186-90.29278651-132.71221658-118.57240794" fill="#00C8DC" p-id="35173"></path><path d="M1114.32655611 290.00498256A436.81913102 436.81913102 0 0 0 705.58504746 7.00678432c-218.3590661 0-391.87473546 160.8908378-425.507283 360.66615456 16.76577435 0 33.63254755-5.45392634 55.95324845-5.45392634 22.42169837 0 50.49932212 5.45392634 72.82002164 5.45392634 27.97662354-138.67113711 151.19496845-238.55879549 296.73401291-238.55879412a310.06583359 310.06583359 0 0 1 279.96823856 177.55561331s5.55492517 5.55492517 5.55492517 0c39.18747409-5.55492517 84.03087084-16.66477551 123.21834492-16.66477551 0 5.55492517 0 5.55492517 0 0" fill="#006EFF" p-id="35174"></path></svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -0,0 +1 @@
<svg t="1717743207396" class="icon" viewBox="0 0 1402 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="35171" width="200" height="200"><path d="M1216.84017881 832.26669714c-22.01770438 22.42169837-66.05311315 55.95324845-143.01407896 55.95324845H600.84945441c143.01407897-139.88312044 264.01045355-257.44554135 275.01930505-268.65639054a860.50843905 860.50843905 0 0 1 65.9521143-61.60917245c55.04426026-50.29732444 98.9786702-55.8522496 137.45915242-55.85224962 55.04426026 0 98.9786702 22.32069952 137.56015263 55.95324846 76.96096581 72.71902281 76.96096581 201.4922929 0 274.2113157z m93.42374503-363.79711171a304.81390494 304.81390494 0 0 0-225.42897111-100.79664655c-77.06196465 0-143.01407897 27.97662354-203.51226695 72.71902278-22.01770438 22.52269721-54.94326142 44.84339811-82.51589098 78.47594568-21.91670555 22.32069952-494.89335097 492.5703818-494.89335097 492.57038317 27.47163072 5.55492517 60.59918544 5.55492517 87.96981869 5.55492517h599.42694635c44.03540877 0 76.96096581 0 110.08852053-5.55492517a335.11349765 335.11349765 0 0 0 203.41126672-89.58579738c126.45030092-123.21834493 126.45030092-330.265563 5.45392772-453.3829077z" fill="#00A3FF" p-id="35172"></path><path d="M528.73642327 435.44302817c-60.80118311-45.14639325-121.70336508-67.66909045-193.51339969-67.66909045a306.02588827 306.02588827 0 0 0-226.74195328 101.60463453 333.80051551 333.80051551 0 0 0 5.55492517 462.97777956c55.24625795 50.80231726 110.59351474 78.98093847 176.94962165 84.63686387l127.1572928-124.22833194h-71.91103484c-71.91103347-5.65592402-116.14843991-28.27962006-143.72106809-56.45824128a206.03723244 206.03723244 0 0 1-5.55492656-282.29120635c38.68247989-39.49046924 82.91988635-56.45824127 138.26714315-56.45824267 33.12755473 0 82.91988635 5.65592402 132.71221657 56.55924012 22.11870323 22.52269721 82.91988635 67.66909045 105.03858956 90.29278788h5.55492518l82.91988496-84.73786132v-5.65592401c-38.68247989-39.49046924-99.58466186-90.29278651-132.71221658-118.57240794" fill="#00C8DC" p-id="35173"></path><path d="M1114.32655611 290.00498256A436.81913102 436.81913102 0 0 0 705.58504746 7.00678432c-218.3590661 0-391.87473546 160.8908378-425.507283 360.66615456 16.76577435 0 33.63254755-5.45392634 55.95324845-5.45392634 22.42169837 0 50.49932212 5.45392634 72.82002164 5.45392634 27.97662354-138.67113711 151.19496845-238.55879549 296.73401291-238.55879412a310.06583359 310.06583359 0 0 1 279.96823856 177.55561331s5.55492517 5.55492517 5.55492517 0c39.18747409-5.55492517 84.03087084-16.66477551 123.21834492-16.66477551 0 5.55492517 0 5.55492517 0 0" fill="#006EFF" p-id="35174"></path></svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -0,0 +1 @@
<svg t="1717745876738" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="50950" width="200" height="200"><path d="M494.272 0L347.968 89.088l146.304 86.4V0z m43.904 175.552l146.304-87.488L538.176 0v175.552z m0 731.392l146.304-87.872-146.304-87.68v175.552z m-43.904 0V731.52l-146.304 88.128 146.304 87.36m409.6-205.696L757.568 614.4v175.552l146.304-88.704M289.472 614.4l-146.304 87.68 146.304 87.872V614.4z m468.096-73.152l146.304-88.128-146.304-87.424v175.552z m-468.096 0V365.696L143.168 453.632l146.304 87.68m614.4-336.768L757.568 117.12V292.48l146.304-88m-614.4-87.488l-146.304 88.32 146.304 87.168V117.12z m629.056 307.2V248.704l-146.304 88.256 146.304 87.296m-789.952 0l146.304-88.064-146.304-87.488v175.552z m146.304 146.432L128.576 482.752v175.552l146.304-87.616m497.344 0.192l146.304 87.424V482.752L772.224 570.88m-438.848 43.52v175.552l146.304-88L333.376 614.4m380.352 175.552V614.4l-146.304 87.68 146.304 87.872M333.376 307.2l146.304-88.128-146.304-87.424V307.2z m380.352 541.248l-146.304 88.768L713.728 1024v-175.552z m0-555.904V131.648L567.424 212.672l146.304 79.872" fill="#57B382" p-id="50951"></path><path d="M494.272 0v175.552L347.968 89.088 494.272 0m43.904 175.552V0l146.304 88.064-146.304 87.488m0 731.392V731.52l146.304 87.68-146.304 87.808m-43.904 0l-146.304-87.36 146.304-88.128v175.488z m409.6-205.696l-146.304 88.704V614.4l146.304 86.848M289.472 614.4v175.552L143.168 702.08 289.472 614.4m468.096-73.152V365.696l146.304 87.424-146.304 88.128m-468.096 0L143.168 453.632l146.304-87.936v175.552z m614.4-336.64L757.568 292.48V117.12l146.304 87.488m-614.4-87.488V292.48L143.168 205.44l146.304-88.384m629.056 307.2l-146.304-87.296 146.304-88.32V424.32z m-789.952 0V248.704l146.304 87.488-146.304 88.064m146.304 146.432l-146.304 87.616V482.752l146.304 87.936m497.344 0.192l146.304-88.128v175.552L772.224 570.88m-438.848 43.52l146.304 87.552-146.304 88V614.4z m380.352 175.552l-146.304-87.936L713.728 614.4v175.552zM333.376 307.2V131.648l146.304 87.424L333.376 307.2m380.352 541.248V1024l-146.304-86.784 146.304-88.768m0-555.904L567.424 212.672l146.304-81.024v160.896z" fill="#57B382" p-id="50952" class="custom-cursor-on-hover"></path></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1 @@
<svg t="1717746510567" class="icon" viewBox="0 0 1351 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="55261" width="200" height="200"><path d="M416.92885 824.173591c-56.901379 30.927289-130.232881 35.397249-203.685192-3.745101a159.190971 159.190971 0 0 1-65.35806-64.754011c-79.130368-147.025432 15.826074-294.775723 150.770533-309.635319 7.369393-0.845668 14.738786-1.328907 22.228989-1.328907 59.317574 0 112.353042 25.732471 149.320817 66.324538a249.50832 249.50832 0 0 1-26.457329-111.628184c0-16.188503 1.691336-31.893767 4.590769-47.236601a320.508194 320.508194 0 0 0-127.575067-26.45733c-6.161296 0-12.201782 0.604049-18.242268 0.966478C83.252396 339.122556-77.424535 571.198033 39.036038 806.897801c25.370042 51.344132 66.686967 93.748345 117.668669 119.601625 115.614904 58.713525 230.50495 50.377654 319.420907 0.966478 31.531338-17.51741 38.659111-59.921622 15.946883-88.070288-0.241619-0.362429-0.483239-0.604049-0.724858-0.966477-18.000649-22.349799-49.290367-27.907046-74.418789-14.255548z" fill="#62B0DB" p-id="55262"></path><path d="M443.869418 399.527417c0-16.188503 1.691336-31.893767 4.590769-47.236602 23.557896-123.709156 137.602274-215.403735 270.855398-203.081143 24.041135 2.174575 46.994982 8.094251 68.740732 16.792551 50.377654-17.879839 104.3796-28.148665 160.91855-28.148665 16.550932 0 32.981054 0.845668 49.169557 2.537004C928.558024 59.448048 827.561096 5.929341 715.328864 0.492904c-204.65167-10.027207-377.167953 134.098792-412.565202 326.18625-4.34915 23.678706-6.886154 47.96146-6.886154 72.848263 0 15.826074 1.208097 31.289718 2.899433 46.511743 7.369393-0.845668 14.738786-1.328907 22.228989-1.328907 59.317574 0 112.473852 25.732471 149.320817 66.324538-16.792551-33.464293-26.457329-71.277736-26.457329-111.507374z" fill="#8FC361" p-id="55263"></path><path d="M1114.725806 778.386706S880.717374 806.172943 749.034777 723.176663c-66.928586-42.162593-43.73312-127.937496 50.015225-152.461869 63.666724-16.671742 302.024306-14.376357 457.989657 13.04745 156.086161 27.423807 124.675634 166.717417-142.313853 194.624462zM1316.961282 782.615047s-67.170206 87.22462-241.981874 113.561139c-72.727453 10.993685-135.06527 13.289069-224.102035 0 0 0-70.311258-18.967126-82.392231 35.638868-14.376357 65.23725 157.656688 128.420735 327.998396 62.458627 172.274664-66.566157 220.477743-211.658634 220.477744-211.658634z" fill="#ADD079" p-id="55264"></path><path d="M1341.244036 531.089205s-44.457978-76.955793-241.136206-131.924217c-195.228511-54.605995-295.86301 15.463644-346.240665-30.202431-24.886803-22.470608-5.194818-77.318222 23.557896-101.480167 46.994982-39.504779 176.744624-83.600328 323.407627-20.416843 214.558067 92.540247 240.411348 284.023657 240.411348 284.023658z" fill="#A2CB70" p-id="55265"></path><path d="M783.948786 456.791225s234.008432-27.786236 365.69103 55.210044c66.928586 42.162593 43.73312 127.937496-50.015225 152.461869-63.666724 16.671742-302.024306 14.376357-457.989658-13.04745-156.086161-27.302997-124.675634-166.717417 142.313853-194.624463z m11.839353 535.42869c146.663003 63.183485 276.412645 19.208746 323.407627-20.416843 28.631904-24.161944 48.444699-78.888749 23.557896-101.480167-50.377654-45.666075-151.012153 24.403564-346.240665-30.20243-196.678228-54.968424-241.136206-131.924217-241.136206-131.924217s25.97409 191.60422 240.411348 284.023657zM579.780355 456.791225s67.170206-87.22462 241.981874-113.561139c72.727453-10.993685 135.06527-13.289069 224.102036 0 0 0 70.311258 18.967126 82.39223-35.638868 14.376357-65.23725-157.656688-128.420735-327.998396-62.458626-172.274664 66.566157-220.477743 211.658634-220.477744 211.658633z" fill="#4885BE" p-id="55266"></path></svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@@ -0,0 +1 @@
<svg t="1717747284124" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2464" width="200" height="200"><path d="M838.4 416c-6.4-70.4-64-115.2-134.4-115.2-19.2 0-38.4 6.4-51.2 6.4-44.8-51.2-115.2-83.2-185.6-83.2-89.6 0-172.8 51.2-211.2 128h-12.8C115.2 352 19.2 448 12.8 576s96 224 224 230.4h294.4c25.6 0 44.8-19.2 44.8-44.8s-19.2-44.8-44.8-44.8H249.6c-70.4 0-134.4-57.6-134.4-128s51.2-128 121.6-134.4c12.8 0 25.6 0 38.4 6.4h6.4l25.6 6.4C320 390.4 390.4 320 473.6 320c57.6 0 108.8 32 140.8 83.2 6.4 6.4 6.4 12.8 6.4 19.2l6.4-6.4c19.2-19.2 51.2-19.2 70.4-19.2 44.8 0 70.4 38.4 70.4 76.8 0 12.8-6.4 25.6-6.4 38.4 12.8 6.4 19.2 19.2 38.4 19.2 6.4-6.4 19.2-12.8 19.2-19.2 64 6.4 115.2 57.6 108.8 128-6.4 57.6-57.6 108.8-121.6 108.8-51.2 0-96-32-115.2-83.2h51.2c6.4 0 12.8-6.4 12.8-12.8s0-6.4-6.4-6.4l-96-128c-6.4-6.4-12.8-12.8-19.2-6.4h-6.4l-96 128c-6.4 6.4-6.4 19.2 6.4 19.2 6.4 0 6.4 6.4 6.4 6.4h57.6c19.2 115.2 128 192 243.2 172.8 115.2-19.2 192-128 172.8-243.2-25.6-96-89.6-160-179.2-179.2z" fill="#F3A22F" p-id="2465"></path></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1 @@
<svg t="1717743387740" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="38378" width="200" height="200"><path d="M912.192 0C973.952 0 1024 50.048 1024 111.808v800.384c0 61.76-50.048 111.808-111.808 111.808H111.808A111.808 111.808 0 0 1 0 912.192V111.808C0 50.048 50.048 0 111.808 0h800.384zM672 185.152c-23.936-1.088-30.912 6.144-30.656 30.4 1.28 116.864 0.832 233.728 0.384 350.592-0.128 37.76 2.368 75.52-3.392 113.216-6.912 45.184-33.92 71.68-76.16 82.88-52.672 13.952-107.136-1.728-131.2-36.736-17.6-25.728-19.84-55.552-19.904-85.632-0.192-120.32-0.448-240.64 0.192-360.96 0.128-18.432-4.032-26.24-24.448-26.24-20.416 0.128-27.136 8-24.128 26.432 4.608 28.16-8.256 37.12-34.24 33.152-23.168-3.456-35.2 5.248-30.912 29.952 5.312 30.4-6.912 42.304-37.248 37.248-20.416-3.392-30.72 2.304-30.144 26.88 1.6 79.04-0.512 158.08 1.024 237.184 2.24 113.088 79.104 204.8 189.632 230.912a462.08 462.08 0 0 0 187.136 5.632c133.12-23.04 214.08-117.824 214.4-252.416V435.2c0-74.496-0.896-148.992 0.448-223.424 0.448-21.76-6.4-27.264-27.2-26.56-41.152 1.536-82.432 1.92-123.52 0z m-422.784 133.76c-16.832-3.84-18.752 7.04-19.2 21.568-0.384 15.296 3.968 22.208 20.736 22.464 18.496 0.32 22.528-7.36 22.528-24.128 0-16.96-7.296-22.144-24.064-19.84z m73.6-65.92l-4.992 0.448c-17.792-2.816-20.928 7.04-20.8 22.272 0 15.104 6.592 19.456 20.864 19.648 15.68 0.256 22.72-4.224 22.656-21.248 0-17.024-6.72-23.04-22.72-20.672z m-134.464 3.904c-10.88 0.384-12.288 7.36-12.608 16-0.448 11.008 2.88 17.664 15.168 16 12.672 1.216 15.168-6.144 14.912-16.768-0.32-11.84-6.656-15.552-17.472-15.232z m68.032-3.648c-11.776 0.32-19.904 1.664-19.52 16.512 0.32 11.776 1.472 19.968 16.448 19.328 11.52-0.448 21.12-0.896 18.944-16.192 1.28-11.904-0.96-20.096-15.872-19.648z m126.592-68.032c-17.088-0.32-20.8 6.848-20.928 22.336-0.128 16.96 6.848 22.656 22.592 20.352 17.664 2.88 20.288-7.04 20.736-21.952 0.512-17.28-7.232-20.48-22.4-20.736z m-58.816 7.104l-4.736 0.32c-12.48-0.96-22.272-0.064-22.336 16.96 0 15.872 7.552 19.072 21.056 18.752 12.352-0.256 22.08-0.64 22.208-17.6 0.128-16.128-7.616-19.648-20.928-18.112z m-137.6 6.016c-9.088-0.128-10.816 5.632-10.432 13.056 0.384 9.088 6.464 10.304 13.632 9.792 7.872-0.64 11.776-4.928 11.008-12.992-0.832-8.832-7.232-9.792-14.208-9.856z m65.728-5.632h-3.584c-11.328 0.32-11.392 7.936-11.456 16.128 0 10.88 6.976 12.544 15.616 12.096 10.368 0.512 12.928-5.248 13.184-14.528 0.32-13.056-7.552-13.952-17.28-13.696z m66.816-55.68c-7.808 0.256-16.832-0.96-17.472 10.56-0.704 11.712 6.592 15.616 17.024 15.744 9.152 0.128 15.424-2.944 15.36-13.312 0.832-11.008-5.952-13.312-14.912-12.992z m-63.68 0.448c-7.936-0.128-12.352 3.072-12.288 11.456 0.128 7.424 2.752 12.8 11.008 13.376 8.32 0.512 11.712-4.288 12.032-12.032 0.64-7.808-2.176-12.608-10.752-12.8z" fill="#3860F4" p-id="38379" class="custom-cursor-on-hover"></path></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -0,0 +1 @@
<svg t="1717747341803" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3484" width="200" height="200"><path d="M813.6 65H451.9c-81.8 0-144.7 62.7-144.7 144.1v100.4h-97.5C127.9 309.5 65 372.3 65 453.7v360.5c0 81.4 62.8 144.2 144.7 144.2h358.6c81.8 0 144.7-62.7 144.7-144.2V710.7h100.6c81.8 0 144.7-62.7 144.7-144.2V206c3.2-75.3-62.9-141-144.7-141z m37.8 504.6c-0.4 20.6-17.1 37.3-37.7 37.5H609.2V814c-0.3 20.7-17 37.3-37.7 37.6H209.8c-20.7-0.2-37.4-16.9-37.8-37.6V453.6c0.3-20.7 17.1-37.4 37.8-37.6h204.4V209.1c0-21.9 18.9-37.5 37.8-37.5h361.7c20.6 0.3 37.3 16.9 37.7 37.5v360.5z m0 0" fill="#8FBE48" p-id="3485"></path><path d="M514.8 268.7v235H272.7V745h242.2V510H757V268.7H514.8z m0 0" fill="#F2B624" p-id="3486"></path></svg>

After

Width:  |  Height:  |  Size: 773 B

View File

@@ -0,0 +1 @@
<svg t="1717743222537" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="36225" width="200" height="200"><path d="M830.537143 476.525714L706.413714 961.828571a8.484571 8.484571 0 0 0 0 4.022858 9.069714 9.069714 0 0 0 8.996572 6.948571h248.100571a9.069714 9.069714 0 0 0 9.069714-10.971429l-124.708571-485.302857a9.142857 9.142857 0 0 0-17.334857 0M147.602286 586.386286L51.492571 961.828571a8.996571 8.996571 0 0 0 9.069715 10.971429h191.488a9.142857 9.142857 0 0 0 7.241143-3.291429 8.777143 8.777143 0 0 0 1.755428-3.657142 8.484571 8.484571 0 0 0 0-4.022858L164.864 586.459429a8.777143 8.777143 0 0 0-3.291429-4.534858 9.216 9.216 0 0 0-10.752 0 8.777143 8.777143 0 0 0-3.218285 4.534858" fill="#00E5E5" p-id="36226"></path><path d="M317.074286 275.748571l-175.104 686.08a8.777143 8.777143 0 0 0 1.682285 7.460572c1.682286 2.194286 4.242286 3.437714 6.948572 3.437714h350.354286a9.069714 9.069714 0 0 0 9.069714-10.898286L334.409143 275.748571a8.777143 8.777143 0 0 0-3.291429-4.608 9.216 9.216 0 0 0-10.752 0 8.777143 8.777143 0 0 0-3.291428 4.608" fill="#006EFF" p-id="36227"></path><path d="M619.227429 57.490286A8.777143 8.777143 0 0 0 615.862857 52.955429a9.216 9.216 0 0 0-10.752 0 8.777143 8.777143 0 0 0-3.291428 4.534857L362.569143 961.828571a8.996571 8.996571 0 0 0 8.996571 10.898286h478.354286a9.216 9.216 0 0 0 9.142857-6.875428 8.996571 8.996571 0 0 0 0-4.022858L619.154286 57.490286z" fill="#006EFF" p-id="36228"></path><path d="M443.318857 375.442286L291.474286 961.828571a9.069714 9.069714 0 0 0 9.069714 10.971429l302.957714 0.073143a9.216 9.216 0 0 0 7.314286-3.364572 9.142857 9.142857 0 0 0 1.828571-7.68L460.653714 375.442286a9.216 9.216 0 0 0-8.704-6.290286 9.216 9.216 0 0 0-8.630857 6.290286" fill="#00E5E5" p-id="36229"></path></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -0,0 +1 @@
<svg t="1717746226986" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="52962" width="200" height="200"><path d="M527.36 102.4H450.048L350.0032 266.8544h68.9152L25.6 921.6h263.68l96.256-164.7616H317.1328l299.7248-489.984L527.36 102.4z m124.4672 211.7632l-233.1136 387.584h257.6896l32.512 55.0912H455.168L364.4928 921.6H998.4l-183.7056-327.168H681.472l27.3408-58.0608h69.12l-126.1568-222.208z" fill="#2558E6" p-id="52963"></path></svg>

After

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 466 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 961 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 916 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -4,6 +4,7 @@
<script>
import DataActions from '@/components/DataActions'
export default {
name: 'ActionsGroup',
components: {
@@ -24,9 +25,7 @@ export default {
},
moreActionsTitle: {
type: String,
default() {
return this.$t('common.MoreActions')
}
default: ''
},
moreActionsPlacement: {
type: String,
@@ -45,8 +44,9 @@ export default {
iMoreAction() {
const defaultBtn = {
name: 'moreActions',
title: this.$t('common.MoreActions'),
title: '',
type: 'primary',
icon: 'el-icon-more',
plain: true
}
const btn = {
@@ -62,7 +62,3 @@ export default {
}
}
</script>
<style scoped>
</style>

View File

@@ -1,6 +1,5 @@
import { UpdateToken, UploadSecret } from '@/components/Form/FormFields'
import Select2 from '@/components/Form/FormFields/Select2.vue'
import AssetSelect from '@/components/Apps/AssetSelect/index.vue'
import { Required, RequiredChange } from '@/components/Form/DataForm/rules'
import AutomationParamsForm from '@/views/assets/Platform/AutomationParamsSetting.vue'
@@ -8,11 +7,17 @@ export const accountFieldsMeta = (vm) => {
const defaultPrivilegedAccounts = ['root', 'administrator']
return {
assets: {
component: Select2,
label: vm.$t('Assets'),
rules: [Required],
component: AssetSelect,
label: vm.$t('assets.Asset'),
el: {
multiple: false
multiple: true,
ajax: {
url: '/api/v1/assets/assets/',
transformOption: (item) => {
return { label: item.name + '(' + item.address + ')', value: item.id }
}
}
},
hidden: () => {
return vm.platform || vm.asset
@@ -36,14 +41,14 @@ export const accountFieldsMeta = (vm) => {
},
on_invalid: {
rules: [Required],
label: vm.$t('accounts.AccountPolicy'),
helpText: vm.$t('accounts.BulkCreateStrategy'),
label: vm.$t('AccountPolicy'),
helpTip: vm.$t('AccountPolicyHelpText'),
hidden: () => {
return vm.platform || vm.asset
}
},
name: {
label: vm.$t('common.Name'),
label: vm.$t('Name'),
rules: [RequiredChange],
on: {
input: ([value], updateForm) => {
@@ -82,7 +87,7 @@ export const accountFieldsMeta = (vm) => {
}
},
privileged: {
label: vm.$t('assets.Privileged'),
label: vm.$t('Privileged'),
hidden: () => {
return vm.addTemplate
}
@@ -104,42 +109,42 @@ export const accountFieldsMeta = (vm) => {
}
},
su_from_username: {
label: vm.$t('assets.UserSwitchFrom'),
label: vm.$t('UserSwitchFrom'),
hidden: (formValue) => {
return vm.platform || vm.asset || vm.addTemplate
}
},
password: {
label: vm.$t('assets.Password'),
label: vm.$t('Password'),
component: UpdateToken,
hidden: (formValue) => {
return formValue.secret_type !== 'password' || vm.addTemplate
}
},
ssh_key: {
label: vm.$t('assets.PrivateKey'),
label: vm.$t('PrivateKey'),
component: UploadSecret,
hidden: (formValue) => formValue.secret_type !== 'ssh_key' || vm.addTemplate
},
passphrase: {
label: vm.$t('assets.Passphrase'),
label: vm.$t('Passphrase'),
component: UpdateToken,
hidden: (formValue) => formValue.secret_type !== 'ssh_key' || vm.addTemplate
},
token: {
label: vm.$t('assets.Token'),
label: vm.$t('Token'),
component: UploadSecret,
hidden: (formValue) => formValue.secret_type !== 'token' || vm.addTemplate
},
access_key: {
id: 'access_key',
label: vm.$t('assets.AccessKey'),
label: vm.$t('AccessKey'),
component: UploadSecret,
hidden: (formValue) => formValue.secret_type !== 'access_key' || vm.addTemplate
},
api_key: {
id: 'api_key',
label: vm.$t('assets.ApiKey'),
label: vm.$t('ApiKey'),
component: UploadSecret,
hidden: (formValue) => formValue.secret_type !== 'api_key' || vm.addTemplate
},
@@ -151,7 +156,7 @@ export const accountFieldsMeta = (vm) => {
}
},
push_now: {
helpText: vm.$t('accounts.AccountPush.WindowsPushHelpText'),
helpTip: vm.$t('WindowsPushHelpText'),
hidden: (formValue) => {
const automation = vm.iPlatform.automation || {}
return !automation.push_account_enabled ||
@@ -162,7 +167,7 @@ export const accountFieldsMeta = (vm) => {
}
},
params: {
label: vm.$t('assets.PushParams'),
label: vm.$t('PushParams'),
component: AutomationParamsForm,
el: {},
hidden: (formValue) => {
@@ -179,10 +184,10 @@ export const accountFieldsMeta = (vm) => {
}
},
is_active: {
label: vm.$t('common.IsActive')
label: vm.$t('IsActive')
},
comment: {
label: vm.$t('common.Comment'),
label: vm.$t('Comment'),
hidden: () => {
return vm.addTemplate
}

View File

@@ -2,6 +2,8 @@
<AutoDataForm
v-if="!loading"
ref="AutoDataForm"
:class="addTemplate? '': 'account-add'"
:submit-btn-text="submitBtnText"
v-bind="$data"
@submit="confirm"
/>
@@ -44,6 +46,7 @@ export default {
return {
loading: true,
usernameChanged: false,
submitBtnText: this.$t('Confirm'),
iPlatform: {
automation: {},
su_enabled: false,
@@ -58,14 +61,13 @@ export default {
form: Object.assign({ 'on_invalid': 'error' }, this.account || {}),
encryptedFields: ['secret'],
fields: [
[this.$t('assets.Asset'), ['assets']],
[this.$t('accounts.AccountTemplate'), ['template']],
[this.$t('common.Basic'), ['name', 'username', 'privileged', 'su_from', 'su_from_username']],
[this.$t('assets.Secret'), [
[this.$t('AccountTemplate'), ['template']],
[this.$t('Basic'), ['assets', 'name', 'username', 'privileged', 'su_from', 'su_from_username']],
[this.$t('Secret'), [
'secret_type', 'password', 'ssh_key', 'token',
'access_key', 'passphrase', 'api_key'
]],
[this.$t('common.Other'), ['push_now', 'params', 'on_invalid', 'is_active', 'comment']]
[this.$t('Other'), ['push_now', 'params', 'on_invalid', 'is_active', 'comment']]
],
fieldsMeta: accountFieldsMeta(this),
hasSaveContinue: false
@@ -100,23 +102,23 @@ export default {
setSecretTypeOptions() {
const choices = [
{
label: this.$t('assets.Password'),
label: this.$t('Password'),
value: 'password'
},
{
label: this.$t('assets.SSHKey'),
label: this.$t('SSHKey'),
value: 'ssh_key'
},
{
label: this.$t('assets.Token'),
label: this.$t('Token'),
value: 'token'
},
{
label: this.$t('assets.AccessKey'),
label: this.$t('AccessKey'),
value: 'access_key'
},
{
label: this.$t('assets.ApiKey'),
label: this.$t('ApiKey'),
value: 'api_key'
}
]
@@ -152,5 +154,24 @@ export default {
}
</script>
<style scoped>
<style lang='scss' scoped>
.account-add {
::v-deep .el-form-item {
margin-bottom: 5px;
.help-block {
margin-bottom: 5px;
}
}
::v-deep .form-group-header {
.hr-line-dashed {
margin: 5px 0;
}
h3 {
margin-bottom: 10px;
}
}
}
</style>

View File

@@ -8,6 +8,7 @@
:title="title"
:visible.sync="iVisible"
v-bind="$attrs"
width="900px"
v-on="$listeners"
>
<AccountCreateUpdateForm
@@ -52,7 +53,7 @@ export default {
title: {
type: String,
default: function() {
return this.$t('assets.AddAccount')
return this.$t('AddAccount')
}
}
},
@@ -91,7 +92,7 @@ export default {
data = formValue
url = `/api/v1/accounts/accounts/bulk/`
if (data.assets.length === 0) {
this.$message.error(this.$tc('assets.PleaseSelectAsset'))
this.$message.error(this.$tc('PleaseSelectAsset'))
return
}
}
@@ -113,7 +114,7 @@ export default {
this.$axios.patch(`/api/v1/accounts/accounts/${this.account.id}/`, data).then(() => {
this.iVisible = false
this.$emit('add', true)
this.$message.success(this.$tc('common.updateSuccessMsg'))
this.$message.success(this.$tc('UpdateSuccessMsg'))
}).catch(error => this.setFieldError(error))
},
handleResult(resp, error) {
@@ -126,7 +127,7 @@ export default {
}
if (!bulkCreate) {
if (!error) {
this.$message.success(this.$tc('common.createSuccessMsg'))
this.$message.success(this.$tc('CreateSuccessMsg'))
} else {
this.setFieldError(error)
}
@@ -171,7 +172,3 @@ export default {
}
}
</script>
<style scoped>
</style>

View File

@@ -27,7 +27,7 @@
:account="account"
:add-template="true"
:asset="iAsset"
:title="accountCreateUpdateTitle"
:title="accountCreateByTemplateTitle"
:visible.sync="showAddTemplateDialog"
@add="addAccountSuccess"
@bulk-create-done="showBulkCreateResult($event)"
@@ -36,6 +36,7 @@
v-if="showResultDialog"
:result="createAccountResults"
:visible.sync="showResultDialog"
@close-all="closeAll"
/>
<AccountBulkUpdateDialog
v-if="updateSelectedDialogSetting.visible"
@@ -118,8 +119,7 @@ export default {
columnsDefault: {
type: Array,
default: () => ([
'name', 'username', 'asset', 'privileged',
'secret_type', 'is_active', 'date_updated'
'name', 'username', 'asset', 'date_updated'
])
},
headerExtraActions: {
@@ -140,7 +140,8 @@ export default {
showAddDialog: false,
showAddTemplateDialog: false,
createAccountResults: [],
accountCreateUpdateTitle: this.$t('assets.AddAccount'),
accountCreateUpdateTitle: this.$t('AddAccount'),
accountCreateByTemplateTitle: this.$t('AddAccountByTemplate'),
iAsset: this.asset,
account: {},
secretUrl: '',
@@ -158,6 +159,7 @@ export default {
},
columnsMeta: {
name: {
width: '120px',
formatter: function(row) {
const to = {
name: 'AssetAccountDetail',
@@ -171,7 +173,6 @@ export default {
}
},
asset: {
label: this.$t('assets.Asset'),
formatter: function(row) {
const to = {
name: 'AssetDetail',
@@ -184,8 +185,10 @@ export default {
}
}
},
username: {
width: '120px'
},
secret_type: {
width: '100px',
formatter: function(row) {
return row.secret_type.label
}
@@ -196,17 +199,16 @@ export default {
}
},
has_secret: {
width: '100px',
width: '120px',
formatterArgs: {
showFalse: false
}
},
privileged: {
label: this.$t('assets.Privileged'),
width: '120px',
formatterArgs: {
showText: false,
showFalse: false
showFalse: true
}
},
connectivity: connectivityMeta,
@@ -216,11 +218,11 @@ export default {
hasUpdate: false, // can set function(row, value)
hasDelete: false, // can set function(row, value)
hasClone: this.hasClone,
moreActionsTitle: this.$t('common.More'),
moreActionsTitle: this.$t('More'),
extraActions: [
{
name: 'View',
title: this.$t('common.View'),
title: this.$t('View'),
can: this.$hasPerm('accounts.view_accountsecret'),
type: 'primary',
callback: ({ row }) => {
@@ -234,25 +236,29 @@ export default {
}
},
{
name: 'ClearSecret',
title: this.$t('common.ClearSecret'),
can: this.$hasPerm('accounts.change_account'),
type: 'primary',
name: 'Update',
title: this.$t('Edit'),
can: this.$hasPerm('accounts.change_account') && !this.$store.getters.currentOrgIsRoot,
callback: ({ row }) => {
this.$axios.patch(
`/api/v1/accounts/accounts/clear-secret/`,
{ account_ids: [row.id] }
).then(() => {
this.$message.success(this.$tc('common.ClearSuccessMsg'))
const data = {
...this.asset,
...row.asset
}
vm.account = row
vm.iAsset = data
vm.showAddDialog = false
vm.accountCreateUpdateTitle = this.$t('UpdateAccount')
setTimeout(() => {
vm.showAddDialog = true
})
}
},
{
name: 'Test',
title: this.$t('accounts.Test'),
title: this.$t('Test'),
can: ({ row }) =>
!this.$store.getters.currentOrgIsRoot &&
this.$hasPerm('accounts.change_account') &&
this.$hasPerm('accounts.verify_account') &&
row.asset['auto_config'].ansible_enabled &&
row.asset['auto_config'].ping_enabled,
callback: ({ row }) => {
@@ -265,20 +271,16 @@ export default {
}
},
{
name: 'Update',
title: this.$t('common.Update'),
can: this.$hasPerm('accounts.change_account') && !this.$store.getters.currentOrgIsRoot,
name: 'ClearSecret',
title: this.$t('ClearSecret'),
can: this.$hasPerm('accounts.change_account'),
type: 'primary',
callback: ({ row }) => {
const data = {
...this.asset,
...row.asset
}
vm.account = row
vm.iAsset = data
vm.showAddDialog = false
vm.accountCreateUpdateTitle = this.$t('assets.UpdateAccount')
setTimeout(() => {
vm.showAddDialog = true
this.$axios.patch(
`/api/v1/accounts/accounts/clear-secret/`,
{ account_ids: [row.id] }
).then(() => {
this.$message.success(this.$tc('ClearSuccessMsg'))
})
}
}
@@ -295,17 +297,10 @@ export default {
hasCreate: false,
hasImport: this.hasImport,
hasExport: this.hasExport && this.$hasPerm('accounts.view_accountsecret'),
handleImportClick: ({ selectedRows }) => {
this.$eventBus.$emit('showImportDialog', {
selectedRows,
url: '/api/v1/accounts/accounts/',
name: this?.name
})
},
exportOptions: {
url: this.exportUrl,
mfaVerifyRequired: true,
tips: this.$t('accounts.AccountExportTips')
tips: this.$t('AccountExportTips')
},
importOptions: {
canImportCreate: this.$hasPerm('accounts.add_account'),
@@ -314,8 +309,9 @@ export default {
extraActions: [
{
name: 'add',
title: this.$t('common.Add'),
title: this.$t('Create'),
type: 'primary',
icon: 'plus',
can: () => {
return vm.$hasPerm('accounts.add_account') && !this.$store.getters.currentOrgIsRoot
},
@@ -324,14 +320,13 @@ export default {
setTimeout(() => {
vm.iAsset = this.asset
vm.account = {}
vm.accountCreateUpdateTitle = this.$t('assets.AddAccount')
vm.showAddDialog = true
})
}
},
{
name: 'add-template',
title: this.$t('common.TemplateAdd'),
title: this.$t('TemplateAdd'),
has: !(this.platform || this.asset),
can: () => {
return vm.$hasPerm('accounts.add_account') && !this.$store.getters.currentOrgIsRoot
@@ -341,7 +336,6 @@ export default {
setTimeout(() => {
vm.iAsset = this.asset
vm.account = {}
vm.accountCreateUpdateTitle = this.$t('assets.AddAccount')
vm.showAddTemplateDialog = true
})
}
@@ -350,10 +344,10 @@ export default {
],
extraMoreActions: [
{
name: 'BulkVerify',
title: this.$t('accounts.BulkVerify'),
name: 'TestSelected',
title: this.$t('TestSelected'),
type: 'primary',
fa: 'fa-link',
icon: 'fa-link',
can: ({ selectedRows }) => {
return selectedRows.length > 0 &&
['clickhouse', 'redis', 'website', 'chatgpt'].indexOf(selectedRows[0].asset.type.value) === -1 &&
@@ -368,15 +362,15 @@ export default {
{ action: 'verify', accounts: ids }).then(res => {
openTaskPage(res['task'])
}).catch(err => {
this.$message.error(this.$tc('common.bulkVerifyErrorMsg' + ' ' + err))
this.$message.error(this.$tc('BulkVerifyErrorMsg' + ' ' + err))
})
}.bind(this)
},
{
name: 'ClearSecrets',
title: this.$t('common.ClearSecret'),
name: 'BatchClearSecret',
title: this.$t('ClearSecret'),
type: 'primary',
fa: 'clean',
icon: 'clean',
can: ({ selectedRows }) => {
return selectedRows.length > 0 && vm.$hasPerm('accounts.change_account')
},
@@ -387,16 +381,16 @@ export default {
this.$axios.patch(
'/api/v1/accounts/accounts/clear-secret/',
{ account_ids: ids }).then(() => {
this.$message.success(this.$tc('common.ClearSuccessMsg'))
this.$message.success(this.$tc('ClearSuccessMsg'))
}).catch(err => {
this.$message.error(this.$tc('common.bulkClearErrorMsg' + ' ' + err))
this.$message.error(this.$tc('ClearErrorMsg' + ' ' + err))
})
}.bind(this)
},
{
name: 'actionUpdateSelected',
title: this.$t('accounts.AccountBatchUpdate'),
fa: 'batch-update',
name: 'UpdateSelected',
title: this.$t('UpdateSelected'),
icon: 'batch-update',
can: ({ selectedRows }) => {
return selectedRows.length > 0 &&
!this.$store.getters.currentOrgIsRoot &&
@@ -442,12 +436,12 @@ export default {
this.tableConfig.columnsMeta.actions.formatterArgs.extraActions.push(
{
name: 'Delete',
title: this.$t('common.Delete'),
title: this.$t('Delete'),
can: this.$hasPerm('accounts.delete_account'),
type: 'primary',
callback: ({ row }) => {
const msg = this.$t('accounts.AccountDeleteConfirmMsg')
this.$confirm(msg, this.$tc('common.Info'), {
const msg = this.$t('AccountDeleteConfirmMsg')
this.$confirm(msg, this.$tc('Info'), {
type: 'warning',
confirmButtonClass: 'el-button--danger',
beforeClose: async(action, instance, done) => {
@@ -455,7 +449,7 @@ export default {
this.$axios.delete(`/api/v1/accounts/accounts/${row.id}/`).then(() => {
done()
this.$refs.ListTable.reloadTable()
this.$message.success(this.$tc('common.deleteSuccessMsg'))
this.$message.success(this.$tc('DeleteSuccessMsg'))
})
}
})
@@ -464,6 +458,12 @@ export default {
)
}
},
activated() {
// 由于组件嵌套较深,有可能导致 Error in activated hook: "TypeError: Cannot read properties of undefined (reading 'getList')" 的问题
setTimeout(() => {
this.refresh()
}, 300)
},
methods: {
onUpdateAuthDone(account) {
Object.assign(this.account, account)
@@ -481,15 +481,27 @@ export default {
this.$refs.ListTable.reloadTable()
},
showBulkCreateResult(results) {
this.showResultDialog = false
this.createAccountResults = results
setTimeout(() => {
this.showResultDialog = true
}, 100)
this.createAccountResults = results
}, 350)
},
handleAccountBulkUpdate() {
this.updateSelectedDialogSetting.visible = false
this.$refs.ListTable.reloadTable()
},
closeAll() {
setTimeout(() => {
this.showResultDialog = false
}, 350)
setTimeout(() => {
this.showAddDialog = false
}, 800)
setTimeout(() => {
this.refresh()
}, 1000)
}
}
}

View File

@@ -30,11 +30,11 @@ export default {
}
},
data() {
const errorProp = this.$t('common.Error')
const errorProp = this.$t('Error')
const stateMap = {
'created': this.$tc('common.Created'),
'updated': this.$tc('common.Updated'),
'skipped': this.$tc('common.Skipped')
'created': this.$tc('Created'),
'updated': this.$tc('Updated'),
'skipped': this.$tc('Skipped')
}
const stateClsMap = {
'created': 'color-primary',
@@ -42,16 +42,16 @@ export default {
'skipped': 'color-default'
}
return {
title: this.$t('accounts.AddAccountResult'),
title: this.$t('AddAccountResult'),
config: {
columns: [
{
prop: 'asset',
label: this.$t('assets.Asset')
label: this.$t('Asset')
},
{
prop: 'state',
label: this.$t('common.Status'),
label: this.$t('Status'),
width: '200px',
formatter: (row) => {
if (row.error) {
@@ -71,11 +71,11 @@ export default {
computed: {
summary() {
const labels = {
total: this.$tc('common.Total'),
created: this.$tc('common.Created'),
updated: this.$tc('common.Updated'),
skipped: this.$tc('common.Skipped'),
error: this.$tc('common.Error')
total: this.$tc('Total'),
created: this.$tc('Created'),
updated: this.$tc('Updated'),
skipped: this.$tc('Skipped'),
error: this.$tc('Error')
}
const grouped = _.groupBy(this.result, 'state')
const groupedLength = _.mapValues(grouped, 'length')
@@ -91,7 +91,7 @@ export default {
},
methods: {
closeDialog() {
this.$emit('update:visible', false)
this.$emit('close-all')
}
}
}

View File

@@ -23,7 +23,7 @@ export default {
data() {
return {
config: {
title: this.$t('accounts.HistoryPassword'),
title: this.$t('HistoryPassword'),
visible: false,
width: '60%',
tableConfig: {
@@ -32,7 +32,7 @@ export default {
columns: ['secret', 'version', 'history_date'],
columnsMeta: {
secret: {
label: this.$t('assets.Password'),
label: this.$t('Password'),
formatter: ShowKeyCopyFormatter,
formatterArgs: {
hasDownload: false,
@@ -40,7 +40,7 @@ export default {
}
},
history_date: {
label: this.$t('accounts.HistoryDate')
label: this.$t('HistoryDate')
},
secret_type: {
width: '200px'

View File

@@ -65,7 +65,7 @@ export default {
</script>
<style lang="scss" scoped>
.item-textarea > > > .el-textarea__inner {
.item-textarea ::v-deep .el-textarea__inner {
height: 110px;
}
@@ -78,12 +78,12 @@ export default {
border-bottom: none;
}
> > > .el-form-item__label {
::v-deep .el-form-item__label {
padding-right: 20px;
line-height: 30px;
}
> > > .el-form-item__content {
::v-deep .el-form-item__content {
line-height: 30px;
pre {

View File

@@ -1,7 +1,7 @@
<template>
<Dialog
:destroy-on-close="true"
:title="$tc('assets.UpdateAssetUserToken')"
:title="$tc('UpdateAssetUserToken')"
:visible.sync="visible"
width="50"
@cancel="handleCancel()"
@@ -9,19 +9,19 @@
v-on="$listeners"
>
<el-form label-position="right" label-width="90px">
<el-form-item :label="$tc('assets.Name')">
<el-form-item :label="$tc('Name')">
<el-input v-model="account['asset_name']" readonly />
</el-form-item>
<el-form-item :label="$tc('assets.Username')">
<el-form-item :label="$tc('Username')">
<el-input v-model="account['username']" readonly />
</el-form-item>
<el-form-item :label="$tc('assets.Password')">
<el-form-item :label="$tc('Password')">
<UpdateToken v-model="authInfo.password" />
</el-form-item>
<el-form-item :label="$tc('assets.SSHSecretKey')">
<el-form-item :label="$tc('SSHSecretKey')">
<UploadKey @input="getFile" />
</el-form-item>
<el-form-item :label="$tc('assets.Passphrase')">
<el-form-item :label="$tc('Passphrase')">
<UpdateToken v-model="authInfo.passphrase" />
</el-form-item>
</el-form>
@@ -75,12 +75,12 @@ export default {
{ disableFlashErrorMsg: true }
).then(res => {
this.authInfo = { password: '', private_key: '' }
this.$message.success(this.$tc('common.updateSuccessMsg'))
this.$message.success(this.$tc('UpdateSuccessMsg'))
this.$emit('updateAuthDone', res)
this.$emit('update:visible', false)
}).catch(err => {
const errMsg = Object.values(err.response.data).join(', ')
this.$message.error(this.$tc('common.updateErrorMsg') + ' ' + errMsg)
this.$message.error(this.$tc('UpdateErrorMsg') + ' ' + errMsg)
this.$emit('update:visible', true)
})
},

View File

@@ -10,11 +10,11 @@
@confirm="accountConfirmHandle"
v-on="$listeners"
>
<el-form :model="secretInfo" class="password-form" label-position="right" label-width="100px">
<el-form-item :label="$tc('assets.Name')">
<el-form :model="secretInfo" class="password-form" label-position="right" label-width="130px">
<el-form-item :label="$tc('Name')">
<span>{{ account['name'] }}</span>
</el-form-item>
<el-form-item :label="$tc('assets.Username')">
<el-form-item :label="$tc('Username')">
<span>{{ account['username'] }}</span>
</el-form-item>
<el-form-item :label="secretTypeLabel">
@@ -27,16 +27,16 @@
@input="onShowKeyCopyFormatterChange"
/>
</el-form-item>
<el-form-item v-if="secretType === 'ssh_key'" :label="$tc('assets.sshKeyFingerprint')">
<el-form-item v-if="secretType === 'ssh_key'" :label="$tc('SshKeyFingerprint')">
<span>{{ sshKeyFingerprint }}</span>
</el-form-item>
<el-form-item :label="$tc('common.DateCreated')">
<el-form-item :label="$tc('DateCreated')">
<span>{{ account['date_created'] | date }}</span>
</el-form-item>
<el-form-item :label="$tc('common.DateUpdated')">
<el-form-item :label="$tc('DateUpdated')">
<span>{{ account['date_updated'] | date }}</span>
</el-form-item>
<el-form-item v-if="showPasswordRecord" v-perms="'accounts.view_accountsecret'" :label="$tc('accounts.PasswordRecord')">
<el-form-item v-if="showPasswordRecord" v-perms="'accounts.view_accountsecret'" :label="$tc('PasswordRecord')">
<el-link
:underline="false"
type="success"
@@ -90,7 +90,7 @@ export default {
title: {
type: String,
default: function() {
return this.$tc('assets.AccountDetail')
return this.$tc('Detail')
}
},
showPasswordRecord: {
@@ -142,7 +142,7 @@ export default {
}
const url = this.type === 'account' ? `/api/v1/accounts/accounts` : `/api/v1/accounts/account-templates`
this.$axios.patch(`${url}/${this.account.id}/`, params).then(() => {
this.$message.success(this.$tc('common.updateSuccessMsg'))
this.$message.success(this.$tc('UpdateSuccessMsg'))
})
},
showSecretDialog() {
@@ -167,7 +167,7 @@ export default {
</script>
<style lang="scss" scoped>
.item-textarea >>> .el-textarea__inner {
.item-textarea ::v-deep .el-textarea__inner {
height: 110px;
}
@@ -180,12 +180,18 @@ export default {
border-bottom: none;
}
>>> .el-form-item__label {
::v-deep .el-form-item__label {
display: flex;
align-items: center;
justify-content: flex-start;
padding-right: 20px;
line-height: 30px;
word-break: keep-all;
overflow-wrap: break-word;
white-space: normal;
}
>>> .el-form-item__content {
::v-deep .el-form-item__content {
line-height: 30px;
pre {

View File

@@ -1,8 +1,6 @@
import i18n from '@/i18n/i18n'
import { ChoicesFormatter } from '@/components/Table/TableFormatters'
export const connectivityMeta = {
label: i18n.t('assets.Connectivity'),
formatter: ChoicesFormatter,
formatterArgs: {
faChoices: {
@@ -22,5 +20,5 @@ export const connectivityMeta = {
}
}
},
width: '100px'
width: '130px'
}

View File

@@ -8,7 +8,7 @@
</tr>
<tr>
<td colspan="2">
<el-button :disabled="disabled" :type="type" size="small" @click="addObjects">{{ $t('common.Add') }}</el-button>
<el-button :disabled="disabled" :type="type" size="small" @click="addObjects">{{ $t('Add') }}</el-button>
</td>
</tr>
</table>

View File

@@ -1,7 +1,7 @@
<template>
<Dialog
:close-on-click-modal="false"
:title="$tc('assets.Assets')"
:title="$tc('Assets')"
custom-class="asset-select-dialog"
top="2vh"
v-bind="$attrs"
@@ -15,10 +15,11 @@
ref="ListPage"
:header-actions="headerActions"
:node-url="baseNodeUrl"
:sync-select-to-url="false"
:table-config="tableConfig"
:tree-setting="iTreeSetting"
:tree-url="`${baseNodeUrl}children/tree/`"
:url="baseUrl"
:tree-setting="treeSetting"
class="tree-table"
v-bind="$attrs"
/>
@@ -73,17 +74,17 @@ export default {
columns: [
{
prop: 'name',
label: this.$t('assets.Name'),
label: this.$t('Name'),
sortable: true
},
{
prop: 'address',
label: this.$t('assets.ipDomain'),
label: this.$t('IpDomain'),
sortable: 'custom'
},
{
prop: 'platform',
label: this.$t('assets.Platform'),
label: this.$t('Platform'),
sortable: true,
formatter: function(row) {
return row.platform.name
@@ -117,9 +118,14 @@ export default {
}
}
},
computed: {
iTreeSetting() {
return { ...this.treeSetting, selectSyncToRoute: false }
}
},
methods: {
handleClose() {
this.$eventBus.$emit('treeComponentKey')
this.$refs.ListPage.$refs.TreeList.componentKey += 1
},
handleConfirm() {
this.$emit('confirm', this.rowSelected, this.rowsAdd)

View File

@@ -136,16 +136,22 @@ export default {
.tree-table {
.left {
padding: 5px;
padding: 5px 0;
.ztree {
min-height: 500px;
height: inherit !important;
height: 100%;
}
}
.right {
.transition-box {
padding-left: 0;
}
}
.mini {
padding-top: 8px;
width: 1px;
}
.transition-box {

View File

@@ -2,9 +2,10 @@
<TreeTable
ref="TreeList"
:active-menu.sync="treeTableConfig.activeMenu"
:component="treeComponent"
:table-config="tableConfig"
:tree-tab-config="treeTableConfig"
component="TabTree"
:tree-width="treeWidth"
v-bind="$attrs"
v-on="$listeners"
>
@@ -63,12 +64,14 @@ export default {
const vm = this
return {
treeComponent: 'TabTree',
treeTabConfig: {
activeMenu: 'CustomTree',
submenu: [
{
title: this.$t('assets.AssetTree'),
title: this.$t('AssetTree'),
name: 'CustomTree',
icon: 'fa-tree',
treeSetting: {
showAssets,
showMenu: false,
@@ -94,13 +97,14 @@ export default {
}
},
{
title: this.$t('assets.BuiltinTree'),
title: this.$t('TypeTree'),
icon: 'fa-list-ul',
name: 'BuiltinTree',
treeSetting: {
showRefresh: true,
showAssets: false,
showSearch: false,
customTreeHeaderName: this.$t('assets.BuiltinTree'),
customTreeHeaderName: this.$t('TypeTree'),
url: '/api/v1/assets/nodes/category/tree/',
nodeUrl: this.treeSetting?.nodeUrl || this.nodeUrl,
treeUrl: `/api/v1/assets/nodes/category/tree/?assets=${showAssets ? '1' : '0'}&count_resource=${this.treeSetting.countResource || 'asset'}`,
@@ -114,6 +118,9 @@ export default {
}
},
computed: {
treeWidth() {
return '23.6%'
},
treeTableConfig() {
if (this.treeSetting.notShowBuiltinTree) {
// eslint-disable-next-line vue/no-side-effects-in-computed-properties
@@ -150,33 +157,42 @@ export default {
$('#m_show_asset_only_current_node').css('color', '#606266')
}
},
getAssetsUrl(treeNode) {
let url = this.treeSetting?.url || this.url
const setParam = (param, value, delay) => {
setTimeout(() => {
url = setUrlParam(url, param, value)
})
}
if (treeNode.meta.type === 'node') {
const nodeId = treeNode.meta.data.id
url = setUrlParam(url, 'node_id', nodeId)
url = setUrlParam(url, 'asset_id', '')
setParam('node_id', nodeId)
setParam('asset_id', '')
} else if (treeNode.meta.type === 'asset') {
const assetId = treeNode.meta.data?.id || treeNode.id
url = setUrlParam(url, 'node_id', '')
url = setUrlParam(url, 'asset_id', assetId)
setParam('node_id', '')
setParam('asset_id', assetId)
} else if (treeNode.meta.type === 'category') {
url = setUrlParam(url, 'category', treeNode.meta.category)
} else if (treeNode.meta.type === 'type') {
url = setUrlParam(url, 'category', treeNode.meta.category)
url = setUrlParam(url, 'type', treeNode.meta._type)
setParam('category', treeNode.meta.category)
setParam('type', treeNode.meta._type)
} else if (treeNode.meta.type === 'platform') {
url = setUrlParam(url, 'platform', treeNode.id)
}
const query = this.setTreeUrlQuery()
url = query ? `${url}&${query}` : url
this.$set(this.tableConfig, 'url', url)
setRouterQuery(this, url)
setTimeout(() => {
const query = this.setTreeUrlQuery()
url = query ? `${url}&${query}` : url
this.$set(this.tableConfig, 'url', url)
})
if (this.treeSetting.selectSyncToRoute !== false) {
setRouterQuery(this, url)
}
}
}
}
</script>
<style lang='scss' scoped>
</style>

View File

@@ -7,7 +7,7 @@
type="primary"
@click="onOpenDialog"
>
{{ $tc('common.Setting') }}
{{ $tc('Setting') }}
</el-button>
</div>
<Dialog
@@ -50,7 +50,7 @@ export default {
title: {
type: String,
default: function() {
return this.$t('assets.PushParams')
return this.$t('PushParams')
}
},
assets: {

View File

@@ -1,5 +1,5 @@
<template>
<ListTable ref="ListTable" :table-config="tableConfig" :header-actions="headerActions" />
<ListTable ref="ListTable" :header-actions="headerActions" :table-config="tableConfig" />
</template>
<script>
@@ -27,7 +27,7 @@ export default {
],
columnsMeta: {
ip: {
label: this.$t('assets.ip')
label: this.$t('IP')
},
actions: {
formatterArgs: {
@@ -37,7 +37,7 @@ export default {
extraActions: [
{
name: 'UnlockIP',
title: this.$t('setting.Unblock'),
title: this.$t('Unblock'),
can: this.$hasPerm('settings.change_security'),
type: 'primary',
callback: ({ row }) => {
@@ -45,7 +45,7 @@ export default {
'/api/v1/settings/security/unlock-ip/',
{ ips: [row.ip] }
).then(() => {
vm.$message.success(this.$tc('common.UnlockSuccessMsg'))
vm.$message.success(this.$tc('UnlockSuccessMsg'))
vm.$refs.ListTable.reloadTable()
})
}
@@ -68,7 +68,7 @@ export default {
extraMoreActions: [
{
name: 'UnlockSelected',
title: this.$t('setting.BulkUnblock'),
title: this.$t('UnblockSelected'),
type: 'primary',
can: ({ selectedRows }) => {
return selectedRows.length > 0
@@ -77,10 +77,12 @@ export default {
vm.$axios.post(
'/api/v1/settings/security/unlock-ip/',
{
ips: selectedRows.map(v => { return v.ip })
ips: selectedRows.map(v => {
return v.ip
})
}
).then(res => {
vm.$message.success(vm.$tc('common.UnlockSuccessMsg'))
vm.$message.success(vm.$tc('UnlockSuccessMsg'))
vm.$refs.ListTable.reloadTable()
})
}

View File

@@ -6,18 +6,18 @@
type="primary"
@click="onOpenDialog"
>
{{ $tc('common.View') }}
<span>({{ $tc('setting.LockedIP', ipCounts ) }})</span>
{{ $tc('View') }}
<span>({{ $tc('LockedIP', ipCounts ) }})</span>
</el-button>
</div>
<Dialog
:visible.sync="visible"
:title="title"
width="40%"
:destroy-on-close="true"
:show-cancel="false"
:show-confirm="false"
:destroy-on-close="true"
:title="title"
:visible.sync="visible"
v-bind="$attrs"
width="40%"
v-on="$listeners"
>
<BlockedIPList />
@@ -43,7 +43,7 @@ export default {
title: {
type: String,
default: function() {
return this.$t('setting.BlockedIPS')
return this.$t('BlockedIPS')
}
},
url: {

View File

@@ -11,7 +11,7 @@
v-on="$listeners"
>
<el-form :model="secretInfo" class="password-form" label-position="right" label-width="100px">
<el-form-item :label="$tc('accounts.AccountChangeSecret.OldSecret')">
<el-form-item :label="$tc('OldSecret')">
<ShowKeyCopyFormatter
:cell-value="secretInfo.old_secret"
:col="{ formatterArgs: {
@@ -19,7 +19,7 @@
}}"
/>
</el-form-item>
<el-form-item :label="$tc('accounts.AccountChangeSecret.NewSecret')">
<el-form-item :label="$tc('NewSecret')">
<ShowKeyCopyFormatter
:cell-value="secretInfo.new_secret"
:col="{ formatterArgs: {
@@ -54,7 +54,7 @@ export default {
title: {
type: String,
default: function() {
return this.$tc('common.ViewSecret')
return this.$tc('ViewSecret')
}
}
},
@@ -65,8 +65,7 @@ export default {
mfaDialogVisible: true
}
},
computed: {
},
computed: {},
mounted() {
this.showSecretDialog()
},
@@ -89,7 +88,7 @@ export default {
</script>
<style lang="scss" scoped>
.item-textarea >>> .el-textarea__inner {
.item-textarea ::v-deep .el-textarea__inner {
height: 110px;
}
@@ -102,12 +101,12 @@ export default {
border-bottom: none;
}
>>> .el-form-item__label {
::v-deep .el-form-item__label {
padding-right: 20px;
line-height: 30px;
}
>>> .el-form-item__content {
::v-deep .el-form-item__content {
line-height: 30px;
pre {

View File

@@ -12,31 +12,31 @@
<el-input
v-model="inputValue"
:disabled="isLoading"
:placeholder="$tc('common.InputMessage')"
:placeholder="$tc('InputMessage')"
:rows="expanded ? 3 :2"
type="textarea"
@compositionend="isIM = false"
@compositionstart="isIM = true"
@keypress.native="onKeyEnter"
/>
<div class="input-action">
<span class="right">
<i :class="{'active': inputValue }" class="fa fa-send" @click="onSendHandle" />
</span>
</div>
</div>
</div>
</template>
<script>
import { mapState } from 'vuex'
import Select2 from '../../../../Form/FormFields/Select2.vue'
import { useChat } from '../../useChat.js'
import Select2 from '../../../../Form/FormFields/Select2.vue'
const { setLoading } = useChat()
export default {
components: { Select2 },
props: {
expanded: {
type: Boolean,
default: false
}
},
data() {
return {
@@ -46,7 +46,7 @@ export default {
url: '/api/v1/settings/chatai-prompts/',
value: '',
multiple: false,
placeholder: this.$t('common.Prompt'),
placeholder: this.$t('Prompt'),
ajax: {
transformOption: (item) => {
return { label: item.name, value: item.content }
@@ -91,11 +91,14 @@ export default {
display: flex;
height: 100%;
flex-direction: column;
.chat-action {
width: 100%;
margin: 6px 0;
&>>> .el-select {
&::v-deep .el-select {
width: 50%;
.el-input__inner {
height: 28px;
line-height: 28px;
@@ -104,60 +107,47 @@ export default {
background-color: #f7f7f8;
font-size: 13px;
color: rgba(0, 0, 0, 0.45);
&:hover {
background-color: #ededed;
}
}
.el-input__icon {
line-height: 0px;
line-height: 0;
}
}
}
.chat-input {
flex: 1;
display: flex;
flex-direction: column;
border: 1px solid #DCDFE6;
border-radius: 12px;
&:has(.el-textarea__inner:focus) {
border: 1px solid var(--color-primary);
}
&>>> .el-textarea {
&::v-deep .el-textarea {
height: 100%;
.el-textarea__inner {
height: 100%;
padding: 8px 10px;
border: none;
border-top-left-radius: 12px;
border-top-right-radius: 12px;
resize: none;
border-radius: 5px;
&::-webkit-scrollbar {
width: 12px;
}
}
}
.el-textarea.is-disabled + .input-action {
background-color: #F5F7FA;
cursor: no-drop;
i {
cursor: no-drop;
}
}
.input-action {
overflow: hidden;
padding: 0 16px 15px;
border-bottom-left-radius: 12px;
border-bottom-right-radius: 12px;
.right {
float: right;
.active {
color: var(--color-primary);
}
i {
cursor: pointer;
}
}
}
}
}
</style>

View File

@@ -21,8 +21,8 @@
<div class="action">
<el-tooltip
v-if="isSystemError && isLoading"
:content="$tc('common.Reconnect')"
effect="dark"
:content="$tc('Reconnect')"
:open-delay="500"
placement="top"
>
<svg-icon icon-class="refresh" @click="onRefresh" />
@@ -59,7 +59,8 @@ export default {
props: {
item: {
type: Object,
default: () => {}
default: () => {
}
}
},
data() {
@@ -69,7 +70,7 @@ export default {
dropdownOptions: [
{
action: 'copy',
label: this.$t('common.Copy')
label: this.$t('Copy')
}
]
}
@@ -104,56 +105,69 @@ export default {
.chat-item {
display: flex;
padding: 16px 14px 0;
&:last-child {
padding-bottom: 16px;
}
.avatar {
width: 22px;
height: 22px;
margin-top: 2px;
.header-avatar {
width: 100%;
height: 100%;
&>>> img {
&::v-deep img {
background-color: #e5e5e7;
}
}
}
.content {
margin-left: 6px;
overflow: hidden;
.operational {
display: flex;
justify-content: space-between;
overflow: hidden;
.copy {
float: right;
cursor: pointer;
}
}
.message {
display: -webkit-box;
.message-content {
flex: 1;
padding: 6px 10px;
border-radius: 2px 12px 12px;
background-color: #f0f1f5;
}
.action {
.svg-icon {
transform: translateY(50%);
margin-left: 3px;
cursor: pointer;
}
.el-dropdown {
height: 32px;
line-height: 37px;
font-size: 13px;
.el-dropdown-link {
i {
padding: 4px 5px;
font-size: 15px;
color: #8d9091;
&:hover {
color: #7b8085
}
@@ -161,21 +175,27 @@ export default {
}
}
}
.error {
color: red;
}
}
}
}
.user-role {
flex-direction: row-reverse;
.content {
margin-right: 10px;
.operational {
flex-direction: row-reverse;
}
.message {
flex-direction: row-reverse;
.message-content {
background-color: var(--menu-hover);
border-radius: 12px 2px 12px 12px;

View File

@@ -6,7 +6,7 @@
<span />
<span />
</span>
<div v-else class="inline-block markdown-body" v-html="text" />
<div v-else v-sanitize="text" class="inline-block markdown-body" />
</div>
</div>
</template>
@@ -19,12 +19,12 @@ import hljs from 'highlight.js'
import 'highlight.js/styles/atom-one-dark.css'
import { copy } from '@/utils/common'
/* eslint-disable vue/no-v-html */
export default {
props: {
message: {
type: Object,
default: () => {}
default: () => {
}
}
},
data() {
@@ -86,7 +86,8 @@ export default {
if (this.$refs.textRef) {
const copyBtn = this.$refs.textRef.querySelectorAll('.code-block-header__copy')
copyBtn.forEach((btn) => {
btn.removeEventListener('click', () => {})
btn.removeEventListener('click', () => {
})
})
}
}
@@ -97,24 +98,31 @@ export default {
<style lang="scss" scoped>
.markdown-body {
font-size: 13px;
&>>> p {
&::v-deep p {
margin-bottom: 0 !important;
}
background: inherit;
&>>> pre {
&::v-deep pre {
padding: 0 0 6px 0;
.hljs.code-block-body {
border-radius: 4px;
}
}
&>>> .code-block-wrapper {
&::v-deep .code-block-wrapper {
background: #1F2329;
padding: 2px 6px;
margin: 5px 0;
.code-block-body {
padding: 5px 10px 0;
};
}
;
.code-block-header {
margin-bottom: 4px;
overflow: hidden;
@@ -124,11 +132,13 @@ export default {
.code-block-header__copy {
float: right;
cursor: pointer;
&:hover {
color: #6e747b;
}
}
}
.hljs.code-block-body.javascript {
.hljs-comment {
display: block;
@@ -136,16 +146,20 @@ export default {
}
}
}
>>> .link-style {
::v-deep .link-style {
color: #487bf4;
&:hover {
color: #275ee3;
}
}
.loading-box{
.loading-box {
margin-left: 6px;
}
.loading-box span{
.loading-box span {
display: inline-block;
width: 5px;
height: 5px;
@@ -155,24 +169,29 @@ export default {
background: #676A6c;
animation: load 1.2s ease infinite;
}
.loading-box span:last-child{
.loading-box span:last-child {
margin-right: 0;
}
@keyframes load{
0%{
@keyframes load {
0% {
opacity: 1;
}
100%{
100% {
opacity: 0;
}
}
.loading-box span:nth-child(1){
.loading-box span:nth-child(1) {
animation-delay: 0.23s;
}
.loading-box span:nth-child(2){
.loading-box span:nth-child(2) {
animation-delay: 0.36s;
}
.loading-box span:nth-child(3){
.loading-box span:nth-child(3) {
animation-delay: 0.49s;
}
</style>

View File

@@ -2,7 +2,12 @@
<div class="chat-content">
<div id="scrollRef" class="chat-list">
<div v-if="showIntroduction" class="introduction">
<div v-for="(item, index) in introduction" :key="index" class="introduction-item" @click="sendIntroduction(item)">
<div
v-for="(item, index) in introduction"
:key="index"
class="introduction-item"
@click="sendIntroduction(item)"
>
<div class="head">
<i v-if="item.icon" :class="item.icon" />
<span class="title">{{ item.title }}</span>
@@ -22,8 +27,8 @@
round
size="small"
@click="onStopHandle"
>{{ $tc('common.Stop') }}</el-button>
<ChatInput ref="chatInput" @send="onSendHandle" @select-prompt="onSelectPromptHandle" />
>{{ $tc('Stop') }}</el-button>
<ChatInput ref="chatInput" :expanded="expanded" @send="onSendHandle" @select-prompt="onSelectPromptHandle" />
</div>
</div>
</template>
@@ -52,23 +57,18 @@ export default {
ChatMessage
},
props: {
expanded: {
type: Boolean,
default: false
}
},
data() {
return {
socket: {},
prompt: '',
currentConversationId: '',
conversationId: '',
showIntroduction: false,
introduction: [
{
title: this.$t('common.introduction.ConceptTitle'),
content: this.$t('common.introduction.ConceptContent')
},
{
title: this.$t('common.introduction.IdeaTitle'),
content: this.$t('common.introduction.IdeaContent')
}
]
introduction: []
}
},
computed: {
@@ -86,23 +86,23 @@ export default {
this.initChatMessage()
},
initWebSocket() {
const { NODE_ENV, VUE_APP_KAEL_HOST } = process.env || {}
const api = '/kael/chat/system/'
const { NODE_ENV, VUE_APP_KOKO_HOST } = process.env || {}
const api = '/koko/ws/chat/system/'
const protocol = window.location.protocol === 'https:' ? 'wss' : 'ws'
const path = `${protocol}://${window.location.host}${api}`
const index = VUE_APP_KAEL_HOST?.indexOf('://')
const localPath = protocol + VUE_APP_KAEL_HOST?.substring(index, VUE_APP_KAEL_HOST?.length) + api
const index = VUE_APP_KOKO_HOST?.indexOf('://')
const localPath = protocol + VUE_APP_KOKO_HOST?.substring(index, VUE_APP_KOKO_HOST?.length) + api
const url = NODE_ENV === 'development' ? localPath : path
createWebSocket(url, this.onWebSocketMessage)
},
initChatMessage() {
this.prompt = ''
this.showIntroduction = true
this.currentConversationId = ''
this.conversationId = ''
this.$refs.chatInput.select.value = ''
const chat = {
message: {
content: this.$t('common.ChatHello'),
content: this.$t('ChatHello'),
role: 'assistant',
create_time: new Date()
}
@@ -119,10 +119,10 @@ export default {
}
},
onChatMessage(data) {
if (data.conversation_id) {
if (data.id) {
setLoading(true)
removeLoadingMessageInChat()
this.currentConversationId = data.conversation_id
this.conversationId = data.id
updateChaMessageContentById(data.message.id, data)
}
if (data.message?.type === 'finish') {
@@ -132,20 +132,18 @@ export default {
},
onSystemMessage(data) {
data.message = {
content: data.system_message,
content: data.data,
role: 'assistant',
create_time: new Date()
}
removeLoadingMessageInChat()
addMessageToActiveChat(data)
this.socketReadyStateSuccess = false
setLoading(true)
},
onSendHandle(value) {
this.showIntroduction = false
this.socket = ws || {}
if (ws?.readyState === 1) {
this.socketReadyStateSuccess = true
const chat = {
message: {
content: value,
@@ -154,9 +152,9 @@ export default {
}
}
const message = {
content: value,
data: value,
prompt: this.prompt,
conversation_id: this.currentConversationId || ''
id: this.conversationId || ''
}
addChatMessageById(chat)
onSend(message)
@@ -164,20 +162,19 @@ export default {
} else {
const chat = {
message: {
content: this.$t('common.ConnectionDropped'),
content: this.$t('ConnectionDropped'),
role: 'assistant',
create_time: new Date()
},
type: 'error'
}
addChatMessageById(chat)
this.socketReadyStateSuccess = false
setLoading(true)
}
},
onSelectPromptHandle(value) {
this.prompt = value
this.currentConversationId = ''
this.conversationId = ''
this.showIntroduction = false
this.onSendHandle(value)
},
@@ -186,13 +183,13 @@ export default {
this.initChatMessage()
},
onStopHandle() {
this.$axios.post(
'/kael/interrupt_current_ask/',
{ id: this.currentConversationId || '' }
).finally(() => {
removeLoadingMessageInChat()
setLoading(false)
})
const message = {
id: this.conversationId || '',
interrupt: true
}
onSend(message)
removeLoadingMessageInChat()
setLoading(false)
},
sendIntroduction(item) {
this.showIntroduction = false
@@ -226,13 +223,16 @@ export default {
&:first-child {
margin-top: 0;
}
.head {
margin-bottom: 2px;
.title {
font-weight: 500;
color: #373739;
}
}
.content {
display: inline-block;
color: #a7a7ab;
@@ -240,30 +240,35 @@ export default {
}
}
}
.chat-list {
flex: 1;
position: relative;
padding: 0 15px 25px;
overflow-y: auto;
user-select: text;
&::-webkit-scrollbar {
width: 12px;
}
}
.input-box {
position: relative;
height: 160px;
//height: 60px;
padding: 0 15px;
margin-bottom: 15px;
border-top: 1px solid #ececec;
//border-top: 1px solid #ececec;
}
.stop {
position: absolute;
top: -37px;
left: 50%;
z-index: 11;
transform: translateX(-50%);
>>> i {
::v-deep i {
margin-right: 4px;
}
}

View File

@@ -1,17 +1,14 @@
<template>
<div class="container">
<div class="close-sidebar">
<i v-if="hasClose" class="el-icon-close" @click="onClose" />
<i v-if="hasClose" class="el-icon-download" @click="onClose" />
</div>
<div v-if="!expanded" class="close-sidebar">
<i class="fa fa-expand" style="font-weight: 200" @click="$emit('expand')" />
</div>
<div v-if="expanded" class="close-sidebar">
<i class="fa fa-compress" style="font-weight: 200" @click="$emit('compress')" />
</div>
<el-tabs v-model="active" :tab-position="'right'" @tab-click="handleClick">
<el-tab-pane v-for="(item) in submenu" :key="item.name" :name="item.name">
<span slot="label">
<el-tooltip effect="dark" placement="left" :content="item.label">
<svg-icon :icon-class="item.icon" />
</el-tooltip>
</span>
</el-tab-pane>
</el-tabs>
</div>
</template>
@@ -29,18 +26,21 @@ export default {
submenu: {
type: Array,
default: () => []
},
expanded: {
type: Boolean,
default: false
}
},
data() {
return {
}
return {}
},
methods: {
handleClick(tab, event) {
this.$emit('tab-click', tab)
},
onClose() {
this.$parent.onClose()
this.$emit('close')
},
handleExpand() {
this.$emit('expand-full')
}
}
}
@@ -51,17 +51,23 @@ export default {
width: 100%;
height: 100%;
background-color: #f0f1f5;
.close-sidebar {
height: 48px;
padding: 12px 0;
text-align: center;
font-size: 14px;
font-size: 16px;
cursor: pointer;
i {
font-size: 16px;
font-weight: 600;
padding: 4px;
}
i, .svg {
border-radius: 2px;
&:hover {
color: var(--color-primary);
background: var(--menu-hover);
@@ -69,10 +75,16 @@ export default {
}
}
}
>>> .el-tabs {
.el-icon-download {
transform: rotate(-90deg)
}
::v-deep .el-tabs {
.el-tabs__item {
padding: 0 13px;
font-size: 15px;
padding: 0 10px;
font-size: 14px;
:hover {
color: #7b8085;
}

View File

@@ -1,26 +1,44 @@
<template>
<div class="chat">
<div class="container">
<div class="header">
<div class="left">
<img :src="robotUrl" alt="">
<span class="title">{{ title }}</span>
<DrawerPanel
ref="drawer"
:default-show-panel="!!defaultShowPanel"
:expanded="expanded"
:height="height"
:icon="robotUrl"
:modal="false"
@toggle="onToggle"
>
<div class="chat">
<div class="container">
<div ref="header" class="header" @mousedown="handleMoveMouseDown" @mouseup="handleMouseMoveUp">
<div class="left">
<img :src="robotUrl" alt="">
<span class="title">{{ title }}</span>
</div>
<span class="new" @click="onNewChat">
<i class="el-icon-plus" />
<span>{{ $tc('NewChat') }}</span>
</span>
</div>
<div class="content">
<keep-alive>
<component :is="active" ref="component" :expanded="expanded" />
</keep-alive>
</div>
<span class="new" @click="onNewChat">
<i class="el-icon-plus" />
<span>{{ $tc('common.NewChat') }}</span>
</span>
</div>
<div class="content">
<keep-alive>
<component :is="active" ref="component" />
</keep-alive>
<div class="sidebar">
<Sidebar
:active.sync="active"
:expanded="expanded"
v-bind="$attrs"
@close="onClose"
@compress="compress"
@expand="expandFull"
v-on="$listeners"
/>
</div>
</div>
<div class="sidebar">
<Sidebar v-bind="$attrs" :active.sync="active" :submenu="submenu" />
</div>
</div>
</DrawerPanel>
</template>
<script>
@@ -28,9 +46,11 @@ import Sidebar from './components/Sidebar/index.vue'
import Chat from './components/ChitChat/index.vue'
import { getInputFocus } from './useChat.js'
import { ws } from '@/utils/socket'
import DrawerPanel from '@/components/Apps/DrawerPanel/index.vue'
export default {
components: {
DrawerPanel,
Chat,
Sidebar
},
@@ -38,9 +58,13 @@ export default {
title: {
type: String,
default: function() {
return this.$t('setting.ChatAI')
return this.$t('ChatAI')
}
},
defaultShowPanel: {
type: Boolean,
default: false
},
drawerPanelVisible: {
type: Boolean,
default: () => false
@@ -49,29 +73,46 @@ export default {
data() {
return {
active: 'chat',
robotUrl: require('../../../assets/img/robot-assistant.png'),
submenu: [
{
name: 'chat',
label: this.$t('common.Chat'),
icon: 'chat'
}
]
robotUrl: require('@/assets/img/robot-assistant.png'),
height: '400px',
expanded: false,
clientOffset: {}
}
},
watch: {
drawerPanelVisible(value) {
if (value && !ws) {
this.initWebSocket()
}
}
},
mounted() {
this.handlePostMessage()
},
methods: {
handlePostMessage() {
window.addEventListener('message', (event) => {
if (event.data === 'show-chat-panel') {
this.$refs.drawer.show = true
}
})
},
handleMoveMouseDown(event) {
this.$refs.drawer.handleHeaderMoveDown(event)
},
handleMouseMoveUp(event) {
this.$refs.drawer.handleHeaderMoveUp(event)
},
initWebSocket() {
this.$refs.component?.init()
if (!ws) {
this.$refs.component?.init()
}
},
onClose() {
this.$parent.show = false
this.$refs.drawer.show = false
},
expandFull() {
this.height = '100%'
this.expanded = true
},
compress() {
this.height = '400px'
this.expanded = false
},
onNewChat() {
this.active = 'chat'
@@ -79,6 +120,12 @@ export default {
this.$refs.component?.onNewChat()
getInputFocus()
})
},
onToggle(status) {
this.initWebSocket()
if (status) {
getInputFocus()
}
}
}
}
@@ -89,12 +136,16 @@ export default {
display: flex;
width: 100%;
height: 100%;
pointer-events: auto;
.container {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
.header {
background: linear-gradient(90deg, #ebf1ff 24.34%, #e5fbf8 56.18%, #f2ebfe 90.18%);;
display: flex;
justify-content: space-between;
height: 48px;

View File

@@ -1,8 +1,8 @@
<template>
<div ref="drawer" :class="{show: show}" class="drawer">
<div :style="{'background-color': modal ? 'rgba(0, 0, 0, .3)' : 'transparent'}" class="modal" />
<div :style="{'width': width}" class="drawer-panel">
<div v-show="!show" ref="dragBox" class="handle-button">
<div v-if="modal" :style="{'background-color': modal ? 'rgba(0, 0, 0, .3)' : 'transparent'}" class="modal" />
<div ref="panel" :style="{width: width, height: height }" class="drawer-panel">
<div v-show="!show && !defaultShowPanel" ref="dragBox" class="handle-button">
<i v-if="icon.startsWith('fa') || icon.startsWith('el')" :class="show ? 'el-icon-close': icon" />
<img v-else :src="icon" alt="">
</div>
@@ -12,7 +12,6 @@
</div>
</div>
</template>
<script>
export default {
@@ -26,6 +25,10 @@ export default {
type: String,
default: '440px'
},
height: {
type: String,
default: '400px'
},
modal: {
type: Boolean,
default: true
@@ -33,11 +36,20 @@ export default {
clickNotClose: {
type: Boolean,
default: false
},
expanded: {
type: Boolean,
default: false
},
defaultShowPanel: {
type: Boolean,
default: false
}
},
data() {
return {
show: false
show: this.defaultShowPanel,
clientOffset: {}
}
},
watch: {
@@ -45,7 +57,17 @@ export default {
if (value && !this.clickNotClose) {
this.addEventClick()
}
const event = value ? 'show-chat-panel' : 'close-chat-panel'
window.parent.postMessage(event, '*')
this.$emit('toggle', this.show)
},
expanded(value) {
if (value) {
this.$refs.panel.style.top = '0px'
} else {
this.$refs.panel.style.top = 'auto'
this.$refs.panel.style.bottom = '2px'
}
}
},
mounted() {
@@ -55,49 +77,65 @@ export default {
beforeDestroy() {
const element = this.$refs.drawer
element.remove()
window.removeEventListener('click', this.closeSidebar)
// window.removeEventListener('click', this.closeSidebar)
},
methods: {
handleHeaderMoveUp(event) {
this.handleMouseMoveUp(event)
},
handleHeaderMoveDown(event) {
this.handleMoveMouseDown(event, true)
},
handleMoveMouseDown(event, isHeader = false) {
const dragBox = this.$refs.dragBox
const vm = this
const rect = dragBox.getBoundingClientRect()
const parentRect = dragBox.parentElement.getBoundingClientRect()
const clientOffset = this.clientOffset
clientOffset.clientX = event.clientX
clientOffset.clientY = event.clientY
const handleOnMouseMove = _.debounce(function(event) {
const diffY = rect.top - parentRect.top
const maxY = window.innerHeight - parentRect.height
let parentY = event.clientY - diffY
// 这个是拖动的 header, 不是 bar
if (isHeader) {
parentY = event.clientY - rect.height / 2
}
if (parentY < 0) {
parentY = 0
} else if (parentY > maxY) {
parentY = maxY
}
if (vm.$refs.panel) {
vm.$refs.panel.style.top = parentY + 'px'
}
})
document.onmousemove = handleOnMouseMove
document.onmouseup = function() {
document.removeEventListener('mousemove', handleOnMouseMove)
setTimeout(() => {
document.onmousemove = null
document.onmouseup = null
}, 0)
}
},
handleMouseMoveUp(event) {
const clientOffset = this.clientOffset
const clientX = event.clientX
const clientY = event.clientY
if (this.isDifferenceWithinThreshold(clientX, clientOffset.clientX) &&
this.isDifferenceWithinThreshold(clientY, clientOffset.clientY)) {
this.show = !this.show
}
},
init() {
this.$nextTick(() => {
const dragBox = this.$refs.dragBox
const clientOffset = {}
dragBox.addEventListener('mousedown', (event) => {
const offsetX = dragBox.getBoundingClientRect().left
const offsetY = dragBox.getBoundingClientRect().top
const innerX = event.clientX - offsetX
const innerY = event.clientY - offsetY
clientOffset.clientX = event.clientX
clientOffset.clientY = event.clientY
document.onmousemove = function(event) {
dragBox.style.left = event.clientX - innerX + 'px'
dragBox.style.top = event.clientY - innerY + 'px'
const dragDivTop = window.innerHeight - dragBox.getBoundingClientRect().height
const dragDivLeft = window.innerWidth - dragBox.getBoundingClientRect().width
dragBox.style.left = dragDivLeft + 'px'
dragBox.style.left = '-48px'
if (dragBox.getBoundingClientRect().top <= 0) {
dragBox.style.top = '0px'
}
if (dragBox.getBoundingClientRect().top >= dragDivTop) {
dragBox.style.top = dragDivTop + 'px'
}
event.preventDefault()
event.stopPropagation()
}
document.onmouseup = function() {
document.onmousemove = null
document.onmouseup = null
}
}, false)
dragBox.addEventListener('mouseup', (event) => {
const clientX = event.clientX
const clientY = event.clientY
if (this.isDifferenceWithinThreshold(clientX, clientOffset.clientX) && this.isDifferenceWithinThreshold(clientY, clientOffset.clientY)) {
this.show = !this.show
}
})
dragBox.addEventListener('mousedown', this.handleMoveMouseDown, false)
dragBox.addEventListener('mouseup', this.handleMouseMoveUp, false)
})
},
isDifferenceWithinThreshold(num1, num2, threshold = 5) {
@@ -105,13 +143,6 @@ export default {
return difference <= threshold
},
addEventClick() {
window.addEventListener('click', this.closeSidebar)
},
closeSidebar(evt) {
const parent = evt.target.closest('.drawer-panel')
if (!parent && evt.target.className === 'modal') {
this.show = false
}
},
insertToBody() {
const element = this.$refs.drawer
@@ -135,11 +166,10 @@ export default {
.drawer-panel {
position: fixed;
top: 0;
right: 0;
bottom: 1px;
right: -1px;
width: 100%;
min-width: 260px;
height: 100vh;
user-select: none;
transition: transform .25s cubic-bezier(.7, .3, .1, 1);
box-shadow: 0 0 8px 4px #00000014;
@@ -187,23 +217,26 @@ export default {
pointer-events: auto;
color: #fff;
background-color: #FFFFFF;
opacity: 0.9;
box-shadow: 0 0 8px 4px #00000014;
cursor: pointer;
&:hover {
left: -50px !important;
left: -51px !important;
width: 50px !important;
transform: scale(1.06);
transform: scale(1.01);
}
i {
font-size: 20px;
line-height: 45px;
pointer-events: none;
}
img {
width: 22px;
height: 22px;
transform: translateY(10%);
margin-left: 3px;
pointer-events: none;
}
}
</style>

View File

@@ -4,18 +4,18 @@
:destroy-on-close="true"
:show-cancel="false"
:show-confirm="false"
:title="$tc('assets.TestGatewayTestConnection')"
:title="$tc('TestGatewayTestConnection')"
:visible.sync="iVisible"
top="35vh"
width="40%"
>
<el-row :gutter="20">
<el-col :md="4" :sm="24">
<div style="line-height: 34px">{{ $t('assets.SSHPort') }}</div>
<div style="line-height: 34px">{{ $t('SSHPort') }}</div>
</el-col>
<el-col :md="14" :sm="24">
<el-input v-model="port" />
<span class="help-tips help-block">{{ $t('assets.TestGatewayHelpMessage') }}</span>
<span class="help-tips help-block">{{ $t('TestGatewayHelpMessage') }}</span>
</el-col>
<el-col :md="4" :sm="24">
<el-button
@@ -25,7 +25,7 @@
type="primary"
@click="dialogConfirm"
>
{{ this.$t('common.Confirm') }}
{{ this.$t('Confirm') }}
</el-button>
</el-col>
</el-row>
@@ -75,7 +75,7 @@ export default {
methods: {
dialogConfirm() {
if (isNaN(this.port)) {
return this.$message.error(this.$tc('common.TestPortErrorMsg'))
return this.$message.error(this.$tc('TestPortErrorMsg'))
}
this.$axios.post(
`/api/v1/assets/gateways/${this.cell}/test-connective/`,

View File

@@ -1,17 +1,20 @@
<template>
<TreeTable :header-actions="headerActions" :table-config="tableConfig" :tree-setting="treeSetting" />
<AssetTreeTable
:header-actions="headerActions"
:table-config="tableConfig"
:tree-setting="treeSetting"
/>
</template>
<script type="text/jsx">
import TreeTable from '../../Table/TreeTable/index.vue'
import { DetailFormatter } from '@/components/Table/TableFormatters'
import { AccountInfoFormatter } from '@/components/Table/TableFormatters'
import AssetTreeTable from '@/components/Apps/AssetTreeTable'
import { AccountInfoFormatter, DetailFormatter } from '@/components/Table/TableFormatters'
import { connectivityMeta } from '@/components/Apps/AccountListTable/const'
export default {
name: 'GrantedAssets',
components: {
TreeTable
AssetTreeTable
},
props: {
treeUrl: {
@@ -34,11 +37,19 @@ export default {
vm.tableConfig.url = url
}
},
actions: {
type: Object,
default: null
},
getShowUrl: {
type: Function,
default({ row, col }) {
return this.tableUrl.replace('/assets/', `/assets/${row.id}/accounts/`)
}
},
nameDisabled: {
type: Boolean,
default: true
}
},
data() {
@@ -48,9 +59,11 @@ export default {
showMenu: false,
showRefresh: true,
showAssets: false,
showSearch: false,
url: this.tableUrl,
// ?assets=0不显示资产. =1显示资产
treeUrl: this.treeUrl,
notShowBuiltinTree: true,
callback: {
onSelected: (event, node) => vm.onSelected(node, vm),
refresh: vm.refreshObjectAssetPermission
@@ -63,24 +76,35 @@ export default {
columnsExclude: ['spec_info'],
columnsShow: {
min: ['name', 'address', 'accounts'],
default: ['name', 'address', 'platform', 'view_account', 'connectivity']
default: ['name', 'address', 'platform', 'connectivity', 'view_account', 'actions']
},
columnsMeta: {
name: {
formatter: DetailFormatter,
formatterArgs: {
route: 'AssetDetail'
route: 'AssetDetail',
can: !this.nameDisabled
}
},
labels: {
formatterArgs: {
showEditBtn: false
}
},
actions: {
has: false
...this.actions
},
view_account: {
label: this.$t('assets.Account'),
label: this.$t('Accounts'),
formatter: AccountInfoFormatter,
width: '100px'
},
connectivity: connectivityMeta
},
tableAttrs: {
rowClassName({ row }) {
return !row.is_active ? 'row_disabled' : ''
}
}
},
headerActions: {
@@ -103,4 +127,8 @@ export default {
</script>
<style scoped>
.row_disabled, .row_disabled:hover, .row_disabled:hover > td {
cursor: not-allowed;
background-color: rgba(192, 196, 204, 0.28) !important;
}
</style>

View File

@@ -37,7 +37,7 @@ export default {
],
columnsMeta: {
name: {
label: this.$t('assets.Asset'),
label: this.$t('Asset'),
formatter: (row) => {
const to = {
name: 'AssetDetail',

View File

@@ -18,7 +18,8 @@ export default {
props: {
object: {
type: Object,
default: () => {}
default: () => {
}
}
},
data() {
@@ -38,7 +39,8 @@ export default {
],
columnsMeta: {
name: {
label: this.$t('common.Name'),
label: this.$t('Name'),
width: 85,
formatter: (row) => {
const to = {
name: 'UserDetail',
@@ -52,7 +54,7 @@ export default {
}
},
system_roles: {
label: this.$t('users.SystemRoles'),
label: this.$t('SystemRoles'),
formatter: (row) => {
return row['system_roles'].map(item => item['display_name']).join(', ') || '-'
},
@@ -60,7 +62,7 @@ export default {
columnKey: 'system_roles'
},
org_roles: {
label: this.$t('users.OrgRoles'),
label: this.$t('OrgRoles'),
formatter: (row) => {
return row['org_roles'].map(item => item['display_name']).join(', ') || '-'
},

View File

@@ -1,7 +1,7 @@
<template>
<div>
<el-row :gutter="20">
<el-col :md="12" :sm="24">
<el-col :md="16" :sm="24">
<IBox :title="title" class="block" v-bind="$attrs">
<el-timeline>
<el-timeline-item
@@ -18,14 +18,14 @@
type="primary"
@click.native="onClick(activity)"
>
{{ $tc('common.Detail') }}
{{ $tc('Detail') }}
</el-link>
</el-timeline-item>
</el-timeline>
</IBox>
</el-col>
</el-row>
<DiffDetail ref="DetailDialog" :title="$tc('route.OperateLog')" />
<DiffDetail ref="DetailDialog" :title="$tc('OperateLog')" />
</div>
</template>
@@ -33,6 +33,7 @@
import IBox from '@/components/IBox/index.vue'
import DiffDetail from '@/components/Dialog/DiffDetail.vue'
import { openTaskPage } from '@/utils/jms'
import { toSafeLocalDateStr } from '@/utils/time'
export default {
name: 'ResourceActivity',
@@ -49,11 +50,11 @@ export default {
data() {
return {
activityUrl: `/api/v1/audits/activities/?resource_id=${this.object.id}`,
title: `${this.$t('common.Activity')} - ${this.$t('common.Last30')}`,
title: `${this.$t('Last30')}`,
activities: [
{
content: this.$t('common.Now'),
timestamp: this.$moment().format('YYYY-MM-DD HH:mm:ss'),
content: this.$t('Now'),
timestamp: toSafeLocalDateStr(this.$moment()),
type: 'primary'
}
]
@@ -65,9 +66,11 @@ export default {
methods: {
getActivities() {
this.$axios.get(this.activityUrl).then(res => {
for (const i in res) {
this.activities.push(res[i])
}
const activities = res || []
activities.forEach(activity => {
activity.timestamp = toSafeLocalDateStr(activity.timestamp)
this.activities.push(activity)
})
})
},
onClick(activity) {

View File

@@ -16,7 +16,7 @@
<el-row :gutter="24" style="margin: 0 auto;">
<el-col :md="24" :sm="24">
<el-alert
:title="$tc('auth.ReLoginTitle')"
:title="$tc('ReLoginTitle')"
center
style="margin-bottom: 20px;"
type="error"
@@ -26,7 +26,7 @@
<el-row :gutter="24" style="margin: 0 auto;">
<el-col :md="24" :sm="24">
<el-button class="confirm-btn" size="mini" type="primary" @click="logout">
{{ this.$t('auth.ReLogin') }}
{{ this.$t('ReLogin') }}
</el-button>
</el-col>
</el-row>
@@ -50,7 +50,7 @@
</el-col>
</el-row>
<el-row :gutter="24" style="margin: 0 auto;">
<el-col :md="24" :sm="24" style="display: flex; margin-bottom: 20px;">
<el-col :md="24" :sm="24" style="display: flex; align-items: center; margin-bottom: 20px;">
<el-input
v-model="secretValue"
:placeholder="inputPlaceholder"
@@ -61,7 +61,7 @@
<el-button
:disabled="smsBtnDisabled"
size="mini"
style="line-height:20px; float: right;"
style="line-height: 14px; float: right;"
type="primary"
@click="sendSMSCode"
>
@@ -73,7 +73,7 @@
<el-row :gutter="24" style="margin: 10px auto;">
<el-col :md="24" :sm="24">
<el-button class="confirm-btn" size="mini" type="primary" @click="handleConfirm">
{{ this.$t('common.Confirm') }}
{{ this.$t('Confirm') }}
</el-button>
</el-col>
</el-row>
@@ -101,11 +101,11 @@ export default {
},
data() {
return {
title: this.$t('common.CurrentUserVerify'),
title: this.$t('CurrentUserVerify'),
smsWidth: 0,
subTypeSelected: '',
inputPlaceholder: '',
smsBtnText: this.$t('common.SendVerificationCode'),
smsBtnText: this.$t('SendVerificationCode'),
smsBtnDisabled: false,
confirmTypeRequired: '',
subTypeChoices: [],
@@ -132,7 +132,7 @@ export default {
this.inputPlaceholder = this.subTypeChoices.filter(item => item.name === val)[0]?.placeholder
this.smsWidth = val === 'sms' ? 6 : 0
},
performConfirm: _.throttle(function({ response, callback, cancel }) {
performConfirm: _.debounce(function({ response, callback, cancel }) {
if (this.processing || this.visible) {
return
}
@@ -150,7 +150,7 @@ export default {
this.callback()
this.visible = false
}).catch(() => {
this.title = this.$t('auth.NeedReLogin')
this.title = this.$t('NeedReLogin')
this.visible = true
})
return
@@ -162,32 +162,34 @@ export default {
this.visible = true
}).catch((err) => {
const data = err.response?.data
const msg = data?.error || data?.detail || data?.msg || this.$t('common.GetConfirmTypeFailed')
const msg = data?.error || data?.detail || data?.msg || this.$t('GetConfirmTypeFailed')
this.$message.error(msg)
this.cancel(err)
}).finally(() => {
this.processing = false
})
}, 300),
}, 500),
logout() {
window.location.href = `${process.env.VUE_APP_LOGOUT_PATH}?next=${this.$route.fullPath}`
},
sendSMSCode() {
this.$axios.post(`/api/v1/authentication/mfa/select/`, { type: 'sms' }).then(res => {
this.$message.success(this.$tc('common.VerificationCodeSent'))
this.$message.success(this.$tc('VerificationCodeSent'))
let time = 60
const interval = setInterval(() => {
const originText = this.smsBtnText
this.smsBtnText = this.$t('common.Pending') + `: ${time}`
this.smsBtnDisabled = true
time -= 1
this.smsBtnDisabled = true
if (time === 0) {
this.smsBtnText = originText
this.smsBtnDisabled = false
const interval = setInterval(() => {
time -= 1
this.smsBtnText = `${this.$t('Pending')}: ${time}`
if (time <= 0) {
clearInterval(interval)
this.smsBtnText = this.$t('SendVerificationCode')
this.smsBtnDisabled = false
}
}, 1000)
}).catch(() => {
this.$message.error(this.$tc('FailedToSendVerificationCode'))
})
},
handleConfirm() {
@@ -195,17 +197,23 @@ export default {
return this.logout()
}
if (this.subTypeSelected === 'otp' && this.secretValue.length !== 6) {
return this.$message.error(this.$tc('common.MFAErrorMsg'))
return this.$message.error(this.$tc('MFAErrorMsg'))
}
const data = {
confirm_type: this.confirmTypeRequired,
mfa_type: this.confirmTypeRequired === 'mfa' ? this.subTypeSelected : '',
secret_key: this.confirmTypeRequired === 'password' ? encryptPassword(this.secretValue) : this.secretValue
}
this.$axios.post(`/api/v1/authentication/confirm/`, data).then(res => {
this.callback()
this.$axios.post(`/api/v1/authentication/confirm/`, data).then(() => {
this.secretValue = ''
this.visible = false
this.$nextTick(() => {
this.callback()
})
}).catch((err) => {
this.$message.error(err.message || this.$tc('ConfirmFailed'))
})
}
}
@@ -213,11 +221,11 @@ export default {
</script>
<style lang="scss" scoped>
.dialog-content >>> .el-dialog__footer {
.dialog-content ::v-deep .el-dialog__footer {
padding: 0;
}
.dialog-content >>> .el-dialog {
.dialog-content ::v-deep .el-dialog {
padding: 8px;
.el-dialog__body {
@@ -230,5 +238,4 @@ export default {
width: 100%;
line-height: 20px;
}
</style>

View File

@@ -1,5 +1,5 @@
<script type="text/jsx">
import { toSafeLocalDateStr } from '@/utils/common'
import { toSafeLocalDateStr } from '@/utils/time'
export default {
name: 'ItemValue',
@@ -47,9 +47,9 @@ export default {
methods: {
toChoicesDisplay(value) {
if (!value) {
return this.$t('common.No')
return this.$t('No')
}
return this.$t('common.Yes')
return this.$t('Yes')
},
isDatetime(value) {
if (typeof value !== 'string') {
@@ -92,7 +92,7 @@ export default {
)
}
return (
<span>{this.displayValue}</span>
<span title={this.displayValue}>{this.displayValue}</span>
)
}
}

View File

@@ -1,14 +1,20 @@
<template>
<DetailCard v-if="!loading && hasObject && items.length > 0" :items="items" v-bind="$attrs" />
<IBox v-if="loading" style="width: 100%; height: 200px" />
<div v-else>
<DetailCard v-if="hasObject && items.length > 0" :items="validItems" :loading="loading" v-bind="$attrs" />
</div>
</template>
<script>
import DetailCard from './index.vue'
import { copy, toSafeLocalDateStr } from '@/utils/common'
import { copy } from '@/utils/common'
import { toSafeLocalDateStr } from '@/utils/time'
import IBox from '@/components/IBox/index.vue'
import LabelsDetailFormatter from '../Formatters/LabelsDetailFormatter.vue'
export default {
name: 'AutoDetailCard',
components: { DetailCard },
components: { IBox, DetailCard },
props: {
object: {
type: Object,
@@ -55,6 +61,9 @@ export default {
},
hasObject() {
return Object.keys(this.iObject).length > 0
},
validItems() {
return this.items.filter(item => this.isHidden(item))
}
},
async mounted() {
@@ -69,13 +78,92 @@ export default {
if (val === '-') {
return <span>{'-'}</span>
}
return (<span style={{ cursor: 'pointer' }} onClick={() => copy(val)}>
{val}
</span>)
return (
<span style={{ cursor: 'pointer' }} onClick={() => copy(val)} title={val}>
{val}
</span>
)
}
}
return formatter
},
isHidden(item) {
let has = item.has
if (typeof has === 'function') {
has = has()
}
if (has === undefined) {
has = true
}
return has
},
parseValue(value, tp) {
if (value === null || value === '') {
value = '-'
} else if (value === 0) {
value = 0
} else if (tp === 'datetime') {
value = toSafeLocalDateStr(value)
} else if (tp === 'labeled_choice') {
value = value?.['label']
} else if (tp === 'related_field' || tp === 'nested object' || value?.name) {
value = value?.['name']
} else if (tp === 'm2m_related_field') {
value = value?.map(item => item['name']).join(', ')
} else if (tp === 'boolean') {
value = value ? this.$t('Yes') : this.$t('No')
}
return value
},
getComponentByName(name) {
if (name === 'labels') {
return LabelsDetailFormatter
}
return null
},
parseArrayValue(value, excludes, label) {
if (Array.isArray(value)) {
const tp = typeof value[0]
for (const [index, item] of value.entries()) {
let object = {}
if (tp === 'object') {
const firstValue = value[0]
if (firstValue.hasOwnProperty('name')) {
value.forEach(item => {
const fieldName = `${name}.${item.name}`
if (excludes.includes(fieldName)) {
return
}
object = {
key: item.label,
value: item.value
}
})
} else {
const fieldName = `${name}.${item.name}`
if (excludes.includes(fieldName)) {
continue
}
object = {
key: item.label,
value: item.value
}
}
} else if (tp === 'string') {
object = {
value: value[index]
}
if (index === 0) {
object['key'] = label
}
}
if (index !== value.length - 1) {
object['class'] = 'array-item'
}
this.items.push(object)
}
}
},
async optionAndGenFields() {
const data = await this.$store.dispatch('common/getUrlMeta', { url: this.url })
let remoteMeta = data.actions['GET'] || {}
@@ -88,6 +176,7 @@ export default {
const excludes = (this.excludes || []).concat(defaultExcludes)
fields = fields.filter(item => !excludes.includes(item))
const defaultFormatter = this.defaultFormatter(fields)
for (const name of fields) {
if (typeof name === 'object') {
this.items.push(name)
@@ -104,62 +193,32 @@ export default {
let value = this.iObject[name]
const label = fieldMeta.label
if (Array.isArray(value)) {
if (typeof value[0] === 'object') {
const firstValue = value[0]
if (firstValue.hasOwnProperty('name')) {
value.forEach(item => {
const fieldName = `${name}.${item.name}`
if (excludes.includes(fieldName)) {
return
}
this.items.push({
key: item.label,
value: item.value
})
})
} else {
value.forEach((item, index) => {
const v = Object.entries(item).map(([key, value]) => `${key}:${value}`).join(', ')
const data = { value: v }
if (index === 0) {
data['key'] = label
}
this.items.push(data)
})
}
} else if (typeof value[0] === 'string') {
value.forEach((item, index) => {
let data = {}
if (index === 0) {
data = {
key: label,
value: value[index]
}
} else {
data = {
value: value[index]
}
}
this.items.push(data)
})
}
const component = this.getComponentByName(name)
if (component) {
this.items.push({
key: label,
value: value,
component: component
})
continue
}
if (value === null || value === '') {
value = '-'
} else if (fieldMeta.type === 'datetime') {
value = toSafeLocalDateStr(value)
} else if (fieldMeta.type === 'labeled_choice') {
value = value?.['label']
} else if (fieldMeta.type === 'related_field' || fieldMeta.type === 'nested object') {
value = value?.['name']
} else if (fieldMeta.type === 'm2m_related_field') {
value = value?.map(item => item['name']).join(', ')
} else if (fieldMeta.type === 'boolean') {
value = value ? this.$t('common.Yes') : this.$t('common.No')
const formatter = this.formatters[name]
if (formatter) {
this.items.push({
key: label,
value: value,
formatter: formatter
})
continue
}
if (Array.isArray(value)) {
this.parseArrayValue(value, excludes, label)
continue
}
value = this.parseValue(value, fieldMeta.type)
if (value === undefined) {
if (this.showUndefine) {
value = '-'
@@ -171,7 +230,7 @@ export default {
const item = {
key: label,
value: value,
formatter: this.formatters[name] || defaultFormatter[name]
formatter: defaultFormatter[name]
}
this.items.push(item)
}

View File

@@ -1,9 +1,17 @@
<template>
<IBox :fa="fa" :title="title">
<el-form class="content" label-position="left" label-width="25%">
<el-form-item v-for="item in iItems" :key="item.key" :label="item.key">
<ItemValue :value="item.value" class="item-value" v-bind="item" />
</el-form-item>
<el-form :label-width="labelWidth" class="content" label-position="left">
<span v-for="item in items" :key="item.key">
<el-form-item v-if="item.has !== false" :class="item.class" :label="item.key">
<span slot="label"> {{ formateLabel(item.key) }}</span>
<span
:is="item.component"
v-if="item.component"
v-bind="{...item}"
/>
<ItemValue v-else :value="item.value" class="item-value" v-bind="item" />
</el-form-item>
</span>
</el-form>
<slot />
</IBox>
@@ -20,12 +28,12 @@ export default {
title: {
type: String,
default() {
return this.$t('common.BasicInfo')
return this.$t('BasicInfo')
}
},
fa: {
type: String,
default: 'fa-info-circle'
default: 'fa-info-circle-o'
},
items: {
type: Array,
@@ -34,6 +42,10 @@ export default {
align: {
type: String,
default: 'left'
},
labelWidth: {
type: String,
default: '25%'
}
},
data() {
@@ -42,48 +54,72 @@ export default {
return !item.hasOwnProperty('has') || item.has === true
})
}
},
methods: {
formateLabel(label) {
if (!label) {
return label
}
return label.replace(' amount', '').replace('数量', '')
}
}
}
</script>
<style lang="scss" scoped>
.el-card__body {
padding: 20px 40px;
.el-card__body {
padding: 20px 40px;
}
.el-form-item {
border-bottom: 1px dashed #EBEEF5;
padding: 1px 0;
margin-bottom: 0;
&:last-child {
border-bottom: none;
}
.el-form-item {
border-bottom: 1px dashed #EBEEF5;
padding: 1px 0;
margin-bottom: 0;
&.array-item {
border-bottom: none;
&:last-child {
border-bottom: none;
::v-deep .el-form-item__content {
border-bottom: 1px dashed #EBEEF5
}
&:hover {
}
>>> .el-form-item__label {
padding-right: 8%;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
>>> .el-form-item__content {
font-size: 13px;
}
>>> .el-tag--mini {
margin-right: 3px;
::v-deep .el-form-item__label:last-child {
border: 1px dashed #EBEEF5;
}
}
.item-value span {
word-break: break-word;
::v-deep .el-form-item__label {
padding-right: 8%;
overflow: hidden;
color: var(--color-icon-primary);
span {
display: inline-block;
line-height: 1.5;
}
}
.content {
::v-deep .el-form-item__content {
color: var(--color-text-primary);
font-size: 13px;
line-height: 2.5;
line-height: 40px;
}
::v-deep .el-tag--mini {
margin-right: 3px;
}
}
.item-value span {
word-break: break-word;
}
.content {
font-size: 13px;
line-height: 2.5;
}
</style>

View File

@@ -0,0 +1,32 @@
<template>
<div>
<ILabel
v-for="item in value"
:key="item.key"
:label="item"
/>
</div>
</template>
<script>
import ILabel from '@/components/Widgets/ILabel/index.vue'
export default {
name: 'LabelsDetailFormatter',
components: { ILabel },
props: {
label: {
type: String,
default: ''
},
value: {
type: Array,
default: () => []
}
}
}
</script>
<style scoped>
</style>

View File

@@ -1,23 +1,29 @@
<template>
<IBox :title="title" :type="type" v-bind="$attrs">
<IBox :title="title" :type="type" class="the-box" v-bind="$attrs">
<table class="CardTable" style="width: 100%;table-layout:fixed;">
<tr>
<td colspan="2">
<Select2 ref="select2" v-model="select2.value" :disabled="iDisabled" v-bind="select2" />
<Select2 ref="select2" v-model="select2.value" :disabled="iDisabled" show-select-all v-bind="select2" />
</td>
</tr>
<slot />
<tr>
<td colspan="2">
<el-button :disabled="iDisabled" :loading="submitLoading" :type="type" size="small" @click="addObjects">
{{ $t('common.Add') }}
{{ $t('Add') }}
</el-button>
</td>
</tr>
<template v-if="showHasObjects">
<tr v-for="obj of iHasObjects" :key="obj.value" class="item">
<td style="width: 100%;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">
<el-tooltip :content="obj.label" effect="dark" placement="left" style="margin: 4px;">
<el-tooltip
:content="obj.label.toString()"
:open-delay="500"
effect="dark"
placement="left"
style="margin: 4px;"
>
<b>{{ obj.label }}</b>
</el-tooltip>
</td>
@@ -32,7 +38,7 @@
<td colspan="2">
<el-button :disabled="iDisabled" :type="type" size="small" style="width: 100%" @click="loadMore">
<i class="fa fa-arrow-down" />
{{ $t('common.More') }}
{{ $t('More') }}
</el-button>
</td>
</tr>
@@ -41,9 +47,9 @@
</template>
<script>
import Select2 from '@/components/Form/FormFields/Select2.vue'
import IBox from '../../IBox/index.vue'
import { createSourceIdCache } from '@/api/common'
import { Select2 } from '@/components/Form/FormFields'
import IBox from '@/components/IBox/index.vue'
import { mapGetters } from 'vuex'
export default {
@@ -101,25 +107,33 @@ export default {
},
performDelete: {
type: Function,
default: (obj, that) => {}
default: (obj, that) => {
}
},
allowCreate: {
type: Boolean,
default: false
},
select2Config: {
type: Object,
default: () => {
}
},
onDeleteSuccess: {
type: Function,
default(obj, that) {
// 从hasObjects中移除这个object
// 从 hasObjects 中移除这个object
const theRemoveIndex = that.iHasObjects.findIndex((v) => v.value === obj.value)
that.iHasObjects.splice(theRemoveIndex, 1)
// 从disabled values中移除这个value
// 从 disabled values 中移除这个 value
while (that.select2.disabledValues.indexOf(obj.value) !== -1) {
const i = that.select2.disabledValues.indexOf(obj.value)
this.$log.debug('disabled values remove index: ', i)
that.$log.debug('disabled values remove index: ', i)
that.select2.disabledValues.splice(i, 1)
}
that.$message.success(that.$t('common.RemoveSuccessMsg'))
that.$message.success(that.$t('RemoveSuccessMsg'))
}
},
onDeleteFail: {
@@ -140,15 +154,23 @@ export default {
},
performAdd: {
type: Function,
default: (objects, that) => {}
default: (objects, that) => {
}
},
showAddAll: {
type: Boolean,
default: false
},
onAddSuccess: {
type: Function,
default(objects, that) {
that.$log.debug('Select value', that.select2.value)
that.iHasObjects = [...that.iHasObjects, ...objects]
const oldValues = that.iHasObjects.map(item => item.value)
that.iHasObjects = [...that.iHasObjects, ...objects.filter(item => !oldValues.includes(item.value))]
that.$refs.select2.clearSelected()
that.$message.success(that.$t('common.AddSuccessMsg'))
that.$message.success(that.$t('AddSuccessMsg'))
this.$refs.select2.refresh()
this.$emit('addSuccess')
}
},
getHasObjects: {
@@ -161,6 +183,7 @@ export default {
iHasObjects: this.hasObjects || [],
totalHasObjectsLength: 0,
submitLoading: false,
selectAllDisabled: false,
params: {
page: 1,
hasMore: false,
@@ -172,7 +195,8 @@ export default {
value: this.value,
disabled: this.disabled,
disabledValues: [],
allowCreate: this.allowCreate
allowCreate: this.allowCreate,
...this.select2Config
}
}
},
@@ -253,11 +277,13 @@ export default {
}
})
data = this.iAjax.processResults.bind(this)(data)
data.results && data.results.forEach((v) => {
if (!this.hasObjects.find((item) => item.value === v.value)) {
this.iHasObjects.push(v)
}
})
if (data.results) {
data.results.forEach((v) => {
if (!this.iHasObjects.find((item) => item.value === v.value)) {
this.iHasObjects.push(v)
}
})
}
// 如果还有其它页,继续获取, 如果没有就停止
this.params.hasMore = !!data.pagination
this.totalHasObjectsLength = data.total
@@ -267,6 +293,7 @@ export default {
return
}
this.select2.disabledValues = this.hasObjectsId
if (this.getHasObjects) {
this.getHasObjects(this.hasObjectsId).then((data) => {
this.iHasObjects = data
@@ -278,9 +305,9 @@ export default {
}
},
removeObject(obj) {
this.performDelete(obj, this).then(
() => this.onDeleteSuccess(obj, this)
).catch(error => {
this.performDelete(obj, this).then(() => {
this.onDeleteSuccess(obj, this)
}).catch(error => {
this.onDeleteFail(error, this)
})
},
@@ -290,29 +317,43 @@ export default {
return
}
this.performAdd(objects, this).then(
() => this.onAddSuccess(objects, this)
() => {
this.onAddSuccess(objects, this)
}
)
},
async selectAll() {
this.selectAllDisabled = true
this.disabled = true
await this.$refs.select2.selectAll()
this.selectAllDisabled = false
this.disabled = false
}
}
}
</script>
<style scoped>
b, strong {
font-weight: 700;
font-size: 13px;
}
<style lang='scss' scoped>
b, strong {
font-weight: 700;
font-size: 13px;
}
tr td {
line-height: 1.42857;
padding: 8px;
vertical-align: top;
}
tr td {
line-height: 1.42857;
padding: 8px;
vertical-align: top;
}
tr.item td {
border-top: 1px solid #e7eaec;
}
.box-margin {
margin-bottom: 20px;
}
tr.item td {
border-top: 1px solid #e7eaec;
}
.box-margin {
margin-bottom: 20px;
}
.the-box ::v-deep .el-card__body {
padding: 20px;
}
</style>

View File

@@ -46,7 +46,7 @@ export default {
font-weight: 600;
}
.right-side >>> .el-tag {
.right-side ::v-deep .el-tag {
font-weight: 600;
padding: 3px 8px;
text-shadow: none;
@@ -67,6 +67,7 @@ export default {
border-style: solid solid none;
border-width: 1px 0;
}
.no-margins {
margin: 0 !important;
}

View File

@@ -6,12 +6,18 @@
v-show="action.dropdown.length > 0"
:key="action.name"
class="action-item"
trigger="click"
placement="bottom-start"
trigger="click"
@command="handleDropdownCallback"
>
<el-button class="more-action" :size="size" v-bind="cleanButtonAction(action)">
{{ action.title }}<i class="el-icon-arrow-down el-icon--right" />
<el-button :size="size" class="more-action" v-bind="cleanButtonAction(action)">
<span v-if="action.icon && !action.icon.startsWith('el-')" class="pre-icon">
<i v-if="action.icon.startsWith('fa')" :class="'fa fa-fw ' + action.icon" />
<svg-icon v-else :icon-class="action.icon" />
</span>
<span v-if="action.title">
{{ action.title }}<i class="el-icon-arrow-down el-icon--right" />
</span>
</el-button>
<el-dropdown-menu slot="dropdown" style="overflow: auto;max-height: 60vh">
<template v-for="option in action.dropdown">
@@ -23,17 +29,21 @@
>
{{ option.group }}
</div>
<el-dropdown-item
:key="option.name"
:command="[option, action]"
v-bind="option"
>
<span v-if="option.fa">
<i v-if="option.fa.startsWith('fa-')" :class="'fa ' + option.fa" />
<svg-icon v-else :icon-class="option.fa" style="font-size: 14px; margin-right: 2px; margin-left: -2px;" />
</span>
{{ option.title }}
</el-dropdown-item>
<el-tooltip :key="option.name" :content="option.tip" :disabled="!option.tip" :open-delay="500" placement="top">
<el-dropdown-item
:key="option.name"
:command="[option, action]"
:title="option.tip"
class="dropdown-item"
v-bind="{...option, icon: ''}"
>
<span v-if="option.icon" class="pre-icon">
<i v-if="option.icon.startsWith('fa')" :class="'fa fa-fw ' + option.icon" />
<svg-icon v-else :icon-class="option.icon" />
</span>
{{ option.title }}
</el-dropdown-item>
</el-tooltip>
</template>
</el-dropdown-menu>
</el-dropdown>
@@ -42,15 +52,15 @@
v-else
:key="action.name"
:size="size"
v-bind="cleanButtonAction(action)"
class="action-item"
v-bind="{...cleanButtonAction(action), icon: action.icon && action.icon.startsWith('el-') ? action.icon : ''}"
@click="handleClick(action)"
>
<el-tooltip :disabled="!action.tip" :content="action.tip" placement="top">
<el-tooltip :content="action.tip" :disabled="!action.tip" :open-delay="500" placement="top">
<span>
<span v-if="action.fa" style="vertical-align: initial;">
<i v-if="action.fa.startsWith('fa-')" :class="'fa ' + action.fa" />
<svg-icon v-else :icon-class="action.fa" style="font-size: 14px;" />
<span v-if="action.icon && !action.icon.startsWith('el-')" style="vertical-align: initial">
<i v-if="action.icon.startsWith('fa')" :class="'fa ' + action.icon" />
<svg-icon v-else :icon-class="action.icon" />
</span>
{{ action.title }}
</span>
@@ -61,6 +71,7 @@
</template>
<script>
import { toSentenceCase } from '@/utils/common'
export default {
name: 'DataActions',
@@ -88,8 +99,21 @@ export default {
}
},
methods: {
hasIcon(action, type = '') {
const icon = action.icon
if (!icon) {
return false
}
if (type) {
return icon.startsWith(type)
}
return true
},
handleDropdownCallback(command) {
const [option, dropdown] = command
if (option.disabled) {
return
}
const defaultCallback = () => this.$log.debug('No callback found: ', option, dropdown)
let callback = option.callback
if (!callback) {
@@ -100,7 +124,13 @@ export default {
}
return callback(option)
},
toSentenceCase(s) {
return toSentenceCase(s)
},
handleClick(action) {
if (action.disabled) {
return
}
if (action && action.callback) {
action.callback(action)
} else {
@@ -135,7 +165,7 @@ export default {
if (!v) {
continue
}
const action = Object.assign({}, v)
const action = { ...v }
// 是否拥有这个action
const has = this.checkItem(action, 'has')
delete action['has']
@@ -147,10 +177,15 @@ export default {
// 是否是disabled
const can = this.checkItem(action, 'can')
action.disabled = !can
if (typeof can === 'string') {
action.disabled = true
action.tip = can
} else {
action.disabled = !can
}
delete action['can']
if (action.dropdown) {
// const dropdown = this.cleanActions(action.dropdown)
action.dropdown = this.cleanActions(action.dropdown)
}
cleanedActions.push(action)
@@ -162,49 +197,157 @@ export default {
</script>
<style lang="scss" scoped>
$btn-text-color: #ffffff;
$color-btn-background: #E8F7F4;
$color-btn-focus-background: #83CBBA;
$color-divided: #E4E7ED;
$color-drop-menu-title: #909399;
$color-drop-menu-border: #e4e7ed;
// 通用
.layout {
display: flex;
justify-content: center;
}
.action-item {
margin-left: 5px;
.dropdown-menu-title {
text-align: left;
font-size: 12px;
color: #909399;
line-height: 30px;
padding-left: 10px;
padding-top: 10px;
border-top: solid 1px #e4e7ed;
}
.dropdown-menu-title:first-child {
padding-top: 0;
border-top: none;
}
.el-button-ungroup .action-item {
margin-left: 4px;
}
.el-button-ungroup .action-item:first-child {
margin-left: 0;
}
::v-deep .more-batch-processing {
&.el-dropdown-menu__item--divided {
margin-top: 0;
border-top: none;
color: #909399;
cursor: auto;
font-size: 12px;
line-height: 30px;
border-bottom: 1px solid #E4E7ED;
&:before {
height: 0;
&:first-child {
margin-left: 0;
}
}
&.el-dropdown-menu__item:not(.is-disabled):hover {
color: #909399;
background-color: #FFFFFF;
.el-button.el-button--default {
color: var(--color-text-primary) !important;
}
}
// 主要是左侧 LeftSide
.layout.header-action {
.action-item.el-dropdown {
font-size: 11px;
.more-action.el-button--default {
::v-deep .el-icon-arrow-down.el-icon--right {
color: var(--color-icon-primary) !important;
}
}
.el-button--primary {
::v-deep .el-icon-arrow-down.el-icon--right {
color: #ffffff !important;
}
&.el-dropdown-selfdefine {
border: none;
}
}
}
}
// 主要是 Table 中的操作列
.layout.table-actions {
display: flex;
justify-content: center;
align-items: flex-end;
.el-button {
display: flex;
align-items: center;
padding: 2px 6px;
color: $btn-text-color;
* {
vertical-align: baseline !important;
}
}
::v-deep .action-item.el-dropdown .el-button {
display: block;
color: var(--color-primary);
background-color: $color-btn-background;
border-color: $color-btn-focus-background;
&:focus {
color: $btn-text-color;
background-color: $color-btn-focus-background !important;
}
&:hover {
color: $btn-text-color;
background-color: $color-btn-focus-background;
}
}
}
// 下拉 options
.el-dropdown-menu {
::v-deep .more-batch-processing {
text-align: center;
&:hover {
background-color: transparent !important;
}
&.el-dropdown-menu__item--divided {
margin-top: 0;
border-top: none;
color: var(--color-text-primary);
cursor: auto;
font-size: 12px;
line-height: 30px;
border-bottom: 1px solid $color-divided;
&:before {
height: 0;
}
}
}
.dropdown-item {
color: var(--color-text-primary);
.pre-icon {
width: 17px;
display: inline-block;
}
::v-deep i.fa {
font-size: 13px;
height: 13px;
width: 13px;
margin-right: 0;
}
::v-deep .svg-icon {
font-size: 13px;
height: 13px;
width: 13px;
}
}
.el-dropdown-menu__item {
&.is-disabled {
color: var(--color-disabled);
cursor: not-allowed;
pointer-events: auto;
}
&:not(.is-disabled):hover {
background-color: var(--color-disabled-background);
}
}
.dropdown-menu-title {
text-align: left;
font-size: 12px;
color: $color-drop-menu-title;
line-height: 30px;
padding-left: 10px;
padding-top: 10px;
border-top: solid 1px $color-drop-menu-border;
&:first-child {
padding-top: 0;
border-top: none;
}
}
}
</style>

View File

@@ -8,7 +8,7 @@
>
<div>
<div v-if="isEmpty()" style="text-align: center">
{{ this.$tc('common.NoContent') }}
{{ this.$tc('NoContent') }}
</div>
<div v-else>
<el-table
@@ -16,18 +16,18 @@
class="diffTable"
>
<el-table-column
:label="$tc('audits.ChangeField')"
:label="$tc('ChangeField')"
:prop="fieldName"
show-overflow-tooltip
width="100"
width="150"
/>
<el-table-column
:label="$tc('audits.BeforeChange')"
:label="$tc('BeforeChange')"
:prop="leftKeyName"
show-overflow-tooltip
/>
<el-table-column
:label="$tc('audits.AfterChange')"
:label="$tc('AfterChange')"
:prop="rightKeyName"
show-overflow-tooltip
/>
@@ -98,7 +98,7 @@ export default {
width: 100%;
max-height: 80vh;
& >>> td {
& ::v-deep td {
padding: 5px 0 !important;
}
}

View File

@@ -1,24 +1,32 @@
<template>
<el-dialog
:append-to-body="true"
:modal-append-to-body="true"
:title="title"
:top="top"
:width="iWidth"
class="dialog"
v-bind="$attrs"
v-on="$listeners"
>
<slot />
<div slot="footer" class="dialog-footer">
<slot name="footer">
<el-button v-if="showCancel && showButtons" @click="onCancel">{{ cancelTitle }}</el-button>
<el-button v-if="showConfirm && showButtons" :loading="loadingStatus" type="primary" @click="onConfirm">
{{ confirmTitle }}
</el-button>
</slot>
</div>
</el-dialog>
<transition name="dialog-fade">
<el-dialog
:append-to-body="true"
:modal-append-to-body="true"
:title="title"
:top="top"
:width="iWidth"
class="dialog"
v-bind="$attrs"
v-on="$listeners"
>
<slot />
<div v-if="showButtons" slot="footer" class="dialog-footer">
<slot name="footer">
<el-button v-if="showCancel && showButtons" size="small" @click="onCancel">{{ cancelTitle }}</el-button>
<el-button
v-if="showConfirm && showButtons"
:loading="loadingStatus"
size="small"
type="primary"
@click="onConfirm"
>
{{ confirmTitle }}
</el-button>
</slot>
</div>
</el-dialog>
</transition>
</template>
<script>
@@ -44,7 +52,7 @@ export default {
confirmTitle: {
type: String,
default() {
return this.$t('common.Confirm')
return this.$t('Confirm')
}
},
showCancel: {
@@ -54,7 +62,7 @@ export default {
cancelTitle: {
type: String,
default() {
return this.$t('common.Cancel')
return this.$t('Cancel')
}
},
showButtons: {
@@ -90,10 +98,14 @@ export default {
</script>
<style lang="scss" scoped>
.dialog >>> .el-dialog {
.dialog ::v-deep .el-dialog {
border-radius: 0.3em;
max-width: min(100vw, 1500px);
.form-group-header {
margin-left: 20px;
}
.el-icon-circle-check {
display: none;
}
@@ -115,18 +127,29 @@ export default {
&__footer {
border-top: 1px solid #dee2e6;
padding: 16px;
padding: 16px 25px;
justify-content: flex-end;
}
}
@media (max-width: 900px) {
.dialog >>> .el-dialog {
.dialog ::v-deep .el-dialog {
max-width: calc(100% - 30px);
}
}
.dialog-footer >>> button.el-button {
.dialog-footer ::v-deep button.el-button {
font-size: 13px;
padding: 10px 20px;
padding: 8px 12px;
}
.dialog-fade-enter-active, .dialog-fade-leave-active {
transition: opacity 1s ease;
}
.dialog-fade-enter, .dialog-fade-leave-to /* .dialog-fade-leave-active 在 <2.1.8 中以及被重复声明 */
{
opacity: 0;
}
</style>

View File

@@ -3,12 +3,13 @@
v-if="!loading"
:disabled="disabled"
:fields="iFields"
:form="value"
style="margin-left: -26%;margin-right: -6%"
:form="iValue"
class="sub-form"
v-bind="kwargs"
@change="updateValue($event)"
@input="updateValue($event)"
v-on="$listeners"
@submit.native.prevent
/>
</template>
@@ -42,6 +43,7 @@ export default {
return {
loading: false,
formJson: JSON.stringify(this.value),
iValue: this.value,
kwargs: {
hasReset: false,
hasSaveContinue: false,
@@ -71,15 +73,22 @@ export default {
}
},
watch: {
iValue: {
handler(val) {
this.formJson = JSON.stringify(val)
},
deep: true
},
value: {
handler(val) {
const valJson = JSON.stringify(val)
// 如果不想等,证明是 value 自己变化导致的, 需要重新渲染
if (valJson !== this.formJson) {
this.iValue = val
this.loading = true
setTimeout(() => {
this.loading = false
}, 10)
}, 100)
}
},
deep: true
@@ -87,8 +96,10 @@ export default {
},
methods: {
updateValue(val) {
this.formJson = JSON.stringify(val)
this.$emit('input', val)
this.iValue = val
setTimeout(() => {
this.$emit('input', val)
}, 100)
},
objectToString(obj) {
let data = ''
@@ -105,6 +116,16 @@ export default {
}
</script>
<style scoped>
<style lang="scss" scoped>
.sub-form {
margin-left: -33%;
margin-right: 10px;
}
@media screen and (max-width: 992px) {
.sub-form {
margin-left: 0;
margin-right: 10px;
}
}
</style>

View File

@@ -103,7 +103,7 @@ export default {
this.loading = false
},
generateColumns() {
const generator = new FormFieldGenerator(this.$emit)
const generator = new FormFieldGenerator()
this.totalFields = generator.generateFields(this.fields, this.fieldsMeta, this.remoteMeta)
this.groups = generator.groups
this.$log.debug('Total fields: ', this.totalFields)
@@ -144,9 +144,9 @@ export default {
if (field.attrs.error === error) {
error += '.'
}
if (field.type === 'nestedField') {
if (typeof error === 'string') {
field.el.errors = error
} else {
field.attrs.error = error
}
},
@@ -165,7 +165,3 @@ export default {
}
}
</script>
<style scoped>
</style>

View File

@@ -5,13 +5,13 @@ import Switcher from '@/components/Form/FormFields/Switcher.vue'
import rules from '@/components/Form/DataForm/rules'
import BasicTree from '@/components/Form/FormFields/BasicTree.vue'
import JsonEditor from '@/components/Form/FormFields/JsonEditor.vue'
import { assignIfNot } from '@/utils/common'
import { assignIfNot, toSentenceCase } from '@/utils/common'
import TagInput from '@/components/Form/FormFields/TagInput.vue'
import TransferSelect from '@/components/Form/FormFields/TransferSelect.vue'
import i18n from '@/i18n/i18n'
export class FormFieldGenerator {
constructor(emit) {
this.$emite = emit
constructor() {
this.groups = []
}
@@ -103,6 +103,7 @@ export class FormFieldGenerator {
field.el.filterable = true
}
}
field.type = type
return field
}
@@ -158,12 +159,68 @@ export class FormFieldGenerator {
return field
}
setHelpText(field, remoteFieldMeta) {
let helpText = toSentenceCase(remoteFieldMeta['help_text'])
if (!helpText) {
return field
}
let helpTextAsTip = field.helpTextAsTip
if (helpTextAsTip === undefined && !helpText.startsWith('*')) {
helpTextAsTip = true
} else {
helpText = helpText.replace(/^\*/, '')
}
let helpTextAsPlaceholder = field.helpTextAsPlaceholder
const helpTextWordLength = helpText.split(' ').length
const placeholderType = ['input', 'select', 'm2m_related_field']
const placeholderComponent = [ObjectSelect2]
const systemLang = document.cookie.django_language
if (helpTextAsPlaceholder !== undefined) {
helpTextAsPlaceholder = !!helpTextAsPlaceholder
} else if (placeholderType.indexOf(field.type) === -1 && placeholderComponent.indexOf(field.component) === -1) {
helpTextAsPlaceholder = false
} else if ((helpTextWordLength <= 5 || helpText.length <= 10) && systemLang === 'en') {
helpTextAsPlaceholder = true
}
if (helpTextAsPlaceholder) {
field.placeholder = field.placeholder || helpText
} else if (helpTextAsTip) {
field.helpTip = field.helpTip || helpText
} else {
field.helpText = field.helpText || helpText
}
return field
}
afterGenerateField(field) {
field.label = toSentenceCase(field.label)
if (field.placeholder) {
field.el.placeholder = field.placeholder
}
// 设置 checkbox 的 tips
if (field.tips && ['checkbox-group', 'radio-group'].indexOf(field.type) !== -1) {
field.options.map(option => {
if (!option.tip && field.tips[option.value]) {
option.tip = field.tips[option.value]
}
})
}
return field
}
generateField(name, fieldsMeta, remoteFieldsMeta) {
let field = { id: name, prop: name, el: {}, attrs: {}, rules: [] }
const remoteFieldMeta = remoteFieldsMeta[name] || {}
const fieldMeta = fieldsMeta[name] || {}
field.label = remoteFieldMeta.label
field.helpText = remoteFieldMeta['help_text']
field = this.generateFieldByType(remoteFieldMeta.type, field, fieldMeta, remoteFieldMeta)
field = this.generateFieldByName(name, field)
field = this.generateFieldByOther(field, fieldMeta, remoteFieldMeta)
@@ -172,8 +229,27 @@ export class FormFieldGenerator {
field = Object.assign(field, fieldMeta)
field.el = el
field.rules = rules
field = this.setHelpText(field, remoteFieldMeta)
field = this.setPlaceholder(field, remoteFieldMeta)
field = this.afterGenerateField(field)
_.set(field, 'attrs.error', '')
// Vue.$log.debug('Generate field: ', name, field)
Vue.$log.debug('Generate field: ', name, field)
return field
}
setPlaceholder(field, remoteFieldMeta) {
const label = field.label
if (!label) {
return field
}
if (field.placeholder || field.el.placeholder) {
return field
}
if (field.type === 'select' || [ObjectSelect2].indexOf(field.component) > -1) {
field.el.placeholder = i18n.t('PleaseSelect') + label.toLowerCase()
} else if (field.type === 'input') {
field.el.placeholder = field.label
}
return field
}

View File

@@ -1,8 +1,8 @@
/* eslint-disable */
<template>
<div>
<el-tabs type="border-card">
<el-tab-pane v-if="shouldHide('min')" :label="$tc('common.CronTab.min')" class="crontab-panel">
<el-tabs class="tab-content">
<el-tab-pane v-if="shouldHide('min')" :label="$tc('Min')" class="crontab-panel">
<CrontabMin
ref="cronmin"
:check="checkNumber"
@@ -11,7 +11,7 @@
/>
</el-tab-pane>
<el-tab-pane v-if="shouldHide('hour')" :label="$tc('common.CronTab.hour')">
<el-tab-pane v-if="shouldHide('hour')" :label="$tc('Hour')">
<CrontabHour
ref="cronhour"
:check="checkNumber"
@@ -20,7 +20,7 @@
/>
</el-tab-pane>
<el-tab-pane v-if="shouldHide('day')" :label="$tc('common.CronTab.day')">
<el-tab-pane v-if="shouldHide('day')" :label="$tc('Day')">
<CrontabDay
ref="cronday"
:check="checkNumber"
@@ -29,7 +29,7 @@
/>
</el-tab-pane>
<el-tab-pane v-if="shouldHide('month')" :label="$tc('common.CronTab.month')">
<el-tab-pane v-if="shouldHide('month')" :label="$tc('Month')">
<CrontabMonth
ref="cronmonth"
:check="checkNumber"
@@ -38,7 +38,7 @@
/>
</el-tab-pane>
<el-tab-pane v-if="shouldHide('week')" :label="$tc('common.CronTab.week')">
<el-tab-pane v-if="shouldHide('week')" :label="$tc('Week')">
<CrontabWeek
ref="cronweek"
:check="checkNumber"
@@ -50,7 +50,7 @@
<div class="popup-main">
<div class="popup-result">
<p class="title">{{ this.$t('common.CronTab.timeExpression') }}</p>
<p class="title">{{ this.$t('TimeExpression') }}</p>
<table>
<thead>
<th v-for="item of tabTitles" :key="item" width="40">{{ item }}</th>
@@ -95,26 +95,22 @@
</td>
</tbody>
</table>
<div style="margin: 0 auto; text-align: center">
<div style="font-size: 13px;">{{ this.$t('common.CronTab.cronExpression') }}</div>
<div style="font-size: 13px;">{{ contabValueString }}</div>
</div>
<CrontabResult :ex="contabValueString" @crontabDiffChange="crontabDiffChangeHandle" />
</div>
<CrontabResult :ex="contabValueString" @crontabDiffChange="crontabDiffChangeHandle" />
<div class="pop_btn">
<el-button
size="small"
@click="clearCron"
>
{{ this.$t('common.Reset') }}
{{ this.$t('Reset') }}
</el-button>
<el-button
size="small"
type="primary"
@click="submitFill"
>
{{ this.$t('common.Confirm') }}
{{ this.$t('Confirm') }}
</el-button>
</div>
</div>
@@ -155,7 +151,7 @@ export default {
},
data() {
return {
tabTitles: [this.$t('common.CronTab.min'), this.$t('common.CronTab.hour'), this.$t('common.CronTab.day'), this.$t('common.CronTab.month'), this.$t('common.CronTab.week')],
tabTitles: [this.$t('Min'), this.$t('Hour'), this.$t('Day'), this.$t('Month'), this.$t('Week')],
tabActive: 0,
myindex: 0,
contabValueObj: {
@@ -367,7 +363,7 @@ export default {
submitFill() {
const crontabDiffMin = this.crontabDiff / 1000 / 60
if (crontabDiffMin > 0 && crontabDiffMin < 10) {
const msg = this.$tc('common.crontabDiffError')
const msg = this.$tc('CrontabDiffError')
this.$message.error(msg)
return
}
@@ -398,7 +394,7 @@ export default {
<style lang='scss' scoped>
.pop_btn {
float: right;
margin-top: 20px;
margin-top: 10px;
}
.popup-main {
@@ -424,7 +420,6 @@ export default {
margin: 17px auto;
padding: 10px 10px 10px;
border: 1px solid #dcdfe6;
box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%);
}
.popup-result .title {
@@ -448,12 +443,10 @@ export default {
.popup-result table span {
display: block;
width: 100%;
font-family: arial;
line-height: 30px;
height: 30px;
white-space: nowrap;
overflow: hidden;
border: 1px solid #e8e8e8;
}
.popup-result-scroll {
@@ -463,14 +456,70 @@ export default {
overflow-y: auto;
}
.crontab-panel {
> > > .el-input-number {
::v-deep {
.el-form-item--mini.el-form-item,
.el-form-item--small.el-form-item {
margin-bottom: 5px;
}
.el-input-number {
margin: 0 5px
}
}
.el-form-item--mini.el-form-item,
.el-form-item--small.el-form-item {
margin-bottom: 10px;
.tab-content {
position: relative;
box-sizing: border-box;
line-height: 24px;
margin: 0 auto;
padding: 10px 10px 10px;
border: 1px solid #dcdfe6;
}
::v-deep .el-tabs__header {
background-color: white;
margin-top: -10px;
padding: 0 30px;
margin-bottom: 5px;
.el-tabs__item {
i.pre-icon {
opacity: 0.6;
}
}
.el-tabs__nav-next {
right: 10px;
}
.el-tabs__nav-prev {
left: 10px;
}
}
.tab-page {
::v-deep .page-heading {
border-bottom: none;
}
::v-deep .page-content {
overflow-y: hidden;
padding: 0;
}
.tab-page-content {
padding: 10px 30px 22px;
overflow-y: auto;
height: calc(100% - 50px);
.el-alert {
margin-top: 0;
margin-bottom: 5px;
}
}
}
::v-deep .el-tabs__nav-wrap {
position: static;
}
</style>

View File

@@ -3,31 +3,31 @@
<el-form size="small">
<el-form-item>
<el-radio v-model="radioValue" :label="1">
{{ this.$t('common.CronTab.day') }}{{ this.$t('common.CronTab.wildcardsAllowed') }}[, - * /]
{{ this.$t('Day') }}{{ this.$t('WildcardsAllowed') }}[, - * /]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model="radioValue" :label="3">
{{ this.$t('common.CronTab.from') }}
{{ this.$t('From') }}
<el-input-number v-model="cycle01" :max="31" :min="0" size="mini" /> -
<el-input-number v-model="cycle02" :max="31" :min="0" size="mini" /> {{ this.$t('common.CronTab.day') }}
<el-input-number v-model="cycle02" :max="31" :min="0" size="mini" /> {{ this.$t('Day') }}
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model="radioValue" :label="4">
{{ this.$t('common.CronTab.every') }}
<el-input-number v-model="average02" :max="31" :min="1" size="mini" /> {{ this.$t('common.CronTab.day') }}{{ this.$t('common.CronTab.executeOnce') }}
{{ this.$t('Every') }}
<el-input-number v-model="average02" :max="31" :min="1" size="mini" /> {{ this.$t('Day') }} {{ this.$t('ExecuteOnce') }}
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model="radioValue" :label="7">
{{ this.$t('common.CronTab.appoint') }}
{{ this.$t('Appoint') }}
<el-select
v-model="checkboxList"
:placeholder="$tc('common.CronTab.manyChoose')"
:placeholder="$tc('ManyChoose')"
clearable
multiple
style="width:100%"
@@ -190,7 +190,5 @@ export default {
</script>
<style scoped>
.el-form-item--small.el-form-item {
margin-bottom: 10px;
}
</style>

View File

@@ -3,31 +3,31 @@
<el-form size="small">
<el-form-item>
<el-radio v-model="radioValue" :label="1">
{{ this.$t('common.CronTab.hour') }}{{ this.$t('common.CronTab.wildcardsAllowed') }}[, - * /]
{{ this.$t('Hour') }}{{ this.$t('WildcardsAllowed') }}[, - * /]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model="radioValue" :label="2">
{{ this.$t('common.CronTab.from') }}
{{ this.$t('From') }}
<el-input-number v-model="cycle01" :max="60" :min="0" size="mini" /> -
<el-input-number v-model="cycle02" :max="60" :min="0" size="mini" /> {{ this.$t('common.CronTab.hour') }}
<el-input-number v-model="cycle02" :max="60" :min="0" size="mini" /> {{ this.$t('Hour') }}
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model="radioValue" :label="3">
{{ this.$t('common.CronTab.every') }}
<el-input-number v-model="average02" :max="60" :min="1" size="mini" /> {{ this.$t('common.CronTab.hour') }}{{ this.$t('common.CronTab.executeOnce') }}
{{ this.$t('Every') }}
<el-input-number v-model="average02" :max="60" :min="1" size="mini" /> {{ this.$t('Hour') }} {{ this.$t('ExecuteOnce') }}
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model="radioValue" :label="4">
{{ this.$t('common.CronTab.appoint') }}
{{ this.$t('Appoint') }}
<el-select
v-model="checkboxList"
:placeholder="$tc('common.CronTab.manyChoose')"
:placeholder="$tc('ManyChoose')"
clearable
multiple
style="width:100%"
@@ -159,7 +159,5 @@ export default {
</script>
<style scoped>
.el-form-item--small.el-form-item {
margin-bottom: 10px
}
</style>

Some files were not shown because too many files have changed in this diff Show More