Compare commits

...

1178 Commits

Author SHA1 Message Date
zhaojisen
3db0ed756e fixed: Fixed the issue that parameter push parameters could not be saved 2024-07-17 10:51:15 +08:00
feng626
453c4b1e4e Merge pull request #4222 from jumpserver/pr@dev@download
perf: Downloading files does not trigger the beforeunload event
2024-07-16 12:35:32 +08:00
feng
bf4d8ce7a6 perf: Downloading files does not trigger the beforeunload event 2024-07-16 12:34:18 +08:00
wangruidong
34effdbe15 perf: 社区版移除magnus 2024-07-15 19:27:16 +08:00
zhaojisen
274db466f2 fixed:Fixed an issue where the user was unable to enter non-MD content 2024-07-15 19:09:05 +08:00
ZhaoJiSen
cbe697f9dc Merge pull request #4218 from jumpserver/pr@dev@fix_job_tooltip
fixed: Fixed the tooltip shortcut command interface issue
2024-07-15 18:31:28 +08:00
zhaojisen
fb7acb100e fixed: Fixed the tooltip shortcut command interface issue 2024-07-15 18:28:15 +08:00
feng626
ebb36847df Merge pull request #4213 from jumpserver/pr@dev@cloud_sync_install
perf: Cloud sync instance execution add trigger
2024-07-15 18:02:46 +08:00
feng
beba4f1994 perf: Cloud sync instance execution add trigger 2024-07-11 17:15:58 +08:00
ZhaoJiSen
452796e3f5 Merge pull request #4212 from jumpserver/pr@dev@fix_params_remain
fixed: Fixed an issue where push parameters could not be saved when adding an asset account
2024-07-11 15:34:42 +08:00
zhaojisen
02a7969d90 fixed: Fixed an issue where push parameters could not be saved when adding an asset account 2024-07-11 15:32:19 +08:00
zhaojisen
798dbec151 fixed :Event bus shutdown 2024-07-11 15:20:51 +08:00
ibuler
0e11a56e37 perf: table search two times, one init one search 2024-07-11 15:20:01 +08:00
ibuler
be5344344c perf: view cache 2024-07-11 15:18:41 +08:00
ibuler
e75d711e0a perf: nest field change may be lead blink 2024-07-11 15:17:07 +08:00
wangruidong
46ee116f3e fix: role display error when update user 2024-07-11 15:07:29 +08:00
ZhaoJiSen
f4b304338f Merge pull request #4207 from jumpserver/pr@dev@fix_switch_showTooltip
fixed: Fixed tooltip issue with switch button
2024-07-11 10:48:46 +08:00
zhaojisen
e93e78307c fixed: Fixed tooltip issue with switch button 2024-07-11 10:47:33 +08:00
wangruidong
d22079446f perf: profile improvement mfa disabled 2024-07-10 14:21:06 +08:00
ibuler
d57b99b00c perf: phone code api 2024-07-09 19:24:07 +08:00
ZhaoJiSen
e7321356af Merge pull request #4197 from jumpserver/pr@dev@fix_card_style
style: Fine-tuning styles
2024-07-09 18:58:39 +08:00
zhaojisen
a0edc2c527 style: Fine-tuning styles 2024-07-09 18:54:45 +08:00
ibuler
10ebcfd64d perf: tags display inline 2024-07-09 16:08:55 +08:00
ibuler
a3fedb9697 perf: license display for community edition 2024-07-09 16:03:18 +08:00
吴小白
1eb8a18c66 fix: FromAsCasing keywords 2024-07-09 16:02:18 +08:00
wangruidong
f491c57c34 perf: display newly invited users at the top of the list 2024-07-09 15:54:31 +08:00
ZhaoJiSen
50b7f54652 Merge pull request #4193 from jumpserver/pr@dev@fix_menu_heighlight
fixed: Missing menu highlight in command group detail page
2024-07-09 11:12:00 +08:00
zhaojisen
5bf298a5bf fixed: Missing menu highlight in command group detail page 2024-07-09 11:07:01 +08:00
wangruidong
124ff9a8c2 fix: foot content allow blank 2024-07-08 19:24:34 +08:00
ZhaoJiSen
387ab4f1b3 Merge pull request #4186 from jumpserver/pr@dev@fix_item_empty
fixed: Fixed an issue where the field is empty
2024-07-08 18:55:00 +08:00
zhaojisen
d6fbdfa7ea fixed: Fixed an issue where the field is empty 2024-07-08 18:51:10 +08:00
feng626
cd4260fd8d Merge pull request #4184 from jumpserver/pr@dev@translate
perf: Translate
2024-07-05 16:37:29 +08:00
feng
baeece62d3 perf: Translate 2024-07-05 16:36:24 +08:00
wangruidong
576c8f5891 fix: update platform with update protocols 2024-07-05 15:07:10 +08:00
feng626
5e97600807 Merge pull request #4182 from jumpserver/pr@dev@translate
perf: Translate
2024-07-04 18:15:04 +08:00
feng
4e2eb3a37d perf: Translate 2024-07-04 18:13:49 +08:00
feng626
e92173f8e8 Merge pull request #4181 from jumpserver/pr@dev@applet
perf: Virtualapp and appprovider tab perm
2024-07-04 16:46:45 +08:00
feng
412d9c804e perf: Virtualapp and appprovider tab perm 2024-07-04 16:46:00 +08:00
ZhaoJiSen
b84a725d4a Merge pull request #4179 from jumpserver/pr@dev@fix_split_job
perf: split job management
2024-07-04 16:37:39 +08:00
feng626
58b39743e0 Merge pull request #4180 from jumpserver/pr@dev@apple
perf: Apple host detail perm
2024-07-04 16:33:39 +08:00
feng
7651443c25 perf: Apple host detail perm 2024-07-04 16:32:20 +08:00
zhaojisen
8d64e331d1 perf: split job management 2024-07-04 16:04:26 +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
Gerry.tan
5ccaa3b77d perf: 优化用户校验页面对密码进行加密传输 2024-06-24 10:38:00 +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
w940853815
27d3637330 Revert "fix: 待我审批列表页面默认过滤出还未审批的工单"
This reverts commit 91c44d0500.
2024-06-19 19:33:40 +08:00
feng
0b4b551d56 perf: Translate 2024-06-19 19:32:25 +08:00
wangruidong
9c8ceb04f0 perf: Disable editing labels for the root organization 2024-06-19 15:46:46 +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
wangruidong
ccd7b319c8 fix: 审计台仪表盘今日数据有问题 2024-06-18 17:59:18 +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
55637c7fa1 Merge pull request #4063 from jumpserver/pr@dev@account_template
fix: Account tempalte update secret failed
2024-06-18 14:54:14 +08:00
feng
4e95c88318 fix: Account tempalte update secret failed 2024-06-18 14:52:50 +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
wangruidong
1ff49ca16d perf: 系统设置-组织管理:最新创建成功后返回列表未按创建时间排序 2024-06-17 17:30:34 +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
wangruidong
91c44d0500 fix: 待我审批列表页面默认过滤出还未审批的工单 2024-06-13 16:15:35 +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
wangruidong
0b3a9844f7 fix: Crontab - Failed to set minute range 2024-06-13 10:40:22 +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
95b58f3c96 perf: Complete asset hardware information 2024-06-11 18:49:03 +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
wangruidong
128b9c79ba fix: 工单-待我审批默认筛选打开的工单 2024-06-11 17:46:09 +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
halo
4eda83f83d perf: 优化图标不对齐的问题 2024-06-07 15:55:20 +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
halo
4cd0071054 feat: 支持批量测试资产可连接性 2024-06-07 11:18:35 +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
67a2a9be6a If non-existent values are entered into the select component, won't trigger a search request. 2024-06-05 16:01:46 +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
f927a2a3cc perf: action 添加 token 2024-06-04 10:32:48 +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
Gerry.tan
ca40cb34da feat: 新增 dameng 图标 2024-05-31 11:11:06 +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
feng
d725e5497d perf: console dashboard api 2024-05-21 16:26:34 +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
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
56f6c17275 perf: 优先选择上个 org 切换 2024-05-16 13:53:47 +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
ibuler
e1bde89b29 fix: 修复切换到全局组织回不来的问题
perf: 修改组织切换
2024-05-15 19:14:58 +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
feng626
e9da168c9f Merge pull request #3930 from jumpserver/pr@dev@mfa
perf: User personal settings mfa new window opens
2024-05-15 16:41:15 +08:00
feng
c19ef24ec9 perf: User personal settings mfa new window opens 2024-05-15 16:40:17 +08:00
ibuler
2c7d662c22 perf: 修改 i18n 2024-05-15 16:14:23 +08:00
wangruidong
fb7c4a8b2a fix: 竖屏审批工单时,动作显示不出来 2024-05-15 15:33:03 +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
wangruidong
428ba49f9c perf: 根据type生成导出文件名 2024-05-11 10:02:53 +08:00
zhaojisen
98b222a9bf style: 移除表单中 table 的圆角样式 2024-05-10 19:08:32 +08:00
ibuler
7602d6e270 fix: 修复自动切换到 root org 回不来的问题 2024-05-10 19:07:46 +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
wangruidong
7b62ce2d33 fix: 批量传输下载结果文件名undefined 2024-05-07 14:42:06 +08:00
jiangweidong
6ed40c45b0 perf: 云同步支持同步完成后自动删除云端已经释放的资产 2024-05-07 14:40:29 +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
wangruidong
31238e0398 fix: 命令存储创建es后跳转路由不对 2024-04-28 10:24:44 +08:00
ibuler
42425dc61b perf: 修改全局菜单 2024-04-26 17:33:15 +08:00
wangruidong
676ac2bbf6 perf: 创建、更新用户时MFA选项根据系统设置选项进行动态渲染 2024-04-26 11:35:12 +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
Bai
d5415b84c9 feat: Support asset tree node drag to another one 2024-04-24 18:06:12 +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
Bai
5e91917ba4 perf: 优化 Web 资产详情时根据 autofill 类型返回对应的 spec_info 信息 2024-04-23 13:08:59 +08:00
zhaojisen
c4361b4c17 perf: 修复默认值相关内容,优化按钮禁用条件 2024-04-23 10:17:43 +08:00
Bai
70b5ec3683 fix: Fixed User first login long wait.(SYSTEM ORG) 2024-04-22 19:17:11 +08:00
Bai
c93a061852 fix: Linux Platform id is not 1, create gateway error 2024-04-22 15:54:56 +08:00
ibuler
8e06dde724 perf: 修改一些 table 宽度 2024-04-22 15:10:08 +08:00
feng626
4351d20a1e Merge pull request #3867 from jumpserver/pr@dev@asset
perf: 新建/更新资产时,新tab页面打开
2024-04-22 14:17:29 +08:00
feng
ce23d53e3c perf: 新建/更新资产时,新tab页面打开 2024-04-22 14:16:59 +08:00
wangruidong
32fc16126f perf: dashboard typo 2024-04-22 13:24:52 +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
wangruidong
b9a99148e3 perf: 修改用户详情页-资产授权规则默认字段展示 2024-04-18 15:47:42 +08:00
ibuler
2a4b99484b perf: 修改查看 account 密码,切换 route 查询多次 2024-04-18 13:39:45 +08:00
ibuler
bd26894135 perf: 优化查看 account secret api 次数 2024-04-18 13:29:20 +08:00
ibuler
981fe00c5f perf: 优化修改 table label 2024-04-18 13:14:56 +08:00
wangruidong
01e55d7f6e perf: 全局组织禁用资产的测试可连接性 2024-04-18 11:40:10 +08:00
wangruidong
d0a7201683 perf: 优化查看资产账号列表过长显示不全 2024-04-18 11:25:52 +08:00
feng626
e2dcc98ab3 Merge pull request #3856 from jumpserver/pr@dev@dashboard
perf: dashboard 数字保留小数后两位
2024-04-17 20:05:45 +08:00
feng
8dd4f89395 perf: dashboard 数字保留小数后两位 2024-04-17 20:04:53 +08:00
ibuler
373661d35a perf: 优化 labels 宽度 2024-04-17 20:01:42 +08:00
feng
33a997f3bb fix: 仪表盘计算不准确 2024-04-17 19:16:59 +08:00
ibuler
1be5f23204 perf: 修改 view hover 支持切换 2024-04-17 16:03:32 +08:00
wangruidong
1adee78456 perf: QuickJob asset tree css 2024-04-17 14:45:12 +08:00
ibuler
baf2b6cd9b perf: view secret request many times 2024-04-17 14:25:36 +08:00
ibuler
723123fa50 perf: 优化菜单展开 2024-04-17 14:10:35 +08:00
ibuler
7bf1c2056c perf: 优化菜单 2024-04-16 19:40:31 +08:00
jiangweidong
28e756e163 perf: 优化云同步测试账号再次打开后不显示上次选的地域信息 2024-04-16 17:44:17 +08:00
老广
251873a7e9 Merge pull request #3850 from jumpserver/pr@dev@perf_krry_page
perf: 优化 krry paging
2024-04-16 17:33:20 +08:00
wangruidong
ff9bd42322 perf: 适配手机端 2024-04-16 15:40:30 +08:00
ibuler
2c245020cd perf: 优化 krry paging
chrome: remove debug
2024-04-16 14:34:20 +08:00
wangruidong
429d2fec40 perf: asset tree css 2024-04-16 11:38:40 +08:00
feng626
c2f8fe45a1 Merge pull request #3848 from jumpserver/pr@dev@records
fix: 改密推送任务记录查看失败
2024-04-16 10:36:08 +08:00
feng
caa5e7df75 fix: 改密推送任务记录查看失败 2024-04-16 10:34:05 +08:00
ibuler
8a439dec8d fix: 修复先删除标签resource,再创建报错 2024-04-15 19:43:51 +08:00
ibuler
eabf5a117d perf: account template support labels 2024-04-15 19:43:31 +08:00
ibuler
74c0a562e9 perf: 修改翻译和 ztree 高度 2024-04-15 16:28:10 +08:00
wangruidong
c30672a014 fix: 会话详情中文件传输显示有误 2024-04-15 14:42:40 +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
wangruidong
5c5df32181 perf: 优化停止任务log输出 2024-04-12 11:29:41 +08:00
Bai
ce831df717 fix: I18n 2024-04-12 11:20:26 +08:00
feng626
04688930ad Merge pull request #3841 from jumpserver/pr@dev@change_secret
fix: 改密任务记录搜索失败
2024-04-12 11:03:01 +08:00
feng
ae5787ae52 fix: 改密任务记录搜索失败 2024-04-12 11:01:39 +08:00
wangruidong
1dfdfe3932 fix: xss处理后无class属性 2024-04-11 19:23:52 +08:00
ibuler
573cf454ce perf: 修改 chat ai 2024-04-11 18:45:08 +08:00
wangruidong
f409abbf79 perf: 修改按钮样式,添加网关label 2024-04-11 17:33:55 +08:00
ibuler
0d81b7839b perf: 修改一些布局 2024-04-11 14:56:00 +08:00
wangruidong
a6232da3d0 perf: 修改任务停止日志输出提示 2024-04-11 14:40:35 +08:00
feng626
2690538db6 Merge pull request #3837 from jumpserver/pr@dev@logo
fix: 点击logo前端页面卡住
2024-04-11 14:38:35 +08:00
feng
6d0af7a149 fix: 点击logo前端页面卡住 2024-04-11 14:32:05 +08:00
ibuler
5b00ab795d perf: 修改 ztree style 2024-04-11 13:47:22 +08:00
Bai
babc048eb0 fix: Session duration recurring 2024-04-11 11:01:36 +08:00
ibuler
86709e3604 perf: asset tree style 2024-04-10 18:58:12 +08:00
wangruidong
d49be903e8 perf: Domain detail add gateways 2024-04-10 16:46:47 +08:00
Bai
332058b0ea perf: Domain detail add asset 2024-04-10 16:46:47 +08:00
feng
e355abc1af perf: 切换zh hant 2024-04-10 15:31:39 +08:00
Bai
99200d58bb feat: LDAP User Auth support cache user_dn 2024-04-09 20:11:06 +08:00
ibuler
61bb97efa9 perf: xss attack 2024-04-09 17:09:01 +08:00
fit2bot
c5e030e2fe perf: Update user orgs roles (#3829)
* perf: Update user orgs roles

* perf: Update user orgs roles

---------

Co-authored-by: Bai <baijiangjie@gmail.com>
2024-04-09 16:51:05 +08:00
ibuler
38a9468fd2 perf: 修改 acls 和 automations 布局 2024-04-09 16:01:21 +08:00
fit2bot
8a60ad774f perf: Update user orgs roles (#3828)
Co-authored-by: Bai <baijiangjie@gmail.com>
2024-04-09 15:44:07 +08:00
hzhfit2cloud
b08e6de527 支持中文繁体 2024-04-09 15:20:39 +08:00
feng
a96851686f fix: 修复xss漏洞 工单查不到数据问题 2024-04-08 18:56:22 +08:00
wangruidong
1b0adbfe71 fix: Web资产克隆,选择器信息丢失 2024-04-08 18:54:43 +08:00
wangruidong
c28419438b fix: 虚拟账号列表排序无效 2024-04-08 16:34:10 +08:00
ibuler
cf3ba419f4 perf: 修改自动化 2024-04-08 14:31:17 +08:00
jiangweidong
8807f24bcd perf: 云同步支持火山引擎 2024-04-08 14:04:56 +08:00
Bai
b8a914eb02 perf: ROOT Org show orgs-and-roles in user-detail page 2024-04-08 14:02:10 +08:00
wangruidong
8bbc66a281 fix: 授权资产查看账号失败 2024-04-08 11:35:13 +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
feng626
19bab778ca Merge pull request #3818 from jumpserver/pr@dev@user_session
fix: 修复用户下线失败问题
2024-04-03 16:41:43 +08:00
feng
134bcda895 fix: 修复用户下线失败问题 2024-04-03 16:14:54 +08:00
wangruidong
8b725fa4f6 perf: TransferSelect Dialog手机端适配 2024-04-02 19:21:33 +08:00
wangruidong
205f8bc280 fix: 勾选指定账号时,数量显示有问题 2024-04-02 19:20:44 +08:00
wangruidong
4963446b74 fix: 统一成模板 2024-04-02 19:19:40 +08:00
wangruidong
98be3903db fix: 华为交换机执行快捷命令报错 2024-04-02 18:51:19 +08:00
wangruidong
2cb7a859a8 perf: 授权的资产列表中支持查看某个资产授权的账号 2024-04-02 17:06:55 +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
wangruidong
d51571c530 perf: 搜索框和右侧在同一水平线上 2024-03-29 18:29:50 +08:00
ibuler
53187cb8aa perf: cron tab better 2024-03-29 17:57:50 +08:00
wangruidong
bf0d19ac0b perf: 工单页面去掉一些筛选字段 2024-03-29 14:17:44 +08:00
wangruidong
28062f5d60 perf: Web,ChatGPT资产测试可连接性按钮禁用 2024-03-28 18:20:35 +08:00
ibuler
720dee578a fix: 修复创建账号时,资产没有默认值的问题 2024-03-28 18:15: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
feng626
cc0d78a4e7 Merge pull request #3809 from jumpserver/pr@dev@role
fix: 修改content type 权限
2024-03-28 15:22:13 +08:00
feng
9f0b904043 fix: 修改content type 权限 2024-03-28 15:21:31 +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
dependabot[bot]
90cbb25d47 build(deps): bump express from 4.18.2 to 4.19.2
Bumps [express](https://github.com/expressjs/express) from 4.18.2 to 4.19.2.
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.18.2...4.19.2)

---
updated-dependencies:
- dependency-name: express
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-27 16:18:44 +08:00
dependabot[bot]
450d9562c3 build(deps): bump ip from 1.1.8 to 1.1.9
Bumps [ip](https://github.com/indutny/node-ip) from 1.1.8 to 1.1.9.
- [Commits](https://github.com/indutny/node-ip/compare/v1.1.8...v1.1.9)

---
updated-dependencies:
- dependency-name: ip
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-27 16:18:19 +08:00
dependabot[bot]
a69eec5ef6 build(deps): bump axios from 0.21.1 to 0.28.0
Dependabot couldn't find the original pull request head commit, a01b1986d1e53870ecc18abd7ee72104fba7a08b.
2024-03-27 16:17:56 +08:00
wangruidong
5f6fc7e3b4 fix: 待审批列表显示没有过滤的问题 2024-03-27 16:10:22 +08:00
wangruidong
62b6ca026e perf: 优化资产、网域、网关的操作体验 2024-03-27 16:02:39 +08:00
Bai
006f258938 perf: Optimize the context menu for right-clicking on the asset tree. 2024-03-27 10:56:47 +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
feng626
756b7db6b6 Merge pull request #3798 from jumpserver/pr@dev@perm_asset
perf: 资产授权列表优化
2024-03-26 18:07:51 +08:00
feng
a8d7c01f94 perf: 资产授权列表优化 2024-03-26 18:06:37 +08:00
feng
0c7e7ecc99 feat: 拆分 feishu lark 2024-03-26 17:11:22 +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
feng626
342a70c441 Merge pull request #3795 from jumpserver/pr@dev@asset_perm
fix: 资产授权列表没有有效期字段
2024-03-22 16:01:12 +08:00
wangruidong
815247f5b5 perf: 封装SwitchFormatter组件 2024-03-22 15:28:13 +08:00
wangruidong
e6721a9905 feat: 支持开启、关闭定时任务执行 2024-03-22 15:28:13 +08:00
feng
d6305fddfd fix: 资产授权列表没有有效期字段 2024-03-22 14:47:15 +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
Eric
6db2d5ae31 perf: 支持发布机卸载远程应用 2024-03-21 16:12:13 +08:00
ibuler
9ed323321a perf: form hidden 改成 v-if 2024-03-21 14:43:50 +08:00
feng626
9b43bba6f8 Merge pull request #3790 from jumpserver/pr@dev@change_secret_record
feat: 改密记录可批量重试 新增更多过滤选项
2024-03-21 11:09:26 +08:00
feng
f9d89b30e2 feat: 改密记录可批量重试 新增更多过滤选项 2024-03-21 11:08:30 +08:00
feng626
be29794b4c Merge pull request #3788 from jumpserver/pr@dev@change_secret
perf: 改密记录可查看密文
2024-03-21 11:05:11 +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
jiangweidong
97bf4f1b97 feat: 云账号测试支持选择地域 2024-03-20 16:39:12 +08:00
Bai
76e7684e26 perf: 优化 Session 支持 duration 字段 2024-03-20 15:52:23 +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
wangruidong
2bfd764da7 perf: 支持导出收集账号列表的数据 2024-03-18 18:02:58 +08:00
wangruidong
daf3defe14 perf: 修改oracle默认数据库提示 2024-03-18 18:02:34 +08:00
Eric
d8c165ca78 perf: 支持发布机仅初始化配置 2024-03-18 15:52:22 +08:00
ibuler
780c55e99e perf: 优化 detail card 2024-03-15 19:19:05 +08:00
feng
42115b2c30 perf: 改密记录可查看密文 2024-03-15 17:29:23 +08:00
老广
447013abf5 Merge pull request #3784 from jumpserver/pr@dev@perf_asset_tree
perf: 优化资产树 root 节点宽度
2024-03-15 14:43:24 +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
44216326f9 perf: 优化资产树 root 节点宽度 2024-03-15 06:38:32 +00: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
feng
fd64e71a3b perf: 优化user secret key 处理逻辑 2024-03-15 11:46:44 +08:00
ibuler
06cfed009a perf: 优化表单 2024-03-15 10:45:02 +08:00
feng626
7b990a264f Merge pull request #3782 from jumpserver/pr@dev@translate
perf: translate
2024-03-15 10:34:20 +08:00
feng
7687917aae perf: translate 2024-03-15 10:33:13 +08:00
wangruidong
02b71619de perf: 支持终断批量快捷命令执行的任务 2024-03-14 11:18:04 +08:00
Bai
da90b23f99 perf: 优化我的资产页面不能编辑 Labels 的问题 2024-03-14 11:08:58 +08:00
wangruidong
b8090abcdc perf: 添加oracle默认数据库提示 2024-03-14 11:08:31 +08:00
ibuler
dc94ff58c3 perf: 修改 accounts 创建 2024-03-13 18:53:19 +08:00
feng626
45b07dd628 Merge pull request #3777 from jumpserver/pr@dev@customize_footer
feat: 自定义footer
2024-03-12 14:34:44 +08:00
feng
ad7a6a5579 feat: 自定义footer 2024-03-12 14:22:28 +08:00
wangruidong
67c8521d5c fix: 自动任务跳转执行列表显示结果不准确的问题 2024-03-12 11:18:33 +08:00
wangruidong
18fc63b8c0 feat: 支持一键导出批量命令执行日志 2024-03-12 11:01:27 +08:00
ibuler
6b87a2ad31 perf: 修改翻译 2024-03-11 19:20:32 +08:00
w940853815
64d2854e49 Revert "fix: 刷新页面搜索条件丢失的问题"
This reverts commit 99f83a6bc4.
2024-03-11 18:20:24 +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
wangruidong
99f83a6bc4 fix: 刷新页面搜索条件丢失的问题 2024-03-07 14:22:20 +08:00
feng626
ca9f90624e Merge pull request #3772 from jumpserver/pr@dev@detail_formatter
perf: 支持点击“转到”后进行颜色标识
2024-03-06 19:11:00 +08:00
feng
05edf98514 perf: 支持点击“转到”后进行颜色标识 2024-03-06 19:10:04 +08:00
Bai
45b8c622bc perf: 优化界面设置页面主题Logo预览的背景颜色 2024-03-06 17:53:01 +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
feng626
faf1fb60b7 Merge pull request #3769 from jumpserver/pr@dev@account_gather
feat: 账号收集任务可单独添加资产
2024-03-05 15:00:27 +08:00
feng
f28825ba74 feat: 账号收集任务可单独添加资产 2024-03-05 14:59:02 +08:00
wangruidong
3626fd024d fix: 刷新页面根据搜索条件过滤出对应的资源 2024-03-04 19:13:18 +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
79ec0610a8 Merge pull request #3766 from jumpserver/revert-3764-pr@dev@fix_url_search
Revert "fix: 刷新页面根据搜索条件过滤出对应的资源"
2024-03-04 17:54:35 +08:00
Bryan
eee5889d51 Revert "fix: 刷新页面根据搜索条件过滤出对应的资源" 2024-03-04 17:53:46 +08:00
feng626
038ec49d5e Merge pull request #3764 from jumpserver/pr@dev@fix_url_search
fix: 刷新页面根据搜索条件过滤出对应的资源
2024-03-04 17:41:49 +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
wangruidong
669ffc73fd fix: 刷新页面根据搜索条件过滤出对应的资源 2024-03-04 14:24:39 +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
278562e855 Merge pull request #3763 from jumpserver/pr@dev@account_push
perf: 社区版账号推送,隐藏掉定时推送按钮
2024-03-01 16:57:37 +08:00
feng
fafa088a5e perf: 社区版账号推送,隐藏掉定时推送按钮 2024-03-01 16:51:06 +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
wangruidong
1ff65a2293 fix: sftp会话详情禁用监控按钮 2024-02-29 14:33:39 +08:00
Bai
1c69c61432 fix: 修复文件传输权限位 2024-02-29 14:13:42 +08:00
wangruidong
191143fb17 perf:drag files tips add padding 2024-02-28 20:52:32 +08:00
wangruidong
046870e366 fix: 隐藏停止任务按钮 2024-02-28 20:51:59 +08:00
feng626
b44af12f3b Merge pull request #3756 from jumpserver/pr@dev@push_params
fix: 平台中的改密参数和推送参数没了
2024-02-28 18:49:47 +08:00
feng
d9a9c7e229 fix: 平台中的改密参数和推送参数没了 2024-02-28 18:48:06 +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
wangruidong
55dfa5889b perf: 终断任务按钮状态变化优化 2024-02-28 10:00:13 +08:00
wangruidong
b35b5bd774 fix: 远程应用账号列表排版问题 2024-02-28 09:59:52 +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
feng626
1ee9e5df78 Merge pull request #3751 from jumpserver/pr@dev@push_account
fix: 【资产列表】资产详情中推送账号,推送参数未获取平台的参数
2024-02-27 16:56:50 +08:00
feng
2fe6cb37e6 fix: 【资产列表】资产详情中推送账号,推送参数未获取平台的参数 2024-02-27 16:55:48 +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
feng626
da570e21ee Merge pull request #3747 from jumpserver/pr@dev@luna
fix: 跳转到 luna 组织不对
2024-02-27 10:23:55 +08:00
wangruidong
16adcd299a perf: 平台参数联动逻辑优化 2024-02-26 19:49:26 +08:00
wangruidong
df8a464c36 fix: Web资产的选择器未根据平台参数联动 2024-02-26 16:40:15 +05:00
ibuler
2595b8bc8e perf: 优化 label 宽度 2024-02-26 19:34:36 +08:00
wangruidong
52e121cfdb perf: 禁用redis/clickhouse测试可连接性按钮 2024-02-26 15:53:20 +05:00
feng626
f014fc6426 Merge pull request #3748 from jumpserver/pr@dev@user_group
perf: Default组织下,标签关联用户资源,去掉组件用户
2024-02-26 17:21:00 +08:00
feng
88a6c2bb2b perf: Default组织下,标签关联用户资源,去掉组件用户 2024-02-26 17:08:05 +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
feng
8fa31fe0c2 fix: 跳转到 luna 组织不对 2024-02-26 16:24:50 +08:00
Bai
445eb31db1 perf: i18n settings-Features done. 2024-02-26 15:47:12 +08:00
wangruidong
8f246c18e1 perf: 作业日志添加任务类型 2024-02-26 13:43:25 +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
wangruidong
9d999a7119 fix: LDAP用户导入会超时 2024-02-22 11:37:58 +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
wangruidong
dc8f237fec fix: 类别、类型排序无效 2024-02-21 14:21:38 +08:00
jiangweidong
41d0615ab5 feat: 支持工单链接直接免密审批 2024-02-21 11:39:57 +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
feng626
fadc3e7dd0 Merge pull request #3736 from jumpserver/pr@dev@account
perf: 账号收集添加资产名称模糊搜索
2024-02-20 18:41:58 +08:00
feng
152f56b496 perf: 账号收集添加资产名称模糊搜索 2024-02-20 18:39:48 +08:00
wangruidong
ed4f8dea90 perf: 终断批量快捷命令执行的任务 2024-02-20 15:13:11 +08:00
feng626
dced020a20 Merge pull request #3734 from jumpserver/pr@dev@perm_user
perf: 授权用户列表显示角色
2024-02-19 14:48:46 +08:00
feng
bf3c87575c perf: 授权用户列表显示角色 2024-02-19 14:43:01 +08:00
Eric
dadb54090c perf: 会话活动日志 2024-02-06 18:32:53 +08:00
ibuler
3f683b012c perf: 修改 ai chat 的位置 2024-02-06 17:59:13 +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
wangruidong
ecb1e91136 fix: Web资产选择器需跟平台的参数适配 2024-02-05 18:17:33 +08:00
wangruidong
454947f08b perf: 支持改密日志记录保留天数 2024-02-05 18:07:04 +08:00
feng
3ff6c6fe2f fix: 导出下载更新模版用不同的action 去对应后台serializer 2024-02-05 17:51:56 +08:00
Bai
527cc4d727 fix: 修复用户登录403的问题(DEFAULT组织由后端进行设置) 2024-02-05 16:52:31 +08:00
wangruidong
3b4201d2bf perf: 修改翻译 2024-02-05 15:54:42 +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
wangruidong
ba109da324 perf: 禁止用户自身更新自己的某些属性 2024-02-04 18:01:21 +08:00
jiangweidong
2a92c7657c perf: 支持账号批量更新功能 (#3717) 2024-02-04 17:50:22 +08:00
feng626
beb8ace5bd Merge pull request #3723 from jumpserver/pr@dev@asset_select
perf: 改密推送 选择资产支持标签搜索
2024-02-04 17:29:13 +08:00
feng
5e1225524c perf: 改密推送 选择资产支持标签搜索 2024-02-04 17:27:46 +08:00
wangruidong
931042eb2f perf: 国际电话区号选项从api返回 2024-02-04 14:52:50 +08:00
ibuler
94bf737584 perf: 优化 i18n 2024-02-04 10:24:52 +08:00
feng626
383577bb18 Merge pull request #3721 from jumpserver/pr@dev@ssh_key
perf: 【模版账号】创建/更新 模版账号表单中,希望增加上传密钥按钮
2024-02-02 18:44:59 +08:00
feng
f9e94386de perf: 【模版账号】创建/更新 模版账号表单中,希望增加上传密钥按钮 2024-02-02 18:41:11 +08:00
feng
5879eed926 perf: 优化用户session 会话过期 2024-02-02 17:54:46 +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
wangruidong
e1e54bf7a3 fix: 控制台,审计台仪表盘图表显示不对 2024-01-31 13:55:05 +08:00
ibuler
9e0c43589d perf: 优化首页日期 tab 按钮的颜色 2024-01-31 10:00:11 +08:00
wangruidong
ca3b0cfce5 perf: crontab修改提示翻译 2024-01-30 17:48:25 +08:00
jiangweidong
245b3f4ad2 perf: 资源详情页面标题长度超过一行则省略表示 2024-01-29 16:52:12 +08:00
ibuler
ea575e0515 perf: 优化数量显示,异步获取 hover 的内容 2024-01-29 16:50:42 +08:00
“huailei000”
ff63d2ca39 perf: 优化快捷命令输出框跟随浏览器高度 2024-01-29 16:49:38 +08:00
feng626
045af27999 Merge pull request #3711 from jumpserver/pr@dev@account_template
feat: 账号模版可导入导出
2024-01-29 16:42:45 +08:00
feng626
257365932c Merge pull request #3710 from jumpserver/pr@dev@account_bulk_test
feat: 批量测试账号可连接性
2024-01-29 16:42:18 +08:00
feng
aca4e4077f feat: 账号模版可导入导出 2024-01-29 16:19:19 +08:00
feng
ce80d36b8b feat: 批量测试账号可连接性 2024-01-29 14:40:49 +08:00
wangruidong
7dd5256303 perf: 用户详情 - 授权资产减少默认字段 2024-01-25 17:19:09 +08:00
wangruidong
fcf1093b4c perf: 安全模式返回授权的资产 2024-01-25 17:08:15 +08:00
feng626
5f9e9afffb Merge pull request #3709 from jumpserver/pr@dev@translate
perf: 翻译
2024-01-25 14:36:18 +08:00
feng
1bba9980c2 perf: 翻译 2024-01-25 14:35:13 +08:00
halo
6cbcee7656 perf: 指定账号enter异常刷新整个页面 2024-01-22 06:38:19 +00:00
halo
2084c50f95 perf: 资产授权弹窗选择时点击遮罩退出问题 2024-01-22 06:37:53 +00:00
“huailei000”
20d98bf09e perf: 优化更多操作高度;优化快捷命令右侧图标;优化账号管理列表-定期执行在中、英文状态下的宽度 2024-01-19 10:32:38 +00:00
“huailei000”
05c2f1f859 perf: 快捷命令toolbar增加折叠功能 2024-01-19 10:31:36 +00:00
“huailei000”
1e9107ec4a perf: 兼容luna显示智能问答 2024-01-19 09:23:19 +00:00
wangruidong
96a3f0a334 fix: 网关列表资产数量点击详情中没有资产 2024-01-18 08:11:46 +00:00
“huailei000”
6938299940 perf: 会话详情添加文件传输;操作日志默认显示动作、资源类型 2024-01-18 08:10:58 +00:00
wangruidong
0d1eb82fca perf: The cron interval execution must be greater than 10 minutes 2024-01-18 08:06:14 +00:00
feng626
ddf268e8ec Merge pull request #3695 from jumpserver/revert-3692-pr@dev@login_expire
Revert "perf: 登录过期自动退出"
2024-01-17 21:11:10 +08:00
老广
ae6fb878da Revert "perf: 登录过期自动退出" 2024-01-17 21:07:33 +08:00
feng626
d7099c118b Merge pull request #3692 from jumpserver/pr@dev@login_expire
perf: 登录过期自动退出
2024-01-17 15:58:16 +08:00
feng
1b73591366 perf: 登录过期自动退出 2024-01-17 15:47:21 +08:00
ibuler
6f3f66df73 perf: auto decide create in new page or current page in asset or permission 2024-01-15 19:37:47 +08:00
ibuler
598020a89b perf: revert asset create with labels 2024-01-15 19:36:48 +08: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
“huailei000”
88486e2b00 perf: 优化时间区间选择组件选择时间不准确问题 2024-01-14 22:57:36 -08:00
“huailei000”
faf8521c91 perf: 优化标签列表-资产数量弹窗中的搜索条件不显示在url中 2024-01-14 22:29:42 -08:00
feng
ccd74fb76f fix: m2m 表单渲染错乱 2024-01-14 22:14:48 -08:00
ibuler
d76c6fdbd8 perf: 优化 tag search 避免多次请求 2024-01-14 18:29:12 -08:00
ibuler
ea87c9d148 perf: 优化授权的资产 2024-01-12 18:14:50 +08:00
wangruidong
af6a55d3f4 feat: 同步ldap用户消息通知 2024-01-12 12:02:42 +05:00
“huailei000”
c052961efe perf: 优化仪表盘翻译 2024-01-11 14:43:24 +08:00
“huailei000”
57d339f513 perf: 优化批量操作图标大小 2024-01-11 14:43:01 +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
feng626
097771175d Merge pull request #3678 from jumpserver/pr@dev@dashboard_translate
perf: 前端dashboard 翻译
2024-01-09 17:49:43 +08:00
feng
0922557abc perf: 前端dashboard 翻译 2024-01-09 17:40:37 +08:00
feng626
6842da1960 Merge pull request #3676 from jumpserver/pr@dev@perm_create
perf: 【资产授权】选择资产弹窗左侧树中,去掉搜索、刷新按钮
2024-01-08 17:26:27 +08:00
feng
eb839b4113 perf: 【资产授权】选择资产弹窗左侧树中,去掉搜索、刷新按钮 2024-01-08 17:25:34 +08:00
“huailei000”
7e3e8fbf2f perf: 替换批量更新图标 2024-01-08 16:04:37 +08:00
jiangweidong
3800151763 perf: 邮箱支持exchange协议 2024-01-08 12:34:50 +05:00
ibuler
0121505f28 perf: 优化页面显示 2024-01-08 14:49:12 +08:00
ibuler
b9a6f5d3ac perf: 修复标签导入和搜索的问题 2024-01-03 17:07:15 +08:00
feng626
179b568b16 Merge pull request #3672 from jumpserver/pr@dev@history_account
feat: 历史账号定期删除 可设置保留数量
2024-01-03 11:04:22 +08:00
feng
c563697efd feat: 历史账号定期删除 可设置保留数量 2024-01-02 19:10:54 +08:00
fit2bot
fa9281aa92 perf: 优化节点树 (#3670)
Co-authored-by: ibuler <ibuler@qq.com>
2024-01-02 16:18:54 +08:00
feng
cc8d94f666 fix: Default组织下,标签关联用户资源,去掉组件用户 2023-12-29 11:14:26 +05:00
“huailei000”
1416405644 perf: 优化批量更新资产不能使用问题 2023-12-29 11:10:04 +05:00
wangruidong
d29b3effbc fix: 更新用户组权限问题 2023-12-29 07:41:28 +05:00
wangruidong
bd9456ba2d fix: 创建用户失败 2023-12-28 15:35:22 +05:00
wangruidong
0c9d5d9b6b fix: 用户角色修改后更新页面与用户列表页显示不一致 2023-12-28 15:35:22 +05:00
Bai
b19ddd6799 fix: 修复组件中没有暴露 SQLServer 端口的问题 2023-12-28 14:52:41 +05:00
wangruidong
ea48b6ebf3 perf: 修改文件上传超时时间 2023-12-27 18:57:17 +08:00
“huailei000”
fba2f77874 perf: 优化智能问答返回显示系统消息 2023-12-27 17:11:20 +08:00
wangruidong
3c900ce387 perf: 账号删除添加提示确认框 2023-12-27 14:07:15 +05:00
“huailei000”
7df11b907f perf: 优化资产详情页面布局 2023-12-27 15:27:43 +08:00
wangruidong
cdd51a9c16 perf: 统计任务执行结果 2023-12-26 15:45:08 +08:00
wangruidong
51a4c013d3 perf: 修改文件上传超时时间 2023-12-26 10:48:36 +08:00
feng
111aafb4bb fix: 【用户登录会话失效问题】SESSION_COOKIE_AGE 配置不生效的问题 2023-12-25 13:24:02 +05:00
“huailei000”
81f0b13730 perf: 优化网关克隆平台显示不正确问题 2023-12-25 15:10:10 +08:00
“huailei000”
a36a9e7645 perf: 智能问答禁止密码自动填充 2023-12-22 13:23:17 +05:00
Eric
cfe6db6ec5 perf: 虚拟应用增加许可证验证 2023-12-22 12:24:08 +05:00
“huailei000”
ccb221559a perf: 账号收集翻译 2023-12-22 11:33:43 +08:00
“huailei000”
ace8501648 perf: 实体组织下批量更新用户可以选择用户组 2023-12-21 17:29:38 +08:00
“huailei000”
ff627bb0db perf: 优化chat滚动条宽度 2023-12-21 16:19:59 +08:00
ibuler
dba8d84f2d perf: 优化导入 dialog 大小 2023-12-21 15:38:34 +08:00
wangruidong
e24bfff6ab fix: 同名文件可以删除任意一个 2023-12-21 15:38:15 +08:00
wangruidong
cdcc4226db perf: 界面设置提交后不刷新页面 2023-12-21 15:37:26 +08:00
“huailei000”
09b52738ca perf: 优化站内信布局;显示站内信关闭按钮 2023-12-21 11:02:42 +08:00
“huailei000”
e324b16e1b perf: 优化标签管理编辑按钮位置 2023-12-21 10:26:20 +08:00
fit2bot
1b52e4cb93 perf: 优化 label search (#3634)
Co-authored-by: ibuler <ibuler@qq.com>
2023-12-20 20:48:00 +08:00
“huailei000”
6ac31b05e5 perf: window资产密文类型不是密码时不能设置推送参数 2023-12-20 19:37:57 +08:00
wangruidong
6c24c9a2d9 fix: 账号备份开启拆分两部分后再关闭还是会拆成两份发送邮件 2023-12-20 16:25:17 +05:00
fit2bot
b79ef4f7a8 perf: 更新白名单后返回列表页 (#3630)
Co-authored-by: wangruidong <940853815@qq.com>
2023-12-20 19:18:04 +08:00
“huailei000”
d584f83f59 perf: 用户列表全局组织下可以批量更新用户,不能更新用户组 2023-12-20 19:00:00 +08:00
feng626
22ed0ec0ca Merge pull request #3629 from jumpserver/pr@dev@user
perf: 更新创建用户 权限位关联,用户角色 select2
2023-12-20 18:29:09 +08:00
feng
436e9e59f1 perf: 更新创建用户 权限位关联,用户角色 select2 2023-12-20 18:27:44 +08:00
wangruidong
ba63d52275 fix: 添加资产id查询条件 2023-12-20 15:14:45 +05:00
“huailei000”
aa48e24881 perf: 全局组织下禁止批量更新 2023-12-20 17:57:29 +08:00
“huailei000”
f59b33a27f perf: 优化标签组件内容为空时面板的位置 2023-12-20 17:38:57 +08:00
ibuler
9f87708b96 perf: 修改拼写错误 2023-12-20 17:02:57 +08:00
Eric
78819e9a04 perf: 页面配置是否启用 Vitual App 2023-12-20 13:19:49 +05:00
“huailei000”
8e981d52eb perf: 优化标签管理编辑 2023-12-20 15:52:33 +08:00
wangruidong
9f4c798ddb perf: 修改文件上传超时时间 2023-12-19 16:18:36 +05:00
ibuler
7eac62635b perf: 支持点击 label 搜索 2023-12-19 17:00:50 +08:00
ibuler
3739d710f8 perf: 标签支持多个搜索 2023-12-19 15:26:10 +08:00
“huailei000”
aae5aa9d7f perf: 标签列表关联成功资产后刷新列表 2023-12-19 14:54:19 +08:00
“huailei000”
88be5d5fe8 perf: 优化资产选择节点组件取消不能关闭弹窗问题 2023-12-19 13:57:37 +08:00
fit2bot
6ac54c9865 perf: 优化 labels list 显示 (#3617)
* perf: 修改 label list 显示

* perf: 优化 labels list 显示

---------

Co-authored-by: ibuler <ibuler@qq.com>
2023-12-18 22:38:35 +08:00
ibuler
5cefbbfb51 perf: 修改 labels 关联 2023-12-18 18:06:18 +08:00
ibuler
f10e31bd60 perf: 修复标签搜索 2023-12-15 18:32:28 +08:00
wangruidong
e8e8b5bfca perf: 文件传输提示优化 2023-12-15 18:12:19 +08:00
“huailei000”
19adbca7b3 perf:优化资产授权详情授权用户、授权资产点击多选框会全部选中问题 2023-12-15 15:11:05 +08:00
feng626
ba28d5619a Merge pull request #3612 from jumpserver/pr@dev@acl_rules
perf: acl 自定义规则添加首次登录选项
2023-12-15 14:16:26 +08:00
feng
68363a4c52 perf: acl 自定义规则添加首次登录选项 2023-12-15 14:13:43 +08:00
“huailei000”
f947fa8d36 perf: 优化新建聊天不重新创建socket 2023-12-15 11:03:45 +08:00
ibuler
c1d0994781 perf: 优化 chat css 2023-12-14 19:53:17 +08:00
fit2bot
fde576fe8b perf: 上传目标目录指定在/tmp下 (#3608)
Co-authored-by: wangruidong <940853815@qq.com>
2023-12-14 19:45:27 +08:00
“huailei000”
27864be41d perf: 优化chat初始化socket 2023-12-14 19:32:31 +08:00
ibuler
9d461be4a0 perf: 优化聊天样式 2023-12-14 19:12:03 +08:00
“huailei000”
bcbfe114d8 perf: 优化点击新聊天提示词没有重置问题 2023-12-14 17:37:13 +08:00
ibuler
af8448adeb merge: with dev 2023-12-14 16:59:46 +08:00
fit2bot
9b7a360ea1 perf: chat增加提示词 (#3603)
Co-authored-by: “huailei000” <2280131253@qq.com>
Co-authored-by: huailei <31801270+huailei000@users.noreply.github.com>
2023-12-14 16:37:48 +08:00
ibuler
3bf7eed52e perf: 修复资产详情中 label 的问题 2023-12-14 16:36:59 +08:00
ibuler
c1d80469db perf: 修改 prompt 2023-12-14 14:07:38 +08:00
jiangweidong
e6a1039387 feat: 云同步支持设置策略关系、支持不匹配不符合策略的资产 (#3592) 2023-12-14 11:31:23 +08:00
wangruidong
ad7b2c4e8f perf: 上传大小限制从接口获取 2023-12-14 11:27:56 +08:00
fit2bot
d51a787598 perf: 使用slot处理文件列表 (#3599)
* perf: 使用slot处理文件列表

* perf: 大小文件超出限制不上传

---------

Co-authored-by: wangruidong <940853815@qq.com>
2023-12-14 10:34:06 +08:00
ibuler
2ac9183047 perf: 修改 icon 颜色 2023-12-14 10:30:42 +08:00
ibuler
3b9f0b56fb perf: 优化右侧聊天 2023-12-13 18:08:42 +08:00
“huailei000”
d900a8d5a3 perf: 已锁定的ip按钮增加个数显示 2023-12-13 17:16:16 +08:00
fit2bot
6daa16b3ca perf: add strip-ansi (#3596)
* perf: 修改 requrements

* perf: add strip-ansi

---------

Co-authored-by: ibuler <ibuler@qq.com>
2023-12-13 16:38:45 +08:00
“huailei000”
28891234db perf: 优化socket地址 2023-12-13 16:34:24 +08:00
ibuler
1d7bdcb512 perf: 修改 requrements 2023-12-13 16:31:41 +08:00
“huailei000”
0964031922 perf: 优化chat 停止按钮位置 2023-12-13 16:14:15 +08:00
ibuler
6568f47760 perf: 优化文件上传的样式 2023-12-13 11:24:04 +08:00
“huailei000”
448e89c733 perf: update yarn.lock 2023-12-13 11:20:11 +08:00
“huailei000”
68dccaa93c perf: 优化抽屉按钮效果 2023-12-13 10:54:50 +08:00
“huailei000”
b0cefb05e0 perf: 优化chat提示 2023-12-12 19:48:35 +08:00
wangruidong
d6bf4c86df perf: 显示上传文件大小 2023-12-12 19:07:02 +08:00
feng626
993ded5ca8 Merge pull request #3586 from jumpserver/pr@dev@perf_chat
perf: chat
2023-12-12 18:52:19 +08:00
huailei
951df9e63a Merge branch 'dev' into pr@dev@perf_chat 2023-12-12 18:51:43 +08:00
“huailei000”
4b98806b3e perf: chat 2023-12-12 18:50:19 +08:00
ibuler
536520c78c perf: 优化英语翻译 2023-12-12 18:43:51 +08:00
ibuler
63650912b8 perf: placeholder 字体大小 2023-12-12 18:43:31 +08:00
feng626
b65069adeb Merge pull request #3583 from jumpserver/pr@dev@translate
perf: 翻译
2023-12-12 16:35:00 +08:00
feng
7bd3179488 perf: 翻译 2023-12-12 16:33:16 +08:00
feng
bf6ecca1fa perf: 翻译 2023-12-12 16:32:54 +08:00
ibuler
69449740df perf: 修改一下大小 2023-12-12 14:16:35 +08:00
feng626
591f3ae39a Merge pull request #3579 from jumpserver/pr@dev@system_task
perf: 【优化系统任务】支持显示 执行周期、下次开始时间 字段
2023-12-12 14:16:12 +08:00
ibuler
463d2b16bf perf: chatai icon 2023-12-12 11:13:15 +08:00
feng
cc47d93988 perf: 【优化系统任务】支持显示 执行周期、下次开始时间 字段 2023-12-12 11:06:53 +08:00
fit2bot
19e42c48e4 feat: 支持批量发送文件 (#3574)
* feat: 支持批量发送文件

* feat: 支持批量发送文件

* perf: 同名文件处理

---------

Co-authored-by: wangruidong <940853815@qq.com>
2023-12-12 10:40:41 +08:00
“huailei000”
6b37c71b6d feat: 添加chat聊天 2023-12-11 18:24:24 +08:00
feng
3af6b1d1fe feat: 系统设置配置gpt 2023-12-11 18:24:24 +08:00
fit2bot
2445ecb6e5 perf: 优化 select2 成 transfer select2 (#3576)
* feat: 添加 tranSelect

* perf: 优化 select2 成 transfer select2

---------

Co-authored-by: ibuler <ibuler@qq.com>
2023-12-11 16:14:06 +08:00
feng626
a5ae4110da Merge pull request #3578 from jumpserver/pr@dev@applet
perf: 远程应用上传过程中,如果应用不存在,则创建该应用;如果已存在,则进行应用更新。
2023-12-11 14:29:11 +08:00
feng
dc4378b637 perf: 远程应用上传过程中,如果应用不存在,则创建该应用;如果已存在,则进行应用更新。 2023-12-11 14:26:43 +08:00
Eric
91f2de7797 perf: 添加 panda 监控显示 2023-12-11 14:14:39 +08:00
Eric
29b2829199 perf: 完善 app provider 详情页 2023-12-08 18:48:15 +08:00
feng626
4e23a34af9 Merge pull request #3572 from jumpserver/pr@dev@delete_account_automation
feat: 同步删除远程机器账号
2023-12-08 14:14:28 +08:00
feng
2bd1aaa03e feat: 同步删除远程机器账号 2023-12-07 21:07:29 +08:00
halo
96e23ddb52 fix: 修复字段翻译问题 2023-12-07 14:10:37 +08:00
fit2bot
351e250688 feat: support virtual app (#3558)
* feat: support virtual app

* perf: virtual host 详情

* perf: 调整 virtual app 卡片展示

* perf: 调整 route

* perf: 增加翻译

* perf: 优化更换名称

---------

Co-authored-by: Eric <xplzv@126.com>
2023-12-06 10:38:04 +08:00
liufei20151013
e8ebd1aa64 feat: 云同步支持 ZStack 2023-12-05 17:35:41 +08:00
jiangweidong
6adca44180 perf: 用户列表可展示更多api返回的字段信息 2023-12-05 17:28:33 +08:00
ibuler
f3699069c5 perf: 优化创建 label 2023-12-05 15:15:55 +08:00
fit2bot
2f298a32c3 perf: 修改标签 (#3516)
* perf: 支持全局的 labels

* perf: 修改标签

* perf: 修改 labes

* stash

* pref: stash it

* perf: stash

* perf: 优化 labels

* perf: 优化 tabs

* perf: 优化 tag

* perf: 基本完成

* perf: 优化 labels 创建搜索

* perf: 优化 labels

* perf: 优化完成标签功能

* perf: 修改 label name

---------

Co-authored-by: ibuler <ibuler@qq.com>
2023-12-05 10:30:56 +08:00
fit2bot
3ba81a43cb feat: 资产详情页面添加历史执行命令列表页面 (#3568)
* feat: 资产详情页面添加历史执行命令列表页面

---------

Co-authored-by: wangruidong <940853815@qq.com>
2023-12-04 15:20:57 +08:00
fit2bot
813f17b52f perf: 优化工单处理提示消息页面 (#3567)
Co-authored-by: wangruidong <940853815@qq.com>
2023-11-30 11:40:04 +08:00
jiangweidong
0fc292b1ad perf: 支持slack通知和认证 (#3556) 2023-11-29 17:50:09 +08:00
fit2bot
f3f5bbe114 feat: 用户详情展示所有会话 (#3563)
Co-authored-by: wangruidong <940853815@qq.com>
2023-11-28 19:07:08 +08:00
feng626
8c732f00e1 Merge pull request #3566 from jumpserver/pr@dev@random
perf: 随机密码生成规则添加可排除字符选项
2023-11-28 14:48:41 +08:00
feng
f91b8c75df perf: 随机密码生成规则添加可排除字符选项 2023-11-28 14:45:58 +08:00
jiangweidong
e86b88bf05 feat: 支持深信服云平台和阿里云专有云 2023-11-27 11:12:14 +08:00
“huailei000”
bf3a2d748d perf: 限制上传logo图片的格式;优化打开文件速度 2023-11-24 18:59:46 +08:00
wangruidong
8a4b81e2e5 feat: 支持备案配置 2023-11-24 13:56:28 +08:00
wangruidong
34406ec32d fix: SFTP对象存储,禁用设为默认存储 2023-11-24 10:32:56 +08:00
feng626
3269a2a3ff Merge pull request #3554 from jumpserver/pr@dev@perf_ldap_user_websocket
perf: ldap接口请求换成websocket连接
2023-11-23 15:05:32 +08:00
feng626
5d50844753 Merge pull request #3555 from jumpserver/pr@dev@add_all_member
perf: 给用户组添加全部成员时,二次确认下
2023-11-22 19:06:04 +08:00
feng
97cc73a4fa perf: 给用户组添加全部成员时,二次确认下 2023-11-22 19:04:56 +08:00
wangruidong
574dae6236 perf: ldap接口请求换成websocket连接 2023-11-22 16:40:10 +08:00
“huailei000”
84c413f51a perf: 优化日志审计默认筛选截止时间多一天 2023-11-22 15:03:56 +08:00
“huailei000”
87a1cce4ca perf: 优化table列表溢出提示没有复制成功问题 2023-11-22 11:01:46 +08:00
吴小白
be89b5d6f2 Merge pull request #3547 from jumpserver/pr@dev@fix_version
fix: 修正 actions version 获取错误
2023-11-17 09:42:52 +08:00
吴小白
200c727426 fix: 修正 actions version 获取错误 2023-11-17 08:20:27 +08:00
wangruidong
d563f66ba1 perf: 修改翻译 2023-11-16 16:21:58 +08:00
feng626
4592eeddd3 Merge pull request #3544 from jumpserver/pr@dev@user_session
perf: 在线会话添加活跃状态过滤
2023-11-16 14:41:50 +08:00
feng
d73a07dff2 perf: 在线会话添加活跃状态过滤 2023-11-16 14:40:16 +08:00
“huailei000”
e8857bf150 perf: ldap导入用户不显示操作栏 2023-11-16 10:48:15 +08:00
wangruidong
0abe33053f perf: 修改翻译 2023-11-15 19:33:51 +08:00
“huailei000”
dc9161c6a7 perf:优化el-data-table组件分页多选记录不准确问题 2023-11-15 19:03:56 +08:00
老广
d588be696b Merge pull request #3540 from jumpserver/pr@dev@perf_winrm_private
perf: 修改 winrm 用户不能连接
2023-11-15 15:40:03 +08:00
ibuler
4b2c806f28 perf: 修改 winrm 用户不能连接 2023-11-15 15:39:15 +08:00
老广
e28b026ead Merge pull request #3539 from jumpserver/pr@dev@fix_select_options_error
fix: 对象存储下拉无法自动加载
2023-11-15 14:58:55 +08:00
wangruidong
c7414e0199 fix: 对象存储下拉无法自动加载 2023-11-15 14:51:38 +08:00
“huailei000”
5a478ebaba perf: 优化用户详情字段不显示问题 2023-11-15 12:17:40 +08:00
老广
08577f0ae5 Merge pull request #3536 from jumpserver/pr@dev@perf_ticket_item_error
perf: 优化工单详情页面渲染卡顿问题
2023-11-15 11:43:16 +08:00
“huailei000”
38527c6a41 perf: 优化工单详情页面渲染卡顿问题 2023-11-15 11:41:23 +08:00
“huailei000”
01c5b7c4a8 perf: 优化登录复核页面卡顿不显示问题 2023-11-15 10:07:01 +08:00
wangruidong
b0b3e0d1c9 fix: 更新组件批量更新去掉sftp选项 2023-11-14 19:25:44 +08:00
jiangweidong
5bc273d057 fix: 云同步任务详情界面删除无用的按钮 2023-11-14 19:23:27 +08:00
wangruidong
e128576763 fix: 作业日志筛选用户出错 2023-11-14 19:22:58 +08:00
“huailei000”
58f4dca599 perf: 优化 TagInput 组件失去焦点后没有自动填充值问题 2023-11-14 17:29:21 +08:00
老广
a6dd7f23c7 Merge pull request #3530 from jumpserver/pr@dev@fix_user_confirm_dialog
perf: 优化用户确认窗口
2023-11-14 14:23:22 +08:00
ibuler
a267d46464 perf: 优化用户确认窗口 2023-11-14 14:19:33 +08:00
“huailei000”
8c829ee498 perf: 优化markdown组件判断 2023-11-14 14:02:49 +08:00
ibuler
bcfa95de06 perf: 修改用户确认 2023-11-14 13:44:54 +08:00
“huailei000”
56745ae944 perf: 优化个人信息详情字段信息显示 2023-11-14 11:35:04 +08:00
wangruidong
5a664f8c2c fix: 账号备份详情页显示sftp服务器信息 2023-11-13 17:06:18 +08:00
ibuler
1fd29e13f8 perf: 修改 reload 2023-11-13 14:55:27 +08:00
ibuler
af863dae75 perf: 修改 table reload 2023-11-13 14:44:38 +08:00
“huailei000”
b1254d2b87 perf: 优化markdown组件样式 2023-11-10 18:25:58 +08:00
“huailei000”
d350cadd4c perf: 优化资产账号模版反复勾选同一个账号会出现无法选中的问题 2023-11-10 16:10:31 +08:00
“huailei000”
cfe9ebd747 perf: 优化创建账号-指定账号组件重复选择问题;优化创建工单-制定账号重复选择问题 2023-11-10 11:16:56 +08:00
“huailei000”
03177d4ce9 perf: 调整公告背景颜色 2023-11-09 19:22:38 +08:00
ibuler
a55b0da22b perf: 优化用户确认 2023-11-09 18:48:42 +08:00
feng626
1b0bdf25ae Merge pull request #3514 from jumpserver/pr@dev@online_session_active
perf: 在线用户根据websocket添加用户是否活跃状态
2023-11-09 18:15:08 +08:00
“huailei000”
c746cdc639 perf: 平台列表不显示更多操作 2023-11-09 18:08:29 +08:00
“huailei000”
3cf6b6f639 perf: 优化保存快捷命令时,命令不能为空 2023-11-09 18:08:02 +08:00
feng
a1bf8f9ab7 perf: 在线用户根据websocket添加用户是否活跃状态 2023-11-08 16:51:16 +08:00
“huailei000”
5449d74d53 perf: 优化select2组件远程搜索结果为空时是否开启远程搜索状态没有动态更新问题;创建工单搜索资产时不显示问题 2023-11-08 10:21:15 +08:00
jiangweidong
dc401f80b9 fix: 解决更新云同步任务时,优先级无法更新问题 2023-11-07 17:18:45 +08:00
wangruidong
379cd2386a perf: 账号备份增加sftp方式 2023-11-07 15:37:04 +08:00
wangruidong
4e7bdb9c69 perf: 对象存储增加sftp 2023-11-07 15:37:04 +08:00
feng626
41449fb538 Merge pull request #3485 from jumpserver/pr@dev@gather_account
feat: 账号收集添加资产账号信息变化通知
2023-11-07 13:00:45 +08:00
feng626
a75488217c Merge pull request #3495 from jumpserver/pr@dev@su_from
fix: 账号 切换自 翻译修复
2023-11-07 11:09:18 +08:00
feng
8e32792696 fix: 账号 切换自 翻译修复 2023-11-07 11:08:28 +08:00
feng626
b47caf0287 Merge pull request #3493 from jumpserver/pr@dev@account_change_push
fix: 改密 推送 详情里执行任务的权限不对
2023-11-06 18:05:39 +08:00
feng
715ae856f0 fix: 改密 推送 详情里执行任务的权限不对 2023-11-06 18:01:39 +08:00
“huailei000”
19ae27e6c2 perf: ztree父节点是选中状态,点击展开后子节点默认显示选中状态 2023-11-06 16:22:11 +08:00
halo
2132bacff5 feat: 工作台支持配置显示系统工具 2023-11-03 17:34:14 +08:00
老广
e57c5a20d0 Merge pull request #3487 from jumpserver/pr@dev@perf_add_ip_group_access
perf: 更新字段修改
2023-11-02 15:39:48 +08:00
老广
3d35f0aafe Merge pull request #3488 from jumpserver/pr@dev@perf_tag_input
perf: 优化 tab input
2023-11-02 15:38:52 +08:00
ibuler
68ac03db9e perf: 优化 tab input 2023-11-02 15:33:30 +08:00
wangruidong
7b5471a451 perf: 更新字段修改 2023-11-02 15:16:58 +08:00
ibuler
7f052ac85e perf: 优化 tag input 2023-11-02 11:07:20 +08:00
feng
64e75eb9ff feat: 账号收集添加资产账号信息变化通知 2023-11-02 10:50:18 +08:00
ibuler
8e75e5d5e3 perf: 优化 json field m2m 2023-11-02 10:36:00 +08:00
“huailei000”
1810e6833c perf: 公告支持markdown预览 2023-11-01 01:19:09 -05:00
wangruidong
8c7c012785 perf: 添加访问IP控制 2023-10-31 02:45:03 -05:00
feng626
378d82518a Merge pull request #3479 from jumpserver/pr@dev@change_secret_records
feat: 改密记录 推送记录可单独执行
2023-10-31 14:10:53 +08:00
wangruidong
728b04c8e3 perf: 修改语言位置 2023-10-30 21:54:40 -05:00
老广
b8611f095a Merge pull request #3478 from jumpserver/pr@dev@feat_apple_host_support_same_account
feat: 发布机支持使用同名账号连接
2023-10-31 10:19:30 +08:00
feng
f49a1184e2 feat: 改密记录 推送记录可单独执行 2023-10-30 18:42:14 +08:00
dependabot[bot]
77a4441018 build(deps): bump browserify-sign from 4.2.1 to 4.2.2
Bumps [browserify-sign](https://github.com/crypto-browserify/browserify-sign) from 4.2.1 to 4.2.2.
- [Changelog](https://github.com/browserify/browserify-sign/blob/main/CHANGELOG.md)
- [Commits](https://github.com/crypto-browserify/browserify-sign/compare/v4.2.1...v4.2.2)

---
updated-dependencies:
- dependency-name: browserify-sign
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 14:30:10 +08:00
ibuler
18f1f0de79 feat: 发布机支持使用同名账号连接 2023-10-30 11:37:22 +08:00
dependabot[bot]
d252c7dd08 build(deps): bump @babel/traverse from 7.20.1 to 7.23.2
Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.20.1 to 7.23.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 10:38:38 +08:00
dependabot[bot]
e5547f8a4c build(deps): bump crypto-js from 4.1.1 to 4.2.0
Bumps [crypto-js](https://github.com/brix/crypto-js) from 4.1.1 to 4.2.0.
- [Commits](https://github.com/brix/crypto-js/compare/4.1.1...4.2.0)

---
updated-dependencies:
- dependency-name: crypto-js
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 10:37:50 +08:00
jiangweidong
63d6578991 fix: 云账号详情页面更新报错 2023-10-30 10:30:12 +08:00
ibuler
da00ae84a8 perf: 资产授权添加协议 2023-10-30 10:14:01 +08:00
ibuler
74a905ee85 perf: 资产授权添加协议 2023-10-30 10:14:01 +08:00
“huailei000”
a03e985df3 perf: table tooltip 修改鼠标移上图标显示 2023-10-25 16:53:58 +08:00
吴小白
2d6005a4e0 perf: 优化构建 2023-10-25 16:38:41 +08:00
“huailei000”
c4ca28d2d9 perf: 优化table组件内容溢出省略时,鼠标可以移入tooltip 2023-10-25 16:37:59 +08:00
wangruidong
3934c17f52 perf: 增加语言切换功能 2023-10-25 03:03:17 -05:00
“huailei000”
51717f8583 perf: 优化创建api key后关闭弹窗列表不刷新问题 2023-10-25 10:47:17 +08:00
“huailei000”
67e99702c1 perf: 远程应用名称不能包含() 2023-10-24 19:30:50 +08:00
feng626
27ce5a3785 Merge pull request #3462 from jumpserver/pr@dev@account_change_secret
fix: 修改账号改密执行权限
2023-10-24 10:51:35 +08:00
feng
49122bb213 fix: 修改账号改密执行权限 2023-10-24 10:49:41 +08:00
halo
263c4d3f89 fix: 修复权限树自动选择的问题 2023-10-23 04:29:49 -05:00
wangruidong
2ed203dc32 perf: 添加作业中心执行历史配置字段 2023-10-23 04:23:15 -05:00
“huailei000”
742a06ea2d perf: 优化LDAP用户列表导入全部用户失败后没有提示信息问题 2023-10-20 16:15:20 +08:00
“huailei000”
1ad4e2c62e perf: 调整账号列表页面默认激活的tab 2023-10-19 19:15:24 +08:00
jiangweidong
7e29a3e836 fix: 新创建的云同步任务策略为空的问题 2023-10-19 03:57:31 -05:00
“huailei000”
3a66e8323c perf:优化折线图显示不准确问题 2023-10-19 14:38:03 +08:00
feng626
4852e3d26a Merge pull request #3446 from jumpserver/pr@dev@profile
perf: 修改profile icon
2023-10-19 10:44:23 +08:00
feng
80509dc15f perf: 修改profile icon 2023-10-19 10:43:32 +08:00
“huailei000”
601bd4740c perf: 优化账号推送,推送参数不准确问题 2023-10-18 05:53:42 -05:00
老广
62be5885db Merge pull request #3444 from jumpserver/pr@dev@perf_date_expired
perf: 优化日期,去掉 nwaring
2023-10-18 05:53:02 -05:00
ibuler
62e49567cc perf: 优化日期,去掉 nwaring 2023-10-18 18:51:46 +08:00
feng626
f2eff11d66 Merge pull request #3443 from jumpserver/pr@dev@command_filter_acl
fix: 命令过滤,点击命令组跳转到了规则基本信息,而不是命令组那里
2023-10-18 18:46:28 +08:00
feng
ae61586f95 fix: 命令过滤,点击命令组跳转到了规则基本信息,而不是命令组那里 2023-10-18 18:43:46 +08:00
“huailei000”
a08fbc3b77 perf: 优化table组件在有查询条件的情况下列表会重复请求接口的问题 2023-10-18 04:31:22 -05:00
ibuler
53d130f1cf perf: 优化个人设置 2023-10-18 04:30:39 -05:00
ibuler
c05992ce50 perf: 修改许可证 2023-10-18 04:30:18 -05:00
feng626
52522b7095 Merge pull request #3441 from jumpserver/pr@dev@session_ticket
perf: 资产登录工单 去掉session信息
2023-10-18 17:07:34 +08:00
feng
af3f6c5900 perf: 资产登录工单 去掉session信息 2023-10-18 17:06:46 +08:00
ibuler
7b15ca4955 perf: 优化角色创建时权限没有提示 2023-10-17 02:23:35 -05:00
“huailei000”
031016330a perf: 优化查看账号密码控制台报错问题 2023-10-16 15:03:00 +08:00
老广
e274640d2e Merge pull request #3433 from jumpserver/pr@dev@refactor_confirm
perf: 优化确认操作
2023-10-13 17:27:27 +08:00
ibuler
bd3352424c perf: 优化用户确认 2023-10-13 17:24:45 +08:00
ibuler
f8ec2bce0c merge: with dev 2023-10-13 17:06:01 +08:00
ibuler
81f34f0154 perf: remove debug 2023-10-13 17:01:38 +08:00
ibuler
759e205bfb perf: 优化确认操作 2023-10-13 16:55:21 +08:00
halo
fc5029e88a feat: 增加DB2图标 2023-10-13 02:59:35 -05:00
Bai
6fa8052878 fix: 修复连接令牌过期按钮被禁用的问题 2023-10-13 01:36:27 -05:00
feng626
0dc62712d4 Merge pull request #3431 from jumpserver/pr@dev@ticket
perf: 工单配置社区版隐藏
2023-10-13 11:18:43 +08:00
feng
23b08590cf perf: 工单配置社区版隐藏 2023-10-13 11:05:23 +08:00
feng626
8d8ab483e1 Merge pull request #3430 from jumpserver/pr@dev@platform
perf: 资产批量更新平台字段,根据平台约束协议自动生效
2023-10-12 18:11:37 +08:00
feng
fb757686e3 perf: 资产批量更新平台字段,根据平台约束协议自动生效 2023-10-12 16:56:43 +08:00
“huailei000”
6a8161dcaf perf:创建api key,弹窗关闭后刷新列表 2023-10-12 15:51:09 +08:00
ibuler
ae2391f07f perf: 优化数据库必填 2023-10-12 14:50:30 +08:00
ibuler
50a9ce35ad perf: 重构用户确认 2023-10-12 13:57:41 +08:00
“huailei000”
2d2a4be3a2 perf: 优化账号收集、账号改密、账号备份多次点击执行次数不能正常跳转到执行列表问题 2023-10-11 21:58:25 -05:00
Bai
e055429ff2 perf: 优化用户详情 phone 显示 2023-10-11 04:48:54 -05:00
“huailei000”
8727bac560 perf: 登录资产复核增加跳转会话入口 2023-10-11 04:26:04 -05:00
ibuler
fd018dc5ac perf: 仅本地用户允许使用 passkey 2023-10-11 04:24:38 -05:00
“huailei000”
4c3673aef2 perf: 优化账号模版同步更新账号信息 2023-10-11 04:23:29 -05:00
feng626
4eb61373e0 Merge pull request #3423 from jumpserver/pr@dev@profile
perf: 左上角profile accesskey 改成个人设置
2023-10-11 14:21:34 +08:00
feng
8e8dd38e2e perf: 左上角profile accesskey 改成个人设置 2023-10-11 14:21:00 +08:00
jiangweidong
f8b7720e2c feat: 支持自定义短信认证(文件) 2023-10-10 22:19:57 -05:00
ibuler
50af6fe017 perf: 优化确认的 dialog 2023-10-10 18:24:14 +08:00
feng626
8bc617c4a7 Merge pull request #3421 from jumpserver/pr@dev@user_notice
perf: 用户首次登录 条款和条件 提示优化
2023-10-10 18:23:47 +08:00
feng
f75d69601b perf: 用户首次登录 条款和条件 提示优化 2023-10-10 18:22:35 +08:00
Aaron3S
f54d819ec8 feat: 快捷命令增加设置执行目录 2023-10-10 07:49:57 +05:00
Eric
c50db4089c perf: 隐藏设置 terminal_theme_name 2023-10-10 07:42:12 +05:00
feng626
a6d7cc1215 Merge pull request #3416 from jumpserver/pr@dev@asset_notice
feat: 登录资产消息提示
2023-10-07 17:46:39 +08:00
feng
f6a2fcbbea feat: 登录资产消息提示 2023-10-07 17:44:27 +08:00
feng
071822e665 fix: 系统设置 邮件设置 不能设置后缀 2023-09-27 13:17:52 +05:00
“huailei000”
063dc9f8e1 perf: 优化资产授权详情、账号改密详情中已经添加了的资产没有给出标记还能重复选择的问题 2023-09-27 13:16:39 +05:00
“huailei000”
66e90f189c perf: 列表搜索框退格键可以删除搜索条件 2023-09-26 15:11:56 +08:00
feng626
bdd1a86568 Merge pull request #3410 from jumpserver/pr@dev@user_login_reminder
feat: 用户登录提醒
2023-09-25 16:26:10 +08:00
feng
01d0c9a0c2 feat: 用户登录提醒 2023-09-25 16:24:56 +08:00
909 changed files with 28147 additions and 18657 deletions

View File

@@ -22,4 +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_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

@@ -10,3 +10,4 @@ jobs:
- uses: jumpserver/action-generic-handler@master
env:
GITHUB_TOKEN: ${{ secrets.PRIVATE_TOKEN }}
I18N_TOKEN: ${{ secrets.I18N_TOKEN }}

View File

@@ -19,9 +19,7 @@ jobs:
id: get_version
run: |
TAG=$(basename ${GITHUB_REF})
VERSION=${TAG/v/}
echo "::set-output name=TAG::$TAG"
echo "::set-output name=VERSION::$VERSION"
- name: Create Release
id: create_release
uses: release-drafter/release-drafter@v5
@@ -33,17 +31,27 @@ jobs:
tag: ${{ steps.get_version.outputs.TAG }}
- uses: actions/setup-node@v2
with:
node-version: '14.16'
build-and-release:
needs: create-realese
name: Build and Release
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build it and upload
uses: jumpserver/action-build-upload-assets@node14.16
node-version: '16.20'
- name: Install dependencies
run: yarn install
- name: Build web
run: |
sed -i "s@version-dev@${{ steps.get_version.outputs.TAG }}@g" src/layout/components/NavHeader/About.vue
yarn build
- name: Create Upload Assets
run: |
rm -rf build/*
mv lina lina-${{ steps.get_version.outputs.TAG }}
tar -czf lina-${{ steps.get_version.outputs.TAG }}.tar.gz lina-${{ steps.get_version.outputs.TAG }}
echo $(md5sum lina-${{ steps.get_version.outputs.TAG }}.tar.gz | awk '{print $1}') > build/lina-${{ steps.get_version.outputs.TAG }}.tar.gz.md5
mv lina-${{ steps.get_version.outputs.TAG }}.tar.gz build/
- name: Release Upload Assets
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
with:
draft: true
files: |
build/lina-${{ steps.get_version.outputs.TAG }}.tar.gz
build/lina-${{ steps.get_version.outputs.TAG }}.tar.gz.md5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create-realese.outputs.upload_url }}

View File

@@ -1,4 +1,4 @@
FROM node:16.17.1-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",
@@ -20,26 +20,30 @@
"vue-i18n-report": "vue-i18n-extract report -v './src/**/*.?(js|vue)' -l './src/i18n/langs/**/*.json'",
"vue-i18n-report-json": "vue-i18n-extract report -v './src/**/*.?(js|vue)' -l './src/i18n/langs/**/*.json' -o /tmp/abc.json",
"vue-i18n-report-add-miss": "vue-i18n-extract report -v './src/**/*.?(js|vue)' -l './src/i18n/langs/**/*.json' -a",
"diff-i18n": "python ./src/i18n/langs/i18n-util.py diff en ja",
"apply-i18n": "python ./src/i18n/langs/i18n-util.py apply en ja"
"diff-i18n": "python ./src/i18n/langs/i18n-util.py diff en ja zh_Hant",
"apply-i18n": "python ./src/i18n/langs/i18n-util.py apply en ja zh_Hant"
},
"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.21.1",
"axios": "0.28.0",
"axios-retry": "^3.1.9",
"cron-parser": "^4.0.0",
"crypto-js": "^4.1.1",
"css-color-function": "^1.3.3",
"decimal.js": "^10.4.3",
"deepmerge": "^4.2.2",
"echarts": "^4.7.0",
"element-ui": "2.13.2",
"dompurify": "^3.1.6",
"echarts": "4.7.0",
"element-ui": "2.15.14",
"eslint-plugin-html": "^6.0.0",
"highlight.js": "^11.9.0",
"install": "^0.13.0",
"jquery": "^3.6.1",
"js-cookie": "2.2.0",
"jsencrypt": "^3.2.1",
"krry-transfer": "^1.7.3",
"less": "^3.10.3",
"less-loader": "^5.0.0",
"lodash": "^4.17.21",
@@ -54,12 +58,15 @@
"lodash.set": "^4.3.2",
"lodash.topairs": "^4.3.0",
"lodash.values": "^4.3.0",
"markdown-it": "^13.0.2",
"markdown-it-link-attributes": "^4.0.1",
"moment": "^2.29.4",
"moment-parseformat": "^4.0.0",
"normalize.css": "7.0.0",
"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",
@@ -79,7 +86,7 @@
"zxcvbn": "^4.4.2"
},
"devDependencies": {
"@babel/core": "7.0.0",
"@babel/core": "7.18.6",
"@babel/register": "7.0.0",
"@vue/cli-plugin-babel": "3.6.0",
"@vue/cli-plugin-eslint": "^3.9.1",
@@ -93,6 +100,7 @@
"chalk": "2.4.2",
"compression-webpack-plugin": "^6.1.1",
"connect": "3.6.6",
"deasync": "^0.1.29",
"element-theme-chalk": "^2.13.1",
"eslint": "^5.15.3",
"eslint-plugin-vue": "5.2.2",
@@ -109,6 +117,7 @@
"script-ext-html-webpack-plugin": "2.1.3",
"script-loader": "0.7.2",
"serve-static": "^1.13.2",
"strip-ansi": "^7.1.0",
"svg-sprite-loader": "4.1.3",
"svgo": "1.2.2",
"vue-i18n-extract": "^1.1.1",

View File

@@ -27,6 +27,9 @@
if(pathname.indexOf('/ui') === -1) {
window.location.href = window.location.origin + '/ui/#' + pathname
}
if (pathname.startsWith('/ui/#/chat')) {
window.location.href = window.location.origin + pathname
}
}
</script>
<div id="app"></div>

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: 90vh;
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>

View File

@@ -42,8 +42,10 @@ export function getCommandFilterList(data) {
export function getCategoryTypes() {
return request({
url: '/api/v1/assets/categories/',
url: '/api/v1/assets/categories/?limit=1000',
method: 'get'
}).then(res => {
return res.results
})
}

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

@@ -52,3 +52,22 @@ export function createJob(form) {
data: form
})
}
export function StopJob(form) {
return request({
url: '/api/v1/ops/job-executions/stop/',
method: 'post',
data: form
})
}
export function JobUploadFile(form) {
return request({
url: '/api/v1/ops/jobs/upload/',
method: 'post',
headers: { 'Content-Type': 'multipart/form-data' },
timeout: 60 * 60 * 1000,
data: form
})
}

View File

@@ -12,7 +12,6 @@ export function getProfile(token) {
return request({
url: '/api/v1/users/profile/',
method: 'get'
// params: { token }
})
}

BIN
src/assets/img/chat.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="transparent" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bot "><path d="M12 8V4H8"></path><rect width="16" height="12" x="4" y="8" rx="2"></rect><path d="M2 14h2"></path><path d="M20 14h2"></path><path d="M15 13v2"></path><path d="M9 13v2"></path></svg>

After

Width:  |  Height:  |  Size: 406 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 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

@@ -0,0 +1,196 @@
import { UpdateToken, UploadSecret } from '@/components/Form/FormFields'
import Select2 from '@/components/Form/FormFields/Select2.vue'
import { Required, RequiredChange } from '@/components/Form/DataForm/rules'
import AutomationParamsForm from '@/views/assets/Platform/AutomationParamsSetting.vue'
export const accountFieldsMeta = (vm) => {
const defaultPrivilegedAccounts = ['root', 'administrator']
return {
assets: {
component: Select2,
label: vm.$t('Assets'),
rules: [Required],
el: {
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
}
},
template: {
component: Select2,
rules: [Required],
el: {
multiple: false,
ajax: {
url: '/api/v1/accounts/account-templates/',
transformOption: (item) => {
return { label: item.name, value: item.id }
}
}
},
hidden: () => {
return vm.platform || vm.asset || !vm.addTemplate
}
},
on_invalid: {
rules: [Required],
label: vm.$t('AccountPolicy'),
helpTip: vm.$t('AccountPolicyHelpText'),
hidden: () => {
return vm.platform || vm.asset
}
},
name: {
label: vm.$t('Name'),
rules: [RequiredChange],
on: {
input: ([value], updateForm) => {
if (!vm.usernameChanged) {
if (!vm.account?.name) {
updateForm({ username: value })
}
const maybePrivileged = defaultPrivilegedAccounts.includes(value)
if (maybePrivileged) {
updateForm({ privileged: true })
}
}
}
},
hidden: () => {
return vm.addTemplate
}
},
username: {
el: {
disabled: !!vm.account?.name
},
on: {
input: ([value], updateForm) => {
vm.usernameChanged = true
},
change: ([value], updateForm) => {
const maybePrivileged = defaultPrivilegedAccounts.includes(value)
if (maybePrivileged) {
updateForm({ privileged: true })
}
}
},
hidden: () => {
return vm.addTemplate
}
},
privileged: {
label: vm.$t('Privileged'),
hidden: () => {
return vm.addTemplate
}
},
su_from: {
component: Select2,
hidden: (formValue) => {
return !vm.asset?.id || !vm.iPlatform.su_enabled
},
el: {
multiple: false,
clearable: true,
ajax: {
url: `/api/v1/accounts/accounts/su-from-accounts/?account=${vm.account?.id || ''}&asset=${vm.asset?.id || ''}`,
transformOption: (item) => {
return { label: `${item.name}(${item.username})`, value: item.id }
}
}
}
},
su_from_username: {
label: vm.$t('UserSwitchFrom'),
hidden: (formValue) => {
return vm.platform || vm.asset || vm.addTemplate
}
},
password: {
label: vm.$t('Password'),
component: UpdateToken,
hidden: (formValue) => {
return formValue.secret_type !== 'password' || vm.addTemplate
}
},
ssh_key: {
label: vm.$t('PrivateKey'),
component: UploadSecret,
hidden: (formValue) => formValue.secret_type !== 'ssh_key' || vm.addTemplate
},
passphrase: {
label: vm.$t('Passphrase'),
component: UpdateToken,
hidden: (formValue) => formValue.secret_type !== 'ssh_key' || vm.addTemplate
},
token: {
label: vm.$t('Token'),
component: UploadSecret,
hidden: (formValue) => formValue.secret_type !== 'token' || vm.addTemplate
},
access_key: {
id: 'access_key',
label: vm.$t('AccessKey'),
component: UploadSecret,
hidden: (formValue) => formValue.secret_type !== 'access_key' || vm.addTemplate
},
api_key: {
id: 'api_key',
label: vm.$t('ApiKey'),
component: UploadSecret,
hidden: (formValue) => formValue.secret_type !== 'api_key' || vm.addTemplate
},
secret_type: {
type: 'radio-group',
options: [],
hidden: () => {
return vm.addTemplate
}
},
push_now: {
helpTip: vm.$t('WindowsPushHelpText'),
hidden: (formValue) => {
const automation = vm.iPlatform.automation || {}
return !automation.push_account_enabled ||
!automation.ansible_enabled ||
!vm.$hasPerm('accounts.push_account') ||
(formValue.secret_type === 'ssh_key' && vm.iPlatform.type.value === 'windows') ||
vm.addTemplate
}
},
params: {
label: vm.$t('PushParams'),
component: AutomationParamsForm,
el: {},
hidden: (formValue) => {
const automation = vm.iPlatform.automation || {}
vm.fieldsMeta.params.el.method = vm.iPlatform.automation.push_account_method
vm.fieldsMeta.params.el.pushAccountParams = vm.iPlatform.automation.push_account_params
return !formValue.push_now ||
!automation.push_account_enabled ||
!automation.ansible_enabled ||
(formValue.secret_type === 'ssh_key' &&
vm.iPlatform.type.value === 'windows') ||
!vm.$hasPerm('accounts.push_account') ||
vm.addTemplate
}
},
is_active: {
label: vm.$t('IsActive')
},
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"
/>
@@ -9,12 +11,8 @@
<script>
import AutoDataForm from '@/components/Form/AutoDataForm/index.vue'
import { UpdateToken, UploadSecret } from '@/components/Form/FormFields'
import Select2 from '@/components/Form/FormFields/Select2.vue'
import AssetSelect from '@/components/Apps/AssetSelect/index.vue'
import { encryptPassword } from '@/utils/crypto'
import { Required, RequiredChange } from '@/components/Form/DataForm/rules'
import AutomationParamsForm from '@/views/assets/Platform/AutomationParamsSetting.vue'
import { accountFieldsMeta } from '@/components/Apps/AccountCreateUpdateForm/const'
export default {
name: 'AccountCreateForm',
@@ -48,7 +46,7 @@ export default {
return {
loading: true,
usernameChanged: false,
defaultPrivilegedAccounts: ['root', 'administrator'],
submitBtnText: this.$t('Confirm'),
iPlatform: {
automation: {},
su_enabled: false,
@@ -63,187 +61,15 @@ 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: {
assets: {
rules: [Required],
component: AssetSelect,
label: this.$t('assets.Asset'),
el: {
multiple: false
},
hidden: () => {
return this.platform || this.asset
}
},
template: {
component: Select2,
rules: [Required],
el: {
multiple: false,
ajax: {
url: '/api/v1/accounts/account-templates/',
transformOption: (item) => {
return { label: item.name, value: item.id }
}
}
},
hidden: () => {
return this.platform || this.asset || !this.addTemplate
}
},
on_invalid: {
rules: [Required],
label: this.$t('accounts.AccountPolicy'),
helpText: this.$t('accounts.BulkCreateStrategy'),
hidden: () => {
return this.platform || this.asset
}
},
name: {
rules: [RequiredChange],
on: {
input: ([value], updateForm) => {
if (!this.usernameChanged) {
if (!this.account?.name) {
updateForm({ username: value })
}
const maybePrivileged = this.defaultPrivilegedAccounts.includes(value)
if (maybePrivileged) {
updateForm({ privileged: true })
}
}
}
},
hidden: () => {
return this.addTemplate
}
},
username: {
el: {
disabled: !!this.account?.name
},
on: {
input: ([value], updateForm) => {
this.usernameChanged = true
},
change: ([value], updateForm) => {
const maybePrivileged = this.defaultPrivilegedAccounts.includes(value)
if (maybePrivileged) {
updateForm({ privileged: true })
}
}
},
hidden: () => {
return this.addTemplate
}
},
privileged: {
hidden: () => {
return this.addTemplate
}
},
su_from: {
component: Select2,
hidden: (formValue) => {
return !this.asset?.id || !this.iPlatform.su_enabled
},
el: {
multiple: false,
clearable: true,
ajax: {
url: `/api/v1/accounts/accounts/su-from-accounts/?account=${this.account?.id || ''}&asset=${this.asset?.id || ''}`,
transformOption: (item) => {
return { label: `${item.name}(${item.username})`, value: item.id }
}
}
}
},
su_from_username: {
label: this.$t('assets.UserSwitchFrom'),
hidden: (formValue) => {
return this.platform || this.asset || this.addTemplate
}
},
password: {
label: this.$t('assets.Password'),
component: UpdateToken,
hidden: (formValue) => formValue.secret_type !== 'password' || this.addTemplate
},
ssh_key: {
label: this.$t('assets.PrivateKey'),
component: UploadSecret,
hidden: (formValue) => formValue.secret_type !== 'ssh_key' || this.addTemplate
},
passphrase: {
label: this.$t('assets.Passphrase'),
component: UpdateToken,
hidden: (formValue) => formValue.secret_type !== 'ssh_key' || this.addTemplate
},
token: {
label: this.$t('assets.Token'),
component: UploadSecret,
hidden: (formValue) => formValue.secret_type !== 'token' || this.addTemplate
},
access_key: {
id: 'access_key',
label: this.$t('assets.AccessKey'),
component: UploadSecret,
hidden: (formValue) => formValue.secret_type !== 'access_key' || this.addTemplate
},
api_key: {
id: 'api_key',
label: this.$t('assets.ApiKey'),
component: UploadSecret,
hidden: (formValue) => formValue.secret_type !== 'api_key' || this.addTemplate
},
secret_type: {
type: 'radio-group',
options: [],
hidden: () => {
return this.addTemplate
}
},
push_now: {
helpText: this.$t('accounts.AccountPush.WindowsPushHelpText'),
hidden: (formValue) => {
const automation = this.iPlatform.automation || {}
return !automation.push_account_enabled ||
!automation.ansible_enabled ||
!this.$hasPerm('accounts.push_account') ||
(formValue.secret_type === 'ssh_key' && this.iPlatform.type.value === 'windows') ||
this.addTemplate
}
},
params: {
label: this.$t('assets.PushParams'),
component: AutomationParamsForm,
el: {
method: this.asset?.auto_config?.push_account_method
},
hidden: (formValue) => {
const automation = this.iPlatform.automation || {}
return !formValue.push_now ||
!automation.push_account_enabled ||
!automation.ansible_enabled ||
!this.$hasPerm('accounts.push_account') ||
this.addTemplate
}
},
comment: {
hidden: () => {
return this.addTemplate
}
}
},
fieldsMeta: accountFieldsMeta(this),
hasSaveContinue: false
}
},
@@ -251,11 +77,18 @@ export default {
try {
await this.getPlatform()
this.setSecretTypeOptions()
this.getDefaultAssets()
} finally {
this.loading = false
}
},
methods: {
async getDefaultAssets() {
const assetId = this.$route.query.asset_id
if (assetId && !this.form.name) {
this.form.assets = [assetId]
}
},
async getPlatform() {
if (this.platform) {
this.iPlatform = this.platform
@@ -269,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'
}
]
@@ -321,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

@@ -0,0 +1,87 @@
<template>
<GenericUpdateFormDialog
v-if="visible"
:form-setting="formSetting"
:selected-rows="selectedRows"
:visible="visible"
v-on="$listeners"
/>
</template>
<script>
import { GenericUpdateFormDialog } from '@/layout/components'
import { accountFieldsMeta } from '@/components/Apps/AccountCreateUpdateForm/const'
import { encryptPassword } from '@/utils/crypto'
export default {
name: 'AccountBulkUpdateDialog',
components: {
GenericUpdateFormDialog
},
props: {
visible: {
type: Boolean,
default: false
},
selectedRows: {
type: Array,
default: () => ([])
}
},
data() {
return {
formSetting: {
url: '/api/v1/accounts/accounts/',
hasSaveContinue: false,
fields: [],
fieldsMeta: accountFieldsMeta(this),
cleanOtherFormValue: (formValue) => {
for (const value of formValue) {
Object.keys(value).forEach((item, index, arr) => {
if (['ssh_key', 'token', 'access_key', 'api_key', 'password'].includes(item)) {
value['secret'] = encryptPassword(value[item])
delete value[item]
}
})
}
return formValue
}
}
}
},
created() {
this.filterFieldsMeta()
},
methods: {
filterFieldsMeta() {
let fields = ['privileged']
const fieldsMeta = {}
const secretFields = ['password', 'ssh_key', 'passphrase', 'token', 'access_key', 'api_key']
const secret_type = this.selectedRows[0].secret_type?.value || 'password'
for (const field of secretFields) {
if (secret_type === 'ssh_key' && field === 'passphrase') {
fields.push('passphrase')
this.formSetting.fieldsMeta['passphrase'].hidden = () => false
continue
}
if (secret_type === field) {
fields.push(field)
this.formSetting.fieldsMeta[field].hidden = () => false
continue
}
delete this.formSetting.fieldsMeta[field]
}
fields = fields.concat(['is_active', 'comment'])
for (const field of fields) {
fieldsMeta[field] = this.formSetting.fieldsMeta[field]
}
this.formSetting.fields = fields
this.formSetting.fieldsMeta = fieldsMeta
}
}
}
</script>
<style scoped>
</style>

View File

@@ -8,7 +8,7 @@
:title="title"
:visible.sync="iVisible"
v-bind="$attrs"
width="70%"
width="900px"
v-on="$listeners"
>
<AccountCreateUpdateForm
@@ -53,7 +53,7 @@ export default {
title: {
type: String,
default: function() {
return this.$t('assets.AddAccount')
return this.$t('AddAccount')
}
}
},
@@ -92,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
}
}
@@ -114,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) {
@@ -127,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)
}
@@ -172,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,13 @@
v-if="showResultDialog"
:result="createAccountResults"
:visible.sync="showResultDialog"
@close-all="closeAll"
/>
<AccountBulkUpdateDialog
v-if="updateSelectedDialogSetting.visible"
:visible.sync="updateSelectedDialogSetting.visible"
v-bind="updateSelectedDialogSetting"
@update="handleAccountBulkUpdate"
/>
</div>
</template>
@@ -49,10 +56,12 @@ import AccountCreateUpdate from './AccountCreateUpdate.vue'
import { connectivityMeta } from './const'
import { openTaskPage } from '@/utils/jms'
import ResultDialog from './BulkCreateResultDialog.vue'
import AccountBulkUpdateDialog from '@/components/Apps/AccountListTable/AccountBulkUpdateDialog.vue'
export default {
name: 'AccountListTable',
components: {
AccountBulkUpdateDialog,
ResultDialog,
ListTable,
UpdateSecretInfo,
@@ -110,13 +119,16 @@ export default {
columnsDefault: {
type: Array,
default: () => ([
'name', 'username', 'asset', 'privileged',
'secret_type', 'is_active', 'date_updated'
'name', 'username', 'asset', 'date_updated'
])
},
headerExtraActions: {
type: Array,
default: () => []
},
extraQuery: {
type: Object,
default: () => ({})
}
},
data() {
@@ -128,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: '',
@@ -138,9 +151,7 @@ export default {
app: 'assets',
resource: 'account'
},
extraQuery: {
order: '-date_updated'
},
extraQuery: this.extraQuery,
columnsExclude: ['spec_info'],
columnsShow: {
min: ['name', 'username', 'actions'],
@@ -148,6 +159,7 @@ export default {
},
columnsMeta: {
name: {
width: '120px',
formatter: function(row) {
const to = {
name: 'AssetAccountDetail',
@@ -161,7 +173,6 @@ export default {
}
},
asset: {
label: this.$t('assets.Asset'),
formatter: function(row) {
const to = {
name: 'AssetDetail',
@@ -174,8 +185,10 @@ export default {
}
}
},
username: {
width: '120px'
},
secret_type: {
width: '100px',
formatter: function(row) {
return row.secret_type.label
}
@@ -186,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,
@@ -206,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 }) => {
@@ -224,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('common.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 }) => {
@@ -255,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'))
})
}
}
@@ -279,22 +291,16 @@ export default {
}
},
headerActions: {
hasLabelSearch: true,
hasLeftActions: this.hasLeftActions,
hasMoreActions: true,
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'),
@@ -303,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
},
@@ -313,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
@@ -330,7 +336,6 @@ export default {
setTimeout(() => {
vm.iAsset = this.asset
vm.account = {}
vm.accountCreateUpdateTitle = this.$t('assets.AddAccount')
vm.showAddTemplateDialog = true
})
}
@@ -339,23 +344,63 @@ export default {
],
extraMoreActions: [
{
name: 'ClearSecrets',
title: this.$t('common.ClearSecret'),
name: 'TestSelected',
title: this.$t('TestSelected'),
type: 'primary',
fa: 'clean',
icon: 'fa-link',
can: ({ selectedRows }) => {
return selectedRows.length > 0 &&
['clickhouse', 'redis', 'website', 'chatgpt'].indexOf(selectedRows[0].asset.type.value) === -1 &&
!this.$store.getters.currentOrgIsRoot
},
callback: function({ selectedRows }) {
const ids = selectedRows.map(v => {
return v.id
})
this.$axios.post(
'/api/v1/accounts/accounts/tasks/',
{ action: 'verify', accounts: ids }).then(res => {
openTaskPage(res['task'])
}).catch(err => {
this.$message.error(this.$tc('BulkVerifyErrorMsg' + ' ' + err))
})
}.bind(this)
},
{
name: 'BatchClearSecret',
title: this.$t('ClearSecret'),
type: 'primary',
icon: 'clean',
can: ({ selectedRows }) => {
return selectedRows.length > 0 && vm.$hasPerm('accounts.change_account')
},
callback: function({ selectedRows }) {
const ids = selectedRows.map(v => { return v.id })
const ids = selectedRows.map(v => {
return v.id
})
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: 'UpdateSelected',
title: this.$t('UpdateSelected'),
icon: 'batch-update',
can: ({ selectedRows }) => {
return selectedRows.length > 0 &&
!this.$store.getters.currentOrgIsRoot &&
vm.$hasPerm('accounts.change_account') &&
selectedRows.every(i => i.secret_type.value === selectedRows[0].secret_type.value)
},
callback: ({ selectedRows }) => {
vm.updateSelectedDialogSetting.selectedRows = selectedRows
vm.updateSelectedDialogSetting.visible = true
}
}
],
canBulkDelete: vm.$hasPerm('accounts.delete_account'),
@@ -364,6 +409,10 @@ export default {
exclude: ['asset']
},
hasSearch: true
},
updateSelectedDialogSetting: {
visible: false,
selectedRows: []
}
}
},
@@ -387,19 +436,34 @@ 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 }) => {
this.$axios.delete(`/api/v1/accounts/accounts/${row.id}/`).then(() => {
this.$message.success(this.$tc('common.deleteSuccessMsg'))
this.$refs.ListTable.reloadTable()
const msg = this.$t('AccountDeleteConfirmMsg')
this.$confirm(msg, this.$tc('Info'), {
type: 'warning',
confirmButtonClass: 'el-button--danger',
beforeClose: async(action, instance, done) => {
if (action !== 'confirm') return done()
this.$axios.delete(`/api/v1/accounts/accounts/${row.id}/`).then(() => {
done()
this.$refs.ListTable.reloadTable()
this.$message.success(this.$tc('DeleteSuccessMsg'))
})
}
})
}
}
)
}
},
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)
@@ -417,11 +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

@@ -0,0 +1,112 @@
<template>
<Dialog
:destroy-on-close="true"
:show-cancel="false"
:visible.sync="show"
:width="'50'"
v-bind="$attrs"
@confirm="accountConfirmHandle"
v-on="$listeners"
/>
</template>
<script>
import Dialog from '@/components/Dialog/index.vue'
import { openTaskPage } from '@/utils/jms'
export default {
name: 'RemoveAccount',
components: {
Dialog
},
props: {
accounts: {
type: Array,
default: () => []
},
visible: {
type: Boolean,
default: false
}
},
data() {
return {
show: false,
mfaDialogVisible: true
}
},
computed: {},
mounted() {
const url = `/api/v1/accounts/accounts/tasks/`
this.$axios.post(
url, { disableFlashErrorMsg: true, action: 'remove' }
).then(resp => {
this.$axios.post(
`/api/v1/accounts/accounts/tasks/`,
{
action: 'remove',
gather_accounts: this.accounts.map(account => account.id)
}
).then(res => {
openTaskPage(res['task'])
})
})
},
methods: {
accountConfirmHandle() {
this.show = false
this.mfaDialogVisible = false
},
exit() {
this.$emit('update:visible', false)
}
}
}
</script>
<style lang="scss" scoped>
.item-textarea ::v-deep .el-textarea__inner {
height: 110px;
}
.el-form-item {
border-bottom: 1px solid #EBEEF5;
padding: 5px 0;
margin-bottom: 0;
&:last-child {
border-bottom: none;
}
::v-deep .el-form-item__label {
padding-right: 20px;
line-height: 30px;
}
::v-deep .el-form-item__content {
line-height: 30px;
pre {
margin: 0;
}
}
}
ul {
margin: 0;
}
li {
display: block;
font-size: 13px;
margin-bottom: 8px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
.title {
color: #303133;
font-weight: 500;
}
}
</style>

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

@@ -1,12 +1,5 @@
<template>
<div>
<div v-if="mfaDialogVisible">
<UserConfirmDialog
:url="url"
@UserConfirmCancel="exit"
@UserConfirmDone="getAuthInfo"
/>
</div>
<Dialog
:destroy-on-close="true"
:show-cancel="false"
@@ -17,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">
@@ -34,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"
@@ -67,7 +60,6 @@
<script>
import Dialog from '@/components/Dialog/index.vue'
import PasswordHistoryDialog from './PasswordHistoryDialog.vue'
import UserConfirmDialog from '@/components/Apps/UserConfirmDialog/index.vue'
import { ShowKeyCopyFormatter } from '@/components/Table/TableFormatters'
import { encryptPassword } from '@/utils/crypto'
@@ -76,7 +68,6 @@ export default {
components: {
Dialog,
PasswordHistoryDialog,
UserConfirmDialog,
ShowKeyCopyFormatter
},
props: {
@@ -92,10 +83,14 @@ export default {
type: String,
default: ''
},
type: {
type: String,
default: 'account'
},
title: {
type: String,
default: function() {
return this.$tc('assets.AccountDetail')
return this.$tc('Detail')
}
},
showPasswordRecord: {
@@ -128,7 +123,10 @@ export default {
const url = `/api/v1/accounts/account-secrets/${this.account.id}/histories/?limit=1`
this.$axios.get(url, { disableFlashErrorMsg: true }).then(resp => {
this.versions = resp.count
this.showSecretDialog()
})
} else {
this.showSecretDialog()
}
},
methods: {
@@ -142,14 +140,15 @@ export default {
name: this.secretInfo.name,
secret: encryptPassword(this.modifiedSecret)
}
this.$axios.patch(`/api/v1/accounts/accounts/${this.account.id}/`, params).then(() => {
this.$message.success(this.$tc('common.updateSuccessMsg'))
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('UpdateSuccessMsg'))
})
},
getAuthInfo() {
this.$axios.get(this.url, { disableFlashErrorMsg: true }).then(resp => {
this.secretInfo = resp
this.sshKeyFingerprint = resp?.spec_info?.ssh_key_fingerprint || '-'
showSecretDialog() {
return this.$axios.get(this.url, { disableFlashErrorMsg: true }).then((res) => {
this.secretInfo = res
this.sshKeyFingerprint = res?.spec_info?.ssh_key_fingerprint || '-'
this.showSecret = true
})
},
@@ -168,7 +167,7 @@ export default {
</script>
<style lang="scss" scoped>
.item-textarea >>> .el-textarea__inner {
.item-textarea ::v-deep .el-textarea__inner {
height: 110px;
}
@@ -181,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,10 +1,11 @@
<template>
<Dialog
:title="$tc('assets.Assets')"
:close-on-click-modal="false"
:title="$tc('Assets')"
custom-class="asset-select-dialog"
top="1vh"
top="2vh"
v-bind="$attrs"
width="80vw"
width="1000px"
@cancel="handleCancel"
@close="handleClose"
@confirm="handleConfirm"
@@ -14,7 +15,9 @@
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"
class="tree-table"
@@ -52,6 +55,10 @@ export default {
disabled: {
type: [Boolean, Function],
default: false
},
treeSetting: {
type: Object,
default: () => ({})
}
},
data() {
@@ -67,32 +74,22 @@ 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
}
},
{
prop: 'protocols',
formatter: function(row) {
const data = row.protocols.map(p => {
return <el-tag size='mini'>{p.name}/{p.port} </el-tag>
})
return <span> {data} </span>
},
label: this.$t('assets.Protocols')
},
{
prop: 'actions',
has: false
@@ -114,15 +111,21 @@ export default {
headerActions: {
hasLeftActions: false,
hasRightActions: false,
hasLabelSearch: true,
searchConfig: {
getUrlQuery: false
}
}
}
},
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)
@@ -168,7 +171,7 @@ export default {
}
.right {
height: calc(100vh - 200px);
min-height: 500px;
overflow: auto;
}

View File

@@ -13,6 +13,7 @@
ref="dialog"
:base-node-url="baseNodeUrl"
:base-url="baseUrl"
:tree-setting="treeSetting"
:tree-url-query="treeUrlQuery"
:value="value"
:visible.sync="dialogVisible"
@@ -48,6 +49,10 @@ export default {
value: {
type: Array,
default: () => []
},
treeSetting: {
type: Object,
default: () => ({})
}
},
data() {
@@ -131,15 +136,22 @@ export default {
.tree-table {
.left {
padding: 5px;
padding: 5px 0;
.ztree {
height: calc(100vh - 250px) !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"
>
@@ -60,14 +61,17 @@ export default {
const showAssets = this.treeSetting?.showAssets || this.showAssets
const treeUrlQuery = this.setTreeUrlQuery()
const assetTreeUrl = `${this.treeUrl}?assets=${showAssets ? '1' : '0'}&${treeUrlQuery}`
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,
@@ -81,19 +85,26 @@ export default {
nodeUrl: this.nodeUrl,
treeUrl: assetTreeUrl,
callback: {
onSelected: (event, treeNode) => this.getAssetsUrl(treeNode)
onSelected: (event, treeNode) => this.getAssetsUrl(treeNode),
beforeRefresh: () => {
const query = { ...this.$route.query, node_id: '', asset_id: '' }
setTimeout(() => {
vm.$router.replace({ query: query })
}, 100)
}
},
...this.treeSetting
}
},
{
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'}`,
@@ -107,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
@@ -163,13 +177,15 @@ export default {
}
const query = this.setTreeUrlQuery()
url = query ? `${url}&${query}` : url
this.$set(this.tableConfig, 'url', url)
setRouterQuery(this, url)
setTimeout(() => {
this.$set(this.tableConfig, 'url', url)
}, 300)
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: {
@@ -120,7 +120,6 @@ export default {
},
async mounted() {
await this.getUrlMeta()
await this.handleFieldChange()
},
methods: {
async getUrlMeta() {

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

@@ -5,17 +5,19 @@
size="mini"
type="primary"
@click="onOpenDialog"
>{{ $tc('common.View') }}</el-button>
>
{{ $tc('View') }}
<span>({{ $tc('LockedIP', ipCounts ) }})</span>
</el-button>
</div>
<Dialog
v-if="visible"
: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 />
@@ -41,7 +43,7 @@ export default {
title: {
type: String,
default: function() {
return this.$t('setting.BlockedIPS')
return this.$t('BlockedIPS')
}
},
url: {
@@ -54,6 +56,7 @@ export default {
remoteMeta: {},
visible: false,
form: this.value,
ipCounts: 0,
config: {
url: this.url,
hasSaveContinue: false,
@@ -63,7 +66,15 @@ export default {
}
}
},
created() {
this.getLockedIp()
},
methods: {
getLockedIp() {
this.$axios.get('/api/v1/settings/security/block-ip/').then(res => {
this.ipCounts = res.count
})
},
onOpenDialog() {
this.visible = true
}

View File

@@ -0,0 +1,135 @@
<template>
<div>
<Dialog
:destroy-on-close="true"
:show-cancel="false"
:title="title"
:visible.sync="showSecret"
:width="'50'"
v-bind="$attrs"
@confirm="accountConfirmHandle"
v-on="$listeners"
>
<el-form :model="secretInfo" class="password-form" label-position="right" label-width="100px">
<el-form-item :label="$tc('OldSecret')">
<ShowKeyCopyFormatter
:cell-value="secretInfo.old_secret"
:col="{ formatterArgs: {
name: 'old_secret'
}}"
/>
</el-form-item>
<el-form-item :label="$tc('NewSecret')">
<ShowKeyCopyFormatter
:cell-value="secretInfo.new_secret"
:col="{ formatterArgs: {
name: 'new_secret'
}}"
/>
</el-form-item>
</el-form>
</Dialog>
</div>
</template>
<script>
import Dialog from '@/components/Dialog/index.vue'
import { ShowKeyCopyFormatter } from '@/components/Table/TableFormatters'
export default {
name: 'RecordViewSecret',
components: {
Dialog,
ShowKeyCopyFormatter
},
props: {
visible: {
type: Boolean,
default: false
},
url: {
type: String,
default: ''
},
title: {
type: String,
default: function() {
return this.$tc('ViewSecret')
}
}
},
data() {
return {
secretInfo: {},
showSecret: false,
mfaDialogVisible: true
}
},
computed: {},
mounted() {
this.showSecretDialog()
},
methods: {
accountConfirmHandle() {
this.showSecret = false
this.mfaDialogVisible = false
},
showSecretDialog() {
return this.$axios.get(this.url, { disableFlashErrorMsg: true }).then((res) => {
this.secretInfo = res
this.showSecret = true
})
},
exit() {
this.$emit('update:visible', false)
}
}
}
</script>
<style lang="scss" scoped>
.item-textarea ::v-deep .el-textarea__inner {
height: 110px;
}
.el-form-item {
border-bottom: 1px solid #EBEEF5;
padding: 5px 0;
margin-bottom: 0;
&:last-child {
border-bottom: none;
}
::v-deep .el-form-item__label {
padding-right: 20px;
line-height: 30px;
}
::v-deep .el-form-item__content {
line-height: 30px;
pre {
margin: 0;
}
}
}
ul {
margin: 0;
}
li {
display: block;
font-size: 13px;
margin-bottom: 8px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
.title {
color: #303133;
font-weight: 500;
}
}
</style>

View File

@@ -0,0 +1,153 @@
<template>
<div class="container">
<div class="chat-action">
<Select2
v-model="select.value"
:disabled="isLoading || isSelectDisabled"
v-bind="select"
@change="onSelectChange"
/>
</div>
<div class="chat-input">
<el-input
v-model="inputValue"
:disabled="isLoading"
:placeholder="$tc('InputMessage')"
:rows="expanded ? 3 :2"
type="textarea"
@compositionend="isIM = false"
@compositionstart="isIM = true"
@keypress.native="onKeyEnter"
/>
</div>
</div>
</template>
<script>
import { mapState } from 'vuex'
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 {
isIM: false,
inputValue: '',
select: {
url: '/api/v1/settings/chatai-prompts/',
value: '',
multiple: false,
placeholder: this.$t('Prompt'),
ajax: {
transformOption: (item) => {
return { label: item.name, value: item.content }
}
}
}
}
},
computed: {
...mapState({
isLoading: state => state.chat.loading
}),
isSelectDisabled() {
return !!this.select.value
}
},
methods: {
onKeyEnter(event) {
if (event.key === 'Enter') {
if ((!this.isIM && !event.shiftKey) || (this.isIM && event.ctrlKey)) {
event.preventDefault()
this.onSendHandle()
}
}
},
onSendHandle() {
if (!this.inputValue) return
setLoading(true)
this.$emit('send', this.inputValue)
this.inputValue = ''
},
onSelectChange(value) {
this.$emit('select-prompt', value)
}
}
}
</script>
<style lang="scss" scoped>
.container {
display: flex;
height: 100%;
flex-direction: column;
.chat-action {
width: 100%;
margin: 6px 0;
&::v-deep .el-select {
width: 50%;
.el-input__inner {
height: 28px;
line-height: 28px;
border-radius: 14px;
border-color: transparent;
background-color: #f7f7f8;
font-size: 13px;
color: rgba(0, 0, 0, 0.45);
&:hover {
background-color: #ededed;
}
}
.el-input__icon {
line-height: 0;
}
}
}
.chat-input {
flex: 1;
display: flex;
flex-direction: column;
border-radius: 12px;
&::v-deep .el-textarea {
height: 100%;
.el-textarea__inner {
height: 100%;
padding: 8px 10px;
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;
}
}
}
}
</style>

View File

@@ -0,0 +1,206 @@
<template>
<div :class="{'user-role': isUserRole}" class="chat-item">
<div class="avatar">
<el-avatar :src="isUserRole ? userUrl : chatUrl" class="header-avatar" />
</div>
<div class="content">
<div class="operational">
<span class="date">
{{ $moment(item.message.create_time).format('YYYY-MM-DD HH:mm:ss') }}
</span>
</div>
<div class="message">
<div class="message-content">
<span v-if="isSystemError" class="error">
{{ item.message.content }}
</span>
<span v-else class="chat-text">
<MessageText :message="item.message" />
</span>
</div>
<div class="action">
<el-tooltip
v-if="isSystemError && isLoading"
:content="$tc('Reconnect')"
:open-delay="500"
placement="top"
>
<svg-icon icon-class="refresh" @click="onRefresh" />
</el-tooltip>
<el-dropdown v-else size="small" @command="handleCommand">
<span class="el-dropdown-link">
<i class="fa fa-ellipsis-v" />
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-for="i in dropdownOptions" :key="i.action" :command="i.action">
{{ i.label }}
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</div>
</div>
</div>
</template>
<script>
import MessageText from './MessageText.vue'
import { mapState } from 'vuex'
import { copy } from '@/utils/common'
import { useChat } from '../../useChat.js'
import { reconnect } from '@/utils/socket'
const { setLoading, removeLoadingMessageInChat } = useChat()
export default {
components: {
MessageText
},
props: {
item: {
type: Object,
default: () => {
}
}
},
data() {
return {
chatUrl: require('@/assets/img/chat.png'),
userUrl: '/api/v1/settings/logo/',
dropdownOptions: [
{
action: 'copy',
label: this.$t('Copy')
}
]
}
},
computed: {
...mapState({
isLoading: state => state.chat.loading
}),
isUserRole() {
return this.item.message?.role === 'user'
},
isSystemError() {
return this.item.type === 'error' && this.item.message?.role === 'assistant'
}
},
methods: {
onRefresh() {
reconnect()
removeLoadingMessageInChat()
setLoading(false)
},
handleCommand(value) {
if (value === 'copy') {
copy(this.item.message.content)
}
}
}
}
</script>
<style lang="scss" scoped>
.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%;
&::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
}
}
}
}
}
.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;
}
}
}
}
</style>

View File

@@ -0,0 +1,197 @@
<template>
<div>
<div ref="textRef" class="leading-relaxed break-words">
<span v-if="message.content === 'loading'" class="loading-box">
<span />
<span />
<span />
</span>
<div v-else v-sanitize="text" class="inline-block markdown-body" />
</div>
</div>
</template>
<script>
import MarkdownIt from 'markdown-it'
import mdKatex from '@traptitech/markdown-it-katex'
import mila from 'markdown-it-link-attributes'
import hljs from 'highlight.js'
import 'highlight.js/styles/atom-one-dark.css'
import { copy } from '@/utils/common'
export default {
props: {
message: {
type: Object,
default: () => {
}
}
},
data() {
return {
markdown: null
}
},
computed: {
text() {
const value = this.message?.content || ''
if (value && this.markdown) {
return this.markdown?.render(value)
}
return this.$xss.process(value)
}
},
mounted() {
this.init()
},
updated() {
this.addCopyEvents()
},
destroyed() {
this.removeCopyEvents()
},
methods: {
init() {
const vm = this
this.markdown = new MarkdownIt({
html: false,
linkify: true,
highlight(code, language) {
const validLang = !!(language && hljs.getLanguage(language))
if (validLang) {
const lang = language || ''
return vm.highlightBlock(hljs.highlight(lang, code, true).value, lang)
}
return vm.highlightBlock(hljs.highlightAuto(code).value, '')
}
})
this.markdown.use(mila, { attrs: { target: '_blank', rel: 'noopener', class: 'link-style' }})
this.markdown.use(mdKatex, { blockClass: 'katexmath-block rounded-md', errorColor: ' #cc0000' })
},
highlightBlock(str, lang) {
return `<pre class="code-block-wrapper"><div class="code-block-header"><span class="code-block-header__lang">${lang}</span><span class="code-block-header__copy">${'Copy'}</span></div><code class="hljs code-block-body ${lang}">${str}</code></pre>`
},
addCopyEvents() {
const copyBtn = document.querySelectorAll('.code-block-header__copy')
copyBtn.forEach((btn) => {
btn.addEventListener('click', () => {
const code = btn.parentElement?.nextElementSibling?.textContent
if (code) {
copy(code)
}
})
})
},
removeCopyEvents() {
if (this.$refs.textRef) {
const copyBtn = this.$refs.textRef.querySelectorAll('.code-block-header__copy')
copyBtn.forEach((btn) => {
btn.removeEventListener('click', () => {
})
})
}
}
}
}
</script>
<style lang="scss" scoped>
.markdown-body {
font-size: 13px;
&::v-deep p {
margin-bottom: 0 !important;
}
background: inherit;
&::v-deep pre {
padding: 0 0 6px 0;
.hljs.code-block-body {
border-radius: 4px;
}
}
&::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;
background: #353946;
color: #c2d1e1;
.code-block-header__copy {
float: right;
cursor: pointer;
&:hover {
color: #6e747b;
}
}
}
.hljs.code-block-body.javascript {
.hljs-comment {
display: block;
}
}
}
}
::v-deep .link-style {
color: #487bf4;
&:hover {
color: #275ee3;
}
}
.loading-box {
margin-left: 6px;
}
.loading-box span {
display: inline-block;
width: 5px;
height: 5px;
margin-right: 5px;
border-radius: 50%;
vertical-align: middle;
background: #676A6c;
animation: load 1.2s ease infinite;
}
.loading-box span:last-child {
margin-right: 0;
}
@keyframes load {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
.loading-box span:nth-child(1) {
animation-delay: 0.23s;
}
.loading-box span:nth-child(2) {
animation-delay: 0.36s;
}
.loading-box span:nth-child(3) {
animation-delay: 0.49s;
}
</style>

View File

@@ -0,0 +1,276 @@
<template>
<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 class="head">
<i v-if="item.icon" :class="item.icon" />
<span class="title">{{ item.title }}</span>
</div>
<div class="content">
{{ item.content }}
</div>
</div>
</div>
<ChatMessage v-for="(item, index) in activeChat.chats" :key="index" :item="item" />
</div>
<div class="input-box">
<el-button
v-if="isLoading && socket && socket.readyState === 1"
class="stop"
icon="fa fa-stop-circle-o"
round
size="small"
@click="onStopHandle"
>{{ $tc('Stop') }}</el-button>
<ChatInput ref="chatInput" :expanded="expanded" @send="onSendHandle" @select-prompt="onSelectPromptHandle" />
</div>
</div>
</template>
<script>
import ChatInput from './ChatInput.vue'
import ChatMessage from './ChatMessage.vue'
import { mapState } from 'vuex'
import { closeWebSocket, createWebSocket, onSend, ws } from '@/utils/socket'
import { getInputFocus, useChat } from '../../useChat.js'
const {
setLoading,
clearChats,
addChatMessageById,
addMessageToActiveChat,
newChatAndAddMessageById,
removeLoadingMessageInChat,
updateChaMessageContentById,
addTemporaryLoadingToChat
} = useChat()
export default {
components: {
ChatInput,
ChatMessage
},
props: {
expanded: {
type: Boolean,
default: false
}
},
data() {
return {
socket: {},
prompt: '',
conversationId: '',
showIntroduction: false,
introduction: []
}
},
computed: {
...mapState({
isLoading: state => state.chat.loading,
activeChat: state => state.chat.activeChat
})
},
destroyed() {
closeWebSocket()
},
methods: {
init() {
this.initWebSocket()
this.initChatMessage()
},
initWebSocket() {
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_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.conversationId = ''
this.$refs.chatInput.select.value = ''
const chat = {
message: {
content: this.$t('ChatHello'),
role: 'assistant',
create_time: new Date()
}
}
newChatAndAddMessageById(chat)
setLoading(false)
},
onWebSocketMessage(data) {
if (data.type === 'message') {
this.onChatMessage(data)
}
if (data.type === 'error') {
this.onSystemMessage(data)
}
},
onChatMessage(data) {
if (data.id) {
setLoading(true)
removeLoadingMessageInChat()
this.conversationId = data.id
updateChaMessageContentById(data.message.id, data)
}
if (data.message?.type === 'finish') {
setLoading(false)
getInputFocus()
}
},
onSystemMessage(data) {
data.message = {
content: data.data,
role: 'assistant',
create_time: new Date()
}
removeLoadingMessageInChat()
addMessageToActiveChat(data)
setLoading(true)
},
onSendHandle(value) {
this.showIntroduction = false
this.socket = ws || {}
if (ws?.readyState === 1) {
const chat = {
message: {
content: value,
role: 'user',
create_time: new Date()
}
}
const message = {
data: value,
prompt: this.prompt,
id: this.conversationId || ''
}
addChatMessageById(chat)
onSend(message)
addTemporaryLoadingToChat()
} else {
const chat = {
message: {
content: this.$t('ConnectionDropped'),
role: 'assistant',
create_time: new Date()
},
type: 'error'
}
addChatMessageById(chat)
setLoading(true)
}
},
onSelectPromptHandle(value) {
this.prompt = value
this.conversationId = ''
this.showIntroduction = false
this.onSendHandle(value)
},
onNewChat() {
clearChats()
this.initChatMessage()
},
onStopHandle() {
const message = {
id: this.conversationId || '',
interrupt: true
}
onSend(message)
removeLoadingMessageInChat()
setLoading(false)
},
sendIntroduction(item) {
this.showIntroduction = false
this.onSendHandle(item.content)
}
}
}
</script>
<style lang="scss" scoped>
.chat-content {
display: flex;
flex-direction: column;
overflow: hidden;
height: 100%;
.introduction {
padding: 16px 14px 0;
.introduction-item {
padding: 12px 14px;
border-radius: 8px;
margin-top: 16px;
background-color: var(--menu-hover);
cursor: pointer;
&:hover {
box-shadow: 0 0 2px 2px #00000014;
}
&:first-child {
margin-top: 0;
}
.head {
margin-bottom: 2px;
.title {
font-weight: 500;
color: #373739;
}
}
.content {
display: inline-block;
color: #a7a7ab;
word-wrap: break-word;
}
}
}
.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: 60px;
padding: 0 15px;
margin-bottom: 15px;
//border-top: 1px solid #ececec;
}
.stop {
position: absolute;
top: -37px;
left: 50%;
z-index: 11;
transform: translateX(-50%);
::v-deep i {
margin-right: 4px;
}
}
}
</style>

View File

@@ -0,0 +1,93 @@
<template>
<div class="container">
<div class="close-sidebar">
<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>
</div>
</template>
<script>
export default {
props: {
active: {
type: String,
default: 'chat'
},
hasClose: {
type: Boolean,
default: true
},
submenu: {
type: Array,
default: () => []
},
expanded: {
type: Boolean,
default: false
}
},
data() {
return {}
},
methods: {
onClose() {
this.$emit('close')
},
handleExpand() {
this.$emit('expand-full')
}
}
}
</script>
<style lang="scss" scoped>
.container {
width: 100%;
height: 100%;
background-color: #f0f1f5;
.close-sidebar {
height: 48px;
padding: 12px 0;
text-align: center;
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);
}
}
}
}
.el-icon-download {
transform: rotate(-90deg)
}
::v-deep .el-tabs {
.el-tabs__item {
padding: 0 10px;
font-size: 14px;
:hover {
color: #7b8085;
}
}
}
</style>

View File

@@ -0,0 +1,196 @@
<template>
<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>
</div>
<div class="sidebar">
<Sidebar
:active.sync="active"
:expanded="expanded"
v-bind="$attrs"
@close="onClose"
@compress="compress"
@expand="expandFull"
v-on="$listeners"
/>
</div>
</div>
</DrawerPanel>
</template>
<script>
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
},
props: {
title: {
type: String,
default: function() {
return this.$t('ChatAI')
}
},
defaultShowPanel: {
type: Boolean,
default: false
},
drawerPanelVisible: {
type: Boolean,
default: () => false
}
},
data() {
return {
active: 'chat',
robotUrl: require('@/assets/img/robot-assistant.png'),
height: '400px',
expanded: false,
clientOffset: {}
}
},
watch: {
},
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() {
if (!ws) {
this.$refs.component?.init()
}
},
onClose() {
this.$refs.drawer.show = false
},
expandFull() {
this.height = '100%'
this.expanded = true
},
compress() {
this.height = '400px'
this.expanded = false
},
onNewChat() {
this.active = 'chat'
this.$nextTick(() => {
this.$refs.component?.onNewChat()
getInputFocus()
})
},
onToggle(status) {
this.initWebSocket()
if (status) {
getInputFocus()
}
}
}
}
</script>
<style lang="scss" scoped>
.chat {
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;
line-height: 48px;
padding: 0 16px;
overflow: hidden;
border-bottom: 1px solid #ececec;
.left {
img {
width: 22px;
height: 22px;
vertical-align: sub;
}
.title {
display: inline-block;
font-size: 18px;
color: black;
}
}
.new {
display: inline-block;
height: 28px;
line-height: 28px;
border-radius: 16px;
padding: 0 10px;
transform: translateY(32%);
color: var(--color-primary);
background-color: #f7f7f8;
cursor: pointer;
font-size: 13px;
&:hover {
background-color: #ededed;
}
}
}
.content {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
}
}
.sidebar {
height: 100%;
width: 42px;
}
}
</style>

View File

@@ -0,0 +1,80 @@
import store from '@/store'
import { pageScroll } from '@/utils/common'
export const getInputFocus = () => {
const dom = document.querySelector('.chat-input .el-textarea__inner')
setTimeout(() => dom?.focus(), 200)
}
export function useChat() {
const chatStore = {}
const setLoading = (loading) => {
store.commit('chat/setLoading', loading)
}
const onNewChat = (name) => {
const data = {
name: name || `new chat`,
id: 1,
conversation_id: '',
chats: []
}
store.commit('chat/addChatToStore', data)
}
const clearChats = () => {
store.commit('chat/clearChats')
}
const addMessageToActiveChat = (chat) => {
store.commit('chat/addMessageToActiveChat', chat)
}
const removeLoadingMessageInChat = () => {
store.commit('chat/removeLoadingMessageInChat')
}
const addChatMessageById = (chat) => {
store.commit('chat/addMessageToActiveChat', chat)
if (chat?.conversation_id) {
store.commit('chat/setActiveChatConversationId', chat.conversation_id)
}
pageScroll('scrollRef')
}
const addTemporaryLoadingToChat = () => {
const temporaryChat = {
message: {
content: 'loading',
role: 'assistant',
create_time: new Date()
}
}
addChatMessageById(temporaryChat)
}
const newChatAndAddMessageById = (chat) => {
onNewChat(chat.message.content)
addChatMessageById(chat)
}
const updateChaMessageContentById = (id, data) => {
store.commit('chat/updateChaMessageContentById', { id, data })
pageScroll('scrollRef')
}
return {
chatStore,
setLoading,
onNewChat,
clearChats,
getInputFocus,
addMessageToActiveChat,
newChatAndAddMessageById,
removeLoadingMessageInChat,
addChatMessageById,
addTemporaryLoadingToChat,
updateChaMessageContentById
}
}

View File

@@ -0,0 +1,242 @@
<template>
<div ref="drawer" :class="{show: show}" class="drawer">
<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>
<div class="drawer-panel-item">
<slot :drawer-panel-visible="show" />
</div>
</div>
</div>
</template>
<script>
export default {
name: 'DrawerPanel',
props: {
icon: {
type: String,
default: 'el-icon-setting'
},
width: {
type: String,
default: '440px'
},
height: {
type: String,
default: '400px'
},
modal: {
type: Boolean,
default: true
},
clickNotClose: {
type: Boolean,
default: false
},
expanded: {
type: Boolean,
default: false
},
defaultShowPanel: {
type: Boolean,
default: false
}
},
data() {
return {
show: this.defaultShowPanel,
clientOffset: {}
}
},
watch: {
show(value) {
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() {
this.init()
this.insertToBody()
},
beforeDestroy() {
const element = this.$refs.drawer
element.remove()
// 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
dragBox.addEventListener('mousedown', this.handleMoveMouseDown, false)
dragBox.addEventListener('mouseup', this.handleMouseMoveUp, false)
})
},
isDifferenceWithinThreshold(num1, num2, threshold = 5) {
const difference = Math.abs(num1 - num2)
return difference <= threshold
},
addEventClick() {
},
insertToBody() {
const element = this.$refs.drawer
const body = document.querySelector('body')
body.insertBefore(element, body.firstChild)
}
}
}
</script>
<style lang="scss" scoped>
.modal {
position: fixed;
top: 0;
left: 0;
opacity: 0;
transition: opacity .3s cubic-bezier(.7, .3, .1, 1);
background: rgba(0, 0, 0, .3);
z-index: -1;
}
.drawer-panel {
position: fixed;
bottom: 1px;
right: -1px;
width: 100%;
min-width: 260px;
user-select: none;
transition: transform .25s cubic-bezier(.7, .3, .1, 1);
box-shadow: 0 0 8px 4px #00000014;
transform: translate(100%);
background: #FFFFFF;
z-index: 1200;
}
.drawer-panel-item {
height: 100%;
}
.drawer-panel-item::-webkit-scrollbar-track {
box-shadow: none;
background-color: transparent;
}
.show {
transition: all .3s cubic-bezier(.7, .3, .1, 1);
}
.show .modal {
z-index: 1003;
opacity: 1;
width: 100%;
height: 100%;
}
.show .drawer-panel {
transform: translate(0);
}
.handle-button {
position: absolute;
bottom: 20%;
left: -48px;
width: 48px;
height: 45px;
line-height: 45px;
box-sizing: border-box;
text-align: center;
font-size: 24px;
border-radius: 20px 0 0 20px;
z-index: 0;
pointer-events: auto;
color: #fff;
background-color: #FFFFFF;
opacity: 0.9;
box-shadow: 0 0 8px 4px #00000014;
cursor: pointer;
&:hover {
left: -51px !important;
width: 50px !important;
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,15 +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 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: {
@@ -32,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() {
@@ -46,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
@@ -57,20 +72,38 @@ export default {
tableConfig: {
url: this.tableUrl,
hasTree: true,
columnsExtra: ['view_account'],
columnsExclude: ['spec_info'],
columnShow: {
columnsShow: {
min: ['name', 'address', 'accounts'],
default: ['name', 'address', 'accounts', 'actions']
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('Accounts'),
formatter: AccountInfoFormatter,
width: '100px'
},
connectivity: connectivityMeta
},
tableAttrs: {
rowClassName({ row }) {
return !row.is_active ? 'row_disabled' : ''
}
}
},
@@ -94,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

@@ -1,36 +1,32 @@
<template>
<Dialog
:close-on-click-modal="false"
:destroy-on-close="true"
:show-cancel="false"
:show-confirm="false"
:title="title"
:visible.sync="visible"
:width="'36%'"
class="dialog-content"
v-bind="$attrs"
width="600px"
@confirm="visible = false"
v-on="$listeners"
>
<div v-if="ConfirmType === 'relogin'">
<div v-if="confirmTypeRequired === 'relogin'">
<el-row :gutter="24" style="margin: 0 auto;">
<el-col :md="24" :sm="24">
<el-alert
:closable="false"
:title="$tc('auth.ReLoginTitle')"
:title="$tc('ReLoginTitle')"
center
style="margin-bottom: 20px;"
type="info"
type="error"
/>
</el-col>
</el-row>
<el-row :gutter="24" style="margin: 0 auto;">
<el-col :md="24" :sm="24">
<el-button
size="mini"
style="width: 100%; line-height:20px;"
type="primary"
@click="logOut"
>
{{ this.$t('auth.ReLogin') }}
<el-button class="confirm-btn" size="mini" type="primary" @click="logout">
{{ this.$t('ReLogin') }}
</el-button>
</el-col>
</el-row>
@@ -39,14 +35,13 @@
<el-row :gutter="24" style="margin: 0 auto;">
<el-col :md="24" :sm="24" :span="24" class="add">
<el-select
v-model="Select"
:disabled="ConfirmType === 'password'"
v-model="subTypeSelected"
style="width: 100%; margin-bottom: 20px;"
@change="helpText(Select)"
@change="handleSubTypeChange"
>
<el-option
v-for="(item, i) of Content"
:key="i"
v-for="item of subTypeChoices"
:key="item.name"
:disabled="item.disabled"
:label="item.display_name"
:value="item.name"
@@ -55,30 +50,30 @@
</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-input v-model="SecretKey" :placeholder="HelpText" :show-password="showPassword" />
<span v-if="Select === 'sms'" style="margin: -1px 0 0 20px;">
<el-col :md="24" :sm="24" style="display: flex; align-items: center; margin-bottom: 20px;">
<el-input
v-model="secretValue"
:placeholder="inputPlaceholder"
:show-password="showPassword"
@keyup.enter.native="handleConfirm"
/>
<span v-if="subTypeSelected === 'sms'" style="margin: -1px 0 0 20px;">
<el-button
:disabled="smsBtndisabled"
:disabled="smsBtnDisabled"
size="mini"
style="line-height:20px; float: right;"
style="line-height: 14px; float: right;"
type="primary"
@click="sendChallengeCode"
@click="sendSMSCode"
>
{{ smsBtnText }}
</el-button>
</span>
</el-col>
</el-row>
<el-row :gutter="24" style="margin: 0 auto;">
<el-row :gutter="24" style="margin: 10px auto;">
<el-col :md="24" :sm="24">
<el-button
size="mini"
style="width: 100%; line-height:20px;"
type="primary"
@click="userConfirm"
>
{{ this.$t('common.Confirm') }}
<el-button class="confirm-btn" size="mini" type="primary" @click="handleConfirm">
{{ this.$t('Confirm') }}
</el-button>
</el-col>
</el-row>
@@ -87,6 +82,7 @@
</template>
<script>
import Dialog from '@/components/Dialog/index.vue'
import { encryptPassword } from '@/utils/crypto'
export default {
name: 'UserConfirmDialog',
@@ -96,125 +92,128 @@ export default {
props: {
url: {
type: String,
default: () => ''
default: ''
},
handler: {
type: Function,
default: null
}
},
data() {
return {
title: '',
title: this.$t('CurrentUserVerify'),
smsWidth: 0,
Select: '',
Level: null,
HelpText: '',
smsBtnText: '',
smsBtndisabled: false,
ConfirmType: '',
Content: null,
SecretKey: '',
visible: false
subTypeSelected: '',
inputPlaceholder: '',
smsBtnText: this.$t('SendVerificationCode'),
smsBtnDisabled: false,
confirmTypeRequired: '',
subTypeChoices: [],
secretValue: '',
visible: false,
callback: null,
cancel: null,
processing: false
}
},
computed: {
showPassword() {
if (this.ConfirmType === 'password') {
return true
}
return false
}
},
watch: {
visible(val) {
if (!val) {
this.$emit('UserConfirmCancel', true)
}
return this.confirmTypeRequired === 'password'
}
},
mounted() {
this.smsBtnText = this.$t('common.SendVerificationCode')
this.$axios.get(`${this.url}`, { disableFlashErrorMsg: true }).then(
() => { this.$emit('UserConfirmDone', true) }).catch((err) => {
const confirm_type = err.response.data.code
this.$axios.get('/api/v1/authentication/confirm/', { params: { confirm_type: confirm_type }}).then((data) => {
this.ConfirmType = data.confirm_type
this.Content = data.content
if (this.ConfirmType === 'relogin') {
this.$axios.post(
`/api/v1/authentication/confirm/`,
{
confirm_type: this.ConfirmType,
secret_key: ''
},
{ disableFlashErrorMsg: true },
).then(() => { this.$emit('UserConfirmDone', true) }).catch(() => {
this.title = this.$t('auth.NeedReLogin')
this.$eventBus.$on('showConfirmDialog', this.performConfirm)
},
beforeDestroy() {
this.$eventBus.$off('showConfirmDialog', this.performConfirm)
},
methods: {
handleSubTypeChange(val) {
this.inputPlaceholder = this.subTypeChoices.filter(item => item.name === val)[0]?.placeholder
this.smsWidth = val === 'sms' ? 6 : 0
},
performConfirm: _.debounce(function({ response, callback, cancel }) {
if (this.processing || this.visible) {
return
}
this.processing = true
this.callback = callback
this.cancel = cancel
this.$log.debug('perform confirm action')
const confirmType = response.data?.code
const confirmUrl = '/api/v1/authentication/confirm/'
this.$axios.get(confirmUrl, { params: { confirm_type: confirmType }}).then((data) => {
this.confirmTypeRequired = data.confirm_type
if (this.confirmTypeRequired === 'relogin') {
this.$axios.post(confirmUrl, { 'confirm_type': 'relogin', 'secret_key': 'x' }).then(() => {
this.callback()
this.visible = false
}).catch(() => {
this.title = this.$t('NeedReLogin')
this.visible = true
})
return
}
if (this.ConfirmType === 'mfa') {
this.Select = this.Content.filter(item => !item.disabled)[0].name
if (this.Select === 'sms') {
this.smsWidth = 6
}
this.HelpText = this.Content.filter(item => !item.disabled)[0].placeholder
} else if (this.ConfirmType === 'password') {
this.Select = this.$t('setting.password')
this.HelpText = this.$t('common.PasswordRequireForSecurity')
this.Content = [{ 'name': 'password' }]
}
this.title = this.$t('common.CurrentUserVerify')
this.subTypeChoices = data.content
const defaultSubType = this.subTypeChoices.filter(item => !item.disabled)[0]
this.subTypeSelected = defaultSubType.name
this.inputPlaceholder = defaultSubType.placeholder
this.visible = true
}).catch(() => {
this.$emit('AuthMFAError', true)
}).catch((err) => {
const data = err.response?.data
const msg = data?.error || data?.detail || data?.msg || this.$t('GetConfirmTypeFailed')
this.$message.error(msg)
this.cancel(err)
}).finally(() => {
this.processing = false
})
})
},
methods: {
helpText(val) {
this.HelpText = this.Content.filter(item => item.name === val)[0]?.placeholder
if (val === 'sms') {
this.smsWidth = 6
} else {
this.smsWidth = 0
}
},
logOut() {
}, 500),
logout() {
window.location.href = `${process.env.VUE_APP_LOGOUT_PATH}?next=${this.$route.fullPath}`
},
sendChallengeCode() {
this.$axios.post(
`/api/v1/authentication/mfa/select/`, {
type: 'sms'
}
).then(res => {
this.$message.success(this.$t('common.VerificationCodeSent'))
sendSMSCode() {
this.$axios.post(`/api/v1/authentication/mfa/select/`, { type: 'sms' }).then(res => {
this.$message.success(this.$tc('VerificationCodeSent'))
let time = 60
const interval = setInterval(() => {
this.smsBtnText = this.$t('common.Pending') + `: ${time}`
this.smsBtndisabled = true
time -= 1
this.smsBtnDisabled = true
if (time === 0) {
this.smsBtnText = this.$t('common.SendVerificationCode')
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'))
})
},
userConfirm() {
if (this.Select === 'otp' && this.SecretKey.length !== 6) {
return this.$message.error(this.$t('common.MFAErrorMsg'))
handleConfirm() {
if (this.confirmTypeRequired === 'relogin') {
return this.logout()
}
this.$axios.post(
`/api/v1/authentication/confirm/`, {
confirm_type: this.ConfirmType,
mfa_type: this.ConfirmType === 'password' ? undefined : this.Select,
secret_key: this.SecretKey
}
).then(res => {
this.$emit('UserConfirmDone', true)
if (this.subTypeSelected === 'otp' && this.secretValue.length !== 6) {
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(() => {
this.secretValue = ''
this.visible = false
this.$nextTick(() => {
this.callback()
})
}).catch((err) => {
this.$message.error(err.message || this.$tc('ConfirmFailed'))
})
}
}
@@ -222,11 +221,21 @@ 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 {
padding-top: 30px;
padding-bottom: 30px;
}
}
.confirm-btn {
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',
@@ -17,6 +17,9 @@ export default {
default: null
}
},
data() {
return {}
},
computed: {
displayValue() {
if ([null, undefined, ''].includes(this.value)) {
@@ -44,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') {
@@ -64,8 +67,19 @@ export default {
}
},
render(h) {
let formatterData = ''
if (typeof this.formatter === 'function') {
return this.formatter(this.item, this.value)
const data = this.formatter(this.item, this.value)
if (data instanceof Promise) {
data.then(res => {
formatterData = res
})
} else {
formatterData = data
}
return (
<span>{formatterData}</span>
)
}
if (this.value instanceof Array) {
const newArr = this.value || []
@@ -78,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,50 +193,32 @@ export default {
let value = this.iObject[name]
const label = fieldMeta.label
if (Array.isArray(value)) {
if (typeof value[0] === 'object') {
value.forEach(item => {
const fieldName = `${name}.${item.name}`
if (excludes.includes(fieldName)) {
return
}
this.items.push({
key: item.label,
value: item.value
})
})
} 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 = '-'
@@ -159,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 items" :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,49 +42,84 @@ export default {
align: {
type: String,
default: 'left'
},
labelWidth: {
type: String,
default: '25%'
}
},
data() {
return {
iItems: this.items.filter(item => {
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>

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