mirror of
https://gitee.com/dromara/mayfly-go
synced 2025-11-03 16:00:25 +08:00
fix: i18n特殊字符调整
This commit is contained in:
@@ -108,9 +108,9 @@ http://go.mayfly.run
|
||||
|
||||
如果觉得项目不错,或者已经在使用了,希望你可以去 <a target="_blank" href="https://github.com/dromara/mayfly-go">Github</a> 或者 <a target="_blank" href="https://gitee.com/dromara/mayfly-go">Gitee</a> 帮我点个 ⭐ Star,这将是对我极大的鼓励与支持。
|
||||
|
||||
> 喝杯咖啡 ☕️ 或者来杯奶茶 🧋,让作者更有精神,写出更棒的代码!这将是对作者最大的鼓励和支持!
|
||||
> 喝杯咖啡 ☕️ 或者来杯奶茶 🧋,让作者更有精神,写出更棒的代码!
|
||||
|
||||
<img class="no-margin" src="https://foruda.gitee.com/images/1744113367791412282/36a3c23b_1240250.png" alt="微信打赏" width="200" height="200">
|
||||
|
||||
> **特别感谢:**
|
||||
> 赞助金额达 199 元以上,加微信(wx-error),我将邀请您进入付费交流群,享受更快、更优先的技术支持!
|
||||
> 赞助金额达 199 元以上,加微信(wx-error),可受邀进入付费交流群,享受更快、更优先的技术支持与交流服务!
|
||||
|
||||
@@ -16,6 +16,6 @@ export default {
|
||||
sendMsg: 'Send Message',
|
||||
selectTmplPlaceholder: 'Select message template, support fuzzy search by number',
|
||||
msgTmplTooltip:
|
||||
'Message template supports variable replacement, the variable format is {{.variable}}, the following are common built-in variables <br/>{{.receiver}}: used to @ specify the recipient',
|
||||
"Message template supports variable replacement, the variable format is {'{{.variable}}'} </br> the following are common built-in variables <br/>{'{{.receiver}}'}: used to {'@'} specify the recipient",
|
||||
},
|
||||
};
|
||||
|
||||
@@ -48,7 +48,7 @@ export default {
|
||||
lastLoginTime: 'Last Login Time',
|
||||
usernamePlacholder: '5-16 uppercase letters, numbers, -.: characters',
|
||||
random: 'Random',
|
||||
usernamePatternErrMsg: 'Only 5-16 uppercase letters, numbers, and -@.: characters are allowed',
|
||||
usernamePatternErrMsg: "Only 5-16 uppercase letters, numbers, and -.:{'@'} characters are allowed",
|
||||
accountSearchPlaceholder: 'Enter account fuzzy search and select',
|
||||
accountInfo: 'Account Information',
|
||||
allocateRoleTitle: 'Allocate the `{name}` role',
|
||||
|
||||
@@ -15,6 +15,6 @@ export default {
|
||||
send: '发送',
|
||||
sendMsg: '发送消息',
|
||||
selectTmplPlaceholder: '选择消息模板,支持编号模糊搜索',
|
||||
msgTmplTooltip: '消息模板支持变量替换,变量格式为{{.变量名}},以下为通用内置变量 <br/>{{.receiver}}:用于@指定接收人',
|
||||
msgTmplTooltip: "消息模板支持变量替换,变量格式为{'{{.变量名}}'},以下为通用内置变量 <br/>{'{{.receiver}}'}:用于{'@'}指定接收人",
|
||||
},
|
||||
};
|
||||
|
||||
@@ -47,7 +47,7 @@ export default {
|
||||
deleteAccountConfirm: '确定删除【{name}】的账号?',
|
||||
usernamePlacholder: '5-16位大小写字母、数字、_-.:',
|
||||
random: '随机',
|
||||
usernamePatternErrMsg: '只允许输入5-16位大小写字母、数字、_-@.:',
|
||||
usernamePatternErrMsg: "只允许输入5-16位大小写字母、数字、_-.:{'@'}",
|
||||
accountSearchPlaceholder: '输入账号模糊搜索并选择',
|
||||
accountInfo: '账号信息',
|
||||
allocateRoleTitle: '分配 `{name}` 的角色',
|
||||
|
||||
@@ -47,6 +47,8 @@ type DataSyncTask interface {
|
||||
GetTaskLogList(condition *entity.DataSyncLogQuery, pageParam *model.PageParam, toEntity any, orderBy ...string) (*model.PageResult[any], error)
|
||||
}
|
||||
|
||||
var _ (DataSyncTask) = (*dataSyncAppImpl)(nil)
|
||||
|
||||
type dataSyncAppImpl struct {
|
||||
base.AppImpl[*entity.DataSyncTask, repository.DataSyncTask]
|
||||
|
||||
@@ -105,12 +107,14 @@ func (app *dataSyncAppImpl) AddCronJob(ctx context.Context, taskEntity *entity.D
|
||||
// 根据状态添加新的任务
|
||||
if taskEntity.Status == entity.DataSyncTaskStatusEnable {
|
||||
taskId := taskEntity.Id
|
||||
scheduler.AddFunByKey(key, taskEntity.TaskCron, func() {
|
||||
if err := scheduler.AddFunByKey(key, taskEntity.TaskCron, func() {
|
||||
logx.Infof("start the data synchronization task: %d", taskId)
|
||||
if err := app.RunCronJob(ctx, taskId); err != nil {
|
||||
logx.Errorf("the data synchronization task failed to execute at a scheduled time: %s", err.Error())
|
||||
}
|
||||
})
|
||||
}); err != nil {
|
||||
logx.ErrorTrace("add db data sync cron job failed", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -64,6 +64,8 @@ type DbSqlExec interface {
|
||||
GetPageList(condition *entity.DbSqlExecQuery, pageParam *model.PageParam, toEntity any, orderBy ...string) (*model.PageResult[any], error)
|
||||
}
|
||||
|
||||
var _ (DbSqlExec) = (*dbSqlExecAppImpl)(nil)
|
||||
|
||||
type dbSqlExecAppImpl struct {
|
||||
dbApp Db `inject:"T"`
|
||||
dbSqlExecRepo repository.DbSqlExec `inject:"T"`
|
||||
|
||||
@@ -58,6 +58,8 @@ type DbTransferTask interface {
|
||||
TimerDeleteTransferFile()
|
||||
}
|
||||
|
||||
var _ (DbTransferTask) = (*dbTransferAppImpl)(nil)
|
||||
|
||||
type dbTransferAppImpl struct {
|
||||
base.AppImpl[*entity.DbTransferTask, repository.DbTransferTask]
|
||||
|
||||
@@ -114,11 +116,13 @@ func (app *dbTransferAppImpl) AddCronJob(ctx context.Context, taskEntity *entity
|
||||
}
|
||||
|
||||
taskId := taskEntity.Id
|
||||
scheduler.AddFunByKey(key, taskEntity.Cron, func() {
|
||||
if err := scheduler.AddFunByKey(key, taskEntity.Cron, func() {
|
||||
logx.Infof("start the synchronization task: %d", taskId)
|
||||
logId, _ := app.CreateLog(ctx, taskId)
|
||||
app.Run(ctx, taskId, logId)
|
||||
})
|
||||
}); err != nil {
|
||||
logx.ErrorTrace("add db transfer cron job failed", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -165,9 +165,11 @@ func (m *machineCronJobAppImpl) addCronJob(mcj *entity.MachineCronJob) {
|
||||
return
|
||||
}
|
||||
|
||||
scheduler.AddFunByKey(key, mcj.Cron, func() {
|
||||
if err := scheduler.AddFunByKey(key, mcj.Cron, func() {
|
||||
m.RunCronJob(key)
|
||||
})
|
||||
}); err != nil {
|
||||
logx.ErrorTrace("add machine cron job failed", err)
|
||||
}
|
||||
}
|
||||
|
||||
func (m *machineCronJobAppImpl) runCronJob0(mid uint64, cronJob *entity.MachineCronJob) {
|
||||
|
||||
@@ -562,15 +562,6 @@ func initResource(tx *gorm.DB) error {
|
||||
Type: 2,
|
||||
Weight: 19999999,
|
||||
},
|
||||
{
|
||||
Model: model.Model{CreateModel: model.CreateModel{DeletedModel: model.DeletedModel{IdModel: model.IdModel{Id: 30}}}},
|
||||
Pid: 14,
|
||||
UiPath: "Xlqig32x/sfslfel/32xax2xA/",
|
||||
Name: "menu.accountEdit",
|
||||
Code: "account:update",
|
||||
Type: 2,
|
||||
Weight: 19999999,
|
||||
},
|
||||
{
|
||||
Model: model.Model{CreateModel: model.CreateModel{DeletedModel: model.DeletedModel{IdModel: model.IdModel{Id: 31}}}},
|
||||
Pid: 14,
|
||||
|
||||
@@ -70,6 +70,8 @@ type App[T model.ModelI] interface {
|
||||
Tx(ctx context.Context, funcs ...func(context.Context) error) (err error)
|
||||
}
|
||||
|
||||
var _ (App[*model.Model]) = (*AppImpl[*model.Model, *RepoImpl[*model.Model]])(nil)
|
||||
|
||||
// 基础application接口实现
|
||||
type AppImpl[T model.ModelI, R Repo[T]] struct {
|
||||
Repo R `inject:"T"` // repo接口, 根据类型进行注入
|
||||
|
||||
@@ -93,6 +93,8 @@ type Repo[T model.ModelI] interface {
|
||||
CountByCond(cond any) int64
|
||||
}
|
||||
|
||||
var _ (Repo[*model.Model]) = (*RepoImpl[*model.Model])(nil)
|
||||
|
||||
// 基础repo接口
|
||||
type RepoImpl[T model.ModelI] struct {
|
||||
model any // 模型实例
|
||||
|
||||
@@ -2,7 +2,6 @@ package biz
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"mayfly-go/pkg/errorx"
|
||||
"mayfly-go/pkg/i18n"
|
||||
"mayfly-go/pkg/utils/anyx"
|
||||
@@ -22,7 +21,7 @@ func ErrIsNil(err error, msgAndParams ...any) {
|
||||
panic(errorx.NewBiz(err.Error()))
|
||||
}
|
||||
|
||||
panic(errorx.NewBiz(fmt.Sprintf(msgAndParams[0].(string), msgAndParams[1:]...)))
|
||||
panic(errorx.NewBiz(msgAndParams[0].(string), msgAndParams[1:]...))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +43,7 @@ func ErrIsNilI(ctx context.Context, err error, msgId i18n.MsgId, attrs ...any) {
|
||||
|
||||
func ErrNotNil(err error, msg string, params ...any) {
|
||||
if err == nil {
|
||||
panic(errorx.NewBiz(fmt.Sprintf(msg, params...)))
|
||||
panic(errorx.NewBiz(msg, params...))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,7 +53,7 @@ func ErrNotNil(err error, msg string, params ...any) {
|
||||
// biz.ErrIsNilAppendErr(err, "xxxx: %s")
|
||||
func ErrIsNilAppendErr(err error, msg string) {
|
||||
if err != nil {
|
||||
panic(errorx.NewBiz(fmt.Sprintf(msg, err.Error())))
|
||||
panic(errorx.NewBiz(msg, err.Error()))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,13 +63,13 @@ func ErrIsNilAppendErr(err error, msg string) {
|
||||
// biz.ErrIsNilAppendErr(err, "xxxx: %s")
|
||||
func ErrIsNilAppendErrI(ctx context.Context, err error, msgId i18n.MsgId) {
|
||||
if err != nil {
|
||||
panic(errorx.NewBiz(fmt.Sprintf(i18n.TC(ctx, msgId), err.Error())))
|
||||
panic(errorx.NewBiz(i18n.TC(ctx, msgId), err.Error()))
|
||||
}
|
||||
}
|
||||
|
||||
func IsTrue(exp bool, msg string, params ...any) {
|
||||
if !exp {
|
||||
panic(errorx.NewBiz(fmt.Sprintf(msg, params...)))
|
||||
panic(errorx.NewBiz(msg, params...))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,19 +87,19 @@ func IsTrueBy(exp bool, err *errorx.BizError) {
|
||||
|
||||
func NotEmpty(str string, msg string, params ...any) {
|
||||
if str == "" {
|
||||
panic(errorx.NewBiz(fmt.Sprintf(msg, params...)))
|
||||
panic(errorx.NewBiz(msg, params...))
|
||||
}
|
||||
}
|
||||
|
||||
func NotNil(data any, msg string, params ...any) {
|
||||
if reflect.ValueOf(data).IsNil() {
|
||||
panic(errorx.NewBiz(fmt.Sprintf(msg, params...)))
|
||||
panic(errorx.NewBiz(msg, params...))
|
||||
}
|
||||
}
|
||||
|
||||
func NotBlank(data any, msg string, params ...any) {
|
||||
if anyx.IsBlank(data) {
|
||||
panic(errorx.NewBiz(fmt.Sprintf(msg, params...)))
|
||||
panic(errorx.NewBiz(msg, params...))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package scheduler
|
||||
|
||||
import (
|
||||
"mayfly-go/pkg/biz"
|
||||
"mayfly-go/pkg/logx"
|
||||
"sync"
|
||||
|
||||
@@ -25,14 +24,14 @@ func Stop() {
|
||||
cronService.Stop()
|
||||
}
|
||||
|
||||
// 根据任务id移除
|
||||
// Remove 根据任务id移除
|
||||
func Remove(id cron.EntryID) {
|
||||
cronService.Remove(id)
|
||||
}
|
||||
|
||||
// 根据任务key移除
|
||||
// RemoveByKey 根据任务key移除
|
||||
func RemoveByKey(key string) {
|
||||
logx.Debugf("移除cron任务 => [key = %s]", key)
|
||||
logx.Debugf("remove cron func => [key = %s]", key)
|
||||
id, ok := key2IdMap.Load(key)
|
||||
if ok {
|
||||
Remove(id.(cron.EntryID))
|
||||
@@ -44,18 +43,21 @@ func GetCron() *cron.Cron {
|
||||
return cronService
|
||||
}
|
||||
|
||||
// 添加任务
|
||||
func AddFun(spec string, cmd func()) cron.EntryID {
|
||||
id, err := cronService.AddFunc(spec, cmd)
|
||||
biz.ErrIsNilAppendErr(err, "添加任务失败: %s")
|
||||
return id
|
||||
// AddFun 添加任务
|
||||
func AddFun(spec string, cmd func()) (cron.EntryID, error) {
|
||||
return cronService.AddFunc(spec, cmd)
|
||||
}
|
||||
|
||||
// 根据key添加定时任务
|
||||
func AddFunByKey(key, spec string, cmd func()) {
|
||||
logx.Debugf("添加cron任务 => [key = %s]", key)
|
||||
// AddFunByKey 根据key添加定时任务
|
||||
func AddFunByKey(key, spec string, cmd func()) error {
|
||||
logx.Debugf("add cron func => [key = %s]", key)
|
||||
RemoveByKey(key)
|
||||
key2IdMap.Store(key, AddFun(spec, cmd))
|
||||
id, err := AddFun(spec, cmd)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
key2IdMap.Store(key, id)
|
||||
return nil
|
||||
}
|
||||
|
||||
func ExistKey(key string) bool {
|
||||
|
||||
@@ -764,7 +764,6 @@ INSERT INTO `t_sys_resource` (`id`, `pid`, `ui_path`, `type`, `status`, `name`,
|
||||
INSERT INTO `t_sys_resource` (`id`, `pid`, `ui_path`, `type`, `status`, `name`, `code`, `weight`, `meta`, `creator_id`, `creator`, `modifier_id`, `modifier`, `create_time`, `update_time`, `is_deleted`, `delete_time`) values(27, 5, 'Xlqig32x/UGxla231/JExq23XK/', 2, 1, 'menu.menuPermissionEdit', 'resource:update', 30000000, 'null', 1, 'admin', 1, 'admin', '2021-05-31 18:04:03', '2024-11-07 14:04:10', 0, NULL);
|
||||
INSERT INTO `t_sys_resource` (`id`, `pid`, `ui_path`, `type`, `status`, `name`, `code`, `weight`, `meta`, `creator_id`, `creator`, `modifier_id`, `modifier`, `create_time`, `update_time`, `is_deleted`, `delete_time`) values(28, 5, 'Xlqig32x/UGxla231/Elex13XK/', 2, 1, 'menu.menuPermissionEnableDisable', 'resource:changeStatus', 40000000, 'null', 1, 'admin', 1, 'admin', '2021-05-31 18:04:33', '2024-11-07 14:04:53', 0, NULL);
|
||||
INSERT INTO `t_sys_resource` (`id`, `pid`, `ui_path`, `type`, `status`, `name`, `code`, `weight`, `meta`, `creator_id`, `creator`, `modifier_id`, `modifier`, `create_time`, `update_time`, `is_deleted`, `delete_time`) values(29, 14, 'Xlqig32x/sfslfel/xlawx2xA/', 2, 1, 'menu.accountAdd', 'account:add', 19999999, 'null', 1, 'admin', 1, 'admin', '2021-05-31 19:23:42', '2024-11-07 14:11:46', 0, NULL);
|
||||
INSERT INTO `t_sys_resource` (`id`, `pid`, `ui_path`, `type`, `status`, `name`, `code`, `weight`, `meta`, `creator_id`, `creator`, `modifier_id`, `modifier`, `create_time`, `update_time`, `is_deleted`, `delete_time`) values(30, 14, 'Xlqig32x/sfslfel/32xax2xA/', 2, 1, 'menu.accountEdit', 'account:update', 19999999, 'null', 1, 'admin', 1, 'admin', '2021-05-31 19:23:58', '2024-11-07 14:11:56', 0, NULL);
|
||||
INSERT INTO `t_sys_resource` (`id`, `pid`, `ui_path`, `type`, `status`, `name`, `code`, `weight`, `meta`, `creator_id`, `creator`, `modifier_id`, `modifier`, `create_time`, `update_time`, `is_deleted`, `delete_time`) values(31, 14, 'Xlqig32x/sfslfel/eubale13/', 2, 1, 'menu.accountBase', 'account', 9999999, 'null', 1, 'admin', 1, 'admin', '2021-05-31 21:25:06', '2024-11-07 14:11:27', 0, NULL);
|
||||
INSERT INTO `t_sys_resource` (`id`, `pid`, `ui_path`, `type`, `status`, `name`, `code`, `weight`, `meta`, `creator_id`, `creator`, `modifier_id`, `modifier`, `create_time`, `update_time`, `is_deleted`, `delete_time`) values(32, 5, 'Xlqig32x/UGxla231/321q23XK/', 2, 1, 'menu.menuPermissionBase', 'resource', 9999999, 'null', 1, 'admin', 1, 'admin', '2021-05-31 21:25:25', '2024-11-07 14:03:59', 0, NULL);
|
||||
INSERT INTO `t_sys_resource` (`id`, `pid`, `ui_path`, `type`, `status`, `name`, `code`, `weight`, `meta`, `creator_id`, `creator`, `modifier_id`, `modifier`, `create_time`, `update_time`, `is_deleted`, `delete_time`) values(33, 11, 'Xlqig32x/lxqSiae1/908xKxq3/', 2, 1, 'menu.roleBase', 'role', 9999999, 'null', 1, 'admin', 1, 'admin', '2021-05-31 21:25:40', '2024-11-07 14:13:03', 0, NULL);
|
||||
|
||||
Reference in New Issue
Block a user