From e2b524dadb047a84e5f9fe2decc503d91f6c71d1 Mon Sep 17 00:00:00 2001
From: "meilin.huang" <954537473@qq.com>
Date: Fri, 12 Apr 2024 17:07:28 +0800
Subject: [PATCH] feat: release1.8.0
---
mayfly_go_web/src/common/config.ts | 2 +-
.../src/components/terminal/TerminalBody.vue | 21 +++++++++---------
.../ops/component/ResourceAuthCertEdit.vue | 2 ++
.../tag/application/resouce_auth_cert.go | 4 ++--
server/internal/tag/application/tag_tree.go | 2 +-
server/pkg/base/app.go | 8 +++++++
server/pkg/config/app.go | 2 +-
server/resources/data/mayfly-go.sqlite | Bin 516096 -> 311296 bytes
server/resources/script/sql/mayfly-go.sql | 3 ++-
.../sql/{v1.7/v1.7.5.sql => v1.8/v1.8.0.sql} | 0
10 files changed, 27 insertions(+), 17 deletions(-)
mode change 100644 => 100755 server/resources/data/mayfly-go.sqlite
rename server/resources/script/sql/{v1.7/v1.7.5.sql => v1.8/v1.8.0.sql} (100%)
diff --git a/mayfly_go_web/src/common/config.ts b/mayfly_go_web/src/common/config.ts
index 00525b16..21ff8131 100644
--- a/mayfly_go_web/src/common/config.ts
+++ b/mayfly_go_web/src/common/config.ts
@@ -15,7 +15,7 @@ const config = {
baseWsUrl: `${(window as any).globalConfig.BaseWsUrl || `${location.protocol == 'https:' ? 'wss:' : 'ws:'}//${getBaseApiUrl()}`}/api`,
// 系统版本
- version: 'v1.7.5',
+ version: 'v1.8.0',
};
export default config;
diff --git a/mayfly_go_web/src/components/terminal/TerminalBody.vue b/mayfly_go_web/src/components/terminal/TerminalBody.vue
index fb239cd6..d6df3528 100644
--- a/mayfly_go_web/src/components/terminal/TerminalBody.vue
+++ b/mayfly_go_web/src/components/terminal/TerminalBody.vue
@@ -119,9 +119,16 @@ function initTerm() {
term.open(terminalRef.value);
- initSocket();
+ // 注册自适应组件
+ const fitAddon = new FitAddon();
+ state.addon.fit = fitAddon;
+ term.loadAddon(fitAddon);
+ fitTerminal();
+ // 注册窗口大小监听器
+ useEventListener('resize', debounce(fitTerminal, 400));
- // 注册插件
+ initSocket();
+ // 注册其他插件
loadAddon();
// 注册自定义快捷键
@@ -169,14 +176,6 @@ function initSocket() {
}
function loadAddon() {
- // 注册自适应组件
- const fitAddon = new FitAddon();
- state.addon.fit = fitAddon;
- term.loadAddon(fitAddon);
- fitTerminal();
- // 注册窗口大小监听器
- useEventListener('resize', debounce(fitTerminal, 400));
-
// 注册搜索组件
const searchAddon = new SearchAddon();
state.addon.search = searchAddon;
@@ -218,7 +217,7 @@ function loadAddon() {
trzsz
.uploadFiles(event.dataTransfer.items)
.then(() => console.log('upload success'))
- .catch((err) => console.log(err));
+ .catch((err: any) => console.log(err));
});
}
diff --git a/mayfly_go_web/src/views/ops/component/ResourceAuthCertEdit.vue b/mayfly_go_web/src/views/ops/component/ResourceAuthCertEdit.vue
index 115a1ea9..1bb3cbbf 100644
--- a/mayfly_go_web/src/views/ops/component/ResourceAuthCertEdit.vue
+++ b/mayfly_go_web/src/views/ops/component/ResourceAuthCertEdit.vue
@@ -90,6 +90,8 @@
{{ item.username }}
+
+ {{ item.remark }}
diff --git a/server/internal/tag/application/resouce_auth_cert.go b/server/internal/tag/application/resouce_auth_cert.go
index caf67f20..767d423a 100644
--- a/server/internal/tag/application/resouce_auth_cert.go
+++ b/server/internal/tag/application/resouce_auth_cert.go
@@ -272,7 +272,7 @@ func (r *resourceAuthCertAppImpl) GetAccountAuthCert(accountId uint64, authCertT
})
var authCerts []*entity.ResourceAuthCert
- r.GetRepo().ListByWheres(collx.M{
+ r.ListByWheres(collx.M{
"name in ?": collx.ArrayDeduplicate(authCertNames),
}, &authCerts)
@@ -314,7 +314,7 @@ func (r *resourceAuthCertAppImpl) FillAuthCert(resourceType int8, resources ...e
return ac.GetCode()
})
var acs []*entity.ResourceAuthCert
- r.Repo.ListByWheres(collx.M{"resource_code in ?": resourceCodes, "resource_type = ?": resourceType}, &acs)
+ r.ListByWheres(collx.M{"resource_code in ?": resourceCodes, "resource_type = ?": resourceType}, &acs)
r.FillAuthCertByAcs(acs, resources...)
}
diff --git a/server/internal/tag/application/tag_tree.go b/server/internal/tag/application/tag_tree.go
index eacdf73d..57a6f31c 100644
--- a/server/internal/tag/application/tag_tree.go
+++ b/server/internal/tag/application/tag_tree.go
@@ -394,7 +394,7 @@ func (p *tagTreeAppImpl) DeleteTagByParam(ctx context.Context, param *DelResourc
for _, resourceTag := range resourceTags {
// 获取所有关联的子标签
var childrenTag []*entity.TagTree
- p.Repo.ListByWheres(collx.M{
+ p.ListByWheres(collx.M{
"code_path LIKE ?": resourceTag.CodePath + "%",
"type = ?": delTagType,
}, &childrenTag)
diff --git a/server/pkg/base/app.go b/server/pkg/base/app.go
index 75795930..3cab6a7f 100644
--- a/server/pkg/base/app.go
+++ b/server/pkg/base/app.go
@@ -81,6 +81,10 @@ type App[T model.ModelI] interface {
// 根据条件查询数据映射至listModels
ListByCond(cond any, listModels any, cols ...string) error
+ // 根据wheres条件进行过滤
+ // @param wheres key -> "age > ?" value -> 10等
+ ListByWheres(wheres collx.M, listModels any, cols ...string) error
+
// PageQuery 分页查询
PageQuery(cond any, pageParam *model.PageParam, toModels any) (*model.PageResult[any], error)
@@ -210,6 +214,10 @@ func (ai *AppImpl[T, R]) ListByCond(cond any, listModels any, cols ...string) er
return ai.GetRepo().ListByCond(cond, listModels, cols...)
}
+func (ai *AppImpl[T, R]) ListByWheres(wheres collx.M, listModels any, cols ...string) error {
+ return ai.GetRepo().ListByWheres(wheres, listModels, cols...)
+}
+
// PageQuery 分页查询
func (ai *AppImpl[T, R]) PageQuery(cond any, pageParam *model.PageParam, toModels any) (*model.PageResult[any], error) {
return ai.GetRepo().PageQuery(cond, pageParam, toModels)
diff --git a/server/pkg/config/app.go b/server/pkg/config/app.go
index d978a714..45ba9e7f 100644
--- a/server/pkg/config/app.go
+++ b/server/pkg/config/app.go
@@ -4,7 +4,7 @@ import "fmt"
const (
AppName = "mayfly-go"
- Version = "v1.7.5"
+ Version = "v1.8.0"
)
func GetAppInfo() string {
diff --git a/server/resources/data/mayfly-go.sqlite b/server/resources/data/mayfly-go.sqlite
old mode 100644
new mode 100755
index 005e8ababc6d95774b08da12927ac4b46a435592..d9f2ff674b16c6343d5df72afd2246ec22e2fab3
GIT binary patch
delta 17763
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
literal 516096
zcmeFa349yJncxeMlqfzjRJcN21u0pM2!7WG9Xf$;ZyV*|+=V&Ad0e@9pfo&Fs#x1W3)yZ=IPp
z$L}Tcj<2e^`UXJDbmAxZ-5)-&bE%b$3$N!hVj8f`9?=J7z#UgxY|5bhAx3=sDx7<|Q
z*wy7ex>6AblTu8HWu%0hjir-`Sg0e|+13{6SiinA)LuGd#ipIzUH#ocf7iy|ZoyYN
zqEBe{2!c;e_yjqnNW)S_=-bvW^bPd(t|I~QbVBk8iZrP-N5U=iR7xD+)85KXjM-(#W=CR5E|rp!u`w||
zBB!L7p$N@kHK~j=CT2!?24Pj$ct#SHbVfbR#Zk|i(lLdBB4ko>At5Rf`ATVkaPp8W
zSySVuP04Ywa^oZk$K*iG2`MQllCF^E^%kBig45;OclK=U+Igq2rTb2ynJBfz)6#JD
zqOUiuSmAzn2el@J1Jk}NHQS1I{?nNTM<iq^`E6bIuaiswa8GtVlblFJ%To2!G#D76}t
zlB7gzES-|6Wm=M?wrMjMbFyZu4z;toQ_iZL&Cr}Gw_~jiX;qS1y@{iy@_D!6Lszuc
zHa0c6kHu6QP7KDfdy+9}Qi>}v!;dSiwrmKiWX}-Q;zP_RG`|!ITWchhN<(A|of>UBI)CW1){hETHePp~`-t0QlH3}v
za5ltwv_WetYiMEH)#gvLEm|;znj!ZrRwJF0-pxLS*LQlhg4KNzi?LdSQ#-5q%}-|_
zPMUSO+}_5vHupm}=$Zwi0KY87Mr86iMYU`>=XKDyCCVJM%!iJXB`OinmjEw%TP
z^&bv}g0+oXx4MrFP#n;eB#tr#H7gaD)IMn_7y^ZK!m+bbc)b}@rRbHA8LXb0qoFTK
z`jlqRW$tuXD?yfEr**$#FV-Hx(&^AFl+`hv&ugor)MQH3d}Ejjg%ftJ%%*BOmpaUobFx{hWK5^%lBU!Dkunp?h_#%cVNaCf{rE)}MuYUGgXn
z$CTzzF&xX+-&NbVCE(8cTJH;czf4yt&kgMtbK#A~AlG%uuNJcY$%IXPL(MQvTGlEJ8Q@fq(^&Tm{adrLO@j;PJb5dq
zaV!UiM=o!N4)xSRCCJRnxvrMNO>Af=of%UlCDA-Bhxhf-YW=8Kv0Asc2g4m@t2K+U
ze(u$pUGUjeYk}56d%dRBT2nQPWv?Fl*8S$n+lwUu!&RaXb8OtH#WnNM6%9kQbkF1?0w
z22EuvCy&KyAKV-G-x^o0bRUkZ_Xe_4*;pnG&)j1Co8MfU^ZeU#g4j%aPBa@PypL{x|#&v2*
z&gf>j{GaYt55E8Z+jO@BWkmu=00|%gB!C2v01`j~NB{{S0VHr~1aSO+Y25HCB!C2v
z01`j~NB{{S0VIF~kN^@u0>4cJaQy$f=051dsp{Kmter2_OL^
zfCP{L5l^I9#b5cfr8szZcWq-!i~A_-&M>HL4JBgTzeMTW>W
zKim50-ZOMthMXK@J6Wk4h^kxrnm6;cZkS}gd-7lLmfVclKAOozu(MX)Dh+7m_Fzrvh|^Bx!GIP<@8
zMeR4Lc9Bi=j`BUt$?hX!Jf6;_6t?4t`a^IsE;X!@Z5i|&vF<%<*>TYpZrRVa;-)37
z%p%gtIBe+&+`(F?&63@^s43HpNMR3FIpw&wp&?ivSFdeTFP)1TRf{qk4A`Vuk!mb1
zTi6mj7hB*)S0N`JtyEU?Z&C-h+*I4x)#X0Al5Z@PkrI#%*+xFp5$tShi*&4C-x+F$
zZQn|StS}o}>4=pq&)`J(KEDQI)clHJvu1ncwOVMH*^$LCHTy~os;I$KslkB;V82{y
zgj|MCzlm}>V@cA1iwf*CJ
zGmfQGGVFq`ZwaZMxW;Tdw(v?O!_zmmhh%R?Q+pU6&&6O1JJ2iaWt40Nqgkh##h5f!
zB7}I>WLo5VdzV*^IlIpStNTw$x8g9goU~iPi%oW|)R~cAjirE+z
a)*HSMLS
zb0!RP}AOR$R1dsp{Kmter2_OL^aJdt}_x~?<4P*I`01`j~NB{{S0VIF~kN^@u
z0!RP}xLi2?M=L-ANB{{S0VIF~kN^@u0!RP}AOR$B`4hnL|K+b^EFls=0!RP}AOR$R
z1dsp{Kmter2_OL+|Dz2c0VIF~kN^@u0!RP}AOR$R1dsp{xcmt$fFioRzajjd3(s3!9jSWu4$hxzx=bm|B
z)k+~SD5nC0Vs^x{O1L?fiYszD6%~r7-YXtIJNw~Ng+njTeD~nYYmXGppMWog$B!3Y
ze|GkxBgG463P;Wtj~ytSd#`Z*X$achv-#uqA1%E1cJa9nXU?35(AjgZ%v?A;{n6=S
z{u~K<<-y_$CyOVK6^@*me)orJ{G-no4!w5qq1V_|p1!WF-5d7pyIvKx4+P!6-_y6@
z-tny97ju)sw}j!0G%l;hr0m5h(==HB0f4wBRc~dusOF%PjuK@8^AK;hL#Wo)phRPy7oUBL
zR~qqq0jFZ