mirror of
https://gitee.com/dromara/mayfly-go
synced 2025-11-02 15:30:25 +08:00
release: v1.9.1
This commit is contained in:
27
README.md
27
README.md
@@ -1,5 +1,11 @@
|
||||
# 🌈mayfly-go
|
||||
|
||||
<p align="center">
|
||||
<a href="./README_EN.md">English</a> |
|
||||
<a href="https://www.yuque.com/may-fly/mayfly-go">项目文档</a> |
|
||||
<a href="https://space.bilibili.com/484091081/channel/collectiondetail?sid=392854">操作视频</a> |
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://gitee.com/dromara/mayfly-go" target="_blank">
|
||||
<img src="https://gitee.com/dromara/mayfly-go/badge/star.svg?theme=white" alt="star"/>
|
||||
@@ -20,30 +26,25 @@
|
||||
</a>
|
||||
</p>
|
||||
|
||||
### 介绍
|
||||
## 前言
|
||||
|
||||
web 版 **linux(终端[终端回放、命令过滤] 文件 脚本 进程 计划任务)、数据库(mysql postgres oracle sqlserver 达梦 高斯 sqlite)数据操作 数据同步 数据迁移、redis(单机 哨兵 集群)、mongo 等集工单流程审批于一体的统一管理操作平台**
|
||||
web 版 **linux(终端[终端回放、命令过滤] 文件 脚本 进程 计划任务)。数据库(mysql postgres oracle sqlserver 达梦 高斯 sqlite)数据操作、数据同步、数据迁移。redis(单机 哨兵 集群)。mongo 等集工单流程审批于一体的统一管理操作平台。**
|
||||
|
||||
### 开发语言与主要框架
|
||||
## 开发语言与主要框架
|
||||
|
||||
- 前端:typescript、vue3、element-plus
|
||||
- 后端:golang、gin、gorm
|
||||
|
||||
### 交流及问题反馈加 QQ 群
|
||||
## 交流及问题反馈加 QQ 群
|
||||
|
||||
<a target="_blank" href="https://qm.qq.com/cgi-bin/qm/qr?k=IdJSHW0jTMhmWFHBUS9a83wxtrxDDhFj&jump_from=webapi">119699946</a>
|
||||
|
||||
### 系统相关资料
|
||||
|
||||
- 项目文档: https://www.yuque.com/may-fly/mayfly-go
|
||||
- 系统操作视频: https://space.bilibili.com/484091081/channel/collectiondetail?sid=392854
|
||||
|
||||
### 演示环境
|
||||
## 演示环境
|
||||
|
||||
http://go.mayfly.run
|
||||
账号/密码:test/test123.
|
||||
|
||||
### 系统核心功能截图
|
||||
## 系统核心功能截图
|
||||
|
||||
#### 首页
|
||||
|
||||
@@ -101,8 +102,8 @@ http://go.mayfly.run
|
||||
|
||||

|
||||
|
||||
**其他更多功能&操作指南可查看在线文档**: https://www.yuque.com/may-fly/mayfly-go
|
||||
**其他更多功能&操作指南可查看上述项目文档**
|
||||
|
||||
#### 💌 支持作者
|
||||
## 💌 支持作者
|
||||
|
||||
如果觉得项目不错,或者已经在使用了,希望你可以去 <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,这将是对我极大的鼓励与支持。
|
||||
|
||||
105
README_EN.md
Normal file
105
README_EN.md
Normal file
@@ -0,0 +1,105 @@
|
||||
# 🌈mayfly-go
|
||||
|
||||
<p align="center">
|
||||
<a href="./README.md">中文介绍</a> |
|
||||
<a href="https://www.yuque.com/may-fly/mayfly-go">Documentation</a> |
|
||||
<a href="https://space.bilibili.com/484091081/channel/collectiondetail?sid=392854">Operate Video</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://gitee.com/dromara/mayfly-go" target="_blank">
|
||||
<img src="https://gitee.com/dromara/mayfly-go/badge/star.svg?theme=white" alt="star"/>
|
||||
<img src="https://gitee.com/dromara/mayfly-go/badge/fork.svg" alt="fork"/>
|
||||
</a>
|
||||
<a href="https://github.com/dromara/mayfly-go" target="_blank">
|
||||
<img src="https://img.shields.io/github/stars/dromara/mayfly-go.svg?style=social" alt="github star"/>
|
||||
<img src="https://img.shields.io/github/forks/dromara/mayfly-go.svg?style=social" alt="github fork"/>
|
||||
</a>
|
||||
<a href="https://hub.docker.com/r/mayflygo/mayfly-go/tags" target="_blank">
|
||||
<img src="https://img.shields.io/docker/pulls/mayflygo/mayfly-go.svg?label=docker%20pulls&color=fac858" alt="docker pulls"/>
|
||||
</a>
|
||||
<a href="https://github.com/golang/go" target="_blank">
|
||||
<img src="https://img.shields.io/badge/Golang-1.22%2B-yellow.svg" alt="golang"/>
|
||||
</a>
|
||||
<a href="https://cn.vuejs.org" target="_blank">
|
||||
<img src="https://img.shields.io/badge/Vue-3.x-green.svg" alt="vue">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
## Preface
|
||||
|
||||
Browser-based management platform. **linux(Terminal [terminal playback, command filtering], file, script, process, cronjob), database (mysql, postgres, oracle, sqlserver, Dameng, gauss, sqlite) data operation, data synchronization, data migration, redis(standlone, sentinel, cluster), mongo and other unified management and operation platforms that integrate work order process approval.**
|
||||
|
||||
## Development languages and major frameworks
|
||||
|
||||
- frontend:typescript、vue3、element-plus
|
||||
- backend:golang、gin、gorm
|
||||
|
||||
## Demo
|
||||
|
||||
http://go.mayfly.run
|
||||
account/password:test/test123.
|
||||
|
||||
## Screenshots of core features
|
||||
|
||||
#### Home page
|
||||
|
||||

|
||||
|
||||
#### Machine Operation
|
||||
|
||||
##### Status
|
||||
|
||||

|
||||
|
||||
##### SSH Terminal
|
||||
|
||||

|
||||
|
||||
##### File Operation
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
#### Database Operation
|
||||
|
||||
##### SQL Editor
|
||||
|
||||

|
||||
|
||||
##### Add, delete, update and check data online
|
||||
|
||||

|
||||
|
||||
#### Redis Operation
|
||||
|
||||

|
||||
|
||||
#### Mongo Operation
|
||||
|
||||

|
||||
|
||||
#### Work order process approval
|
||||
|
||||

|
||||
|
||||
#### System Management
|
||||
|
||||
##### Account
|
||||
|
||||

|
||||
|
||||
##### Role
|
||||
|
||||

|
||||
|
||||
##### Menu & Permission
|
||||
|
||||

|
||||
|
||||
**Additional features & instructions can be found in the project documentation above.**
|
||||
|
||||
## 💌 Supporting Author
|
||||
|
||||
If you think the project is good, or you are already using it, I hope you can go to <a target="_blank" href="https://github.com/dromara/mayfly-go">Github</a> to help me click ⭐ Star, which will be a great encouragement and support for me.
|
||||
@@ -28,13 +28,13 @@ function buildWeb() {
|
||||
cd ${web_folder}
|
||||
copy2Server=$1
|
||||
|
||||
echo_yellow "-------------------打包前端开始-------------------"
|
||||
echo_yellow "-------------------Start bundling frontends-------------------"
|
||||
yarn run build
|
||||
if [ "${copy2Server}" == "2" ] ; then
|
||||
echo_green '将打包后的静态文件拷贝至server/static/static'
|
||||
echo_green 'Copy the packaged static files to server/static/static'
|
||||
rm -rf ${server_folder}/static/static && mkdir -p ${server_folder}/static/static && cp -r ${web_folder}/dist/* ${server_folder}/static/static
|
||||
fi
|
||||
echo_yellow ">>>>>>>>>>>>>>>>>>>打包前端结束<<<<<<<<<<<<<<<<<<<<\n"
|
||||
echo_yellow ">>>>>>>>>>>>>>>>>>>End of packaging frontend<<<<<<<<<<<<<<<<<<<<\n"
|
||||
}
|
||||
|
||||
function build() {
|
||||
@@ -46,10 +46,10 @@ function build() {
|
||||
arch=$3
|
||||
copyDocScript=$4
|
||||
|
||||
echo_yellow "-------------------${os}-${arch}打包构建开始-------------------"
|
||||
echo_yellow "-------------------Start a bundle build - ${os}-${arch}-------------------"
|
||||
|
||||
cd ${server_folder}
|
||||
echo_green "打包构建可执行文件..."
|
||||
echo_green "Package build executables..."
|
||||
|
||||
execFileName=${exec_file_name}
|
||||
# 如果是windows系统,可执行文件需要添加.exe结尾
|
||||
@@ -59,13 +59,13 @@ function build() {
|
||||
CGO_ENABLE=0 GOOS=${os} GOARCH=${arch} go build -ldflags=-w -o ${execFileName} main.go
|
||||
|
||||
if [ -d ${toFolder} ] ; then
|
||||
echo_green "目标文件夹已存在,清空文件夹"
|
||||
echo_green "The desired folder already exists. Clear the folder"
|
||||
sudo rm -rf ${toFolder}
|
||||
fi
|
||||
echo_green "创建'${toFolder}'目录"
|
||||
echo_green "Create '${toFolder}' Directory"
|
||||
mkdir ${toFolder}
|
||||
|
||||
echo_green "移动二进制文件至'${toFolder}'"
|
||||
echo_green "Move binary to '${toFolder}'"
|
||||
mv ${server_folder}/${execFileName} ${toFolder}
|
||||
|
||||
# if [ "${copy2Server}" == "1" ] ; then
|
||||
@@ -74,16 +74,17 @@ function build() {
|
||||
# fi
|
||||
|
||||
if [ "${copyDocScript}" == "1" ] ; then
|
||||
echo_green "拷贝脚本等资源文件[config.yml.example、mayfly-go.sql、mayfly-go.sqlite、readme.txt、startup.sh、shutdown.sh]"
|
||||
echo_green "Copy resources such as scripts [config.yml.example、mayfly-go.sql、mayfly-go.sqlite、readme.txt、startup.sh、shutdown.sh]"
|
||||
cp ${server_folder}/config.yml.example ${toFolder}
|
||||
cp ${server_folder}/readme.txt ${toFolder}
|
||||
cp ${server_folder}/readme_cn.txt ${toFolder}
|
||||
cp ${server_folder}/resources/script/startup.sh ${toFolder}
|
||||
cp ${server_folder}/resources/script/shutdown.sh ${toFolder}
|
||||
cp ${server_folder}/resources/script/sql/mayfly-go.sql ${toFolder}
|
||||
cp ${server_folder}/resources/data/mayfly-go.sqlite ${toFolder}
|
||||
fi
|
||||
|
||||
echo_yellow ">>>>>>>>>>>>>>>>>>>${os}-${arch}打包构建完成<<<<<<<<<<<<<<<<<<<<\n"
|
||||
echo_yellow ">>>>>>>>>>>>>>>>>>> ${os}-${arch} - Bundle build complete <<<<<<<<<<<<<<<<<<<<\n"
|
||||
}
|
||||
|
||||
function buildLinuxAmd64() {
|
||||
@@ -103,25 +104,25 @@ function buildMac() {
|
||||
}
|
||||
|
||||
function buildDocker() {
|
||||
echo_yellow "-------------------构建docker镜像开始-------------------"
|
||||
echo_yellow "-------------------Start building the docker image-------------------"
|
||||
imageVersion=$1
|
||||
imageName="mayfly/mayfly-go:${imageVersion}"
|
||||
docker build --no-cache --platform linux/amd64 --build-arg MAYFLY_GO_VERSION="${imageVersion}" -t "${imageName}" .
|
||||
echo_green "docker镜像构建完成->[${imageName}]"
|
||||
echo_yellow "-------------------构建docker镜像结束-------------------"
|
||||
echo_green "The docker image is built -> [${imageName}]"
|
||||
echo_yellow "-------------------Finished building the docker image-------------------"
|
||||
}
|
||||
|
||||
function buildxDocker() {
|
||||
echo_yellow "-------------------docker buildx构建镜像开始-------------------"
|
||||
echo_yellow "-------------------The docker buildx build image starts-------------------"
|
||||
imageVersion=$1
|
||||
imageName="ccr.ccs.tencentyun.com/mayfly/mayfly-go:${imageVersion}"
|
||||
docker buildx build --no-cache --push --platform linux/amd64,linux/arm64 --build-arg MAYFLY_GO_VERSION="${imageVersion}" -t "${imageName}" .
|
||||
echo_green "docker多版本镜像构建完成->[${imageName}]"
|
||||
echo_yellow "-------------------docker buildx构建镜像结束-------------------"
|
||||
echo_green "The docker multi-architecture version image is built -> [${imageName}]"
|
||||
echo_yellow "-------------------The docker buildx image is finished-------------------"
|
||||
}
|
||||
|
||||
function runBuild() {
|
||||
read -p "请选择构建版本[0|其他->除docker镜像外其他 1->linux-amd64 2->linux-arm64 3->windows 4->mac 5->docker 6->docker buildx]: " buildType
|
||||
read -p "Select build version [0 | Other->Other than docker image 1->linux-amd64 2->linux-arm64 3->windows 4->mac 5->docker 6->docker buildx]: " buildType
|
||||
|
||||
toPath="."
|
||||
imageVersion="latest"
|
||||
@@ -129,16 +130,16 @@ function runBuild() {
|
||||
|
||||
if [[ "${buildType}" != "5" ]] && [[ "${buildType}" != "6" ]] ; then
|
||||
# 构建结果的目的路径
|
||||
read -p "请输入构建产物输出目录[默认当前路径]: " toPath
|
||||
read -p "Please enter the build product output directory [default current path]: " toPath
|
||||
if [ ! -d ${toPath} ] ; then
|
||||
echo_red "构建产物输出目录不存在!"
|
||||
echo_red "Build product output directory does not exist!"
|
||||
exit;
|
||||
fi
|
||||
if [ "${toPath}" == "" ] ; then
|
||||
toPath="."
|
||||
fi
|
||||
|
||||
read -p "是否拷贝文档&脚本[0->否 1->是][默认是]: " copyDocScript
|
||||
read -p "Whether to copy documents & Scripts [0-> No 1-> Yes][Default yes]: " copyDocScript
|
||||
if [ "${copyDocScript}" == "" ] ; then
|
||||
copyDocScript="1"
|
||||
fi
|
||||
@@ -154,7 +155,7 @@ function runBuild() {
|
||||
fi
|
||||
|
||||
if [[ "${buildType}" == "5" ]] || [[ "${buildType}" == "6" ]] ; then
|
||||
read -p "请输入docker镜像版本号[默认latest]: " imageVersion
|
||||
read -p "Please enter the docker image version (default latest) : " imageVersion
|
||||
|
||||
if [ "${imageVersion}" == "" ] ; then
|
||||
imageVersion="latest"
|
||||
@@ -189,7 +190,7 @@ function runBuild() {
|
||||
esac
|
||||
|
||||
if [[ "${buildType}" != "5" ]] && [[ "${buildType}" != "6" ]] ; then
|
||||
echo_green "删除['${server_folder}/static/static']下静态资源文件."
|
||||
echo_green "Delete static assets under ['${server_folder}/static/static']."
|
||||
# 删除静态资源文件,保留一个favicon.ico,否则后端启动会报错
|
||||
rm -rf ${server_folder}/static/static/assets
|
||||
rm -rf ${server_folder}/static/static/config.js
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
"eslint": "^8.35.0",
|
||||
"eslint-plugin-vue": "^9.28.0",
|
||||
"prettier": "^3.2.5",
|
||||
"sass": "^1.80.6",
|
||||
"sass": "^1.81.0",
|
||||
"typescript": "^5.6.3",
|
||||
"vite": "^5.4.11",
|
||||
"vue-eslint-parser": "^9.4.3"
|
||||
|
||||
@@ -15,7 +15,7 @@ const config = {
|
||||
baseWsUrl: `${(window as any).globalConfig.BaseWsUrl || `${location.protocol == 'https:' ? 'wss:' : 'ws:'}//${getBaseApiUrl()}`}/api`,
|
||||
|
||||
// 系统版本
|
||||
version: 'v1.9.0',
|
||||
version: 'v1.9.1',
|
||||
};
|
||||
|
||||
export default config;
|
||||
|
||||
@@ -44,10 +44,10 @@ export default {
|
||||
testConn: 'Test Connection',
|
||||
usernameExist: 'The username already exists in the account list',
|
||||
publicAc: 'Public credentials',
|
||||
acTypeEnumPublic: 'Public credentials',
|
||||
acTypeEnumPrivate: 'Ordinary certificate',
|
||||
acTypeEnumPrivileged: 'Privilege credentials',
|
||||
acTypeEnumPrivateDefault: 'Default credentials',
|
||||
acTypeEnumPublic: 'Public',
|
||||
acTypeEnumPrivate: 'Ordinary',
|
||||
acTypeEnumPrivileged: 'Privilege',
|
||||
acTypeEnumPrivateDefault: 'Default',
|
||||
ciphertextTypeEnumPassword: 'Password',
|
||||
ciphertextTypeEnumPrivateKey: 'Private key',
|
||||
ciphertextTypeEnumPublic: 'Public credentials',
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
<img :src="themeConfig.logoIcon" />
|
||||
<div class="login-left-logo-text">
|
||||
<span>{{ themeConfig.globalViceTitle }}</span>
|
||||
<!-- <span class="login-left-logo-text-msg">mayfly-go</span> -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="login-left-img">
|
||||
@@ -13,12 +12,49 @@
|
||||
</div>
|
||||
<img :src="loginBgSplitImg" class="login-left-waves" />
|
||||
</div>
|
||||
|
||||
<div class="login-right flex">
|
||||
<div class="login-right-warp flex-margin">
|
||||
<span class="login-right-warp-one"></span>
|
||||
<span class="login-right-warp-one"> </span>
|
||||
<span class="login-right-warp-two"></span>
|
||||
|
||||
<div class="login-right-warp-mian">
|
||||
<div class="login-right-warp-main-title">{{ themeConfig.globalViceTitle }}</div>
|
||||
<div class="login-right-warp-main-title">
|
||||
{{ themeConfig.globalViceTitle }}
|
||||
|
||||
<el-dropdown
|
||||
:show-timeout="70"
|
||||
:hide-timeout="50"
|
||||
trigger="click"
|
||||
@command="
|
||||
(lang: string) => {
|
||||
themeConfig.globalI18n = lang;
|
||||
}
|
||||
"
|
||||
>
|
||||
<div>
|
||||
<SvgIcon
|
||||
:size="16"
|
||||
:name="EnumValue.getEnumByValue(I18nEnum, themeConfig.globalI18n)?.extra.icon"
|
||||
:title="$t('layout.user.langSwitch')"
|
||||
style="margin-top: 50px; margin-left: 20px"
|
||||
/>
|
||||
</div>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item
|
||||
v-for="item in I18nEnum"
|
||||
:key="item.value"
|
||||
:command="item.value"
|
||||
:disabled="themeConfig.globalI18n === item.value"
|
||||
>
|
||||
{{ item.label }}
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</template>
|
||||
</el-dropdown>
|
||||
</div>
|
||||
|
||||
<div class="login-right-warp-main-form">
|
||||
<div v-if="!state.isScan">
|
||||
<el-tabs v-model="state.tabsActiveName">
|
||||
@@ -27,9 +63,9 @@
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
<div class="mt20" v-show="state.oauth2LoginConfig.enable">
|
||||
<el-button link size="small">{{ $t('login.thirdPartyLogin') }}: </el-button>
|
||||
<el-tooltip :content="state.oauth2LoginConfig.name" placement="top-start">
|
||||
<div class="mt20" v-if="state.oauth2LoginConfig.enable">
|
||||
<el-text size="small">{{ $t('login.thirdPartyLogin') }}: </el-text>
|
||||
<el-tooltip :content="state.oauth2LoginConfig.name" placement="bottom-start">
|
||||
<el-button link size="small" type="primary" @click="oauth2Login">
|
||||
<el-icon :size="18">
|
||||
<Link />
|
||||
@@ -53,6 +89,8 @@ import openApi from '@/common/openApi';
|
||||
import config from '@/common/config';
|
||||
import { storeToRefs } from 'pinia';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import EnumValue from '../../common/Enum';
|
||||
import { I18nEnum } from '../../common/commonEnum';
|
||||
|
||||
// 引入组件
|
||||
const Account = defineAsyncComponent(() => import('./component/AccountLogin.vue'));
|
||||
|
||||
@@ -214,7 +214,6 @@ import ResourceTags from '../component/ResourceTags.vue';
|
||||
import { sleep } from '@/common/utils/loading';
|
||||
import { DbGetDbNamesMode } from './enums';
|
||||
import { DbInst } from './db';
|
||||
import { ElMessage, ElMessageBox } from 'element-plus';
|
||||
import DrawerHeader from '@/components/drawer-header/DrawerHeader.vue';
|
||||
import { useI18nCreateTitle, useI18nDeleteConfirm, useI18nDeleteSuccessMsg, useI18nEditTitle, useI18nSaveSuccessMsg } from '@/hooks/useI18n';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
@@ -241,10 +240,10 @@ const columns = ref([
|
||||
TableColumn.new('name', 'common.name'),
|
||||
TableColumn.new('authCertName', 'db.acName'),
|
||||
TableColumn.new('getDatabaseMode', 'db.getDbMode').typeTag(DbGetDbNamesMode),
|
||||
TableColumn.new('database', 'DB').isSlot().setMinWidth(80),
|
||||
TableColumn.new('database', 'DB').isSlot().setMinWidth(90),
|
||||
TableColumn.new('remark', 'common.remark'),
|
||||
TableColumn.new('code', 'common.code'),
|
||||
TableColumn.new('action', 'common.operation').isSlot().setMinWidth(210).fixedRight().alignCenter(),
|
||||
TableColumn.new('action', 'common.operation').isSlot().setMinWidth(210).fixedRight().noShowOverflowTooltip().alignCenter(),
|
||||
]);
|
||||
|
||||
const perms = {
|
||||
|
||||
@@ -128,7 +128,7 @@ const columns = ref([
|
||||
|
||||
// 该用户拥有的的操作列按钮权限
|
||||
const actionBtns: any = hasPerms(Object.values(perms));
|
||||
const actionColumn = TableColumn.new('action', 'common.operation').isSlot().setMinWidth(180).fixedRight().alignCenter();
|
||||
const actionColumn = TableColumn.new('action', 'common.operation').isSlot().setMinWidth(180).fixedRight().noShowOverflowTooltip().alignCenter();
|
||||
const pageTableRef: Ref<any> = ref(null);
|
||||
|
||||
const state = reactive({
|
||||
|
||||
@@ -73,7 +73,7 @@ const columns = ref([
|
||||
TableColumn.new('saveExecResType', 'machine.execResRecordType').typeTag(CronJobSaveExecResTypeEnum),
|
||||
TableColumn.new('remark', 'common.remark'),
|
||||
TableColumn.new('codePaths', 'machine.relateMachine').isSlot().setMinWidth('250px'),
|
||||
TableColumn.new('action', 'common.operation').isSlot().setMinWidth(180).fixedRight().alignCenter(),
|
||||
TableColumn.new('action', 'common.operation').isSlot().setMinWidth(180).fixedRight().noShowOverflowTooltip().alignCenter(),
|
||||
]);
|
||||
|
||||
const pageTableRef: Ref<any> = ref(null);
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<el-table-column prop="remark" :label="$t('common.remark')" show-overflow-tooltip width="120px"> </el-table-column>
|
||||
<el-table-column prop="creator" :label="$t('common.creator')" show-overflow-tooltip width="100px"> </el-table-column>
|
||||
|
||||
<el-table-column :label="$t('common.operation')" min-wdith="100px">
|
||||
<el-table-column :label="$t('common.operation')" min-width="120px">
|
||||
<template #header>
|
||||
<el-text tag="b">{{ $t('common.operation') }}</el-text>
|
||||
<el-button v-auth="'cmdconf:save'" class="ml5" type="primary" circle size="small" icon="Plus" @click="openFormDialog(false)"> </el-button>
|
||||
@@ -95,16 +95,12 @@
|
||||
import { ref, toRefs, reactive, onMounted, nextTick } from 'vue';
|
||||
import TagTreeCheck from '../../component/TagTreeCheck.vue';
|
||||
import { TagResourceTypeEnum } from '@/common/commonEnum';
|
||||
import { ElMessage, ElMessageBox } from 'element-plus';
|
||||
import { cmdConfApi } from '../api';
|
||||
import DrawerHeader from '@/components/drawer-header/DrawerHeader.vue';
|
||||
import TagCodePath from '../../component/TagCodePath.vue';
|
||||
import _ from 'lodash';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useI18nDeleteConfirm, useI18nDeleteSuccessMsg, useI18nFormValidate, useI18nPleaseInput, useI18nSaveSuccessMsg } from '@/hooks/useI18n';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const rules = {
|
||||
tags: [
|
||||
{
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
server:
|
||||
# en,zh-cn, 默认zh-cn
|
||||
lang: zh-cn
|
||||
# debug release test
|
||||
model: release
|
||||
port: 18888
|
||||
|
||||
@@ -2,4 +2,41 @@ package imsg
|
||||
|
||||
import "mayfly-go/pkg/i18n"
|
||||
|
||||
var En = map[i18n.MsgId]string{}
|
||||
var En = map[i18n.MsgId]string{
|
||||
LogDbInstSave: "DB - Save Instance",
|
||||
LogDbInstDelete: "DB - Delete Instance",
|
||||
|
||||
ErrDbInstExist: "The database instance already exists",
|
||||
|
||||
// db
|
||||
LogDbSave: "DB - Save DB",
|
||||
LogDbDelete: "DB - Delete DB",
|
||||
LogDbRunSql: "DB - Run SQL",
|
||||
LogDbDump: "DB - Export DB",
|
||||
|
||||
SqlScriptRunFail: "sql script failed to execute",
|
||||
SqlScriptRunSuccess: "sql script executed successfully",
|
||||
SqlScripRunProgress: "sql script execution progress",
|
||||
DbDumpErr: "Database export failed",
|
||||
ErrDbNameExist: "The database name already exists in this instance",
|
||||
ErrDbNotAccess: "The operation permissions of database [{{.dbName}}] are not configured",
|
||||
|
||||
ErrExistRunFailSql: "There is an execution error in sql",
|
||||
ErrNeedSubmitWorkTicket: "This operation needs to submit a work ticket for approval",
|
||||
ErrNoLimitStmt: "Please complete the paging information before executing",
|
||||
ErrLimitInvalid: "The number of query result sets should be less than the {{.count}} number configured by the system",
|
||||
|
||||
// db transfer
|
||||
LogDtsSave: "dts - Save data transfer task",
|
||||
LogDtsDelete: "dts - Delete data transfer task",
|
||||
LogDtsChangeStatus: "dts - Change status",
|
||||
LogDtsRun: "dts - Run data transfer task",
|
||||
LogDtsStop: "dts - Stop data transfer task",
|
||||
LogDtsDeleteFile: "dts - Delete transfer file",
|
||||
LogDtsRunSqlFile: "dts - Run SQL File",
|
||||
|
||||
// data sync
|
||||
LogDataSyncSave: "datasync - Save data sync task",
|
||||
LogDataSyncDelete: "datasync - Delete data sync task",
|
||||
LogDataSyncChangeStatus: "datasync - Change status",
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import "fmt"
|
||||
|
||||
const (
|
||||
AppName = "mayfly-go"
|
||||
Version = "v1.9.0"
|
||||
Version = "v1.9.1"
|
||||
)
|
||||
|
||||
func GetAppInfo() string {
|
||||
|
||||
@@ -2,6 +2,7 @@ package config
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"mayfly-go/pkg/i18n"
|
||||
)
|
||||
|
||||
type Server struct {
|
||||
@@ -17,7 +18,7 @@ type Server struct {
|
||||
|
||||
func (s *Server) Default() {
|
||||
if s.Lang == "" {
|
||||
s.Lang = "zh_CN"
|
||||
s.Lang = i18n.Zh_CN
|
||||
}
|
||||
if s.Model == "" {
|
||||
s.Model = "release"
|
||||
|
||||
@@ -6,5 +6,5 @@
|
||||
服务启动&重启:./startup.sh
|
||||
服务关闭:./shutdown.sh
|
||||
|
||||
直接通过 host:config.yml里配置的端口 即可访问项目
|
||||
直接通过 host:prot 即可访问项目(port为config.yml里配置的server.port)
|
||||
初始账号 admin/admin123.
|
||||
12
server/readme_en.txt
Normal file
12
server/readme_en.txt
Normal file
@@ -0,0 +1,12 @@
|
||||
Related configuration files:
|
||||
backend:
|
||||
config.yml: Server port, mysql, aeskey(16, 24, 32 chars), jwt-key and other information can be configured here.
|
||||
It is recommended to replace aes.key(resource password encryption such as machine, database, redis password) and jwT.key (jwt secret key) with a random string.
|
||||
|
||||
|
||||
server start & restart: ./startup.sh
|
||||
server shutdown: ./shutdown.sh
|
||||
|
||||
|
||||
The project can be accessed directly via host:port (port is server.port as configured in config.yml).
|
||||
Initial account: admin/admin123.
|
||||
Reference in New Issue
Block a user