mirror of
https://github.com/flipped-aurora/gin-vue-admin.git
synced 2026-09-25 05:50:19 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8943dabb54 | ||
|
|
3578697dbf | ||
|
|
9d1b529d72 | ||
|
|
7faaa2e693 | ||
|
|
fe615455e0 | ||
|
|
a3dc81310c | ||
|
|
410aadfff1 |
@@ -59,6 +59,10 @@ func (a *api) Initialize() error {
|
||||
{ApiGroup: "菜单", Method: "POST", Path: "/menu/getMenuAuthority", Description: "获取指定角色menu"},
|
||||
{ApiGroup: "菜单", Method: "POST", Path: "/menu/addMenuAuthority", Description: "增加menu和角色关联关系"},
|
||||
|
||||
{ApiGroup: "分片上传", Method: "POST", Path: "/fileUploadAndDownload/findFile", Description: "寻找目标文件(秒传)"},
|
||||
{ApiGroup: "分片上传", Method: "POST", Path: "/fileUploadAndDownload/breakpointContinueFinish", Description: "断点续传"},
|
||||
{ApiGroup: "分片上传", Method: "POST", Path: "/fileUploadAndDownload/removeChunk", Description: "上传完成"},
|
||||
|
||||
{ApiGroup: "文件上传与下载", Method: "POST", Path: "/fileUploadAndDownload/upload", Description: "文件上传示例"},
|
||||
{ApiGroup: "文件上传与下载", Method: "POST", Path: "/fileUploadAndDownload/deleteFile", Description: "删除文件"},
|
||||
{ApiGroup: "文件上传与下载", Method: "POST", Path: "/fileUploadAndDownload/getFileList", Description: "获取上传文件列表"},
|
||||
|
||||
@@ -54,6 +54,10 @@ func (c *casbin) Initialize() error {
|
||||
{PType: "p", V0: "888", V1: "/user/setUserAuthority", V2: "POST"},
|
||||
{PType: "p", V0: "888", V1: "/user/setUserAuthorities", V2: "POST"},
|
||||
|
||||
{PType: "p", V0: "888", V1: "/fileUploadAndDownload/findFile", V2: "GET"},
|
||||
{PType: "p", V0: "888", V1: "/fileUploadAndDownload/breakpointContinueFinish", V2: "POST"},
|
||||
{PType: "p", V0: "888", V1: "/fileUploadAndDownload/removeChunk", V2: "POST"},
|
||||
|
||||
{PType: "p", V0: "888", V1: "/fileUploadAndDownload/upload", V2: "POST"},
|
||||
{PType: "p", V0: "888", V1: "/fileUploadAndDownload/deleteFile", V2: "POST"},
|
||||
{PType: "p", V0: "888", V1: "/fileUploadAndDownload/getFileList", V2: "POST"},
|
||||
|
||||
+3
-2
@@ -3,5 +3,6 @@ ENV = 'production'
|
||||
VITE_CLI_PORT = 8080
|
||||
VITE_SERVER_PORT = 8888
|
||||
VITE_BASE_API = /api
|
||||
#下方修改为你的线上ip
|
||||
VITE_BASE_PATH = http://8.141.61.63
|
||||
#下方修改为你的线上ip 如果 https模式下则使用域名 并且配置代理 (不建议上线使用表单生成器)
|
||||
#VITE_BASE_PATH = http://x.x.x.x
|
||||
VITE_BASE_PATH = https://demo.gin-vue-admin.com
|
||||
+22
-22
@@ -4,34 +4,34 @@ const path = require('path')
|
||||
const wfPath = path.resolve(__dirname, './node_modules/.bin')
|
||||
|
||||
fs.readdir(wfPath, (err, files) => {
|
||||
if (err) {
|
||||
console.log(err)
|
||||
} else {
|
||||
if (files.length != 0) {
|
||||
files.forEach((item) => {
|
||||
if (item.split('.')[1] === 'cmd') {
|
||||
replaceStr(`${wfPath}/${item}`, /"%_prog%"/, '%_prog%')
|
||||
}
|
||||
})
|
||||
if (err) {
|
||||
console.log(err)
|
||||
} else {
|
||||
if (files.length != 0) {
|
||||
files.forEach((item) => {
|
||||
if (item.split('.')[1] === 'cmd') {
|
||||
replaceStr(`${wfPath}/${item}`, /"%_prog%"/, '%_prog%')
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// 参数:[文件路径、 需要修改的字符串、修改后的字符串] (替换对应文件内字符串的公共函数)
|
||||
function replaceStr(filePath, sourceRegx, targetSrt) {
|
||||
fs.readFile(filePath, (err, data) => {
|
||||
fs.readFile(filePath, (err, data) => {
|
||||
if (err) {
|
||||
console.log(err)
|
||||
} else {
|
||||
let str = data.toString()
|
||||
str = str.replace(sourceRegx, targetSrt)
|
||||
fs.writeFile(filePath, str, (err) => {
|
||||
if (err) {
|
||||
console.log(err)
|
||||
console.log(err)
|
||||
} else {
|
||||
let str = data.toString()
|
||||
str = str.replace(sourceRegx, targetSrt)
|
||||
fs.writeFile(filePath, str, (err) => {
|
||||
if(err){
|
||||
console.log(err)
|
||||
}else{
|
||||
console.log("\x1B[42m%s\x1B[0m","文件修改成功")
|
||||
}
|
||||
})
|
||||
console.log('\x1B[42m%s\x1B[0m', '文件修改成功')
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
+5
-2
@@ -11,11 +11,12 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@element-plus/icons": "0.0.11",
|
||||
"axios": "^0.19.2",
|
||||
"axios": "^0.24.0",
|
||||
"core-js": "^3.6.5",
|
||||
"echarts": "4.9.0",
|
||||
"element-plus": "1.2.0-beta.6",
|
||||
"highlight.js": "^10.6.0",
|
||||
"js-cookie": "^3.0.1",
|
||||
"marked": "^2.0.0",
|
||||
"mitt": "^3.0.0",
|
||||
"path": "^0.12.7",
|
||||
@@ -25,11 +26,13 @@
|
||||
"script-ext-html-webpack-plugin": "^2.1.4",
|
||||
"spark-md5": "^3.0.1",
|
||||
"vue": "^3.2.25",
|
||||
"vue-i18n": "^9.2.0-beta.25",
|
||||
"vue-router": "^4.0.0-0",
|
||||
"vuex": "^4.0.0-0",
|
||||
"vuex-persist": "^2.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@intlify/vite-plugin-vue-i18n": "^3.2.1",
|
||||
"@vitejs/plugin-legacy": "^1.4.4",
|
||||
"@vitejs/plugin-vue": "latest",
|
||||
"@vue/cli-plugin-babel": "~4.5.0",
|
||||
@@ -50,4 +53,4 @@
|
||||
"vite-plugin-banner": "^0.1.3",
|
||||
"vite-plugin-importer": "^0.2.5"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 900 600">
|
||||
<rect width="900" height="600" fill="#000"/>
|
||||
<rect width="900" height="400" fill="#fff"/>
|
||||
<rect width="900" height="200" fill="#ce1126"/>
|
||||
<g fill="#fff" stroke="#c09300">
|
||||
<path stroke-width="1.2703" stroke-linejoin="round" d="m450.81,302.4,68.488,63.579-4.8759-115.47c-0.71638-17.5-15.924-13.485-26.971-7.1723-11.191,7.1723-23.958,7.1723-37.446,2.437-13.485,4.7353-26.253,4.7353-37.444-2.437-11.046-6.3123-26.252-10.328-26.97,7.1723l-4.8789,115.47,70.098-63.579z"/>
|
||||
<g id="w" fill="#c09300" stroke="none">
|
||||
<path d="m393.47,246.49-4.7342,112.32-8.0347,7.168,4.8784-115.47c2.2949-1.5782,6.3132-4.0171,7.8905-4.0171z"/>
|
||||
<path d="m403.09,254.53-4.0171,93.955-8.0323,8.2204,4.8772-108.49c1.5791,1.577,6.3138,5.4498,7.1721,6.3104z"/>
|
||||
<path d="m411.84,261.7-3.1545,78.362-6.4556,6.3092,4.0177-89.405c1.5748,1.5782,4.7311,3.8734,5.5924,4.7334z"/>
|
||||
<path d="m421.31,265.72-3.1563,66.787-6.3132,5.1193,3.1563-74.344c1.5791,0.71638,4.7348,2.4376,6.3132,2.4376z"/>
|
||||
<path d="m430.06,265.72-2.2974,55.657-6.4544,6.3129,2.4392-61.252c1.576-0.00061,5.5937-0.00061,6.3126-0.7182z"/>
|
||||
</g>
|
||||
<use xlink:href="#w" transform="matrix(-1,0,0,1,900,0)"/>
|
||||
<path fill="#c09300" stroke-width="1.0739" d="m453.16,315.06,9.6126,43.755-3.1575,3.1552-3.2993-2.4388-5.4518-39.018,2.2955,39.018-3.1569,4.0158-3.1563-4.0158,2.2962-39.018-5.4506,39.018-3.3024,2.4388-3.1545-3.1552,9.6113-43.755h6.3138z"/>
|
||||
<g id="b" fill="none" stroke-width="1.2705" stroke-linejoin="round">
|
||||
<path fill="#fff" stroke-width="1.1888" d="m428.48,295.84-19.08,67.705,26.255,4.0177,11.188-50.924-18.363-20.799z"/>
|
||||
<path d="m422.17,318.94,2.2955,5.5928,12.405-11.848"/>
|
||||
<path d="m430.76,304.92,2.5957,24.346,7.8905-10.328"/>
|
||||
<path d="m438.09,322.95,4.31,14.875"/>
|
||||
<path d="m444.09,332.36-8.7177,13.241m2.7189,13.216-2.7902-13.198-2.4356-13.423-5.8406,7.9091-2.5613-9.1191-8.1747,8.3847,4.1575,15.251,5.7375-9.4349,3.1557,9.6123,5.8903-9.1621"/>
|
||||
<path d="m414.99,361.97,5.2997-7.4437,3.4528,11.457,4.7342-8.0323,3.1575,9.6136"/>
|
||||
</g>
|
||||
<use xlink:href="#b" transform="matrix(-1,0,0,1,900,0)"/>
|
||||
<g stroke-width="1.2705" stroke-linejoin="round" stroke-linecap="round">
|
||||
<path stroke-width="2.3777" stroke-linejoin="round" d="m450,393.81c19.943,0,39.024-1.5776,50.213-4.734,4.7354-0.8588,4.7354-3.2976,4.7354-6.4553,4.7354-1.5776,2.2949-7.1704,5.5943-7.1704-3.2994,0.86244-4.0158-5.5941-8.0329-4.7316,0-5.5965-5.5955-6.3129-10.33-4.7377-9.4695,3.1576-26.255,3.8752-42.18,3.8752-15.924-0.71758-32.567-0.71758-42.179-3.8752-4.7342-1.5752-10.327-0.85881-10.327,4.7377-4.0183-0.86245-4.7354,5.5941-8.0341,4.7316,3.2988,0,0.85954,5.5928,5.5943,7.1704,0,3.1576,0,5.5965,4.8778,6.4553,11.045,3.1564,30.128,4.734,50.068,4.734z"/>
|
||||
<path d="m422.89,363.54c6.4544,0.86123,13.628,1.5776,19.225,0.86123,3.1533,0,5.4494,5.4504-0.86257,6.3129-5.5931,0.71515-14.345,0-19.08-0.86245-4.0171-0.71759-12.768-2.2946-18.364-3.8752-5.5949-2.4364-1.576-7.168,1.5772-6.4522,4.879,1.577,11.192,3.1564,17.505,4.0158z"/>
|
||||
<path d="m477.12,363.54c-6.4569,0.86123-13.628,1.5776-19.081,0.86123-3.3006,0-5.5961,5.4504,0.71711,6.3129,5.5955,0.71515,14.347,0,19.078-0.86245,4.0189-0.71759,12.769-2.2946,18.364-3.8752,5.5967-2.4364,1.5803-7.168-1.5772-6.4522-4.8778,1.577-11.19,3.1564-17.501,4.0158z"/>
|
||||
<path d="m403.09,360.39c-4.8771-0.86123-7.1723,4.7316-5.5928,7.8868,0.71637-1.5776,4.0164-1.5776,4.7346-3.1552,0.8582-2.437-0.7182-2.437,0.8582-4.7316z"/>
|
||||
<path d="m422.17,375.06c0-3.1528,3.1545-2.7651,3.1545-5.9215,0-1.577-0.85893-4.0171-2.4368-4.0171-1.5785,0-3.1575,1.5776-3.1575,3.1552-0.7177,3.157,2.4398,3.6312,2.4398,6.7834z"/>
|
||||
<path d="m444.88,365.98c4.7305,0,4.2618,6.3141,1.9656,9.4699,0-2.2952-4.0164-3.1558-4.0164-4.7316,0-2.4419,3.6262-2.4419,2.0508-4.7383z"/>
|
||||
<path d="m496.91,360.39c4.8777-0.86123,7.1741,4.7316,5.5953,7.8868-0.71819-1.5776-4.017-1.5776-4.734-3.1552-0.86124-2.437,0.71759-2.437-0.86124-4.7316z"/>
|
||||
<path d="m477.83,375.06c0-3.1528-3.1532-2.7651-3.1532-5.9215,0-1.577,0.85953-4.0171,2.438-4.0171,1.5772,0,3.1563,1.5776,3.1563,3.1552,0.71771,3.157-2.441,3.6312-2.441,6.7834z"/>
|
||||
<path d="m455.12,365.98c-4.7323,0-4.263,6.3141-1.9674,9.4699,0-2.2952,4.0158-3.1558,4.0158-4.7316,0.00061-2.4419-3.6262-2.4419-2.0484-4.7383z"/>
|
||||
<g stroke-width="0.8915">
|
||||
<path d="m404.67,361.97c1.58,0,4.0177,0.71758,4.7353,1.577l-4.74-1.58z"/>
|
||||
<path d="m412.55,364.41c0.86184,0,4.0183,0.71639,5.5959,1.5752l-5.6-1.58z"/>
|
||||
<path d="m441.25,367.56c-1.5776,0-4.734,0-5.5928,0.71516l5.59-0.72z"/>
|
||||
<path d="m432.5,367.56c-0.8588-0.86245-4.0165-0.86245-5.5935,0h5.59z"/>
|
||||
<path d="m495.34,361.97c-1.5776,0-3.8746,0.71758-4.7353,1.577l4.7353-1.577z"/>
|
||||
<path d="m487.45,364.41c-0.86002,0-4.0171,0.71639-5.5953,1.5752l5.6-1.58z"/>
|
||||
<path d="m458.75,367.56c1.5794,0,4.7352,0,5.5953,0.71516l-5.6-0.72z"/>
|
||||
<path d="m467.5,367.56c0.86002-0.86245,4.0183-0.86245,5.5953,0h-5.6z"/>
|
||||
</g>
|
||||
<g fill="#c09300" stroke="none">
|
||||
<path d="m403.34,374.58c-0.53406-0.10208-0.81452-0.52459-0.68011-1.0246,0.16371-0.609,0.65161-0.95739,1.1126-0.79442,0.29312,0.10362,0.82973,0.64469,0.83184,0.83874,0.003,0.22275-0.28059,0.75257-0.40266,0.75379-0.0527,0.00053-0.1342,0.0465-0.18122,0.10201-0.10001,0.11816-0.41341,0.17549-0.68041,0.12446z"/>
|
||||
<path d="m458.27,378.5c-0.19869-0.0736-0.51521-0.5185-0.51485-0.72377,0.002-0.38717,0.57418-1.0178,0.92881-1.0214,0.17516-0.001,0.65475,0.2481,0.83411,0.43462,0.32504,0.33789,0.25419,0.89278-0.15423,1.2079-0.20096,0.15505-0.80025,0.21125-1.0938,0.1026z"/>
|
||||
<path d="m458.63,380.98c-0.42018-0.14209-0.57388-0.34776-0.60803-0.8136-0.0355-0.4854,0.0116-0.56097,0.52453-0.84064l0.36556-0.19931,0.34646,0.1545c0.47988,0.21397,0.69338,0.44463,0.71031,0.76742,0.0182,0.34768-0.2397,0.70345-0.64012,0.8829-0.35162,0.15758-0.37253,0.15904-0.69871,0.0488z"/>
|
||||
<path d="m407.75,370.09c-0.34619-0.0109-0.82136,0.30729-1.0938,0.46875-0.64912,0.15215-1.4047,0.5511-2.0312,0.125-0.61719-0.19079-1.438-0.0404-1.5312,0.71875,0.15839,0.65179,1.0715,1.0243,1.625,0.59375,0.4106-0.53758,1.5312-0.8528,1.6562,0.0625-0.45705,0.69215-0.40489,1.6089-0.78125,2.3438-0.0612,0.45773-0.25176,0.8924-0.5,1.2812-0.4621,0.0464-0.95375-0.008-1.3438,0.28125-0.62601,0.0342-1.2647,0.34537-1.625,0.875-0.40338,0.57818-0.78869,1.1654-0.90625,1.875,0.10725,0.72494,0.93754,0.93275,1.5625,0.96875,0.66694,0.18359,1.3344,0.42433,2,0.625,1.0853,0.24303,2.102,0.63539,3.1875,0.875,1.5844,0.47758,3.2479,0.69739,4.8438,1.125,0.16722,0.0555,0.32405,0.1038,0.5,0.125,0.66233,0.13773,1.0079-0.58289,1.0625-1.125,0.32864-1.1596,0.57948-2.3391,0.90625-3.5,0.22487-0.46559,0.49645-1.5172-0.40625-1.2812-0.51485,0.30872-0.95182,0.7734-1.5938,0.8125-0.87392,0.0509-0.37513,0.94518-0.0312,1.3125,0.0759,0.5872-0.10989,1.2888-0.5,1.75-0.51994,0.32957-1.1716-0.0561-1.7188-0.1875-0.57469,0.01-1.7234-0.28325-1.1875-1.0625,0.19033-0.57691,0.20718-1.2083,0.4375-1.7812,0.29353-0.61455,0.33553-1.2851,0.46875-1.9375-0.36122-0.77733-0.97856,0.25585-1.4688,0.34375-0.33769,0.23455-1.6054,0.33418-0.9375,0.9375,0.57518,0.43696,0.1343,1.1967,0.0312,1.75-0.0369,0.77025-0.83781,0.95394-1.4688,0.78125-0.62768-0.0303-1.5013-0.49748-0.96875-1.1875,0.12115-0.57512,0.322-1.1402,0.4375-1.7188,0.2374-0.69777,0.43732-1.3628,0.6875-2.0625,0.10851-0.61996,0.33113-1.2079,0.625-1.75,0.0173-0.68543,0.47775-1.2752,0.46875-1.9688-0.0469-0.33876-0.19853-0.4622-0.40625-0.46875zm-3.5938,7.25c0.0817-0.0141,0.1399-0.002,0.21875,0.0312,0.24971,0.10625,0.25708,0.30938,0,0.53125-0.11238,0.097-0.23995,0.1905-0.28125,0.1875-0.46771-0.0402-0.6056-0.10974-0.625-0.28125-0.0172-0.15117,0.0307-0.19455,0.34375-0.34375,0.15556-0.0742,0.26207-0.11086,0.34375-0.125z"/>
|
||||
<path d="m403.12,382.36c-0.49596-0.46627-0.41621-0.80642,0.31729-1.3532,0.31384-0.23393,0.50421-0.20747,0.8631,0.11997,0.55237,0.50393,0.57448,0.82295,0.0869,1.2548-0.24101,0.21344-0.34645,0.25721-0.62697,0.26001-0.29347,0.003-0.3766-0.0334-0.64036-0.28155z"/>
|
||||
<path d="m406.17,383.28c-0.48488-0.11955-0.76441-0.60787-0.62254-1.0876,0.12852-0.43459,0.20285-0.47736,0.84026-0.48378,0.71478-0.007,0.85352,0.11244,0.86039,0.74185,0.004,0.35432-0.0235,0.43652-0.19971,0.60041-0.2071,0.19261-0.6052,0.29644-0.8784,0.22908z"/>
|
||||
<path d="m495.28,383.36c-0.22701-0.18894-0.27272-0.27435-0.27532-0.51479-0.003-0.41064,0.23349-0.71172,0.74605-0.94382,0.68183-0.30882,0.95981-0.26636,1.2166,0.18575,0.34158,0.60129,0.32512,0.84675-0.0839,1.252-0.22578,0.22366-0.26805,0.2367-0.78493,0.2419-0.50756,0.003-0.56562-0.0105-0.8185-0.22102z"/>
|
||||
<path d="m410.22,384.51c-0.36389-0.0971-0.5525-0.37016-0.55726-0.80675-0.004-0.33383,0.0201-0.38706,0.25362-0.56985,0.15122-0.11834,0.39018-0.21971,0.57856-0.24541,0.2669-0.0365,0.36442-0.0132,0.57916,0.13775,0.55052,0.38698,0.66746,0.76972,0.3487,1.1412-0.33953,0.39572-0.66141,0.48753-1.2028,0.34303z"/>
|
||||
<path d="m432.14,385.49c-0.0807-0.10062-0.25916-0.16012-0.2775-0.287,0.032-0.55487,0.0585-1.1167,0.23525-1.6482,0.0962-0.52301,0.012-1.0692,0.19432-1.5787,0.18698-0.92682,0.18682-1.8826,0.40217-2.8036,0.01-0.47427,0.0549-0.949,0.19241-1.4054,0.15774-0.72168,0.0136-1.4762,0.22606-2.1894-0.0228-0.26786,0.28574-0.98321,0.55658-0.55944,0.39321,0.57645,0.91139,1.0451,1.4208,1.5153,0.43771,0.25252,0.0359,0.62445-0.26658,0.74975-0.41521,0.16364-0.51613,0.62086-0.48666,1.0222-0.0582,0.41455-0.22464,0.80685-0.24153,1.23-0.0878,0.62242-0.0706,1.2546-0.15153,1.8765-0.18211,0.60901-0.11244,1.2597-0.17323,1.8875,0.008,0.39859-0.18142,0.7606-0.15525,1.1604-0.0484,0.40592-0.0665,0.89432-0.40713,1.1724-0.32888,0.16605-0.80429,0.13737-1.0682-0.14228z"/>
|
||||
<path d="m461.84,375.69c-0.48222,0.36463-0.91353,0.79527-1.3438,1.2188-0.59251,0.4489,0.48677,0.70998,0.625,1.0938,0.15716,0.58638,0.1478,1.2106,0.1875,1.8125,0.17923,0.55142,0.25835,1.1384,0.21875,1.7188-0.0519,0.6223-0.86338,0.49115-1.2188,0.84375-0.49176,0.20722-0.68789,0.69047-1.0625,1.0312-0.24625,0.48275-0.31215,1.0763-0.34375,1.625,0.0353,0.44788-0.30248,0.94931,0,1.3438,0.039,0.0557,0.0852,0.132,0.125,0.1875,0.10115,0.1452,0.3425,0.0292,0.5,0.0625,0.50368-0.0282,1.0285,0.0473,1.5-0.15625,1.21-0.20943,2.4311-0.22605,3.6562-0.28125,0.74925,0.0239,1.4701-0.23695,2.2188-0.21875,0.58681,0.12974,0.85075-0.50626,0.84375-0.96875-0.33224-0.65359-0.045-1.4285-0.3125-2.0938-0.23494-0.67246-0.14236-1.428-0.25-2.125-0.0148-0.54835-0.71068-0.75172-1.0625-0.34375-0.34144,0.34514-0.89289,0.41403-1.1562,0.84375-0.29659,0.60239,0.62745,0.60317,0.78125,1.0625,0.17589,0.4642,0.11825,0.98059,0.15625,1.4688,0.11422,0.59237-0.52919,0.6262-0.9375,0.6875-0.53675,0.20112-1.29,0.33589-1.5938-0.3125-0.1909-0.47948-0.16475-0.99286-0.21875-1.5-0.0131-0.89182-0.22755-1.7684-0.28125-2.6562-0.0514-1.0968-0.2407-2.1866-0.3125-3.2812-0.01-0.45549-0.0706-1.198-0.71875-1.0625zm-0.625,8.25,0.3125,0.0312,0.0312,0.375,0.0312,0.375-0.40625,0.125c-0.21512,0.0636-0.40325,0.0943-0.40625,0.0937-0.003-0.00085-0.088-0.0531-0.1875-0.125-0.21959-0.1586-0.16345-0.38503,0.125-0.6875,0.1626-0.17028,0.23879-0.2033,0.5-0.1875z"/>
|
||||
<path d="m431.25,374.66c-0.38018,0.13504-0.86245,0.69313-1.25,0.6875-0.88,0.0623-0.75718,0.91919-0.125,1.2188,0.0833,0.25988,0.005,0.58789,0.0312,0.875,0.12288,0.7896-0.37535,1.4249-0.28125,2.2188-0.0442,0.87031-0.30695,1.7177-0.34375,2.5938-0.24704,0.90327-0.24984,1.8321-0.40625,2.75-0.10431,0.82323-0.69963,0.53271-1.2188,0.3125-0.004-0.35689-0.0272-0.70562-0.0312-1.0625,0.21637-0.81711-0.44101-1.0556-1.0938-1.1562-0.68611,0.0649-1.0228-0.52316-0.875-1.125,0.29488-0.35103,1.036-0.2534,1.5-0.3125,0.9813,0.20342,0.9416-1.1118,0.4375-1.5625-0.34472-0.63567-1.1982-0.90926-1.4375-1.5625,0.0956-0.86642-0.47971-1.7322-1.1875-2.1562-1.0885-0.0764-1.9104,0.86306-2.3125,1.7812-0.4525,0.13085-0.90391,0.26657-1.3438,0.4375-0.70889,0.17748-1.7197,1.407-0.75,1.875,0.54424,0.14988,2.2002,0.52782,1.4688,1.2812-0.41224,0.7071-1.201,0.71914-1.9062,0.53125-0.72365,0.00063-1.5294-0.35207-1.5-1.1875-0.14765-0.74985-0.12337-1.5579-0.46875-2.25-0.14847-0.83929-1.1008-0.64297-1.1562,0.125-0.73341,0.53403-0.6357,1.3978-0.125,2.0312,0.31876,0.72891,0.003,1.5776-0.3125,2.25-0.19091,0.87497-1.1559,0.90473-1.8438,1.1875-0.33751,0.13104-1.6285-0.0779-1.1562,0.65625,0.75312,0.26578,1.6525,0.50493,2.4375,0.3125,0.82295-0.10214,1.5375-0.66484,1.9375-1.375,0.55266-0.56003,1.502-0.26685,2.2188-0.28125,0.7728-0.002,1.5626,0.54243,2.3125,0.1875,0.21739-0.56438,1.2219-1.4958,1.5312-0.53125-0.0526,0.86265,0.70932,1.3257,1.5,1.2188,0.86375-0.0494,0.54445,0.61096,0.53125,1.125,0.0571,0.93448,0.65972,1.4247,1.4375,1.8125,0.26491,0.0715,0.545,0.0474,0.8125,0,0.74793-0.23513,1.5536-0.5689,1.7812-1.4062,0.30361-0.68071,0.31071-1.4507,0.53125-2.1562,0.17722-1.1299,0.406-2.26,0.4375-3.4062,0.27617-1.0383,0.19684-2.136,0.40625-3.1875,0.13231-0.7818,0.2308-1.5634,0.3125-2.3438-0.0917-0.41735-0.27189-0.48727-0.5-0.40625zm-6.7812,4.1562c0.15144,0.0185,0.2356,0.20409,0.25,0.53125,0.016,0.36409,0.20628,0.66075,0.4375,0.71875,0.18245,0.0457,0.16681,0.23882-0.0312,0.375-0.11507,0.0791-0.3209,0.127-0.6875,0.125-0.57804-0.003-0.93643-0.15276-1.25-0.46875l-0.1875-0.1875,0.28125-0.1875c0.14178-0.10831,0.39834-0.33259,0.5625-0.5,0.28494-0.29065,0.47356-0.42473,0.625-0.40625z"/>
|
||||
<path d="m490.5,370.94c-0.56713,0.026-1.1373,0.11796-1.6562,0.25-1.0402-0.0647-1.5624,1.0271-0.5625,1.5625,0.60166,1.5343,1.5404-0.31684,2.5-0.1875,1.4375,0.27956,1.559,1.8323,1.7812,3,0.0809,1.1567,0.41439,2.2816,0.75,3.375,0.96222,1.0695-0.72072,1.7402-1.4375,0.90625-0.61128-0.66434-1.9204-1.4795-2.6562-0.5625-0.9036,0.38266-0.94069,1.5903-1.6875,1.9375-1.2091,0.36803-1.3613-1.1188-2-1.75-0.58724-0.82427-1.7103-0.89646-2.625-1.1875-0.42913-0.86865-0.20548-2.3456-1.0938-2.9375-0.7458,0.30425-2.1131,1.7022-0.96875,2.3438,1.1177,0.96067-0.48782,1.4011-1,2.0625-0.73158,0.81456-0.84849,1.936-0.96875,2.9688-1.2593,0.69566-1.5044-0.78769-1.6562-1.7188-0.0981-1.1115-1.0358-0.78521-1.6875-0.375-0.95249,0.38586-1.4281,1.2903-2.0938,2-0.0799,0.64767,0.0372,1.3567,0.0312,2.0312,0.21646,0.81142,1.2024,0.4303,1.8125,0.375,0.9788-0.40937,1.3795,0.62745,0.59375,1.2188-0.53181,0.67603-2.2198,0.32293-2.0625,1.4062,0.54395,0.0636,1.1105,0.0432,1.6562,0,1.0905-0.29799,2.2614-1.0673,2.375-2.2812,0.1436-1.0582,1.6676-0.86544,2.5-1.0938,1.0408-0.30002,2.2948-0.37704,2.5312,0.9375,0.70943,0.74499,2.2486,1.584,3.0312,0.5625,0.79451-0.48523,1.1764-1.3376,1.125-2.25-0.16203-0.78461,1.2688-0.81314,1.625-0.375,0.52141,0.85796,2.151,0.60478,2.9375,0.125,0.8361-0.61721,1.0176-1.705,2.2188-1.7188,1.7823-0.53352,3.6342-0.84122,5.375-1.5,1.4104-0.3073-0.2099-1.1977-0.5625-1.7188-1.0737-0.53098-2.0081,1.6419-3.2188,0.5625-0.93564-0.71605-0.87212-2.0766-1.2188-3.125-0.23714-1.3573-0.17721-2.9227-1.1562-4-0.67242-0.71491-1.586-0.887-2.5312-0.84375zm-6.8125,9.4688c0.12573-0.003,0.26757,0.0593,0.5,0.1875,0.43841,0.24193,0.75063,0.64294,0.75,0.96875-0.00043,0.21261-0.0545,0.22697-0.375,0.375-0.19719,0.091-0.4214,0.1885-0.5,0.1875-0.18098-0.002-0.62438-0.35688-0.625-0.5-0.00065-0.0594-0.0581-0.28649-0.125-0.46875-0.11761-0.32068-0.0994-0.31643,0.0625-0.53125,0.10347-0.13744,0.18677-0.21532,0.3125-0.21875zm6.5312,0.34375c0.37229-0.0244,0.59356,0.0918,0.75,0.375,0.18178,0.32896,0.0582,0.58095-0.40625,0.78125-0.20349,0.0878-0.407,0.15925-0.4375,0.15625-0.0306-0.003-0.19844-0.10253-0.375-0.21875-0.27012-0.17777-0.3095-0.26387-0.3125-0.46875-0.003-0.31541,0.34928-0.5967,0.78125-0.625zm-8.9375,0.0937c0.10904-0.017,0.20831,0.04,0.34375,0.15625,0.17999,0.15456,0.23685,0.27887,0.28125,0.59375,0.0314,0.21884,0.0265,0.50184,0,0.625-0.0486,0.2261-0.0532,0.21575-0.5625,0.21875-0.64029,0.006-0.6997-0.0639-0.6875-0.65625,0.008-0.37682,0.0118-0.4782,0.21875-0.6875,0.16044-0.16228,0.29721-0.23305,0.40625-0.25zm-5.5,1.4375c0.19951,0.0469,0.3879,0.19761,0.4375,0.4375,0.0656,0.3175,0.008,0.46223-0.25,0.59375-0.2221,0.1131-0.73401,0.1508-0.875,0.0625-0.0457-0.0286-0.1399-0.103-0.1875-0.1875-0.068-0.12114-0.0555-0.1794,0.0312-0.25,0.0605-0.0492,0.12539-0.11985,0.125-0.15625-0.0004-0.0364,0.0673-0.16316,0.15625-0.28125,0.14608-0.1939,0.36299-0.26563,0.5625-0.21875zm9.25,1.1875c0.17794-0.001,0.32863,0.0609,0.4375,0.15625,0.18526,0.16231,0.179,0.40039-0.0312,0.5625-0.13509,0.1044-0.87165,0.0948-1.125,0-0.11272-0.0421-0.15563-0.0987-0.15625-0.21875-0.002-0.14091,0.0375-0.22767,0.28125-0.34375,0.20425-0.0976,0.41581-0.15507,0.59375-0.15625z"/>
|
||||
<path d="m467.86,388.29c-0.0958-0.0625-0.23767-0.11699-0.0948-0.22157,0.17277-0.30247,0.51785-0.40716,0.82434-0.51974,0.54779-0.23732,1.0207-0.64036,1.3737-1.1184,0.05-0.33298,0.42384-0.51355,0.42219-0.86174,0.003-0.47487,0.0311-0.9616-0.0846-1.426-0.12837-0.4257-0.45147-0.75199-0.82649-0.97395-0.25667-0.20149-0.674-0.25712-0.76877-0.61402-0.0525-0.34279,0.25343-0.60401,0.36053-0.90935,0.22325-0.42151,0.41109-0.86364,0.6509-1.275,0.25912-0.2878,0.65892-0.0156,0.79298,0.26239,0.18915,0.27771,0.35679,0.57593,0.45076,0.89748,0.30225,0.33175,0.57024,0.72087,0.679,1.1618,0.14839,0.31056,0.38316,0.60234,0.36929,0.96609,0.0003,0.4164,0.23509,0.78738,0.22034,1.2063,0.0133,0.56042,0.0131,1.1449-0.19184,1.6741-0.14001,0.29344-0.42058,0.46964-0.60639,0.73256-0.31897,0.29554-0.67037,0.57899-1.0797,0.73615-0.28928,0.092-0.45706,0.42565-0.81934,0.34466-0.51458,0.009-1.0366,0.079-1.5472-0.004,0.0323,0.0542-0.15633-0.0915-0.12493-0.0573z"/>
|
||||
<path d="m461.01,388.74c-0.24268-0.24958-0.2952-0.35543-0.29788-0.60032-0.003-0.24747,0.0446-0.34567,0.2822-0.58569,0.43829-0.44275,0.65248-0.45344,1.4091-0.0705,0.72304,0.36598,0.9675,0.39912,1.0322,0.14002,0.0625-0.25022,0.47885-0.47916,0.87435-0.4808,0.25006-0.002,0.39157,0.0477,0.59183,0.20368,0.25136,0.19583,0.26349,0.22634,0.26989,0.67935,0.004,0.46299-0.002,0.48055-0.29042,0.73591-0.27723,0.24409-0.32183,0.25915-0.66541,0.22476-0.43718-0.0439-0.69954-0.24407-0.77073-0.58844-0.0516-0.25001-0.13942-0.3097-0.20523-0.1397-0.0209,0.0546-0.12864,0.12185-0.23894,0.1496-0.20352,0.0514-0.5488,0.26862-0.79415,0.50006-0.0927,0.0874-0.25526,0.12855-0.51863,0.13122-0.35563,0.003-0.40513-0.0183-0.67826-0.29915z"/>
|
||||
<path d="m441.19,379.84c-0.66466,0.007-1.3805,0.5662-1.4688,1.2188,0.15206,0.75226,0.77698,1.4895,0.375,2.2812,0.27756,1.0131-0.76147,1.3974-1.4688,0.8125-0.4271-0.97134-0.64349-2.0358-1.2812-2.9062-0.80411-0.22762-1.1545,1.0569-1.7188,1.5,0.27975,0.75505,1.0958,1.4324,1.1875,2.375,0.1952,0.91482-0.36128,1.9306-1.1562,2.4062-0.68584,0.65472-1.6254,0.42074-2.4688,0.5625-1.0242,0.59857,0.75182,0.81755,1.2188,0.84375,1.0477,0.10646,2.1354-0.0317,2.9062-0.8125,0.76911-0.36708,0.70971-1.6972,1.625-1.8438,1.5884-0.0709,3.1626,0.24355,4.75,0.28125,0.84936,0.20336,2.1635-0.10098,2.75,0.53125,0.002,1.1075,0.94078,1.7905,1.8438,2.2188,0.4987,0.13872,1.0241-0.47928,1.5312-0.59375,0.96531-0.30764,0.67182-1.502,1.25-1.9688,1.6504-0.0893,3.3163-0.0704,4.9688-0.0937,0.31463,0.008,0.40734-0.43988,0.625-0.625-0.0363-0.63881-0.0593-1.2726-0.15625-1.9062-0.31819-0.80653,0.0513-1.8446-0.53125-2.5312-0.83011-0.22606-1.5362,0.53355-2.375,0.59375-0.92616,0.41246-1.7065,1.2677-1.75,2.3125-0.54833,0.89658-1.4277-0.15958-1.125-0.90625-0.0346-0.32541,0.0704-0.70429-0.0312-1-0.50698-0.60814-1.3947-0.4094-2.0938-0.5-1.0184,0.0406-2.0127-0.17955-3.0312-0.15625-0.89293-0.0674-1.822,0.0777-2.6875-0.15625-1.0317-0.0293-0.88959-1.0382-1.0625-1.75-0.18299-0.13571-0.40345-0.18973-0.625-0.1875zm2,3.6875c0.34308,0.007,0.66656,0.052,1,0.0937,0.43082,0.0709,0.8899-0.14816,1.3125,0,0.97651,0.16608,1.9536,0.12685,2.9375,0.21875,0.25985-0.004,0.44579,0.18471,0.625,0.34375,0.002,0.68357,0.00066,1.3789,0,2.0625-0.0299,0.25767,0.0763,0.5982-0.15625,0.78125-0.0747,0.0513-0.1583,0.1072-0.25,0.125-0.27065-0.07-0.55731-0.2479-0.6875-0.5-0.0414-0.35742,0.0179-0.70404,0.0312-1.0625-0.007-0.0927,0.0404-0.237,0-0.3125-0.21278-0.15067-0.45387-0.249-0.71875-0.25-0.84945-0.0291-1.682-0.0916-2.5312-0.125-0.7069-0.0446-1.4333,0.0604-2.125-0.125-0.26845-0.0976-0.61789-0.0641-0.78125-0.34375-0.23417-0.27227,0.10362-0.59695,0.34375-0.71875,0.31827-0.1447,0.65692-0.19411,1-0.1875zm11.281,0.25c0.15866-0.002,0.20935,0.05,0.28125,0.34375,0.0459,0.18765,0.0996,0.4172,0.125,0.5,0.0363,0.11811-0.0218,0.15625-0.1875,0.21875-0.494,0.18646-0.98566,0.16797-1.1562-0.0625-0.0774-0.10454,0.0129-0.43451,0.15625-0.5625,0.28946-0.25851,0.60992-0.43691,0.78125-0.4375z"/>
|
||||
</g>
|
||||
</g>
|
||||
<path stroke-width="1.1502" d="m449.98,327.23c32.642-25.106,29.843-61.883,29.843-61.883-0.8613,0.17223-1.6795,0.25835-2.5408,0.25835-6.8471,0-23.178-3.9171-26.988-8.8926-4.0812,4.5034-20.77,8.8926-27.574,8.8926-0.86129,0-1.7225-0.0861-2.5407-0.25835,0,0-2.8422,36.776,29.8,61.883z"/>
|
||||
<path stroke-width="0.9157" d="m477.22,268.04c-0.28097,0.0176-0.5633,0.0264-0.8477,0.0264-6.2055,0-20.619-3.1838-26.175-7.9572-5.8195,4.4095-20.471,7.9572-26.576,7.9572-0.28635,0-0.56925-0.035-0.84965-0.0865-0.0142,1.3908,0.0581,2.8324,0.14448,4.1436,0.323,4.9008,1.1826,9.819,2.4876,14.552,4.1081,14.895,12.516,27.553,24.572,37.155,12.066-9.61,20.484-22.28,24.601-37.186,1.3071-4.7319,2.1694-9.6497,2.4955-14.55,0.0853-1.2845,0.15716-2.6918,0.14745-4.0545z"/>
|
||||
<path fill="#c09300" stroke="none" d="m439.38,265.03c-5.8724,1.8448-12.229,3.0312-15.75,3.0312-0.28633,0-0.56336-0.0423-0.84375-0.0937-0.0142,1.3907,0.0699,2.8451,0.15625,4.1562,0.32298,4.9006,1.1638,9.7995,2.4688,14.531,2.765,10.025,7.5063,19.032,13.969,26.781v-48.406z"/>
|
||||
<path fill="#c09300" stroke="none" d="m460,264.94,0,49.25c6.794-7.9213,11.733-17.206,14.594-27.562,1.307-4.7317,2.1427-9.6313,2.4688-14.531,0.0853-1.2844,0.16596-2.6999,0.15625-4.0625-0.28095,0.0176-0.55937,0.0312-0.84375,0.0312-3.7302,0-10.42-1.1704-16.375-3.125z"/>
|
||||
<g stroke-width="1.2704">
|
||||
<path stroke-width="1.2179" d="m462.31,253.09c0.66655,0.0392-0.90178-3.568-0.90178-3.568,1.7643,1.8036,8.4297,2.2349,8.4297,2.2349-3.999-1.7656-7.9979-15.096-7.528-25.721,0.4319-10.664-1.5284-14.859-3.0971-16.428-1.9995-1.9995-8.4298-3.7639-12.664-3.9991-2.3922-0.11761-1.9995,1.8036-1.9995,1.8036-4.4308-1.137-8.8606-1.5684-10.861-0.2353-1.882,1.2547-2.274,7.5278-0.90178,6.43,3.3326-2.6661,6.2341-0.23524,8.2335,2.6661,1.7644,2.5485,1.6467,9.7627-0.90178,18.192-2.6661,8.8609-9.9588,17.722-9.9588,17.722,3.96,0,9.5276-3.5287,9.5276-3.5287l-1.3331,5.5283c4.1951-1.9996,7.5278-5.0969,7.5278-5.0969l3.9992,4.1951c1.333-1.7643,3.9991-4.1951,3.9991-4.1951s3.3328,3.5286,8.4297,3.9992z"/>
|
||||
<path fill="none" d="m446.12,227.57s-2.2349,16.428-6.43,21.094"/>
|
||||
<path fill="none" d="m449.65,227.14s-0.86252,16.623-3.7639,21.956"/>
|
||||
<path fill="none" d="m452.78,227.81s0,18.192,1.0978,21.289"/>
|
||||
<path fill="none" d="m456.74,228.71s0.90178,15.291,4.6657,20.819"/>
|
||||
<path fill="#c09300" stroke-width="0.3542" d="m442.08,219.61c-0.19598-1.4508-0.54888-2.5878-1.0586-3.3328-1.9996-2.9013-4.9009-5.3321-8.2335-2.6661,0,0,1.137-3.5287,3.5678-3.6463,1.882-0.11767,6.1556,1.4115,9.9196,7.8415,0,0-2.7837-0.62739-3.4502-0.0393-1.2546,1.0979-0.74495,1.8428-0.74495,1.8428z"/>
|
||||
<path fill="#c09300" stroke-width="0.3542" d="m432.44,209.26c0.27439-0.90178,0.7057-1.7251,1.2546-2.078,1.9996-1.333,6.43-0.90177,10.86,0.23524,0,0-0.39205-1.9212,1.9996-1.8036,4.2344,0.23523,10.665,1.9996,12.664,3.9992,0.47046,0.50973,1.0194,1.2547,1.4899,2.3916h-0.0784c-0.98015-1.3721-3.764-1.2937-4.4308-1.2154-1.0586,0.11756-1.7251,0.0784-3.1365,0.4312-0.66655,0.15693-1.686,0.3529-2.2349,0.78422-0.43131,0.3529-0.7841,1.6467-1.4506,1.6467-1.0586,0-0.98019-0.27449-1.2547-0.58814-0.35279-0.43131-0.54888-1.0586-0.90178-1.0194-1.0978,0.19608-2.8621-0.66644-5.0969-2.4308-2.2344-1.7644-3.0971-2.1956-5.9984-1.9996-2.8622,0.23524-3.7639,1.8427-3.7639,1.8427l0.0784-0.19598z"/>
|
||||
<circle cx="448.824" cy="210.672" r="1.176" stroke="none"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 7410 3900"><path fill="#b22234" d="M0 0h7410v3900H0z"/><path d="M0 450h7410m0 600H0m0 600h7410m0 600H0m0 600h7410m0 600H0" stroke="#fff" stroke-width="300"/><path fill="#3c3b6e" d="M0 0h2964v2100H0z"/><g fill="#fff"><g id="d"><g id="c"><g id="e"><g id="b"><path id="a" d="M247 90l70.534 217.082-184.66-134.164h228.253L176.466 307.082z"/><use xlink:href="#a" y="420"/><use xlink:href="#a" y="840"/><use xlink:href="#a" y="1260"/></g><use xlink:href="#a" y="1680"/></g><use xlink:href="#b" x="247" y="210"/></g><use xlink:href="#c" x="494"/></g><use xlink:href="#d" x="988"/><use xlink:href="#c" x="1976"/><use xlink:href="#e" x="2470"/></g></svg>
|
||||
|
After Width: | Height: | Size: 741 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 30 20"><defs><path id="a" d="M0-1L.588.809-.952-.309H.952L-.588.809z" fill="#FF0"/></defs><path fill="#EE1C25" d="M0 0h30v20H0z"/><use xlink:href="#a" transform="matrix(3 0 0 3 5 5)"/><use xlink:href="#a" transform="rotate(23.036 .093 25.536)"/><use xlink:href="#a" transform="rotate(45.87 1.273 16.18)"/><use xlink:href="#a" transform="rotate(69.945 .996 12.078)"/><use xlink:href="#a" transform="rotate(20.66 -19.689 31.932)"/></svg>
|
||||
|
After Width: | Height: | Size: 531 B |
@@ -0,0 +1 @@
|
||||
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M83.287 103.01c-1.57-3.84-6.778-10.414-15.447-19.548-2.327-2.444-2.182-4.306-1.338-9.862v-.64c.553-3.81 1.513-6.05 14.313-8.087 6.516-1.018 8.203 1.57 10.589 5.178l.785 1.193a12.625 12.625 0 0 0 6.43 5.207c1.134.524 2.53 1.164 4.421 2.24 4.596 2.53 4.596 5.41 4.596 11.753v.727a26.91 26.91 0 0 1-5.178 17.454 59.055 59.055 0 0 1-19.025 11.026c3.49-6.546.814-14.313 0-16.553l-.146-.087zM64 5.12a58.502 58.502 0 0 1 25.484 5.818 54.313 54.313 0 0 0-12.859 10.327c-.93 1.28-1.716 2.473-2.472 3.579-2.444 3.694-3.637 5.352-5.818 5.614a25.105 25.105 0 0 1-4.219 0c-4.276-.29-10.094-.64-11.956 4.422-1.193 3.23-1.396 11.956 2.444 16.495.66 1.077.778 2.4.32 3.578a7.01 7.01 0 0 1-2.066 3.229 18.938 18.938 0 0 1-2.909-2.91 18.91 18.91 0 0 0-8.32-6.603c-1.25-.349-2.647-.64-3.985-.93-3.782-.786-8.03-1.688-9.019-3.812a14.895 14.895 0 0 1-.727-5.818 21.935 21.935 0 0 0-1.396-9.25 8.873 8.873 0 0 0-5.557-4.946A58.705 58.705 0 0 1 64 5.12zM0 64c0 35.346 28.654 64 64 64 35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1 @@
|
||||
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M84.742 36.8c2.398 7.2 5.595 12.8 11.19 18.4 4.795-4.8 7.992-11.2 10.39-18.4h-21.58zm-52.748 40h20.78l-10.39-28-10.39 28z"/><path d="M111.916 0H16.009C7.218 0 .025 7.2.025 16v96c0 8.8 7.193 16 15.984 16h95.907c8.791 0 15.984-7.2 15.984-16V16c0-8.8-6.394-16-15.984-16zM72.754 103.2c-1.598 1.6-3.197 1.6-4.795 1.6-.8 0-2.398 0-3.197-.8-.8-.8-1.599 0-1.599-.8s-.799-1.6-1.598-3.2c-.8-1.6-.8-2.4-1.599-4l-3.196-8.8H28.797L25.6 96c-1.598 3.2-2.398 5.6-3.197 7.2-.8 1.6-2.398 1.6-4.795 1.6-1.599 0-3.197-.8-4.796-1.6-1.598-1.6-2.397-2.4-2.397-4 0-.8 0-1.6.799-3.2.8-1.6.8-2.4 1.598-4l17.583-44.8c.8-1.6.8-3.2 1.599-4.8.799-1.6 1.598-3.2 2.397-4 .8-.8 1.599-2.4 3.197-3.2 1.599-.8 3.197-.8 4.796-.8 1.598 0 3.196 0 4.795.8 1.598.8 2.398 1.6 3.197 3.2.799.8 1.598 2.4 2.397 4 .8 1.6 1.599 3.2 2.398 5.6l17.583 44c1.598 3.2 2.398 5.6 2.398 7.2-.8.8-1.599 2.4-2.398 4zM116.711 72c-8.791-3.2-15.185-7.2-20.78-12-5.594 5.6-12.787 9.6-21.579 12l-2.397-4c8.791-2.4 15.984-5.6 21.579-11.2C87.939 51.2 83.144 44 81.545 36h-7.992v-3.2h21.58c-1.6-2.4-3.198-5.6-4.796-8l2.397-.8c1.599 2.4 3.997 5.6 5.595 8.8h19.98v4h-7.992c-2.397 8-6.393 15.2-11.189 20 5.595 4.8 11.988 8.8 20.78 11.2l-3.197 4z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,48 @@
|
||||
import { createI18n as _createI18n } from 'vue-i18n'
|
||||
import elementEnLocale from 'element-plus/es/locale/lang/en' // english lang
|
||||
import elementZhLocale from 'element-plus/es/locale/lang/zh-cn'// chinese lang
|
||||
import elementArLocale from 'element-plus/es/locale/lang/ar'// arabic lang
|
||||
import enLocale from './locales/en.json'
|
||||
import zhLocale from './locales/zh.json'
|
||||
import arLocale from './locales/ar.json'
|
||||
import Cookies from 'js-cookie'
|
||||
|
||||
// const messageImports = import.meta.glob('./locales/*.json')
|
||||
// console.log(messageImports)
|
||||
|
||||
// export const SUPPORT_LOCALES = ['en', 'zh', 'ar']
|
||||
|
||||
const messages = {
|
||||
en: {
|
||||
...enLocale,
|
||||
...elementEnLocale
|
||||
},
|
||||
zh: {
|
||||
...zhLocale,
|
||||
...elementZhLocale
|
||||
},
|
||||
ar: {
|
||||
...arLocale,
|
||||
...elementArLocale
|
||||
}
|
||||
}
|
||||
|
||||
export function createI18n() {
|
||||
return _createI18n({
|
||||
legacy: false,
|
||||
globalInjection: true,
|
||||
// locale: 'en',
|
||||
// set locale
|
||||
// options: en | zh | ar
|
||||
locale: Cookies.get('language') || 'en', // get selected language from cookies
|
||||
fallbackLocale: 'en',
|
||||
// set locale messages
|
||||
messages
|
||||
// messages: {
|
||||
// enLang,
|
||||
// zhLang,
|
||||
// arLang
|
||||
// }
|
||||
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"general": {
|
||||
"pleaseSelect" : "من فضلك إختار",
|
||||
"langSwitch" : "!!تم تغيير اللغة بنجاح",
|
||||
"" : ""
|
||||
},
|
||||
"login": {
|
||||
"entUserName": "أدخل إسم المستخدم",
|
||||
"entPassword": "أدخل كلمة المرور",
|
||||
"entVerificationCode": "أدخل رمز التأكيد",
|
||||
"login": "الدخول للنظام",
|
||||
"init": "التهيئة",
|
||||
"errUserName": "إدخل إسم مستخدم صحيح",
|
||||
"errPassword": "إدخل كلمة مرور صحيحة",
|
||||
"errVerificationCode": "رمز تأكيد خطاء",
|
||||
"errLogin": "من فضلك إدخل بيانات دخول صحيحة",
|
||||
"errInit" : "تم تهية قاعدة البيانات مسبقا، لاداعى للتهيئة مجددا",
|
||||
"language": "Languages"
|
||||
},
|
||||
"init": {
|
||||
"note": "تعليمات التهيئة",
|
||||
"note1": "1.يجب ان تكون على دراية بإستخدام GoLang و Vue.",
|
||||
"note2": "2.من فضلك تأكد من قرءاة ",
|
||||
"note3": "3.Please confirm that you understand the subsequent configuration process.",
|
||||
"note4": "Note: The development team does not provide free services for the content written in the document.",
|
||||
"readDocs": "قرأة الإرشادات",
|
||||
"confirm": "تأكيد",
|
||||
"dbType": "نوع قاعدة البيانات",
|
||||
"beta": "تجريبي",
|
||||
"dbHost": "عنوان الخادم",
|
||||
"enterDBHost" : "أدخل عنوان خادم قاعدة البيانات",
|
||||
"dbPort": "رقم المنفذ",
|
||||
"enterDBPort": "أدخل رقم منفذ قاعدة البيانات",
|
||||
"dbUser": "إسم المستخدم",
|
||||
"enterDBUser" : "أدخل كلمة إسم مستخدم قاعدة البيانات",
|
||||
"dbPassword": "كلمة المرور",
|
||||
"enterDBPassword": "أدخل كلمة مرور مستخدم قاعدة البيانات",
|
||||
"dbName": "إسم قاعدة البيانات",
|
||||
"enterDBName": "أدخل إسم قاعدة البيانات",
|
||||
"initNow": "بداء التهيئة",
|
||||
"pleaseWait": "جارى تهيئة قاعدة البيانات, من فضلك إنتظر",
|
||||
"" : ""
|
||||
},
|
||||
"autoCode": {
|
||||
"existDB": "إضغط هنا لإنشاء الكود من قاعدة بيانات موجوده",
|
||||
"dbName" : "قاعدة البيانات",
|
||||
"selectDB" : "إختار قاعدة البيانات",
|
||||
"tableName" : "إسم الجدول",
|
||||
"selectTable" : "إختار الجدول",
|
||||
"createUsingTable" : "Create using this table",
|
||||
"structName" : "Struct Name",
|
||||
"structNameNote" : "The first letter is automatically converted to uppercase",
|
||||
"tableNameNote": "Specify the table name (not required)",
|
||||
"structAbbreviation": "Struct abbreviation",
|
||||
"" : ""
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
{
|
||||
"general": {
|
||||
"pleaseSelect" : "Please select",
|
||||
"langSwitch" : "Language switched successfully!!",
|
||||
"operations" : "Operations",
|
||||
"add" : "Add",
|
||||
"edit" : "Edit",
|
||||
"delete" : "Delete",
|
||||
"copy" : "Copy",
|
||||
"cancel": "Cancel",
|
||||
"confirm" : "Confirm",
|
||||
"close" : "Close",
|
||||
"selectAll" : "Select All",
|
||||
"copySuccess" : "Copy successfully!",
|
||||
"deleteSuccess": "Deleted successfully!",
|
||||
"date" : "Date",
|
||||
"hint" : "Hint",
|
||||
"warning" : "Warning",
|
||||
"enable" : "Enable",
|
||||
"" : ""
|
||||
},
|
||||
"login": {
|
||||
"entUserName": "Please enter username",
|
||||
"entPassword": "Please enter the password",
|
||||
"entVerificationCode": "Please enter verification code",
|
||||
"login": "Login",
|
||||
"init": "Go to initialization",
|
||||
"errUserName": "Please enter the correct username",
|
||||
"errPassword": "Please enter the correct password",
|
||||
"errVerificationCode": "Incorrect verification code",
|
||||
"errLogin": "Please fill in the login information correctly",
|
||||
"errInit" : "Database information has been configured and cannot be initialized",
|
||||
"language": "Languages"
|
||||
},
|
||||
"init": {
|
||||
"note": "Initialization notice",
|
||||
"note1": "1.You should be familiar with Vue AND GoLang.",
|
||||
"note2": "2.Please confirm that you have read the official documents.",
|
||||
"note3": "3.Please confirm that you understand the subsequent configuration process.",
|
||||
"note4": "Note: The development team does not provide free services for the content written in the document.",
|
||||
"readDocs": "Read the documentation",
|
||||
"confirm": "I confirm",
|
||||
"dbType": "Database Type",
|
||||
"beta": "Beta",
|
||||
"dbHost": "Host",
|
||||
"enterDBHost" : "Please enter database host",
|
||||
"dbPort": "Port",
|
||||
"enterDBPort": "Please enter database port",
|
||||
"dbUsername": "Username",
|
||||
"enterDBUsername" : "Please enter database username",
|
||||
"dbPassword": "Password",
|
||||
"enterDBPassword": "Please enter the database password (empty if none)",
|
||||
"dbName": "DB Name",
|
||||
"enterDBName": "Please enter database name",
|
||||
"initNow": "Initialize Now",
|
||||
"pleaseWait": "Initializing database, please wait",
|
||||
"" : ""
|
||||
},
|
||||
"authority" : {
|
||||
"authorityNote" : "Note: Pull down the avatar in the upper right corner to switch roles",
|
||||
"addRole" : "Add Role",
|
||||
"editRole" : "Edit Role",
|
||||
"roleID" : "Role ID",
|
||||
"roleName" : "Role Name",
|
||||
"setPermissions" : "Set Permissions",
|
||||
"parentRole" : "Parent Role",
|
||||
"roleConfig" : "Role Configuration",
|
||||
"roleMenu" : "Role Menu",
|
||||
"roleAPI" : "Role Api",
|
||||
"resourcePermissions" : "Resource Permissions",
|
||||
"positiveIntNote" : "Please enter a positive integer",
|
||||
"rootRole" : "Root Role",
|
||||
"roleIdNote" : "Please enter role id",
|
||||
"roleNameNote" : "Please enter role name",
|
||||
"" : ""
|
||||
},
|
||||
"user": {
|
||||
"addUser" : "Add User",
|
||||
"avatar" : "Avatar",
|
||||
"userName" : "Username",
|
||||
"nickName" : "Nickname",
|
||||
"userRole" : "User Role",
|
||||
"deleteUserConfrim" : "Are you sure you want to delete this user",
|
||||
"resetPassword" : "Reset Password",
|
||||
"password" : "Password",
|
||||
"mediaLibrary" : "Select from media library",
|
||||
"userNameNote" : "Please enter username",
|
||||
"userNameLenNote" : "Username should be 5 character at least.",
|
||||
"passwordNote" : "Please enter password",
|
||||
"passwordLenNote" : "Password should be 6 character at least.",
|
||||
"nickNameNote" : "Please enter nickname",
|
||||
"userRoleNote" : "Please select user role",
|
||||
"resetPasswordConfrim" : "Do you want to reset current password to: 123456",
|
||||
"anotherUserEdit" : "There is currently a user who is editing",
|
||||
"setUserInfoNote" : "Set up successfully!!",
|
||||
"userAddedNote" : "User added successfully!!",
|
||||
"roleSetNote" : "Role set successfully!!",
|
||||
"" : ""
|
||||
},
|
||||
"autoCode": {
|
||||
"existDB" : "Click here to create code from an existing database",
|
||||
"dbName" : "Database Name",
|
||||
"selectDB" : "Please select a database",
|
||||
"tableName" : "Table Name",
|
||||
"selectTable" : "Please select a table",
|
||||
"createUsingTable" : "Create using this table",
|
||||
"structName" : "Struct Name",
|
||||
"structNameNote" : "The first letter is automatically converted to uppercase",
|
||||
"tableNameNote": "Specify the table name (not required)",
|
||||
"structAbbreviation": "Struct abbreviation",
|
||||
"structAbbreviationNote": "The abbreviation will be used as the name of the input object and the routing group",
|
||||
"structChineseName": "Struct Description",
|
||||
"structChineseNameNote" : "Used as automatic api description",
|
||||
"fileName" : "File Name",
|
||||
"fileNameNote" : "The default name of the generated file (camel case format is recommended, the first letter is lowercase, such as sysXxxXxxx)",
|
||||
"autoAPIDBTip": "Note: Register the automatically generated API into the database",
|
||||
"autoAPIDBCreate" : "Automatically create API",
|
||||
"autoMoveFilesTip" : "Note: Automatically migrate the generated files to the corresponding location of the ymal configuration",
|
||||
"autoMoveFiles" : "Automatically move files",
|
||||
"addField" : "Add Field",
|
||||
"fieldIndex" : "Id",
|
||||
"fieldName" : "Name",
|
||||
"fieldDesc" : "Description",
|
||||
"fieldJson" : "Json Field",
|
||||
"fieldDataType" : "DataType",
|
||||
"fieldLen" : "Length",
|
||||
"columnName": "Column Name",
|
||||
"comment" : "Comment",
|
||||
"searchType" : "Search Condition",
|
||||
"dictionary" : "Dictionary",
|
||||
"moveUp" : "Move Up",
|
||||
"moveDown" : "Move Down",
|
||||
"confirmDelete" : "Confirm to delete?",
|
||||
"codePreview" : "Preview Code",
|
||||
"generateCode" : "Generate Code",
|
||||
"componentContent" : "Component Content",
|
||||
"actionBar" : "Actions:",
|
||||
"copy" : "Copy",
|
||||
"entStructName" : "Please enter the structure name",
|
||||
"entStructAbbreviation" : "Please enter the abbreviation of the structure",
|
||||
"entStructDesc" : "Please enter the structure description",
|
||||
"entFileName" : "File name: sysXxxxXxxx",
|
||||
"errNoFields" : "Please fill in at least one field",
|
||||
"errSameFiledName" : "There is a field with the same name as the structure",
|
||||
"errSameStructDescAbbr" : "Struct name and struct abbreviation cannot be the same",
|
||||
"codeGenMoveSuccess" : "The automated code was created and moved successfully",
|
||||
"codeGenDownload" : "The automation code was created successfully and is being downloaded",
|
||||
"table" : " table",
|
||||
"field" : " field",
|
||||
"" : ""
|
||||
},
|
||||
"fieldDialog" : {
|
||||
"note" : "id, created_at, updated_at, deleted_at will be automatically generated. Please do not create it repeatedly. If the condition is LIKE when searching, only strings are supported",
|
||||
"autoFill" : "Auto Fill",
|
||||
"selectDataType" : "Please select datatype",
|
||||
"dataTypeNote" : "Data length",
|
||||
"selectSearchType" : "Please select field search condition",
|
||||
"associativeDictionary" : "Associative Dictionary",
|
||||
"selectDictionary" : "Please select dictionary",
|
||||
"string" : "String",
|
||||
"integer" : "Integer",
|
||||
"boolean" : "Boolean",
|
||||
"float" : "Float",
|
||||
"time" : "Time",
|
||||
"entFieldName" : "Please enter field name",
|
||||
"entFieldDesc" : "Please enter field description",
|
||||
"entFieldJson" : "Please enter field json name",
|
||||
"entColumnName" : "Please enter the column name",
|
||||
"entFieldDataType" : "Please enter field datatype",
|
||||
"" : ""
|
||||
},
|
||||
"autoCodeAdmin" : {
|
||||
"rollBackMark" : "Rollback mark",
|
||||
"rolledBack" : "Rolled back",
|
||||
"notRolledBack" : "Not Rolled Back",
|
||||
"rollBack" : "Rollback",
|
||||
"reuse" : "Reuse",
|
||||
"deleteHistoryConfirm" : "This operation will delete this history, do you want to continue?",
|
||||
"rollbackConfirm" : "This operation will delete the automatically created files and api, do you want to continue?",
|
||||
"rollbackSuccess" : "Rollback successfully!",
|
||||
"" : ""
|
||||
},
|
||||
"system" : {
|
||||
"systemConfig" : "System Configuration",
|
||||
"envValues" : "Environment values",
|
||||
"portValue" : "Port Value",
|
||||
"ossType": "Oss Type",
|
||||
"multiLogin" : "Multi-login interception",
|
||||
"" : ""
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,192 @@
|
||||
{
|
||||
"general": {
|
||||
"pleaseSelect" : "请选择",
|
||||
"langSwitch" : "语言切换成功!!",
|
||||
"operations" : "操作",
|
||||
"add" : "新增",
|
||||
"edit" : "编辑",
|
||||
"delete" : "删除",
|
||||
"copy" : "拷贝",
|
||||
"cancel" : "取消",
|
||||
"sure" : "确定",
|
||||
"close" : "取 消",
|
||||
"selectAll" : "全选",
|
||||
"copySuccess" : "复制成功",
|
||||
"deleteSuccess": "删除成功",
|
||||
"date" : "日期",
|
||||
"hint" : "提示",
|
||||
"warning" : "警告",
|
||||
"enable" : "开启",
|
||||
"" : ""
|
||||
},
|
||||
"login": {
|
||||
"entUserName": "请输入用户名",
|
||||
"entPassword": "请输入密码",
|
||||
"entVerificationCode": "请输入验证码",
|
||||
"login": "登 录",
|
||||
"init": "前往初始化",
|
||||
"errUserName": "请输入正确的用户名",
|
||||
"errPassword": "请输入正确的密码",
|
||||
"errVerificationCode": "验证码格式不正确",
|
||||
"errLoging": "请正确填写登录信息",
|
||||
"errInit" : "已配置数据库信息,无法初始化",
|
||||
"language": "Languages"
|
||||
},
|
||||
"init": {
|
||||
"note": "初始化须知",
|
||||
"note1": "1.您需有用一定的VUE和GOLANG基础",
|
||||
"note2": "2.请您确认是否已经阅读过官方文档",
|
||||
"note3": "3.请您确认是否了解后续的配置流程",
|
||||
"note4": "注:开发组不为文档中书写过的内容提供无偿服务",
|
||||
"readDocs": "阅读文档",
|
||||
"confirm": "我已确认",
|
||||
"dbType": "数据库类型",
|
||||
"beta": "测试版",
|
||||
"dbHost" : "Host",
|
||||
"enterDBAddress" : "请输入数据库链接",
|
||||
"dbPort" : "Port",
|
||||
"enterDBPort" : "请输入数据库端口",
|
||||
"dbUser" : "Username",
|
||||
"enterDBUser" : "请输入数据库用户名",
|
||||
"dbPassword" : "Database Password",
|
||||
"enterDBPassword" : "请输入数据库密码(没有则为空)",
|
||||
"dbName" : "DB Name",
|
||||
"enterDBName" : "请输入数据库名称",
|
||||
"initNow" : "立即初始化",
|
||||
"pleaseWait" : "正在初始化数据库,请稍候",
|
||||
"" : ""
|
||||
},
|
||||
"authority" : {
|
||||
"authorityNote" : "注:右上角头像下拉可切换角色",
|
||||
"addRole" : "新增角色",
|
||||
"editRole" : "编辑角色",
|
||||
"roleID" : "角色ID",
|
||||
"roleName" : "角色名称",
|
||||
"setPermissions" : "设置权限",
|
||||
"parentRole" : "父级角色",
|
||||
"roleConfig" : "角色配置",
|
||||
"roleMenu" : "角色菜单",
|
||||
"roleAPI" : "角色api",
|
||||
"resourcePermissions" : "资源权限",
|
||||
"positiveIntNote" : "请输入正整数",
|
||||
"rootRole" : "根角色",
|
||||
"roleIdNote" : "请输入角色ID",
|
||||
"roleNameNote" : "请输入角色名",
|
||||
|
||||
"" : ""
|
||||
},
|
||||
"user": {
|
||||
"addUser" : "新增用户",
|
||||
"avatar" : "头像",
|
||||
"userName" : "用户名",
|
||||
"nickName" : "昵称",
|
||||
"userRole" : "用户角色",
|
||||
"deleteUserConfrim" : "确定要删除此用户吗",
|
||||
"resetPassword" : "重置密码",
|
||||
"password" : "密码",
|
||||
"mediaLibrary" : "从媒体库选择",
|
||||
"userNameNote" : "请输入用户名",
|
||||
"userNameLenNote" : "最低5位字符",
|
||||
"passwordNote" : "请输入用户密码",
|
||||
"passwordLenNote" : "最低6位字符",
|
||||
"nickNameNote" : "请输入用户昵称",
|
||||
"userRoleNote" : "请选择用户角色",
|
||||
"resetPasswordConfrim" : "是否将此用户密码重置为123456",
|
||||
"anotherUserEdit" : "当前存在正在编辑的用户",
|
||||
"setUserInfoNote" : "设置成功",
|
||||
"userAddedNote" : "创建成功",
|
||||
"roleSetNote" : "角色设置成功",
|
||||
"" : ""
|
||||
},
|
||||
"autoCode": {
|
||||
"existDB": "点这里从现有数据库创建代码",
|
||||
"dbName": "数据库名",
|
||||
"selectDB" : "请选择数据库",
|
||||
"tableName" : "表名",
|
||||
"selectTable" : "请选择表",
|
||||
"createUsingTable" : "使用此表创建",
|
||||
"structName" : "Struct名称",
|
||||
"structNameNote" : "首字母自动转换大写",
|
||||
"tableNameNote" : "指定表名(非必填)",
|
||||
"structAbbreviation": "Struct简称",
|
||||
"structAbbreviationNote": "简称会作为入参对象名和路由group",
|
||||
"structChineseName": "Struct中文名称",
|
||||
"structChineseNameNote" : "中文描述作为自动api描述",
|
||||
"fileName" : "文件名称",
|
||||
"fileNameNote" : "生成文件的默认名称(建议为驼峰格式,首字母小写,如sysXxxXxxx)",
|
||||
"autoAPIDBTip": "注:把自动生成的API注册进数据库",
|
||||
"autoAPIDBCreate" : "自动创建API",
|
||||
"autoMoveFilesTip" : "注:自动迁移生成的文件到ymal配置的对应位置",
|
||||
"autoMoveFiles" : "自动移动文件",
|
||||
"addField" : "新增Field",
|
||||
"fieldIndex" : "序列",
|
||||
"fieldName" : "Field名",
|
||||
"fieldDesc" : "中文名",
|
||||
"fieldJson" : "FieldJson",
|
||||
"fieldDataType" : "Field数据类型",
|
||||
"fieldLen" : "数据库字段长度",
|
||||
"columnName": "数据库字段",
|
||||
"comment" : "数据库字段描述",
|
||||
"searchType" : "搜索条件",
|
||||
"dictionary" : "字典",
|
||||
"moveUp" : "上移",
|
||||
"moveDown" : "下移",
|
||||
"confirmDelete" : "确定删除吗?",
|
||||
"codePreview" : "预览代码",
|
||||
"generateCode" : "生成代码",
|
||||
"componentContent" : "组件内容",
|
||||
"actionBar" : "操作栏:",
|
||||
"copy" : "复制",
|
||||
"entStructName" : "请输入结构体名称",
|
||||
"entStructAbbreviation" : "请输入结构体简称",
|
||||
"entStructDesc" : "请输入结构体描述",
|
||||
"entFileName" : "文件名称:sysXxxxXxxx",
|
||||
"errNoFields" : "请填写至少一个field",
|
||||
"errSameFiledName" : "存在与结构体同名的字段",
|
||||
"errSameStructDescAbbr" : "structName和struct简称不能相同",
|
||||
"codeGenMoveSuccess" : "自动化代码创建成功,自动移动成功",
|
||||
"codeGenDownload" : "自动化代码创建成功,正在下载",
|
||||
"table" : "表",
|
||||
"field" : "字段",
|
||||
"" : ""
|
||||
},
|
||||
"fieldDialog" : {
|
||||
"note" : "id , created_at , updated_at , deleted_at 会自动生成请勿重复创建。搜索时如果条件为LIKE只支持字符串",
|
||||
"autoFill" : "自动填充",
|
||||
"selectDataType" : "请选择field数据类型",
|
||||
"dataTypeNote" : "数据库类型长度",
|
||||
"selectSearchType" : "请选择Field查询条件",
|
||||
"associativeDictionary" : "关联字典",
|
||||
"selectDictionary" : "请选择字典",
|
||||
"string" : "字符串",
|
||||
"integer" : "整型",
|
||||
"boolean" : "布尔值",
|
||||
"float" : "浮点型",
|
||||
"time" : "时间",
|
||||
"entFieldName" : "请输入field英文名",
|
||||
"entFieldDesc" : "请输入field中文名",
|
||||
"entFieldJson" : "请输入field格式化json",
|
||||
"entColumnName" : "请输入数据库字段",
|
||||
"entFieldDataType" : "请选择field数据类型",
|
||||
"" : ""
|
||||
},
|
||||
"autoCodeAdmin" : {
|
||||
"rollBackMark" : "回滚标记",
|
||||
"rolledBack" : "已回滚",
|
||||
"notRolledBack" : "未回滚",
|
||||
"rollBack" : "回滚",
|
||||
"reuse" : "复用",
|
||||
"deleteHistoryConfirm" : "此操作将删除本历史, 是否继续?",
|
||||
"rollbackConfirm" : "此操作将删除自动创建的文件和api, 是否继续?",
|
||||
"rollbackSuccess" : "回滚成功",
|
||||
"" : ""
|
||||
},
|
||||
"system" : {
|
||||
"systemConfig" : "系统配置",
|
||||
"envValues" : "环境值",
|
||||
"portValue" : "端口值",
|
||||
"ossType": "Oss类型",
|
||||
"multiLogin" : "多点登录拦截",
|
||||
"" : ""
|
||||
}
|
||||
}
|
||||
+6
-2
@@ -2,13 +2,13 @@ import { createApp } from 'vue'
|
||||
import 'element-plus/dist/index.css'
|
||||
import './style/element_visiable.scss'
|
||||
import ElementPlus from 'element-plus'
|
||||
import zhCn from 'element-plus/es/locale/lang/zh-cn'
|
||||
// 引入gin-vue-admin前端初始化相关内容
|
||||
import './core/gin-vue-admin'
|
||||
// 引入封装的router
|
||||
import router from '@/router/index'
|
||||
import run from '@/core/gin-vue-admin.js'
|
||||
import auth from '@/directive/auth'
|
||||
import { createI18n } from './i18n' // added by mohamed hassan to multilangauge
|
||||
|
||||
import '@/permission'
|
||||
import { store } from '@/store/index'
|
||||
@@ -17,10 +17,14 @@ import App from './App.vue'
|
||||
const app = createApp(App)
|
||||
app.config.productionTip = false
|
||||
|
||||
const i18n = createI18n() // added by mohamed hassan to multilangauge
|
||||
|
||||
app.use(i18n)
|
||||
|
||||
app.use(run)
|
||||
.use(auth)
|
||||
.use(store)
|
||||
.use(router)
|
||||
.use(ElementPlus, { locale: zhCn }).mount('#app')
|
||||
.use(ElementPlus, { i18n: (key, value) => i18n.t(key, value) }).mount('#app')
|
||||
|
||||
export default app
|
||||
|
||||
+59
-59
@@ -6,71 +6,71 @@ let asyncRouterFlag = 0
|
||||
const whiteList = ['Login', 'Init']
|
||||
|
||||
const getRouter = async() => {
|
||||
await store.dispatch('router/SetAsyncRouter')
|
||||
await store.dispatch('user/GetUserInfo')
|
||||
const asyncRouters = store.getters['router/asyncRouters']
|
||||
asyncRouters.forEach(asyncRouter => {
|
||||
router.addRoute(asyncRouter)
|
||||
})
|
||||
await store.dispatch('router/SetAsyncRouter')
|
||||
await store.dispatch('user/GetUserInfo')
|
||||
const asyncRouters = store.getters['router/asyncRouters']
|
||||
asyncRouters.forEach(asyncRouter => {
|
||||
router.addRoute(asyncRouter)
|
||||
})
|
||||
}
|
||||
|
||||
async function handleKeepAlive(to) {
|
||||
if (to.matched && to.matched.length > 2) {
|
||||
for (let i = 1; i < to.matched.length; i++) {
|
||||
const element = to.matched[i - 1]
|
||||
if (element.name === 'layout') {
|
||||
to.matched.splice(i, 1)
|
||||
await handleKeepAlive(to)
|
||||
}
|
||||
// 如果没有按需加载完成则等待加载
|
||||
if (typeof element.components.default === 'function') {
|
||||
await element.components.default()
|
||||
await handleKeepAlive(to)
|
||||
}
|
||||
}
|
||||
if (to.matched && to.matched.length > 2) {
|
||||
for (let i = 1; i < to.matched.length; i++) {
|
||||
const element = to.matched[i - 1]
|
||||
if (element.name === 'layout') {
|
||||
to.matched.splice(i, 1)
|
||||
await handleKeepAlive(to)
|
||||
}
|
||||
// 如果没有按需加载完成则等待加载
|
||||
if (typeof element.components.default === 'function') {
|
||||
await element.components.default()
|
||||
await handleKeepAlive(to)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
router.beforeEach(async(to, from, next) => {
|
||||
handleKeepAlive(to)
|
||||
const token = store.getters['user/token']
|
||||
// 在白名单中的判断情况
|
||||
document.title = getPageTitle(to.meta.title)
|
||||
if (whiteList.indexOf(to.name) > -1) {
|
||||
if (token) {
|
||||
if (!asyncRouterFlag) {
|
||||
asyncRouterFlag++
|
||||
await getRouter()
|
||||
}
|
||||
next({ name: store.getters['user/userInfo'].authority.defaultRouter })
|
||||
} else {
|
||||
next()
|
||||
}
|
||||
handleKeepAlive(to)
|
||||
const token = store.getters['user/token']
|
||||
// 在白名单中的判断情况
|
||||
document.title = getPageTitle(to.meta.title)
|
||||
if (whiteList.indexOf(to.name) > -1) {
|
||||
if (token) {
|
||||
if (!asyncRouterFlag) {
|
||||
asyncRouterFlag++
|
||||
await getRouter()
|
||||
}
|
||||
next({ name: store.getters['user/userInfo'].authority.defaultRouter })
|
||||
} else {
|
||||
// 不在白名单中并且已经登陆的时候
|
||||
if (token) {
|
||||
// 添加flag防止多次获取动态路由和栈溢出
|
||||
if (!asyncRouterFlag) {
|
||||
asyncRouterFlag++
|
||||
await getRouter()
|
||||
|
||||
next({...to, replace: true })
|
||||
} else {
|
||||
if (to.matched.length) {
|
||||
next()
|
||||
} else {
|
||||
next({ path: '/layout/404' })
|
||||
}
|
||||
}
|
||||
}
|
||||
// 不在白名单中并且未登陆的时候
|
||||
if (!token) {
|
||||
next({
|
||||
name: 'Login',
|
||||
query: {
|
||||
redirect: document.location.hash
|
||||
}
|
||||
})
|
||||
}
|
||||
next()
|
||||
}
|
||||
})
|
||||
} else {
|
||||
// 不在白名单中并且已经登陆的时候
|
||||
if (token) {
|
||||
// 添加flag防止多次获取动态路由和栈溢出
|
||||
if (!asyncRouterFlag) {
|
||||
asyncRouterFlag++
|
||||
await getRouter()
|
||||
|
||||
next({ ...to, replace: true })
|
||||
} else {
|
||||
if (to.matched.length) {
|
||||
next()
|
||||
} else {
|
||||
next({ path: '/layout/404' })
|
||||
}
|
||||
}
|
||||
}
|
||||
// 不在白名单中并且未登陆的时候
|
||||
if (!token) {
|
||||
next({
|
||||
name: 'Login',
|
||||
query: {
|
||||
redirect: document.location.hash
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
+87
-87
@@ -4,113 +4,113 @@ import { store } from '@/store'
|
||||
import { emitter } from '@/utils/bus.js'
|
||||
|
||||
const service = axios.create({
|
||||
baseURL: import.meta.env.VITE_BASE_API,
|
||||
timeout: 99999
|
||||
baseURL: import.meta.env.VITE_BASE_API,
|
||||
timeout: 99999
|
||||
})
|
||||
let acitveAxios = 0
|
||||
let timer
|
||||
const showLoading = () => {
|
||||
acitveAxios++
|
||||
if (timer) {
|
||||
clearTimeout(timer)
|
||||
acitveAxios++
|
||||
if (timer) {
|
||||
clearTimeout(timer)
|
||||
}
|
||||
timer = setTimeout(() => {
|
||||
if (acitveAxios > 0) {
|
||||
emitter.emit('showLoading')
|
||||
}
|
||||
timer = setTimeout(() => {
|
||||
if (acitveAxios > 0) {
|
||||
emitter.emit('showLoading')
|
||||
}
|
||||
}, 400)
|
||||
}, 400)
|
||||
}
|
||||
|
||||
const closeLoading = () => {
|
||||
acitveAxios--
|
||||
if (acitveAxios <= 0) {
|
||||
clearTimeout(timer)
|
||||
emitter.emit('closeLoading')
|
||||
}
|
||||
}
|
||||
// http request 拦截器
|
||||
acitveAxios--
|
||||
if (acitveAxios <= 0) {
|
||||
clearTimeout(timer)
|
||||
emitter.emit('closeLoading')
|
||||
}
|
||||
}
|
||||
// http request 拦截器
|
||||
service.interceptors.request.use(
|
||||
config => {
|
||||
if (!config.donNotShowLoading) {
|
||||
showLoading()
|
||||
}
|
||||
const token = store.getters['user/token']
|
||||
const user = store.getters['user/userInfo']
|
||||
config.data = JSON.stringify(config.data)
|
||||
config.headers = {
|
||||
'Content-Type': 'application/json',
|
||||
'x-token': token,
|
||||
'x-user-id': user.ID
|
||||
}
|
||||
return config
|
||||
},
|
||||
error => {
|
||||
closeLoading()
|
||||
ElMessage({
|
||||
showClose: true,
|
||||
message: error,
|
||||
type: 'error'
|
||||
})
|
||||
return error
|
||||
config => {
|
||||
if (!config.donNotShowLoading) {
|
||||
showLoading()
|
||||
}
|
||||
const token = store.getters['user/token']
|
||||
const user = store.getters['user/userInfo']
|
||||
config.data = JSON.stringify(config.data)
|
||||
config.headers = {
|
||||
'Content-Type': 'application/json',
|
||||
'x-token': token,
|
||||
'x-user-id': user.ID
|
||||
}
|
||||
return config
|
||||
},
|
||||
error => {
|
||||
closeLoading()
|
||||
ElMessage({
|
||||
showClose: true,
|
||||
message: error,
|
||||
type: 'error'
|
||||
})
|
||||
return error
|
||||
}
|
||||
)
|
||||
|
||||
// http response 拦截器
|
||||
service.interceptors.response.use(
|
||||
response => {
|
||||
closeLoading()
|
||||
if (response.headers['new-token']) {
|
||||
store.commit('user/setToken', response.headers['new-token'])
|
||||
}
|
||||
if (response.data.code === 0 || response.headers.success === 'true') {
|
||||
if (response.headers.msg) {
|
||||
response.data.msg = decodeURI(response.headers.msg)
|
||||
}
|
||||
return response.data
|
||||
} else {
|
||||
ElMessage({
|
||||
showClose: true,
|
||||
message: response.data.msg,
|
||||
type: 'error'
|
||||
})
|
||||
if (response.data.data && response.data.data.reload) {
|
||||
store.commit('user/LoginOut')
|
||||
}
|
||||
return response.data.msg ? response.data : response
|
||||
}
|
||||
},
|
||||
error => {
|
||||
closeLoading()
|
||||
switch (error.response.status) {
|
||||
case 500:
|
||||
ElMessageBox.confirm(`
|
||||
response => {
|
||||
closeLoading()
|
||||
if (response.headers['new-token']) {
|
||||
store.commit('user/setToken', response.headers['new-token'])
|
||||
}
|
||||
if (response.data.code === 0 || response.headers.success === 'true') {
|
||||
if (response.headers.msg) {
|
||||
response.data.msg = decodeURI(response.headers.msg)
|
||||
}
|
||||
return response.data
|
||||
} else {
|
||||
ElMessage({
|
||||
showClose: true,
|
||||
message: response.data.msg,
|
||||
type: 'error'
|
||||
})
|
||||
if (response.data.data && response.data.data.reload) {
|
||||
store.commit('user/LoginOut')
|
||||
}
|
||||
return response.data.msg ? response.data : response
|
||||
}
|
||||
},
|
||||
error => {
|
||||
closeLoading()
|
||||
switch (error.response.status) {
|
||||
case 500:
|
||||
ElMessageBox.confirm(`
|
||||
<p>检测到接口错误${error}</p>
|
||||
<p>错误码<span style="color:red"> 500 </span>:此类错误内容常见于后台panic,请先查看后台日志,如果影响您正常使用可强制登出清理缓存</p>
|
||||
`, '接口报错', {
|
||||
dangerouslyUseHTMLString: true,
|
||||
distinguishCancelAndClose: true,
|
||||
confirmButtonText: '清理缓存',
|
||||
cancelButtonText: '取消'
|
||||
})
|
||||
.then(() => {
|
||||
store.commit('user/LoginOut')
|
||||
})
|
||||
break
|
||||
case 404:
|
||||
ElMessageBox.confirm(`
|
||||
dangerouslyUseHTMLString: true,
|
||||
distinguishCancelAndClose: true,
|
||||
confirmButtonText: '清理缓存',
|
||||
cancelButtonText: this.$t('general.cancel')
|
||||
})
|
||||
.then(() => {
|
||||
store.commit('user/LoginOut')
|
||||
})
|
||||
break
|
||||
case 404:
|
||||
ElMessageBox.confirm(`
|
||||
<p>检测到接口错误${error}</p>
|
||||
<p>错误码<span style="color:red"> 404 </span>:此类错误多为接口未注册(或未重启)或者请求路径(方法)与api路径(方法)不符--如果为自动化代码请检查是否存在空格</p>
|
||||
`, '接口报错', {
|
||||
dangerouslyUseHTMLString: true,
|
||||
distinguishCancelAndClose: true,
|
||||
confirmButtonText: '我知道了',
|
||||
cancelButtonText: '取消'
|
||||
})
|
||||
break
|
||||
}
|
||||
|
||||
return error
|
||||
dangerouslyUseHTMLString: true,
|
||||
distinguishCancelAndClose: true,
|
||||
confirmButtonText: '我知道了',
|
||||
cancelButtonText: this.$t('general.cancel')
|
||||
})
|
||||
break
|
||||
}
|
||||
|
||||
return error
|
||||
}
|
||||
)
|
||||
|
||||
export default service
|
||||
export default service
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<warning-bar title="在资源权限中将此角色的资源权限清空 或者不包含创建者的角色 即可屏蔽此客户资源的显示" />
|
||||
<div class="gva-table-box">
|
||||
<div class="gva-btn-list">
|
||||
<el-button size="mini" type="primary" icon="plus" @click="openDialog">新增</el-button>
|
||||
<el-button size="mini" type="primary" icon="plus" @click="openDialog">{{ $t('general.add') }}</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
ref="multipleTable"
|
||||
@@ -27,11 +27,11 @@
|
||||
<el-popover :visible="scope.row.visible" placement="top" width="160">
|
||||
<p>确定要删除吗?</p>
|
||||
<div style="text-align: right; margin-top: 8px;">
|
||||
<el-button size="mini" type="text" @click="scope.row.visible = false">取消</el-button>
|
||||
<el-button type="primary" size="mini" @click="deleteCustomer(scope.row)">确定</el-button>
|
||||
<el-button size="mini" type="text" @click="scope.row.visible = false">{{ $t('general.cancel') }}</el-button>
|
||||
<el-button type="primary" size="mini" @click="deleteCustomer(scope.row)">{{ $t('general.confirm') }}</el-button>
|
||||
</div>
|
||||
<template #reference>
|
||||
<el-button type="text" icon="delete" size="mini">删除</el-button>
|
||||
<el-button type="text" icon="delete" size="mini">{{ $t('general.delete') }}</el-button>
|
||||
</template>
|
||||
</el-popover>
|
||||
</template>
|
||||
@@ -60,8 +60,8 @@
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button size="small" @click="closeDialog">取 消</el-button>
|
||||
<el-button size="small" type="primary" @click="enterDialog">确 定</el-button>
|
||||
<el-button size="small" @click="closeDialog">{{ $t('general.close') }}</el-button>
|
||||
<el-button size="small" type="primary" @click="enterDialog">{{ $t('general.confirm') }}</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
@@ -119,7 +119,7 @@ export default {
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
type: 'success',
|
||||
message: '删除成功'
|
||||
message: this.$t('general.deleteSuccess')
|
||||
})
|
||||
if (this.tableData.length === 1 && this.page > 1) {
|
||||
this.page--
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<CustomPic pic-type="file" :pic-src="scope.row.url" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="left" label="日期" prop="UpdatedAt" width="180">
|
||||
<el-table-column align="left" :label="$t('general.date')" prop="UpdatedAt" width="180">
|
||||
<template #default="scope">
|
||||
<div>{{ formatDate(scope.row.UpdatedAt) }}</div>
|
||||
</template>
|
||||
@@ -43,10 +43,10 @@
|
||||
>{{ scope.row.tag }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="left" label="操作" width="160">
|
||||
<el-table-column align="left" :lable="$t('general.operations')" width="160">
|
||||
<template #default="scope">
|
||||
<el-button size="small" icon="download" type="text" @click="downloadFile(scope.row)">下载</el-button>
|
||||
<el-button size="small" icon="delete" type="text" @click="deleteFile(scope.row)">删除</el-button>
|
||||
<el-button size="small" icon="delete" type="text" @click="deleteFile(scope.row)">{{ $t('general.delete') }}</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -98,9 +98,9 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
async deleteFile(row) {
|
||||
this.$confirm('此操作将永久文件, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
this.$confirm('此操作将永久文件, 是否继续?', this.$t('general.hint'), {
|
||||
confirmButtonText: this.$t('general.confirm'),
|
||||
cancelButtonText: this.$t('general.cancel'),
|
||||
type: 'warning'
|
||||
})
|
||||
.then(async() => {
|
||||
|
||||
+25
-25
@@ -3,51 +3,51 @@
|
||||
<div class="init_page_panle">
|
||||
<div v-if="hello < 2" id="hello" :class="[hello < 1 ? 'slide-in-fwd-top' : 'slide-out-right']" class="hello ">
|
||||
<div>
|
||||
<div class="hello_title">GIN-VUE-ADMIN</div>
|
||||
<p class="in-two a-fadeinT">初始化须知</p>
|
||||
<p class="init_p">1.您需有用一定的VUE和GOLANG基础</p>
|
||||
<p class="init_p">2.请您确认是否已经阅读过官方文档</p>
|
||||
<p class="init_p">3.请您确认是否了解后续的配置流程</p>
|
||||
<p class="init_p">注:开发组不为文档中书写过的内容提供无偿服务</p>
|
||||
<div class="hello_title">{{ $GIN_VUE_ADMIN.appName }}</div>
|
||||
<p class="in-two a-fadeinT">{{ $t('init.note') }}</p>
|
||||
<p class="init_p">{{ $t('init.note1') }}</p>
|
||||
<p class="init_p">{{ $t('init.note2') }}</p>
|
||||
<p class="init_p">{{ $t('init.note3') }}</p>
|
||||
<p class="init_p">{{ $t('init.note4') }}</p>
|
||||
<p class="init_btn">
|
||||
<el-button type="primary" @click="goDoc">
|
||||
阅读文档
|
||||
{{ $t('init.readDocs') }}
|
||||
</el-button>
|
||||
<el-button type="primary" @click="showNext">
|
||||
我已确认
|
||||
{{ $t('init.confirm') }}
|
||||
</el-button>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="hello > 0 " :class="[(hello > 0 && !out)? 'slide-in-left' : '' , out ? 'slide-out-right' : '']" class=" form">
|
||||
<el-form ref="form" :model="form" label-width="100px">
|
||||
<el-form-item label="数据库类型">
|
||||
<el-select v-model="form.dbType" placeholder="请选择" @change="changeDB">
|
||||
<el-option key="mysql" label="mysql" value="mysql" />
|
||||
<el-option key="pgsql" label="pgsql(测试版)" value="pgsql" />
|
||||
<el-form ref="form" :model="form" label-width="120px">
|
||||
<el-form-item :label="$t('init.dbType')">
|
||||
<el-select v-model="form.dbType" placeholder="$('general.pleaseSelect')" @change="changeDB">
|
||||
<el-option key="mysql" label="MySQL" value="mysql" />
|
||||
<el-option key="pgsql" :label="'PostgreSQL (' + $t('init.beta') + ')'" value="pgsql" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="host">
|
||||
<el-input v-model="form.host" placeholder="请输入数据库链接" />
|
||||
<el-form-item :label="$t('init.dbHost')">
|
||||
<el-input v-model="form.host" :placeholder="$t('init.enterDBHost')" />
|
||||
</el-form-item>
|
||||
<el-form-item label="port">
|
||||
<el-input v-model="form.port" placeholder="请输入数据库端口" />
|
||||
<el-form-item :label="$t('init.dbPort')">
|
||||
<el-input v-model="form.port" :placeholder="$t('init.enterDBPort')" />
|
||||
</el-form-item>
|
||||
<el-form-item label="userName">
|
||||
<el-input v-model="form.userName" placeholder="请输入数据库用户名" />
|
||||
<el-form-item :label="$t('init.dbUsername')">
|
||||
<el-input v-model="form.userName" :placeholder="$t('init.enterDBUsername')" />
|
||||
</el-form-item>
|
||||
<el-form-item label="password">
|
||||
<el-form-item :label="$t('init.dbPassword')">
|
||||
<el-input
|
||||
v-model="form.password"
|
||||
placeholder="请输入数据库密码(没有则为空)"
|
||||
:placeholder="$t('init.enterDBPassword')"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="dbName">
|
||||
<el-input v-model="form.dbName" placeholder="请输入数据库名称" />
|
||||
<el-form-item :label="$t('init.dbName')">
|
||||
<el-input v-model="form.dbName" :placeholder="$t('init.enterDBName')" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<div style="text-align: right">
|
||||
<el-button type="primary" @click="onSubmit">立即初始化</el-button>
|
||||
<el-button type="primary" @click="onSubmit">{{ $t('init.initNow') }}</el-button>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
@@ -116,7 +116,7 @@ export default {
|
||||
async onSubmit() {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在初始化数据库,请稍候',
|
||||
text: this.$t('init.pleaseWait'),
|
||||
spinner: 'loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
})
|
||||
|
||||
+104
-13
@@ -10,6 +10,20 @@
|
||||
>
|
||||
<p class="login_panle_form_title_p">{{ $GIN_VUE_ADMIN.appName }}</p>
|
||||
</div>
|
||||
<div style="padding-left: 92%; padding-bottom: 20px;">
|
||||
<el-dropdown trigger="click" @command="handleSetLanguage">
|
||||
<span class="el-dropdown-link">
|
||||
<img src="@/assets/language.svg" style="width: 30px; height: 30px;">
|
||||
</span>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item :disabled="$i18n.locale==='en'" command="en"><img src="@/assets/flags/en.svg" class="img">English</el-dropdown-item>
|
||||
<el-dropdown-item :disabled="$i18n.locale==='zh'" command="zh"><img src="@/assets/flags/zh.svg" class="img">中文</el-dropdown-item>
|
||||
<el-dropdown-item :disabled="$i18n.locale==='ar'" command="ar"><img src="@/assets/flags/ar.svg" class="img">العربية</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</template>
|
||||
</el-dropdown>
|
||||
</div>
|
||||
<el-form
|
||||
ref="loginForm"
|
||||
:model="loginForm"
|
||||
@@ -17,7 +31,7 @@
|
||||
@keyup.enter="submitForm"
|
||||
>
|
||||
<el-form-item prop="username">
|
||||
<el-input v-model="loginForm.username" placeholder="请输入用户名">
|
||||
<el-input v-model="loginForm.username" :placeholder="$t('login.entUserName')">
|
||||
<template #suffix>
|
||||
<span class="input-icon">
|
||||
<el-icon>
|
||||
@@ -31,7 +45,7 @@
|
||||
<el-input
|
||||
v-model="loginForm.password"
|
||||
:type="lock === 'lock' ? 'password' : 'text'"
|
||||
placeholder="请输入密码"
|
||||
:placeholder="$t('login.entPassword')"
|
||||
>
|
||||
<template #suffix>
|
||||
<span class="input-icon">
|
||||
@@ -44,14 +58,14 @@
|
||||
<el-input
|
||||
v-model="loginForm.captcha"
|
||||
name="logVerify"
|
||||
placeholder="请输入验证码"
|
||||
:placeholder="$t('login.entVerificationCode')"
|
||||
style="width: 60%"
|
||||
/>
|
||||
<div class="vPic">
|
||||
<img
|
||||
v-if="picPath"
|
||||
:src="picPath"
|
||||
alt="请输入验证码"
|
||||
:alt="$t('login.entVerificationCode')"
|
||||
@click="loginVerify()"
|
||||
>
|
||||
</div>
|
||||
@@ -61,12 +75,12 @@
|
||||
type="primary"
|
||||
style="width: 46%"
|
||||
@click="checkInit"
|
||||
>前往初始化</el-button>
|
||||
>{{ $t('login.init') }}</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
style="width: 46%; margin-left: 8%"
|
||||
@click="submitForm"
|
||||
>登 录</el-button>
|
||||
>{{ $t('login.login') }}</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
@@ -98,6 +112,7 @@ import { mapActions } from 'vuex'
|
||||
import { captcha } from '@/api/user'
|
||||
import { checkDB } from '@/api/initdb'
|
||||
import bootomInfo from '@/view/layout/bottomInfo/bottomInfo.vue'
|
||||
import Cookies from 'js-cookie'
|
||||
export default {
|
||||
name: 'Login',
|
||||
components: {
|
||||
@@ -106,14 +121,14 @@ export default {
|
||||
data() {
|
||||
const checkUsername = (rule, value, callback) => {
|
||||
if (value.length < 5) {
|
||||
return callback(new Error('请输入正确的用户名'))
|
||||
return callback(new Error(this.$t('login.errUserName')))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
}
|
||||
const checkPassword = (rule, value, callback) => {
|
||||
if (value.length < 6) {
|
||||
return callback(new Error('请输入正确的密码'))
|
||||
return callback(new Error(this.$t('login.errPassword')))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
@@ -129,17 +144,26 @@ export default {
|
||||
rules: {
|
||||
username: [{ validator: checkUsername, trigger: 'blur' }],
|
||||
password: [{ validator: checkPassword, trigger: 'blur' }],
|
||||
captcha: [{ required: true, message: '请输入验证码', trigger: 'blur' },
|
||||
captcha: [{ required: true, message: this.$t('login.entVerificationCode'), trigger: 'blur' },
|
||||
{
|
||||
message: '验证码格式不正确',
|
||||
message: this.$t('login.errVerificationCode'),
|
||||
trigger: 'blur',
|
||||
}]
|
||||
},
|
||||
logVerify: '',
|
||||
picPath: ''
|
||||
picPath: '',
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
// language() {
|
||||
// var lang = Cookies.get('language')
|
||||
// console.log('computed: Loaded language from cookies: ' + lang)
|
||||
// return (lang || 'en')
|
||||
// }
|
||||
},
|
||||
created() {
|
||||
this.getLanguage()
|
||||
|
||||
this.loginVerify()
|
||||
},
|
||||
methods: {
|
||||
@@ -153,7 +177,7 @@ export default {
|
||||
} else {
|
||||
this.$message({
|
||||
type: 'info',
|
||||
message: '已配置数据库信息,无法初始化'
|
||||
message: this.$t('login.errInit')
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -171,7 +195,7 @@ export default {
|
||||
} else {
|
||||
this.$message({
|
||||
type: 'error',
|
||||
message: '请正确填写登录信息',
|
||||
message: this.$t('login.errLogin'),
|
||||
showClose: true
|
||||
})
|
||||
this.loginVerify()
|
||||
@@ -189,6 +213,47 @@ export default {
|
||||
this.picPath = ele.data.picPath
|
||||
this.loginForm.captchaId = ele.data.captchaId
|
||||
})
|
||||
},
|
||||
setLocale(local) {
|
||||
console.log('Selected langauge is: ' + local.value)
|
||||
this.$i18n.locale = local.value
|
||||
},
|
||||
getLanguage() {
|
||||
var lang = Cookies.get('language')
|
||||
return (lang || 'en')
|
||||
},
|
||||
handleSetLanguage(lang) {
|
||||
this.$i18n.locale = lang
|
||||
|
||||
Cookies.set('language', lang)
|
||||
// this.$store.dispatch('setLanguage', lang)
|
||||
|
||||
// if (lang === 'ar') {
|
||||
// console.log('Arabic language selected changing to RTL')
|
||||
// document.querySelector('html').classList.add('is-rtl')
|
||||
// } else {
|
||||
// console.log('Non Arabic language selected changing to LTR')
|
||||
// document.querySelector('html').classList.add('is-ltr')
|
||||
// }
|
||||
|
||||
// const htmlEl = document.querySelector('html')
|
||||
|
||||
// if (this.$i18n.locale === 'ar') {
|
||||
// console.log('change language to arabic and ltr to rtl')
|
||||
// htmlEl.setAttribute('dir', 'rtl')
|
||||
// } else {
|
||||
// console.log('change language to english and rtl to ltr')
|
||||
// htmlEl.setAttribute('dir', 'ltr')
|
||||
// }
|
||||
|
||||
// htmlEl.setAttribute('lang', lang)
|
||||
|
||||
this.$message({
|
||||
message: this.$t('general.langSwitch'),
|
||||
type: 'success'
|
||||
})
|
||||
|
||||
// this.$emit('handerevent')
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -197,4 +262,30 @@ export default {
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "@/style/newLogin.scss";
|
||||
|
||||
img {
|
||||
padding-right: 20px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
prefix {
|
||||
margin-top: 10px;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.international-icon {
|
||||
font-size: 20px;
|
||||
cursor: pointer;
|
||||
vertical-align: -5px!important;
|
||||
}
|
||||
|
||||
html.is-rtl * {
|
||||
direction: rtl;
|
||||
}
|
||||
|
||||
html.is-ltr * {
|
||||
direction: ltr;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -120,8 +120,8 @@
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button size="small" @click="showPassword=false">取 消</el-button>
|
||||
<el-button size="small" type="primary" @click="savePassword">确 定</el-button>
|
||||
<el-button size="small" @click="showPassword=false">{{ $t('general.close') }}</el-button>
|
||||
<el-button size="small" type="primary" @click="savePassword">{{ $t('general.confirm') }}</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
@@ -29,15 +29,15 @@
|
||||
</div>
|
||||
<div class="gva-table-box">
|
||||
<div class="gva-btn-list">
|
||||
<el-button size="mini" type="primary" icon="plus" @click="openDialog('addApi')">新增</el-button>
|
||||
<el-button size="mini" type="primary" icon="plus" @click="openDialog('addApi')">{{ $t('general.add') }}</el-button>
|
||||
<el-popover v-model:visible="deleteVisible" placement="top" width="160">
|
||||
<p>确定要删除吗?</p>
|
||||
<div style="text-align: right; margin-top: 8px;">
|
||||
<el-button size="mini" type="text" @click="deleteVisible = false">取消</el-button>
|
||||
<el-button size="mini" type="primary" @click="onDelete">确定</el-button>
|
||||
<el-button size="mini" type="text" @click="deleteVisible = false">{{ $t('general.cancel') }}</el-button>
|
||||
<el-button size="mini" type="primary" @click="onDelete">{{ $t('general.confirm') }}</el-button>
|
||||
</div>
|
||||
<template #reference>
|
||||
<el-button icon="delete" size="mini" :disabled="!apis.length" style="margin-left: 10px;">删除</el-button>
|
||||
<el-button icon="delete" size="mini" :disabled="!apis.length" style="margin-left: 10px;">{{ $t('general.delete') }}</el-button>
|
||||
</template>
|
||||
</el-popover>
|
||||
</div>
|
||||
@@ -58,20 +58,20 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="left" fixed="right" label="操作" width="200">
|
||||
<el-table-column align="left" fixed="right" :lable="$t('general.operations')" width="200">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
icon="edit"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="editApi(scope.row)"
|
||||
>编辑</el-button>
|
||||
>{{ $t('general.edit') }}</el-button>
|
||||
<el-button
|
||||
icon="delete"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="deleteApi(scope.row)"
|
||||
>删除</el-button>
|
||||
>{{ $t('general.delete') }}</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -114,8 +114,8 @@
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button size="small" @click="closeDialog">取 消</el-button>
|
||||
<el-button size="small" type="primary" @click="enterDialog">确 定</el-button>
|
||||
<el-button size="small" @click="closeDialog">{{ $t('general.close') }}</el-button>
|
||||
<el-button size="small" type="primary" @click="enterDialog">{{ $t('general.confirm') }}</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
@@ -228,6 +228,9 @@ export default {
|
||||
// 排序
|
||||
sortChange({ prop, order }) {
|
||||
if (prop) {
|
||||
if (prop === 'ID') {
|
||||
prop = 'id'
|
||||
}
|
||||
this.searchInfo.orderKey = toSQLLine(prop)
|
||||
this.searchInfo.desc = order === 'descending'
|
||||
}
|
||||
@@ -275,9 +278,9 @@ export default {
|
||||
this.openDialog('edit')
|
||||
},
|
||||
async deleteApi(row) {
|
||||
this.$confirm('此操作将永久删除所有角色下该api, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
this.$confirm('此操作将永久删除所有角色下该api, 是否继续?', this.$t('general.hint'), {
|
||||
confirmButtonText: this.$t('general.confirm'),
|
||||
cancelButtonText: this.$t('general.cancel'),
|
||||
type: 'warning'
|
||||
})
|
||||
.then(async() => {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<template>
|
||||
<div class="authority">
|
||||
<warning-bar title="注:右上角头像下拉可切换角色" />
|
||||
<warning-bar :title="$t('authority.authorityNote')" />
|
||||
<div class="gva-table-box">
|
||||
<div class="gva-btn-list">
|
||||
<el-button size="mini" type="primary" icon="plus" @click="addAuthority('0')">新增角色</el-button>
|
||||
<el-button size="mini" type="primary" icon="plus" @click="addAuthority('0')">{{ $t('authority.addRole') }}</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
:data="tableData"
|
||||
@@ -11,48 +11,48 @@
|
||||
row-key="authorityId"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-table-column label="角色ID" min-width="180" prop="authorityId" />
|
||||
<el-table-column align="left" label="角色名称" min-width="180" prop="authorityName" />
|
||||
<el-table-column align="left" label="操作" width="460">
|
||||
<el-table-column :label="$t('authority.roleID')" min-width="180" prop="authorityId" />
|
||||
<el-table-column align="left" :label="$t('authority.roleName')" min-width="180" prop="authorityName" />
|
||||
<el-table-column align="left" :lable="$t('general.operations')" width="460">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
icon="setting"
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="opdendrawer(scope.row)"
|
||||
>设置权限</el-button>
|
||||
>{{ $t('authority.setPermissions') }}</el-button>
|
||||
<el-button
|
||||
icon="plus"
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="addAuthority(scope.row.authorityId)"
|
||||
>新增子角色</el-button>
|
||||
>{{ $t('general.add') }}</el-button>
|
||||
<el-button
|
||||
icon="copy-document"
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="copyAuthority(scope.row)"
|
||||
>拷贝</el-button>
|
||||
>{{ $t('general.copy') }}</el-button>
|
||||
<el-button
|
||||
icon="edit"
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="editAuthority(scope.row)"
|
||||
>编辑</el-button>
|
||||
>{{ $t('general.edit') }}</el-button>
|
||||
<el-button
|
||||
icon="delete"
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="deleteAuth(scope.row)"
|
||||
>删除</el-button>
|
||||
>{{ $t('general.delete') }}</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<!-- 新增角色弹窗 -->
|
||||
<el-dialog v-model="dialogFormVisible" :title="dialogTitle">
|
||||
<el-form ref="authorityForm" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="父级角色" prop="parentId">
|
||||
<el-form ref="authorityForm" :model="form" :rules="rules" label-width="100px">
|
||||
<el-form-item :label="$t('authority.parentRole')" prop="parentId">
|
||||
<el-cascader
|
||||
v-model="form.parentId"
|
||||
style="width:100%"
|
||||
@@ -63,30 +63,30 @@
|
||||
filterable
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="角色ID" prop="authorityId">
|
||||
<el-form-item :label="$t('authority.roleID')" prop="authorityId">
|
||||
<el-input v-model="form.authorityId" :disabled="dialogType=='edit'" autocomplete="off" />
|
||||
</el-form-item>
|
||||
<el-form-item label="角色姓名" prop="authorityName">
|
||||
<el-form-item :label="$t('authority.roleName')" prop="authorityName">
|
||||
<el-input v-model="form.authorityName" autocomplete="off" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button size="small" @click="closeDialog">取 消</el-button>
|
||||
<el-button size="small" type="primary" @click="enterDialog">确 定</el-button>
|
||||
<el-button size="small" @click="closeDialog">{{ $t('general.close') }}</el-button>
|
||||
<el-button size="small" type="primary" @click="enterDialog">{{ $t('general.confirm') }}</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<el-drawer v-if="drawer" v-model="drawer" :with-header="false" size="40%" title="角色配置">
|
||||
<el-drawer v-if="drawer" v-model="drawer" :with-header="false" size="40%" :title="$t('authority.roleConfig')">
|
||||
<el-tabs :before-leave="autoEnter" class="role-box" type="border-card">
|
||||
<el-tab-pane label="角色菜单">
|
||||
<el-tab-pane :label="$t('authority.roleMenu')">
|
||||
<Menus ref="menus" :row="activeRow" @changeRow="changeRow" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="角色api">
|
||||
<el-tab-pane :label="$t('authority.roleAPI')">
|
||||
<Apis ref="apis" :row="activeRow" @changeRow="changeRow" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="资源权限">
|
||||
<el-tab-pane :label="$t('authority.resourcePermissions')">
|
||||
<Datas ref="datas" :authority="tableData" :row="activeRow" @changeRow="changeRow" />
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
@@ -123,7 +123,7 @@ export default {
|
||||
data() {
|
||||
var mustUint = (rule, value, callback) => {
|
||||
if (!/^[0-9]*[1-9][0-9]*$/.test(value)) {
|
||||
return callback(new Error('请输入正整数'))
|
||||
return callback(new Error(this.$t('authority.positiveIntNote')))
|
||||
}
|
||||
return callback()
|
||||
}
|
||||
@@ -132,7 +132,7 @@ export default {
|
||||
AuthorityOption: [
|
||||
{
|
||||
authorityId: '0',
|
||||
authorityName: '根角色'
|
||||
authorityName: this.$t('authority.rootRole')
|
||||
}
|
||||
],
|
||||
listApi: getAuthorityList,
|
||||
@@ -140,7 +140,7 @@ export default {
|
||||
dialogType: 'add',
|
||||
activeRow: {},
|
||||
activeUserId: 0,
|
||||
dialogTitle: '新增角色',
|
||||
dialogTitle: this.$t('authority.addRole'),
|
||||
dialogFormVisible: false,
|
||||
apiDialogFlag: false,
|
||||
copyForm: {},
|
||||
@@ -151,11 +151,11 @@ export default {
|
||||
},
|
||||
rules: {
|
||||
authorityId: [
|
||||
{ required: true, message: '请输入角色ID', trigger: 'blur' },
|
||||
{ required: true, message: this.$t('authority.roleIdNote'), trigger: 'blur' },
|
||||
{ validator: mustUint, trigger: 'blur' }
|
||||
],
|
||||
authorityName: [
|
||||
{ required: true, message: '请输入角色名', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('authority.roleNameNote'), trigger: 'blur' }
|
||||
],
|
||||
parentId: [
|
||||
{ required: true, message: '请选择请求方式', trigger: 'blur' }
|
||||
@@ -197,9 +197,9 @@ export default {
|
||||
},
|
||||
// 删除角色
|
||||
deleteAuth(row) {
|
||||
this.$confirm('此操作将永久删除该角色, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
this.$confirm('此操作将永久删除该角色, 是否继续?', this.$t('general.hint'), {
|
||||
confirmButtonText: this.$t('general.confirm'),
|
||||
cancelButtonText: this.$t('general.cancel'),
|
||||
type: 'warning'
|
||||
})
|
||||
.then(async() => {
|
||||
@@ -297,7 +297,7 @@ export default {
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
type: 'success',
|
||||
message: '复制成功!'
|
||||
message: this.$t('general.copySuccess')
|
||||
})
|
||||
this.getTableData()
|
||||
}
|
||||
@@ -348,7 +348,7 @@ export default {
|
||||
// 增加角色
|
||||
addAuthority(parentId) {
|
||||
this.initForm()
|
||||
this.dialogTitle = '新增角色'
|
||||
this.dialogTitle = this.$t('authority.addRole')
|
||||
this.dialogType = 'add'
|
||||
this.form.parentId = parentId
|
||||
this.setOptions()
|
||||
@@ -357,7 +357,7 @@ export default {
|
||||
// 编辑角色
|
||||
editAuthority(row) {
|
||||
this.setOptions()
|
||||
this.dialogTitle = '编辑角色'
|
||||
this.dialogTitle = this.$t('authority.editRole')
|
||||
this.dialogType = 'edit'
|
||||
for (const key in this.form) {
|
||||
this.form[key] = row[key]
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="clearflex">
|
||||
<el-button class="fl-right" size="mini" type="primary" @click="authApiEnter">确 定</el-button>
|
||||
<el-button class="fl-right" size="mini" type="primary" @click="authApiEnter">{{ $t('general.confirm') }}</el-button>
|
||||
</div>
|
||||
<el-tree
|
||||
ref="apiTree"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="clearflex" style="margin:18px">
|
||||
<el-button class="fl-right" size="mini" type="primary" @click="authDataEnter">确 定</el-button>
|
||||
<el-button class="fl-left" size="mini" type="primary" @click="all">全选</el-button>
|
||||
<el-button class="fl-right" size="mini" type="primary" @click="authDataEnter">{{ $t('general.confirm') }}</el-button>
|
||||
<el-button class="fl-left" size="mini" type="primary" @click="all">{{ $t('general.selectAll') }}</el-button>
|
||||
<el-button class="fl-left" size="mini" type="primary" @click="self">本角色</el-button>
|
||||
<el-button class="fl-left" size="mini" type="primary" @click="selfAndChildren">本角色及子角色</el-button>
|
||||
</div>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="clearflex">
|
||||
<el-button class="fl-right" size="mini" type="primary" @click="relation">确 定</el-button>
|
||||
<el-button class="fl-right" size="mini" type="primary" @click="relation">{{ $t('general.confirm') }}</el-button>
|
||||
</div>
|
||||
<el-tree
|
||||
ref="menuTree"
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
</div>
|
||||
<div class="gva-table-box">
|
||||
<div class="gva-btn-list">
|
||||
<el-button size="mini" type="primary" icon="plus" @click="openDialog">新增</el-button>
|
||||
<el-button size="mini" type="primary" icon="plus" @click="openDialog">{{ $t('general.add') }}</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
ref="multipleTable"
|
||||
@@ -38,7 +38,7 @@
|
||||
row-key="ID"
|
||||
>
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column align="left" label="日期" width="180">
|
||||
<el-table-column align="left" :label="$t('general.date')" width="180">
|
||||
<template #default="scope">{{ formatDate(scope.row.CreatedAt) }}</template>
|
||||
</el-table-column>
|
||||
|
||||
@@ -59,11 +59,11 @@
|
||||
<el-popover :visible="scope.row.visible" placement="top" width="160">
|
||||
<p>确定要删除吗?</p>
|
||||
<div style="text-align: right; margin-top: 8px;">
|
||||
<el-button size="mini" type="text" @click="scope.row.visible = false">取消</el-button>
|
||||
<el-button type="primary" size="mini" @click="deleteSysDictionary(scope.row)">确定</el-button>
|
||||
<el-button size="mini" type="text" @click="scope.row.visible = false">{{ $t('general.cancel') }}</el-button>
|
||||
<el-button type="primary" size="mini" @click="deleteSysDictionary(scope.row)">{{ $t('general.confirm') }}</el-button>
|
||||
</div>
|
||||
<template #reference>
|
||||
<el-button type="text" icon="delete" size="mini" style="margin-left:10px">删除</el-button>
|
||||
<el-button type="text" icon="delete" size="mini" style="margin-left:10px">{{ $t('general.delete') }}</el-button>
|
||||
</template>
|
||||
</el-popover>
|
||||
</template>
|
||||
@@ -101,7 +101,7 @@
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status" required>
|
||||
<el-switch v-model="formData.status" active-text="开启" inactive-text="停用" />
|
||||
<el-switch v-model="formData.status" :active-text="$t('general.enable')" inactive-text="停用" />
|
||||
</el-form-item>
|
||||
<el-form-item label="描述" prop="desc">
|
||||
<el-input v-model="formData.desc" placeholder="请输入描述" clearable :style="{width: '100%'}" />
|
||||
@@ -109,8 +109,8 @@
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button size="small" @click="closeDialog">取 消</el-button>
|
||||
<el-button size="small" type="primary" @click="enterDialog">确 定</el-button>
|
||||
<el-button size="small" @click="closeDialog">{{ $t('general.close') }}</el-button>
|
||||
<el-button size="small" type="primary" @click="enterDialog">{{ $t('general.confirm') }}</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
@@ -216,7 +216,7 @@ export default {
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
type: 'success',
|
||||
message: '删除成功'
|
||||
message: this.$t('general.deleteSuccess')
|
||||
})
|
||||
if (this.tableData.length === 1 && this.page > 1) {
|
||||
this.page--
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
row-key="ID"
|
||||
>
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column align="left" label="日期" width="180">
|
||||
<el-table-column align="left" :label="$t('general.date')" width="180">
|
||||
<template #default="scope">{{ formatDate(scope.row.CreatedAt) }}</template>
|
||||
</el-table-column>
|
||||
|
||||
@@ -52,11 +52,11 @@
|
||||
<el-popover :visible="scope.row.visible" placement="top" width="160">
|
||||
<p>确定要删除吗?</p>
|
||||
<div style="text-align: right; margin-top: 8px;">
|
||||
<el-button size="mini" type="text" @click="scope.row.visible = false">取消</el-button>
|
||||
<el-button type="primary" size="mini" @click="deleteSysDictionaryDetail(scope.row)">确定</el-button>
|
||||
<el-button size="mini" type="text" @click="scope.row.visible = false">{{ $t('general.cancel') }}</el-button>
|
||||
<el-button type="primary" size="mini" @click="deleteSysDictionaryDetail(scope.row)">{{ $t('general.confirm') }}</el-button>
|
||||
</div>
|
||||
<template #reference>
|
||||
<el-button type="text" icon="delete" size="mini">删除</el-button>
|
||||
<el-button type="text" icon="delete" size="mini">{{ $t('general.delete') }}</el-button>
|
||||
</template>
|
||||
</el-popover>
|
||||
</template>
|
||||
@@ -97,7 +97,7 @@
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="启用状态" prop="status" required>
|
||||
<el-switch v-model="formData.status" active-text="开启" inactive-text="停用" />
|
||||
<el-switch v-model="formData.status" :active-text="$t('general.enable')" inactive-text="停用" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序标记" prop="sort">
|
||||
<el-input-number v-model.number="formData.sort" placeholder="排序标记" />
|
||||
@@ -105,8 +105,8 @@
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button size="small" @click="closeDialog">取 消</el-button>
|
||||
<el-button size="small" type="primary" @click="enterDialog">确 定</el-button>
|
||||
<el-button size="small" @click="closeDialog">{{ $t('general.close') }}</el-button>
|
||||
<el-button size="small" type="primary" @click="enterDialog">{{ $t('general.confirm') }}</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
@@ -203,7 +203,7 @@ export default {
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
type: 'success',
|
||||
message: '删除成功'
|
||||
message: this.$t('general.deleteSuccess')
|
||||
})
|
||||
if (this.tableData.length === 1 && this.page > 1) {
|
||||
this.page--
|
||||
|
||||
@@ -1160,6 +1160,10 @@ export default {
|
||||
},
|
||||
created() {
|
||||
this.metaData = this.meta
|
||||
// added by mohamed hassan - PR: Update icon.vue #865
|
||||
if (this.metaData.icon === '') {
|
||||
this.metaData.icon = this.options[0].label
|
||||
}
|
||||
},
|
||||
methods: {}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="left" fixed="right" label="操作" width="300">
|
||||
<el-table-column align="left" fixed="right" :lable="$t('general.operations')" width="300">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
@@ -46,13 +46,13 @@
|
||||
type="text"
|
||||
icon="edit"
|
||||
@click="editMenu(scope.row.ID)"
|
||||
>编辑</el-button>
|
||||
>{{ $t('general.edit') }}</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="delete"
|
||||
@click="deleteMenu(scope.row.ID)"
|
||||
>删除</el-button>
|
||||
>{{ $t('general.delete') }}</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -172,7 +172,7 @@
|
||||
size="small"
|
||||
icon="delete"
|
||||
@click="deleteParameter(form.parameters,scope.$index)"
|
||||
>删除</el-button>
|
||||
>{{ $t('general.delete') }}</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@@ -180,8 +180,8 @@
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button size="small" @click="closeDialog">取 消</el-button>
|
||||
<el-button size="small" type="primary" @click="enterDialog">确 定</el-button>
|
||||
<el-button size="small" @click="closeDialog">{{ $t('general.close') }}</el-button>
|
||||
<el-button size="small" type="primary" @click="enterDialog">{{ $t('general.confirm') }}</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
@@ -311,9 +311,9 @@ export default {
|
||||
},
|
||||
// 删除菜单
|
||||
deleteMenu(ID) {
|
||||
this.$confirm('此操作将永久删除所有角色下该菜单, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
this.$confirm('此操作将永久删除所有角色下该菜单, 是否继续?', this.$t('general.hint'), {
|
||||
confirmButtonText: this.$t('general.confirm'),
|
||||
cancelButtonText: this.$t('general.cancel'),
|
||||
type: 'warning'
|
||||
})
|
||||
.then(async() => {
|
||||
|
||||
@@ -23,11 +23,11 @@
|
||||
<el-popover v-model:visible="deleteVisible" placement="top" width="160">
|
||||
<p>确定要删除吗?</p>
|
||||
<div style="text-align: right; margin-top: 8px;">
|
||||
<el-button size="mini" type="text" @click="deleteVisible = false">取消</el-button>
|
||||
<el-button size="mini" type="primary" @click="onDelete">确定</el-button>
|
||||
<el-button size="mini" type="text" @click="deleteVisible = false">{{ $t('general.cancel') }}</el-button>
|
||||
<el-button size="mini" type="primary" @click="onDelete">{{ $t('general.confirm') }}</el-button>
|
||||
</div>
|
||||
<template #reference>
|
||||
<el-button icon="delete" size="mini" style="margin-left: 10px;" :disabled="!multipleSelection.length">删除</el-button>
|
||||
<el-button icon="delete" size="mini" style="margin-left: 10px;" :disabled="!multipleSelection.length">{{ $t('general.delete') }}</el-button>
|
||||
</template>
|
||||
</el-popover>
|
||||
</div>
|
||||
@@ -45,7 +45,7 @@
|
||||
<div>{{ scope.row.user.userName }}({{ scope.row.user.nickName }})</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="left" label="日期" width="180">
|
||||
<el-table-column align="left" :label="$t('general.date')" width="180">
|
||||
<template #default="scope">{{ formatDate(scope.row.CreatedAt) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="left" label="状态码" prop="status" width="120">
|
||||
@@ -94,11 +94,11 @@
|
||||
<el-popover :visible="scope.row.visible" placement="top" width="160">
|
||||
<p>确定要删除吗?</p>
|
||||
<div style="text-align: right; margin-top: 8px;">
|
||||
<el-button size="mini" type="text" @click="scope.row.visible = false">取消</el-button>
|
||||
<el-button size="mini" type="primary" @click="deleteSysOperationRecord(scope.row)">确定</el-button>
|
||||
<el-button size="mini" type="text" @click="scope.row.visible = false">{{ $t('general.cancel') }}</el-button>
|
||||
<el-button size="mini" type="primary" @click="deleteSysOperationRecord(scope.row)">{{ $t('general.confirm') }}</el-button>
|
||||
</div>
|
||||
<template #reference>
|
||||
<el-button icon="delete" size="mini" type="text">删除</el-button>
|
||||
<el-button icon="delete" size="mini" type="text">{{ $t('general.delete') }}</el-button>
|
||||
</template>
|
||||
</el-popover>
|
||||
</template>
|
||||
@@ -175,7 +175,7 @@ export default {
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
type: 'success',
|
||||
message: '删除成功'
|
||||
message: this.$t('general.deleteSuccess')
|
||||
})
|
||||
if (this.tableData.length === ids.length && this.page > 1) {
|
||||
this.page--
|
||||
@@ -190,7 +190,7 @@ export default {
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
type: 'success',
|
||||
message: '删除成功'
|
||||
message: this.$t('general.deleteSuccess')
|
||||
})
|
||||
if (this.tableData.length === 1 && this.page > 1) {
|
||||
this.page--
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
<template>
|
||||
<div>
|
||||
<warning-bar title="注:右上角头像下拉可切换角色" />
|
||||
<warning-bar :title="$t('authority.authorityNote')" />
|
||||
<div class="gva-table-box">
|
||||
<div class="gva-btn-list">
|
||||
<el-button size="mini" type="primary" icon="plus" @click="addUser">新增用户</el-button>
|
||||
<el-button size="mini" type="primary" icon="plus" @click="addUser">{{ $t('user.addUser') }}</el-button>
|
||||
</div>
|
||||
<el-table :data="tableData">
|
||||
<el-table-column align="left" label="头像" min-width="50">
|
||||
<el-table-column align="left" :label="$t('user.avatar')" min-width="50">
|
||||
<template #default="scope">
|
||||
<CustomPic style="margin-top:8px" :pic-src="scope.row.headerImg" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="left" label="UUID" min-width="250" prop="uuid" />
|
||||
<el-table-column align="left" label="用户名" min-width="150" prop="userName" />
|
||||
<el-table-column align="left" label="昵称" min-width="100" prop="nickName">
|
||||
<el-table-column align="left" :label="$t('user.userName')" min-width="150" prop="userName" />
|
||||
<el-table-column align="left" :label="$t('user.nickName')" min-width="100" prop="nickName">
|
||||
<template #default="scope">
|
||||
<p v-if="!scope.row.editFlag" class="nickName">{{ scope.row.nickName }}
|
||||
<el-icon class="pointer" color="#66b1ff" @click="openEidt(scope.row)">
|
||||
@@ -31,7 +31,7 @@
|
||||
</p>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="left" label="用户角色" min-width="150">
|
||||
<el-table-column align="left" :label="$t('user.userRole')" min-width="150">
|
||||
<template #default="scope">
|
||||
<el-cascader
|
||||
v-model="scope.row.authorityIds"
|
||||
@@ -45,19 +45,19 @@
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="left" label="操作" min-width="150">
|
||||
<el-table-column align="left" :lable="$t('general.operations')" min-width="150">
|
||||
<template #default="scope">
|
||||
<el-popover :visible="scope.row.visible" placement="top" width="160">
|
||||
<p>确定要删除此用户吗</p>
|
||||
<p>{{ $t('user.deleteUserConfrim') }}</p>
|
||||
<div style="text-align: right; margin-top: 8px;">
|
||||
<el-button size="mini" type="text" @click="scope.row.visible = false">取消</el-button>
|
||||
<el-button type="primary" size="mini" @click="deleteUser(scope.row)">确定</el-button>
|
||||
<el-button size="mini" type="text" @click="scope.row.visible = false">{{ $t('general.cancel') }}</el-button>
|
||||
<el-button type="primary" size="mini" @click="deleteUser(scope.row)">{{ $t('general.confirm') }}</el-button>
|
||||
</div>
|
||||
<template #reference>
|
||||
<el-button type="text" icon="delete" size="mini">删除</el-button>
|
||||
<el-button type="text" icon="delete" size="mini">{{ $t('general.delete') }}</el-button>
|
||||
</template>
|
||||
</el-popover>
|
||||
<el-button type="text" icon="magic-stick" size="mini" @click="resetPassword(scope.row)">重置密码</el-button>
|
||||
<el-button type="text" icon="magic-stick" size="mini" @click="resetPassword(scope.row)">{{ $t('user.resetPassword') }}</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -73,18 +73,18 @@
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<el-dialog v-model="addUserDialog" custom-class="user-dialog" title="新增用户">
|
||||
<el-form ref="userForm" :rules="rules" :model="userInfo" label-width="80px">
|
||||
<el-form-item label="用户名" prop="username">
|
||||
<el-dialog v-model="addUserDialog" custom-class="user-dialog" :title="$t('user.addUser')">
|
||||
<el-form ref="userForm" :rules="rules" :model="userInfo" label-width="90px">
|
||||
<el-form-item :label="$t('user.userName')" prop="username">
|
||||
<el-input v-model="userInfo.username" />
|
||||
</el-form-item>
|
||||
<el-form-item label="密码" prop="password">
|
||||
<el-form-item :label="$t('user.password')" prop="password">
|
||||
<el-input v-model="userInfo.password" />
|
||||
</el-form-item>
|
||||
<el-form-item label="别名" prop="nickName">
|
||||
<el-form-item :label="$t('user.nickName')" prop="nickName">
|
||||
<el-input v-model="userInfo.nickName" />
|
||||
</el-form-item>
|
||||
<el-form-item label="用户角色" prop="authorityId">
|
||||
<el-form-item :label="$t('user.userRole')" prop="authorityId">
|
||||
<el-cascader
|
||||
v-model="userInfo.authorityIds"
|
||||
style="width:100%"
|
||||
@@ -94,18 +94,18 @@
|
||||
:clearable="false"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="头像" label-width="80px">
|
||||
<el-form-item label="" label-width="80px">
|
||||
<div style="display:inline-block" @click="openHeaderChange">
|
||||
<img v-if="userInfo.headerImg" class="header-img-box" :src="(userInfo.headerImg && userInfo.headerImg.slice(0, 4) !== 'http')?path+userInfo.headerImg:userInfo.headerImg">
|
||||
<div v-else class="header-img-box">从媒体库选择</div>
|
||||
<div v-else class="header-img-box">{{ $t('user.mediaLibrary') }}</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button size="small" @click="closeAddUserDialog">取 消</el-button>
|
||||
<el-button size="small" type="primary" @click="enterAddUserDialog">确 定</el-button>
|
||||
<el-button size="small" @click="closeAddUserDialog">{{ $t('general.close') }}</el-button>
|
||||
<el-button size="small" type="primary" @click="enterAddUserDialog">{{ $t('general.confirm') }}</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
@@ -150,18 +150,18 @@ export default {
|
||||
},
|
||||
rules: {
|
||||
username: [
|
||||
{ required: true, message: '请输入用户名', trigger: 'blur' },
|
||||
{ min: 5, message: '最低5位字符', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('user.userNameNote'), trigger: 'blur' },
|
||||
{ min: 5, message: this.$t('user.userNameLenNote'), trigger: 'blur' }
|
||||
],
|
||||
password: [
|
||||
{ required: true, message: '请输入用户密码', trigger: 'blur' },
|
||||
{ min: 6, message: '最低6位字符', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('user.passwordNote'), trigger: 'blur' },
|
||||
{ min: 6, message: this.$t('user.passwordLenNote'), trigger: 'blur' }
|
||||
],
|
||||
nickName: [
|
||||
{ required: true, message: '请输入用户昵称', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('user.nickNameNote'), trigger: 'blur' }
|
||||
],
|
||||
authorityId: [
|
||||
{ required: true, message: '请选择用户角色', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('user.userRoleNote'), trigger: 'blur' }
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -182,11 +182,11 @@ export default {
|
||||
methods: {
|
||||
resetPassword(row) {
|
||||
this.$confirm(
|
||||
'是否将此用户密码重置为123456?',
|
||||
'警告',
|
||||
this.$t('user.resetPasswordConfrim'),
|
||||
this.$t('general.warning'),
|
||||
{
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
confirmButtonText: this.$t('general.confirm'),
|
||||
cancelButtonText: this.$t('general.cancel'),
|
||||
type: 'warning',
|
||||
}
|
||||
).then(async() => {
|
||||
@@ -223,7 +223,7 @@ export default {
|
||||
},
|
||||
openEidt(row) {
|
||||
if (this.tableData.some(item => item.editFlag)) {
|
||||
this.$message('当前存在正在编辑的用户')
|
||||
this.$message(this.$t('user.anotherUserEdit'))
|
||||
return
|
||||
}
|
||||
this.backNickName = row.nickName
|
||||
@@ -234,7 +234,7 @@ export default {
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
type: 'success',
|
||||
message: '设置成功'
|
||||
message: this.$t('user.setUserInfoNote')
|
||||
})
|
||||
}
|
||||
this.backNickName = ''
|
||||
@@ -268,7 +268,7 @@ export default {
|
||||
async deleteUser(row) {
|
||||
const res = await deleteUser({ id: row.ID })
|
||||
if (res.code === 0) {
|
||||
this.$message.success('删除成功')
|
||||
this.$message.success(this.$t('general.deleteSuccess'))
|
||||
await this.getTableData()
|
||||
row.visible = false
|
||||
}
|
||||
@@ -279,7 +279,7 @@ export default {
|
||||
if (valid) {
|
||||
const res = await register(this.userInfo)
|
||||
if (res.code === 0) {
|
||||
this.$message({ type: 'success', message: '创建成功' })
|
||||
this.$message({ type: 'success', message: this.$t('user.userAddedNote') })
|
||||
}
|
||||
await this.getTableData()
|
||||
this.closeAddUserDialog()
|
||||
@@ -305,7 +305,7 @@ export default {
|
||||
authorityIds: row.authorityIds
|
||||
})
|
||||
if (res.code === 0) {
|
||||
this.$message({ type: 'success', message: '角色设置成功' })
|
||||
this.$message({ type: 'success', message: this.$t('user.roleSetNote') })
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
@@ -1,34 +1,34 @@
|
||||
<template>
|
||||
<div>
|
||||
<warning-bar title="id , created_at , updated_at , deleted_at 会自动生成请勿重复创建。搜索时如果条件为LIKE只支持字符串" />
|
||||
<warning-bar :title="$t('fieldDialog.note')" />
|
||||
<el-form
|
||||
ref="fieldDialogFrom"
|
||||
:model="middleDate"
|
||||
label-width="120px"
|
||||
label-width="160px"
|
||||
label-position="left"
|
||||
:rules="rules"
|
||||
>
|
||||
<el-form-item label="Field名称" prop="fieldName">
|
||||
<el-form-item :label="$t('autoCode.fieldName')" prop="fieldName">
|
||||
<el-input v-model="middleDate.fieldName" autocomplete="off" style="width:80%" />
|
||||
<el-button size="mini" style="width:18%;margin-left:2%" @click="autoFill">自动填充</el-button>
|
||||
<el-button size="mini" style="width:18%;margin-left:2%" @click="autoFill">{{ $t('fieldDialog.autoFill') }}</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item label="Field中文名" prop="fieldDesc">
|
||||
<el-form-item :label="$t('autoCode.fieldDesc')" prop="fieldDesc">
|
||||
<el-input v-model="middleDate.fieldDesc" autocomplete="off" />
|
||||
</el-form-item>
|
||||
<el-form-item label="FieldJSON" prop="fieldJson">
|
||||
<el-form-item :label="$t('autoCode.fieldJson')" prop="fieldJson">
|
||||
<el-input v-model="middleDate.fieldJson" autocomplete="off" />
|
||||
</el-form-item>
|
||||
<el-form-item label="数据库字段名" prop="columnName">
|
||||
<el-form-item :label="$t('autoCode.columnName')" prop="columnName">
|
||||
<el-input v-model="middleDate.columnName" autocomplete="off" />
|
||||
</el-form-item>
|
||||
<el-form-item label="数据库字段描述" prop="comment">
|
||||
<el-form-item :label="$t('autoCode.comment')" prop="comment">
|
||||
<el-input v-model="middleDate.comment" autocomplete="off" />
|
||||
</el-form-item>
|
||||
<el-form-item label="Field数据类型" prop="fieldType">
|
||||
<el-form-item :label="$t('autoCode.fieldDataType')" prop="fieldType">
|
||||
<el-select
|
||||
v-model="middleDate.fieldType"
|
||||
style="width:100%"
|
||||
placeholder="请选择field数据类型"
|
||||
:placeholder="$t('fieldDialog.selectDataType')"
|
||||
clearable
|
||||
@change="getDbfdOptions"
|
||||
>
|
||||
@@ -40,14 +40,14 @@
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="类型长度" prop="dataTypeLong">
|
||||
<el-input v-model="middleDate.dataTypeLong" placeholder="数据库类型长度" />
|
||||
<el-form-item :label="$t('autoCode.fieldLen')" prop="dataTypeLong">
|
||||
<el-input v-model="middleDate.dataTypeLong" :placeholder="$t('fieldDialog.dataTypeNote')" />
|
||||
</el-form-item>
|
||||
<el-form-item label="Field查询条件" prop="fieldSearchType">
|
||||
<el-form-item :label="$t('autoCode.searchType')" prop="fieldSearchType">
|
||||
<el-select
|
||||
v-model="middleDate.fieldSearchType"
|
||||
style="width:100%"
|
||||
placeholder="请选择Field查询条件"
|
||||
:placeholder="$t('fieldDialog.selectSearchType')"
|
||||
clearable
|
||||
>
|
||||
<el-option
|
||||
@@ -59,12 +59,12 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="关联字典" prop="dictType">
|
||||
<el-form-item :label="$t('fieldDialog.associativeDictionary')" prop="dictType">
|
||||
<el-select
|
||||
v-model="middleDate.dictType"
|
||||
style="width:100%"
|
||||
:disabled="middleDate.fieldType!=='int'"
|
||||
placeholder="请选择字典"
|
||||
:placeholder="$t('fieldDialog.selectDictionary')"
|
||||
clearable
|
||||
>
|
||||
<el-option
|
||||
@@ -123,41 +123,41 @@ export default {
|
||||
],
|
||||
typeOptions: [
|
||||
{
|
||||
label: '字符串',
|
||||
label: this.$t('fieldDialog.string'),
|
||||
value: 'string'
|
||||
},
|
||||
{
|
||||
label: '整型',
|
||||
label: this.$t('fieldDialog.integer'),
|
||||
value: 'int'
|
||||
},
|
||||
{
|
||||
label: '布尔值',
|
||||
label: this.$t('fieldDialog.boolean'),
|
||||
value: 'bool'
|
||||
},
|
||||
{
|
||||
label: '浮点型',
|
||||
label: this.$t('fieldDialog.float'),
|
||||
value: 'float64'
|
||||
},
|
||||
{
|
||||
label: '时间',
|
||||
label: this.$t('fieldDialog.time'),
|
||||
value: 'time.Time'
|
||||
}
|
||||
],
|
||||
rules: {
|
||||
fieldName: [
|
||||
{ required: true, message: '请输入field英文名', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('fieldDialog.entFieldName'), trigger: 'blur' }
|
||||
],
|
||||
fieldDesc: [
|
||||
{ required: true, message: '请输入field中文名', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('fieldDialog.entFieldDesc'), trigger: 'blur' }
|
||||
],
|
||||
fieldJson: [
|
||||
{ required: true, message: '请输入field格式化json', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('fieldDialog.entFieldJson'), trigger: 'blur' }
|
||||
],
|
||||
columnName: [
|
||||
{ required: true, message: '请输入数据库字段', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('fieldDialog.entColumnName'), trigger: 'blur' }
|
||||
],
|
||||
fieldType: [
|
||||
{ required: true, message: '请选择field数据类型', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('fieldDialog.entFieldDataType'), trigger: 'blur' }
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ export default {
|
||||
copy() {
|
||||
this.selectText()
|
||||
document.execCommand('copy')
|
||||
this.$message.success('复制成功')
|
||||
this.$message.success(this.$t('general.copySuccess'))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,15 +6,15 @@
|
||||
<el-collapse-item name="1">
|
||||
<template #title>
|
||||
<div :style="{fontSize:'16px',paddingLeft:'20px'}">
|
||||
点这里从现有数据库创建代码
|
||||
{{ $t('autoCode.existDB') }}
|
||||
<el-icon class="header-icon ">
|
||||
<pointer />
|
||||
</el-icon>
|
||||
</div>
|
||||
</template>
|
||||
<el-form ref="getTableForm" style="margin-top:24px" :inline="true" :model="dbform" label-width="120px">
|
||||
<el-form-item label="数据库名" prop="structName">
|
||||
<el-select v-model="dbform.dbName" filterable placeholder="请选择数据库" @change="getTable">
|
||||
<el-form-item :label="$t('autoCode.dbName')" prop="structName">
|
||||
<el-select v-model="dbform.dbName" filterable :placeholder="$t('autoCode.selectDB')" @change="getTable">
|
||||
<el-option
|
||||
v-for="item in dbOptions"
|
||||
:key="item.database"
|
||||
@@ -23,12 +23,12 @@
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="表名" prop="structName">
|
||||
<el-form-item :label="$t('autoCode.tableName')" prop="structName">
|
||||
<el-select
|
||||
v-model="dbform.tableName"
|
||||
:disabled="!dbform.dbName"
|
||||
filterable
|
||||
placeholder="请选择表"
|
||||
:placeholder="$t('autoCode.selectTable')"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in tableOptions"
|
||||
@@ -39,7 +39,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button size="mini" type="primary" @click="getColumn">使用此表创建</el-button>
|
||||
<el-button size="mini" type="primary" @click="getColumn">{{ $t('autoCode.createUsingTable') }}</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-collapse-item>
|
||||
@@ -47,34 +47,34 @@
|
||||
</div>
|
||||
<div class="gva-search-box">
|
||||
<!-- 初始版本自动化代码工具 -->
|
||||
<el-form ref="autoCodeForm" :rules="rules" :model="form" label-width="120px" :inline="true">
|
||||
<el-form-item label="Struct名称" prop="structName">
|
||||
<el-input v-model="form.structName" placeholder="首字母自动转换大写" />
|
||||
<el-form ref="autoCodeForm" :rules="rules" :model="form" label-width="180px" :inline="true">
|
||||
<el-form-item :label="$t('autoCode.structName')" prop="structName">
|
||||
<el-input v-model="form.structName" :placeholder="$t('autoCode.structNameNote')" />
|
||||
</el-form-item>
|
||||
<el-form-item label="TableName" prop="tableName">
|
||||
<el-input v-model="form.tableName" placeholder="指定表名(非必填)" />
|
||||
<el-form-item :label="$t('autoCode.tableName')" prop="tableName">
|
||||
<el-input v-model="form.tableName" :placeholder="$t('autoCode.tableNameNote')" />
|
||||
</el-form-item>
|
||||
<el-form-item label="Struct简称" prop="abbreviation">
|
||||
<el-input v-model="form.abbreviation" placeholder="简称会作为入参对象名和路由group" />
|
||||
<el-form-item :label="$t('autoCode.structAbbreviation')" prop="abbreviation">
|
||||
<el-input v-model="form.abbreviation" :placeholder="$t('autoCode.structAbbreviationNote')" />
|
||||
</el-form-item>
|
||||
<el-form-item label="Struct中文名称" prop="description">
|
||||
<el-input v-model="form.description" placeholder="中文描述作为自动api描述" />
|
||||
<el-form-item :label="$t('autoCode.structChineseName')" prop="description">
|
||||
<el-input v-model="form.description" :placeholder="$t('autoCode.structChineseNameNote')" />
|
||||
</el-form-item>
|
||||
<el-form-item label="文件名称" prop="packageName">
|
||||
<el-input v-model="form.packageName" placeholder="生成文件的默认名称(建议为驼峰格式,首字母小写,如sysXxxXxxx)" @blur="toLowerCase(form,'packageName')" />
|
||||
<el-form-item :label="$t('autoCode.fileName')" prop="packageName">
|
||||
<el-input v-model="form.packageName" :placeholder="$t('autoCode.fileNameNote')" @blur="toLowerCase(form,'packageName')" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<template #label>
|
||||
<el-tooltip content="注:把自动生成的API注册进数据库" placement="bottom" effect="light">
|
||||
<div> 自动创建API </div>
|
||||
<el-tooltip :content="$t('autoCode.autoAPIDBTip')" placement="bottom" effect="light">
|
||||
<div> {{ $t('autoCode.autoAPIDBCreate') }} </div>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
<el-checkbox v-model="form.autoCreateApiToSql" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<template #label>
|
||||
<el-tooltip content="注:自动迁移生成的文件到ymal配置的对应位置" placement="bottom" effect="light">
|
||||
<div> 自动移动文件 </div>
|
||||
<el-tooltip :content="$t('autoCode.autoMoveFilesTip')" placement="bottom" effect="light">
|
||||
<div> {{ $t('autoCode.autoMoveFiles') }} </div>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
<el-checkbox v-model="form.autoMoveFile" />
|
||||
@@ -84,47 +84,47 @@
|
||||
<!-- 组件列表 -->
|
||||
<div class="gva-table-box">
|
||||
<div class="gva-btn-list">
|
||||
<el-button size="mini" type="primary" @click="editAndAddField()">新增Field</el-button>
|
||||
<el-button size="mini" type="primary" @click="editAndAddField()">{{ $t('autoCode.addField') }}</el-button>
|
||||
</div>
|
||||
<el-table :data="form.fields">
|
||||
<el-table-column align="left" type="index" label="序列" width="100" />
|
||||
<el-table-column align="left" prop="fieldName" label="Field名" />
|
||||
<el-table-column align="left" prop="fieldDesc" label="中文名" />
|
||||
<el-table-column align="left" prop="fieldJson" label="FieldJson" />
|
||||
<el-table-column align="left" prop="fieldType" label="Field数据类型" width="130" />
|
||||
<el-table-column align="left" prop="dataTypeLong" label="数据库字段长度" width="130" />
|
||||
<el-table-column align="left" prop="columnName" label="数据库字段" width="130" />
|
||||
<el-table-column align="left" prop="comment" label="数据库字段描述" width="130" />
|
||||
<el-table-column align="left" prop="fieldSearchType" label="搜索条件" width="130" />
|
||||
<el-table-column align="left" prop="dictType" label="字典" width="130" />
|
||||
<el-table-column align="left" label="操作" width="300">
|
||||
<el-table-column align="left" type="index" :label="$t('autoCode.fieldIndex')" width="100" />
|
||||
<el-table-column align="left" prop="fieldName" :label="$t('autoCode.fieldName')" width="120" />
|
||||
<el-table-column align="left" prop="fieldDesc" :label="$t('autoCode.fieldDesc')" width="120" />
|
||||
<el-table-column align="left" prop="fieldJson" :label="$t('autoCode.fieldJson')" width="110" />
|
||||
<el-table-column align="left" prop="fieldType" :label="$t('autoCode.fieldDataType')" width="130" />
|
||||
<el-table-column align="left" prop="dataTypeLong" :label="$t('autoCode.fieldLen')" width="130" />
|
||||
<el-table-column align="left" prop="columnName" :label="$t('autoCode.columnName')" width="130" />
|
||||
<el-table-column align="left" prop="comment" :label="$t('autoCode.comment')" width="130" />
|
||||
<el-table-column align="left" prop="fieldSearchType" :label="$t('autoCode.searchType')" width="130" />
|
||||
<el-table-column align="left" prop="dictType" :label="$t('autoCode.dictionary')" width="130" />
|
||||
<el-table-column align="left" :lable="$t('general.operations')" width="300">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="edit"
|
||||
@click="editAndAddField(scope.row)"
|
||||
>编辑</el-button>
|
||||
>{{ $t('general.edit') }}</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
:disabled="scope.$index === 0"
|
||||
@click="moveUpField(scope.$index)"
|
||||
>上移</el-button>
|
||||
>{{ $t('autoCode.moveUp') }}</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
:disabled="(scope.$index + 1) === form.fields.length"
|
||||
@click="moveDownField(scope.$index)"
|
||||
>下移</el-button>
|
||||
>{{ $t('autoCode.moveDown') }}</el-button>
|
||||
<el-popover :visible="scope.row.visible" placement="top">
|
||||
<p>确定删除吗?</p>
|
||||
<p>{{ $t('autoCode.confirmDelete') }}</p>
|
||||
<div style="text-align: right; margin-top: 8px;">
|
||||
<el-button size="mini" type="text" @click="scope.row.visible = false">取消</el-button>
|
||||
<el-button type="primary" size="mini" @click="deleteField(scope.$index)">确定</el-button>
|
||||
<el-button size="mini" type="text" @click="scope.row.visible = false">{{ $t('general.cancel') }}</el-button>
|
||||
<el-button type="primary" size="mini" @click="deleteField(scope.$index)">{{ $t('general.confirm') }}</el-button>
|
||||
</div>
|
||||
<template #reference>
|
||||
<el-button size="mini" type="text" icon="delete">删除</el-button>
|
||||
<el-button size="mini" type="text" icon="delete">{{ $t('general.delete') }}</el-button>
|
||||
</template>
|
||||
</el-popover>
|
||||
</template>
|
||||
@@ -132,17 +132,17 @@
|
||||
</el-table>
|
||||
<!-- 组件列表 -->
|
||||
<div class="gva-btn-list justify-content-flex-end auto-btn-list">
|
||||
<el-button size="mini" type="primary" @click="enterForm(true)">预览代码</el-button>
|
||||
<el-button size="mini" type="primary" @click="enterForm(false)">生成代码</el-button>
|
||||
<el-button size="mini" type="primary" @click="enterForm(true)">{{ $t('autoCode.codePreview') }}</el-button>
|
||||
<el-button size="mini" type="primary" @click="enterForm(false)">{{ $t('autoCode.generateCode') }}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 组件弹窗 -->
|
||||
<el-dialog v-model="dialogFlag" title="组件内容">
|
||||
<el-dialog v-model="dialogFlag" :title="$t('autoCode.componentContent')">
|
||||
<FieldDialog v-if="dialogFlag" ref="fieldDialog" :dialog-middle="dialogMiddle" />
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button size="mini" @click="closeDialog">取 消</el-button>
|
||||
<el-button size="mini" type="primary" @click="enterDialog">确 定</el-button>
|
||||
<el-button size="mini" @click="closeDialog">{{ $t('general.close') }}</el-button>
|
||||
<el-button size="mini" type="primary" @click="enterDialog">{{ $t('general.confirm') }}</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
@@ -150,15 +150,15 @@
|
||||
<el-dialog v-model="previewFlag">
|
||||
<template #title>
|
||||
<div class="previewCodeTool">
|
||||
<p>操作栏:</p>
|
||||
<el-button size="mini" type="primary" @click="selectText">全选</el-button>
|
||||
<el-button size="mini" type="primary" @click="copy">复制</el-button>
|
||||
<p>{{ $t('autoCode.actionBar') }}</p>
|
||||
<el-button size="mini" type="primary" @click="selectText">{{ $t('general.selectAll') }}</el-button>
|
||||
<el-button size="mini" type="primary" @click="copy">{{ $t('autoCode.copy') }}</el-button>
|
||||
</div>
|
||||
</template>
|
||||
<PreviewCodeDialog v-if="previewFlag" ref="preview" :preview-code="preViewCode" />
|
||||
<template #footer>
|
||||
<div class="dialog-footer" style="padding-top:14px;padding-right:14px">
|
||||
<el-button size="small" type="primary" @click="previewFlag = false">确 定</el-button>
|
||||
<el-button size="small" type="primary" @click="previewFlag = false">{{ $t('general.confirm') }}</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
@@ -215,18 +215,18 @@ export default {
|
||||
},
|
||||
rules: {
|
||||
structName: [
|
||||
{ required: true, message: '请输入结构体名称', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('autoCode.entStructName'), trigger: 'blur' }
|
||||
],
|
||||
abbreviation: [
|
||||
{ required: true, message: '请输入结构体简称', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('autoCode.entStructAbbreviation'), trigger: 'blur' }
|
||||
],
|
||||
description: [
|
||||
{ required: true, message: '请输入结构体描述', trigger: 'blur' }
|
||||
{ required: true, message: this.$t('autoCode.entStructDesc'), trigger: 'blur' }
|
||||
],
|
||||
packageName: [
|
||||
{
|
||||
required: true,
|
||||
message: '文件名称:sysXxxxXxxx',
|
||||
message: this.$t('autoCode.entFileName'),
|
||||
trigger: 'blur'
|
||||
}
|
||||
]
|
||||
@@ -311,7 +311,7 @@ export default {
|
||||
if (this.form.fields.length <= 0) {
|
||||
this.$message({
|
||||
type: 'error',
|
||||
message: '请填写至少一个field'
|
||||
message: this.$t('autoCode.errNoFields')
|
||||
})
|
||||
return false
|
||||
}
|
||||
@@ -320,7 +320,7 @@ export default {
|
||||
) {
|
||||
this.$message({
|
||||
type: 'error',
|
||||
message: '存在与结构体同名的字段'
|
||||
message: this.$t('autoCode.errSameFiledName')
|
||||
})
|
||||
return false
|
||||
}
|
||||
@@ -336,7 +336,7 @@ export default {
|
||||
if (this.form.structName === this.form.abbreviation) {
|
||||
this.$message({
|
||||
type: 'error',
|
||||
message: 'structName和struct简称不能相同'
|
||||
message: this.$t('autoCode.errSameStructDescAbbr')
|
||||
})
|
||||
return false
|
||||
}
|
||||
@@ -353,13 +353,13 @@ export default {
|
||||
if (this.form.autoMoveFile) {
|
||||
this.$message({
|
||||
type: 'success',
|
||||
message: '自动化代码创建成功,自动移动成功'
|
||||
message: this.$t('autoCode.codeGenMoveSuccess')
|
||||
})
|
||||
return
|
||||
}
|
||||
this.$message({
|
||||
type: 'success',
|
||||
message: '自动化代码创建成功,正在下载'
|
||||
message: this.$t('autoCode.codeGenDownload')
|
||||
})
|
||||
}
|
||||
const blob = new Blob([data])
|
||||
@@ -407,7 +407,7 @@ export default {
|
||||
this.form.tableName = this.dbform.tableName
|
||||
this.form.packageName = tbHump
|
||||
this.form.abbreviation = tbHump
|
||||
this.form.description = tbHump + '表'
|
||||
this.form.description = tbHump + this.$t('autoCode.table')
|
||||
this.form.autoCreateApiToSql = true
|
||||
this.form.fields = []
|
||||
res.data.columns &&
|
||||
@@ -416,7 +416,7 @@ export default {
|
||||
const fbHump = toHump(item.columnName)
|
||||
this.form.fields.push({
|
||||
fieldName: toUpperCase(fbHump),
|
||||
fieldDesc: item.columnComment || fbHump + '字段',
|
||||
fieldDesc: item.columnComment || fbHump + this.$t('autoCode.field'),
|
||||
fieldType: this.fdMap[item.dataType],
|
||||
dataType: item.dataType,
|
||||
fieldJson: fbHump,
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div>
|
||||
<div class="gva-table-box">
|
||||
<div class="gva-btn-list">
|
||||
<el-button size="mini" type="primary" icon="plus" @click="goAutoCode(null)">新增</el-button>
|
||||
<el-button size="mini" type="primary" icon="plus" @click="goAutoCode(null)">{{ $t('general.add') }}</el-button>
|
||||
</div>
|
||||
<el-table :data="tableData">
|
||||
<el-table-column
|
||||
@@ -10,13 +10,13 @@
|
||||
width="55"
|
||||
/>
|
||||
<el-table-column align="left" label="id" width="60" prop="ID" />
|
||||
<el-table-column align="left" label="日期" width="180">
|
||||
<el-table-column align="left" :label="$t('general.date')" width="180">
|
||||
<template #default="scope">{{ formatDate(scope.row.CreatedAt) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="left" label="结构体名" min-width="150" prop="structName" />
|
||||
<el-table-column align="left" label="结构体描述" min-width="150" prop="structCNName" />
|
||||
<el-table-column align="left" label="表名称" min-width="150" prop="tableName" />
|
||||
<el-table-column align="left" label="回滚标记" min-width="150" prop="flag">
|
||||
<el-table-column align="left" :label="$t('autoCode.structName')" min-width="150" prop="structName" />
|
||||
<el-table-column align="left" :label="$t('autoCode.structChineseName')" min-width="150" prop="structCNName" />
|
||||
<el-table-column align="left" :label="$t('autoCode.tableName')" min-width="150" prop="tableName" />
|
||||
<el-table-column align="left" :label="$t('autoCodeAdmin.rollBackMark')" min-width="150" prop="flag">
|
||||
<template #default="scope">
|
||||
<el-tag
|
||||
v-if="scope.row.flag"
|
||||
@@ -24,7 +24,7 @@
|
||||
size="mini"
|
||||
effect="dark"
|
||||
>
|
||||
已回滚
|
||||
{{ $t('autoCodeAdmin.rolledBack') }}
|
||||
</el-tag>
|
||||
<el-tag
|
||||
v-else
|
||||
@@ -32,16 +32,16 @@
|
||||
type="success"
|
||||
effect="dark"
|
||||
>
|
||||
未回滚
|
||||
{{ $t('autoCodeAdmin.notRolledBack') }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="left" label="操作" min-width="180">
|
||||
<el-table-column align="left" :lable="$t('general.operations')" min-width="180">
|
||||
<template #default="scope">
|
||||
<div>
|
||||
<el-button size="mini" type="text" :disabled="scope.row.flag === 1" @click="rollback(scope.row)">回滚</el-button>
|
||||
<el-button size="mini" type="text" @click="goAutoCode(scope.row)">复用</el-button>
|
||||
<el-button size="mini" type="text" @click="deleteRow(scope.row)">删除</el-button>
|
||||
<el-button size="mini" type="text" :disabled="scope.row.flag === 1" @click="rollback(scope.row)">{{ $t('autoCodeAdmin.rollBack') }}</el-button>
|
||||
<el-button size="mini" type="text" @click="goAutoCode(scope.row)">{{ $t('autoCodeAdmin.reuse') }}</el-button>
|
||||
<el-button size="mini" type="text" @click="deleteRow(scope.row)">{{ $t('general.delete') }}</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@@ -79,27 +79,27 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
async deleteRow(row) {
|
||||
this.$confirm('此操作将删除本历史, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
this.$confirm(this.$t('autoCodeAdmin.deleteHistoryConfirm'), this.$t('general.hint'), {
|
||||
confirmButtonText: this.$t('general.confirm'),
|
||||
cancelButtonText: this.$t('general.cancel'),
|
||||
type: 'warning'
|
||||
}).then(async() => {
|
||||
const res = await delSysHistory({ id: Number(row.ID) })
|
||||
if (res.code === 0) {
|
||||
this.$message.success('删除成功')
|
||||
this.$message.success(this.$t('general.deleteSuccess'))
|
||||
this.getTableData()
|
||||
}
|
||||
})
|
||||
},
|
||||
async rollback(row) {
|
||||
this.$confirm('此操作将删除自动创建的文件和api, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
this.$confirm(this.$t('autoCodeAdmin.rollbackConfirm'), this.$t('general.hint'), {
|
||||
confirmButtonText: this.$t('general.confirm'),
|
||||
cancelButtonText: this.$t('general.cancel'),
|
||||
type: 'warning'
|
||||
}).then(async() => {
|
||||
const res = await rollback({ id: Number(row.ID) })
|
||||
if (res.code === 0) {
|
||||
this.$message.success('回滚成功')
|
||||
this.$message.success(this.$t('autoCodeAdmin.rollbackSuccess'))
|
||||
this.getTableData()
|
||||
}
|
||||
})
|
||||
|
||||
@@ -3,21 +3,21 @@
|
||||
<el-form ref="form" :model="config" label-width="240px">
|
||||
<!-- System start -->
|
||||
<el-collapse v-model="activeNames" @change="handleChange">
|
||||
<el-collapse-item title="系统配置" name="1">
|
||||
<el-form-item label="环境值">
|
||||
<el-collapse-item :title="$t('system.systemConfig')" name="1">
|
||||
<el-form-item :label="$t('system.envValues')">
|
||||
<el-input v-model="config.system.env" />
|
||||
</el-form-item>
|
||||
<el-form-item label="端口值">
|
||||
<el-form-item :label="$t('system.portValue')">
|
||||
<el-input v-model.number="config.system.addr" />
|
||||
</el-form-item>
|
||||
<el-form-item label="数据库类型">
|
||||
<el-select v-model="config.system.dbType" style="width:100%">
|
||||
<el-option value="mysql" />
|
||||
<el-option value="pgsql" />
|
||||
<el-form-item :label="$t('init.dbType')">
|
||||
<el-select v-model="config.system.dbType" style="width: 100%">
|
||||
<el-option value="MySQL" />
|
||||
<el-option value="PostgreSQL" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="Oss类型">
|
||||
<el-select v-model="config.system.ossType" style="width:100%">
|
||||
<el-form-item :label="$t('system.ossType')">
|
||||
<el-select v-model="config.system.ossType" style="width: 100%">
|
||||
<el-option value="local" />
|
||||
<el-option value="qiniu" />
|
||||
<el-option value="tencent-cos" />
|
||||
@@ -25,8 +25,8 @@
|
||||
<el-option value="huawei-obs" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="多点登录拦截">
|
||||
<el-checkbox v-model="config.system.useMultipoint">开启</el-checkbox>
|
||||
<el-form-item :label="$t('system.multiLogin')">
|
||||
<el-checkbox v-model="config.system.useMultipoint">{{ $t('general.enable') }}</el-checkbox>
|
||||
</el-form-item>
|
||||
<el-form-item label="限流次数">
|
||||
<el-input-number v-model.number="config.system.iplimitCount" />
|
||||
@@ -208,7 +208,7 @@
|
||||
<el-input v-model="config.qiniu.imgPath" />
|
||||
</el-form-item>
|
||||
<el-form-item label="是否使用https">
|
||||
<el-checkbox v-model="config.qiniu.useHttps">开启</el-checkbox>
|
||||
<el-checkbox v-model="config.qiniu.useHttps">{{ $t('general.enable') }}</el-checkbox>
|
||||
</el-form-item>
|
||||
<el-form-item label="accessKey">
|
||||
<el-input v-model="config.qiniu.accessKey" />
|
||||
@@ -217,7 +217,7 @@
|
||||
<el-input v-model="config.qiniu.secretKey" />
|
||||
</el-form-item>
|
||||
<el-form-item label="上传是否使用CDN上传加速">
|
||||
<el-checkbox v-model="config.qiniu.useCdnDomains">开启</el-checkbox>
|
||||
<el-checkbox v-model="config.qiniu.useCdnDomains">{{ $t('general.enable') }}</el-checkbox>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<template v-if="config.system.ossType === 'tencent-cos'">
|
||||
@@ -277,7 +277,6 @@
|
||||
<el-input v-model="config.huaWeiObs.secretKey" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
|
||||
</el-collapse-item>
|
||||
|
||||
<el-collapse-item title="Excel上传配置" name="11">
|
||||
@@ -335,9 +334,9 @@
|
||||
<el-form-item label="Spec(CRON表达式)">
|
||||
<el-input v-model="config.timer.spec" />
|
||||
</el-form-item>
|
||||
<template v-for="(item,k) in config.timer.detail">
|
||||
<div v-for="(key,k2) in item" :key="k2">
|
||||
<el-form-item :key="k+k2" :label="k2">
|
||||
<template v-for="(item, k) in config.timer.detail">
|
||||
<div v-for="(key, k2) in item" :key="k2">
|
||||
<el-form-item :key="k + k2" :label="k2">
|
||||
<el-input v-model="item[k2]" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
@@ -377,9 +376,9 @@ export default {
|
||||
local: {},
|
||||
email: {},
|
||||
timer: {
|
||||
detail: {}
|
||||
}
|
||||
}
|
||||
detail: {},
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
@@ -398,7 +397,7 @@ export default {
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
type: 'success',
|
||||
message: '配置文件设置成功'
|
||||
message: '配置文件设置成功',
|
||||
})
|
||||
await this.initForm()
|
||||
}
|
||||
@@ -408,24 +407,24 @@ export default {
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
type: 'success',
|
||||
message: '邮件发送成功'
|
||||
message: '邮件发送成功',
|
||||
})
|
||||
await this.initForm()
|
||||
} else {
|
||||
this.$message({
|
||||
type: 'error',
|
||||
message: '邮件发送失败'
|
||||
message: '邮件发送失败',
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.system {
|
||||
background: #fff;
|
||||
padding:36px;
|
||||
padding: 36px;
|
||||
border-radius: 2px;
|
||||
h2 {
|
||||
padding: 10px;
|
||||
@@ -433,11 +432,11 @@ export default {
|
||||
font-size: 16px;
|
||||
box-shadow: -4px 0px 0px 0px #e7e8e8;
|
||||
}
|
||||
::v-deep(.el-input-number__increase){
|
||||
top:5px !important;
|
||||
::v-deep(.el-input-number__increase) {
|
||||
top: 5px !important;
|
||||
}
|
||||
.gva-btn-list{
|
||||
margin-top:16px;
|
||||
.gva-btn-list {
|
||||
margin-top: 16px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
+86
-78
@@ -7,86 +7,94 @@ import * as dotenv from 'dotenv'
|
||||
import * as fs from 'fs'
|
||||
import vuePlugin from '@vitejs/plugin-vue'
|
||||
// @see https://cn.vitejs.dev/config/
|
||||
|
||||
// import vueI18n from '@intlify/vite-plugin-vue-i18n'
|
||||
const vueI18n = require('@intlify/vite-plugin-vue-i18n').default // added by mohamed hassan to support multilanguage
|
||||
|
||||
export default ({
|
||||
command,
|
||||
mode
|
||||
command,
|
||||
mode
|
||||
}) => {
|
||||
const NODE_ENV = process.env.NODE_ENV || 'development'
|
||||
const envFiles = [
|
||||
`.env.${NODE_ENV}`
|
||||
]
|
||||
for (const file of envFiles) {
|
||||
const envConfig = dotenv.parse(fs.readFileSync(file))
|
||||
for (const k in envConfig) {
|
||||
process.env[k] = envConfig[k]
|
||||
const NODE_ENV = process.env.NODE_ENV || 'development'
|
||||
const envFiles = [
|
||||
`.env.${NODE_ENV}`
|
||||
]
|
||||
for (const file of envFiles) {
|
||||
const envConfig = dotenv.parse(fs.readFileSync(file))
|
||||
for (const k in envConfig) {
|
||||
process.env[k] = envConfig[k]
|
||||
}
|
||||
}
|
||||
|
||||
viteLogo(process.env)
|
||||
|
||||
const timestamp = Date.parse(new Date())
|
||||
|
||||
const rollupOptions = {
|
||||
output: {
|
||||
entryFileNames: `gva/gin-vue-admin-[name].${timestamp}.js`,
|
||||
chunkFileNames: `js/gin-vue-admin-[name].${timestamp}.js`,
|
||||
assetFileNames: `assets/gin-vue-admin-[name].${timestamp}.[ext]`
|
||||
}
|
||||
}
|
||||
|
||||
const optimizeDeps = {}
|
||||
|
||||
const alias = {
|
||||
'@': path.resolve(__dirname, './src'),
|
||||
'vue$': 'vue/dist/vue.runtime.esm-bundler.js',
|
||||
extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue', '.svg'],
|
||||
}
|
||||
|
||||
const esbuild = {}
|
||||
|
||||
return {
|
||||
base: './', // index.html文件所在位置
|
||||
root: './', // js导入的资源路径,src
|
||||
resolve: {
|
||||
alias,
|
||||
},
|
||||
define: {
|
||||
'process.env': {}
|
||||
},
|
||||
server: {
|
||||
open: true,
|
||||
port: process.env.VITE_CLI_PORT,
|
||||
proxy: {
|
||||
// 把key的路径代理到target位置
|
||||
// detail: https://cli.vuejs.org/config/#devserver-proxy
|
||||
[process.env.VITE_BASE_API]: { // 需要代理的路径 例如 '/api'
|
||||
target: `${process.env.VITE_BASE_PATH}:${process.env.VITE_SERVER_PORT}/`, // 代理到 目标路径
|
||||
changeOrigin: true,
|
||||
rewrite: path => path.replace(new RegExp('^' + process.env.VITE_BASE_API), ''),
|
||||
}
|
||||
}
|
||||
|
||||
viteLogo(process.env)
|
||||
|
||||
const timestamp = Date.parse(new Date())
|
||||
|
||||
const rollupOptions = {
|
||||
output: {
|
||||
entryFileNames: `gva/gin-vue-admin-[name].${timestamp}.js`,
|
||||
chunkFileNames: `js/gin-vue-admin-[name].${timestamp}.js`,
|
||||
assetFileNames: `assets/gin-vue-admin-[name].${timestamp}.[ext]`
|
||||
},
|
||||
},
|
||||
build: {
|
||||
target: 'es2015',
|
||||
minify: 'terser', // 是否进行压缩,boolean | 'terser' | 'esbuild',默认使用terser
|
||||
manifest: false, // 是否产出maifest.json
|
||||
sourcemap: false, // 是否产出soucemap.json
|
||||
outDir: 'dist', // 产出目录
|
||||
rollupOptions,
|
||||
},
|
||||
esbuild,
|
||||
optimizeDeps,
|
||||
plugins: [
|
||||
vueI18n({
|
||||
include: path.resolve(__dirname, './src/locales/**')
|
||||
}),
|
||||
legacyPlugin({
|
||||
targets: ['Android > 39', 'Chrome >= 60', 'Safari >= 10.1', 'iOS >= 10.3', 'Firefox >= 54', 'Edge >= 15'],
|
||||
}), vuePlugin(), [Banner(`\n Build based on gin-vue-admin \n Time : ${timestamp}`)]
|
||||
],
|
||||
css: {
|
||||
preprocessorOptions: {
|
||||
less: {
|
||||
// 支持内联 JavaScript
|
||||
javascriptEnabled: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const optimizeDeps = {}
|
||||
|
||||
const alias = {
|
||||
'@': path.resolve(__dirname, './src'),
|
||||
'vue$': 'vue/dist/vue.runtime.esm-bundler.js',
|
||||
}
|
||||
|
||||
const esbuild = {}
|
||||
|
||||
return {
|
||||
base: './', // index.html文件所在位置
|
||||
root: './', // js导入的资源路径,src
|
||||
resolve: {
|
||||
alias,
|
||||
},
|
||||
define: {
|
||||
'process.env': {}
|
||||
},
|
||||
server: {
|
||||
open: true,
|
||||
port: process.env.VITE_CLI_PORT,
|
||||
proxy: {
|
||||
// 把key的路径代理到target位置
|
||||
// detail: https://cli.vuejs.org/config/#devserver-proxy
|
||||
[process.env.VITE_BASE_API]: { // 需要代理的路径 例如 '/api'
|
||||
target: `${process.env.VITE_BASE_PATH}:${process.env.VITE_SERVER_PORT}/`, // 代理到 目标路径
|
||||
changeOrigin: true,
|
||||
rewrite: path => path.replace(new RegExp('^' + process.env.VITE_BASE_API), ''),
|
||||
}
|
||||
},
|
||||
},
|
||||
build: {
|
||||
target: 'es2015',
|
||||
minify: 'terser', // 是否进行压缩,boolean | 'terser' | 'esbuild',默认使用terser
|
||||
manifest: false, // 是否产出maifest.json
|
||||
sourcemap: false, // 是否产出soucemap.json
|
||||
outDir: 'dist', // 产出目录
|
||||
rollupOptions,
|
||||
},
|
||||
esbuild,
|
||||
optimizeDeps,
|
||||
plugins: [
|
||||
legacyPlugin({
|
||||
targets: ['Android > 39', 'Chrome >= 60', 'Safari >= 10.1', 'iOS >= 10.3', 'Firefox >= 54', 'Edge >= 15'],
|
||||
}), vuePlugin(), [Banner(`\n Build based on gin-vue-admin \n Time : ${timestamp}`)]
|
||||
],
|
||||
css: {
|
||||
preprocessorOptions: {
|
||||
less: {
|
||||
// 支持内联 JavaScript
|
||||
javascriptEnabled: true,
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user