Commit abd07b9b authored by ml's avatar ml

管理后台国际化相关接口

parent 32ebdbd7
......@@ -11,7 +11,7 @@
"dependencies": {
"@madex/ex-js-common": "git+ssh://git@bitbucket.org:biiigle/ex-js-common.git#master",
"@madex/ex-js-public": "git+ssh://git@bitbucket.org:biiigle/ex-js-public.git#master",
"@madex/ex-ts-dao": "0.0.6",
"@madex/ex-ts-dao": "0.0.8",
"@types/errorhandler": "^1.5.3",
"@types/express": "^4.17.21",
"@types/morgan": "^1.9.9",
......@@ -1079,9 +1079,10 @@
}
},
"node_modules/@madex/ex-ts-dao": {
"version": "0.0.6",
"resolved": "https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/@madex/ex-ts-dao/-/@madex/ex-ts-dao-0.0.6.tgz",
"integrity": "sha512-7yfnpwyA5UcIoQWiFWwlJ3R+KjOiiz1FMIDGakPt8Qy1Ja+TTeW3a3+rvNwdGfj6xIbRapbu+buRX0Gd3woIdQ==",
"version": "0.0.8",
"resolved": "https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/@madex/ex-ts-dao/-/@madex/ex-ts-dao-0.0.8.tgz",
"integrity": "sha512-ctDm83WdlNLFP1Phfcqn0ptXVpg067w4xX9gIk62ZASOM8Sr5BtUYOJx8/h17qG05SC3b4LLBvb09wiZ/uAn4g==",
"license": "ISC",
"dependencies": {
"@madex/ex-js-public": "git+ssh://git@bitbucket.org/biiigle/ex-js-public.git#master",
"bignumber.js": "^4.1.0",
......
......@@ -39,7 +39,7 @@
"dependencies": {
"@madex/ex-js-common": "git+ssh://git@bitbucket.org:biiigle/ex-js-common.git#master",
"@madex/ex-js-public": "git+ssh://git@bitbucket.org:biiigle/ex-js-public.git#master",
"@madex/ex-ts-dao": "0.0.6",
"@madex/ex-ts-dao": "0.0.8",
"@types/errorhandler": "^1.5.3",
"@types/express": "^4.17.21",
"@types/morgan": "^1.9.9",
......
import * as i18nService from "../service/i18n.service";
import { I18nInfoVO, I18nInfoPageVO } from "../service/i18n.service";
let { logger, ResponseUtils, optionalUtils: Optional, apiAssertUtils: ApiAssert } = require('@madex/ex-js-public');
/**
* 分页查询列表
* @param req
* @param infoVO
*/
export const list = async (req: any, infoPageVO: I18nInfoPageVO) => {
let func_name = "i18nCtrl.list";
let cmd = req.path;
try {
infoPageVO.page = Optional.opt(infoPageVO, 'page', 1);
infoPageVO.size = Optional.opt(infoPageVO, 'size', 50);
infoPageVO.platform = Optional.opt(infoPageVO, 'platform', 1);
infoPageVO.module = Optional.opt(infoPageVO, 'module', 1);
infoPageVO.lang = Optional.opt(infoPageVO, 'lang', 'en');
let res = await i18nService.list(infoPageVO);
return ResponseUtils.success(cmd, res);
}
catch (e) {
logger.error(`${func_name} error:${e}`);
return ResponseUtils.error(func_name, cmd, e);
}
};
/**
* 添加国际化信息
* @param req
* @param infoVO
*/
export const add = async (req: any, infoVO: I18nInfoVO) => {
let func_name = "i18nCtrl.add";
let cmd = req.path;
try {
await preCheck(infoVO);
let res = await i18nService.add(infoVO);
return ResponseUtils.success(cmd, res);
}
catch (e) {
logger.error(`${func_name} error:${e}`);
return ResponseUtils.error(func_name, cmd, e);
}
};
/**
* 修改国际化信息
* @param req
* @param infoVO
*/
export const update = async (req: any, infoVO: I18nInfoVO) => {
let func_name = "i18nCtrl.update";
let cmd = req.path;
try {
ApiAssert.notNull('3000', infoVO.id);
let res = await i18nService.update(infoVO);
return ResponseUtils.success(cmd, res);
}
catch (e) {
logger.error(`${func_name} error:${e}`);
return ResponseUtils.error(func_name, cmd, e);
}
};
/**
* 删除国际化信息
* @param req
* @param infoVO
*/
export const del = async (req: any, infoVO: I18nInfoVO) => {
let func_name = "i18nCtrl.del";
let cmd = req.path;
try {
ApiAssert.notNull('3000', infoVO.id);
let res = await i18nService.del(infoVO);
return ResponseUtils.success(cmd, res);
}
catch (e) {
logger.error(`${func_name} error:${e}`);
return ResponseUtils.error(func_name, cmd, e);
}
};
/**
* 校验
* @param infoVO
*/
async function preCheck(infoVO: I18nInfoVO) {
if (![1, 2, 3, 4, 5].includes(infoVO.platform)) {
throw '3000';
}
ApiAssert.notNull('3000', infoVO.module);
ApiAssert.notNull('3000', infoVO.code);
ApiAssert.notNull('3000', infoVO.lang);
ApiAssert.notNull('3000', infoVO.content);
}
\ No newline at end of file
import * as i18nLogService from "../service/i18nlog.service";
import { I18nInfoLogVO } from "../service/i18nlog.service";
let { logger, ResponseUtils, optionalUtils: Optional, apiAssertUtils: ApiAssert } = require('@madex/ex-js-public');
/**
* 国际化信息修改日志列表
* @param req
* @param infoVO
*/
export const list = async (req: any, i18nInfoLogVO: I18nInfoLogVO) => {
let func_name = "i18nLogCtrl.list";
let cmd = req.path;
try {
i18nInfoLogVO.page = Optional.opt(i18nInfoLogVO, 'page', 1);
i18nInfoLogVO.size = Optional.opt(i18nInfoLogVO, 'size', 50);
i18nInfoLogVO.platform = Optional.opt(i18nInfoLogVO, 'platform', 1);
i18nInfoLogVO.module = Optional.opt(i18nInfoLogVO, 'module', 1);
i18nInfoLogVO.lang = Optional.opt(i18nInfoLogVO, 'lang', 'en');
let res = await i18nLogService.list(i18nInfoLogVO);
return ResponseUtils.success(cmd, res);
}
catch (e) {
logger.error(`${func_name} error:${e}`);
return ResponseUtils.error(func_name, cmd, e);
}
};
/**
* 还原(还原到修改之前)
* @param req
* @param infoVO
*/
export const revert = async (req: any, i18nInfoLogVO: I18nInfoLogVO) => {
let func_name = "i18nLogCtrl.revert";
let cmd = req.path;
try {
ApiAssert.notNull('3000', i18nInfoLogVO.id);
ApiAssert.notNull('3000', i18nInfoLogVO.info_id);
let res = await i18nLogService.revert(i18nInfoLogVO);
return ResponseUtils.success(cmd, res);
}
catch (e) {
logger.error(`${func_name} error:${e}`);
return ResponseUtils.error(func_name, cmd, e);
}
};
// @madex/ex-ts-dao 是 ts 的 dao, 代码在 bitbucket/ex-js-dao 的 ts 分支上
import { i18nInfo, i18nInfoLog, ormDB } from "@madex/ex-ts-dao";
import * as i18nLogService from "../service/i18nlog.service";
let { logger } = require('@madex/ex-js-public');
export interface I18nInfoVO {
id?: number;
platform: number;
module: number;
code?: string | any;
sub_code?: string | any;
lang?: string;
desc?: string | any;
content?: string | any;
createdAt?: Date | any;
updatedAt?: Date | any;
}
export interface I18nInfoPageVO extends I18nInfoVO {
page?: number,
size?: number
}
export const list = async (infoPageVO: I18nInfoPageVO) => {
if (infoPageVO.code) {
infoPageVO.code = { [ormDB.Op.like]: `${infoPageVO.code}%` };
}
if (infoPageVO.sub_code) {
infoPageVO.sub_code = { [ormDB.Op.like]: `${infoPageVO.sub_code}%` };
}
if (infoPageVO.desc) {
infoPageVO.desc = { [ormDB.Op.like]: `${infoPageVO.desc}%` };
}
if (infoPageVO.updatedAt) {
infoPageVO.updatedAt = { [ormDB.Op.gte]: new Date(infoPageVO.updatedAt).getTime() };
}
let page = Number(infoPageVO.page);
let size = Number(infoPageVO.size);
let where = Object.assign(infoPageVO);
delete infoPageVO.page;
delete infoPageVO.size;
let resList = await i18nInfo.prototype.findAndCount({
where: where,
limit: size,
offset: (page - 1) * size,
order: [["id", "asc"]],
raw: true
});
return resList;
};
export const add = async (infoVO: I18nInfoVO) => {
if (!infoVO.createdAt) {
infoVO.createdAt = new Date();
}
if (!infoVO.updatedAt) {
infoVO.updatedAt = new Date();
}
let dbInfo = await i18nInfo.prototype.findOne({
where: {
platform: infoVO.platform,
module: infoVO.module,
code: infoVO.code,
lang: infoVO.lang,
},
raw: true
});
if (dbInfo){
throw '25511';
}
await i18nInfo.prototype.create(infoVO);
return 'ok';
};
export const update = async (infoVO: I18nInfoVO) => {
let transaction: any;
try {
let dbOneI18nInfo = await i18nInfo.prototype.findOne({
raw: true,
where: {
id: infoVO.id
}
});
if (!dbOneI18nInfo) {
throw '3246';
}
delete infoVO.id;
let i18nInfoLogOne = await buildOneI18nInfoLog(dbOneI18nInfo, infoVO);
transaction = await ormDB.transaction();
await i18nInfo.prototype.update(infoVO, {
where: {
id: dbOneI18nInfo.id
},
transaction: transaction,
});
//日志
await i18nLogService.add(i18nInfoLogOne, transaction);
await transaction.commit();
return 'ok';
}
catch (e) {
logger.error(`i18nService.update.error:${e}`);
if (transaction) {
await transaction.rollback();
}
throw e;
}
};
export const del = async (infoVO: I18nInfoVO) => {
let transaction: any;
try {
let dbOneI18nInfo = await i18nInfo.prototype.findOne({
raw: true,
where: {
id: infoVO.id
}
});
if (!dbOneI18nInfo) {
throw '3246';
}
delete infoVO.id;
let i18nInfoLogOne = await buildOneI18nInfoLog(dbOneI18nInfo, infoVO);
transaction = await ormDB.transaction();
await i18nInfo.prototype.destroy({
where: {
id: dbOneI18nInfo.id
},
transaction: transaction,
});
//日志
await i18nLogService.add(i18nInfoLogOne, transaction);
await transaction.commit();
return 'ok';
}
catch (e) {
logger.error(`i18nService.del.error:${e}`);
if (transaction) {
await transaction.rollback();
}
throw e;
}
};
async function buildOneI18nInfoLog(dbOneI18nInfo: any, infoVO: I18nInfoVO) {
let i18nInfoLogOne = {
//修改前
info_id: dbOneI18nInfo.id,
platform: dbOneI18nInfo.platform,
module: dbOneI18nInfo.module,
code: dbOneI18nInfo.code,
sub_code: dbOneI18nInfo.sub_code,
lang: dbOneI18nInfo.lang,
desc: dbOneI18nInfo.desc,
content: dbOneI18nInfo.content,
//修改后
platform_after: infoVO.platform ? infoVO.platform : dbOneI18nInfo.platform,
module_after: infoVO.module ? infoVO.module : dbOneI18nInfo.module,
code_after: infoVO.code ? infoVO.code : dbOneI18nInfo.code,
sub_code_after: infoVO.sub_code ? infoVO.sub_code : dbOneI18nInfo.sub_code,
lang_after: infoVO.lang ? infoVO.lang : dbOneI18nInfo.lang,
desc_after: infoVO.desc ? infoVO.desc : dbOneI18nInfo.desc,
content_after: infoVO.content ? infoVO.content : dbOneI18nInfo.content
}
return i18nInfoLogOne;
}
// @madex/ex-ts-dao 是 ts 的 dao, 代码在 bitbucket/ex-js-dao 的 ts 分支上
import { i18nInfo, i18nInfoLog, ormDB } from "@madex/ex-ts-dao";
import * as i18nService from "./i18n.service";
import { I18nInfoPageVO, I18nInfoVO } from "./i18n.service";
export interface I18nInfoLogVO extends I18nInfoPageVO {
info_id?: number;
}
export async function list(i18nInfoLogVO: I18nInfoLogVO) {
if (i18nInfoLogVO.code) {
i18nInfoLogVO.code = { [ormDB.Op.like]: `${i18nInfoLogVO.code}%` };
}
if (i18nInfoLogVO.sub_code) {
i18nInfoLogVO.sub_code = { [ormDB.Op.like]: `${i18nInfoLogVO.sub_code}%` };
}
if (i18nInfoLogVO.desc) {
i18nInfoLogVO.desc = { [ormDB.Op.like]: `${i18nInfoLogVO.desc}%` };
}
if (i18nInfoLogVO.updatedAt) {
i18nInfoLogVO.updatedAt = { [ormDB.Op.gte]: new Date(i18nInfoLogVO.updatedAt).getTime() };
}
let page = Number(i18nInfoLogVO.page);
let size = Number(i18nInfoLogVO.size);
let where = Object.assign(i18nInfoLogVO);
delete i18nInfoLogVO.page;
delete i18nInfoLogVO.size;
let resList = await i18nInfoLog.prototype.findAndCount({
where: where,
limit: size,
offset: (page - 1) * size,
order: [["updatedAt", "desc"]],
raw: true
});
return resList;
}
export const add = async (infoLogVO: any, tx: any) => {
if (!infoLogVO.createdAt) {
infoLogVO.createdAt = new Date();
}
if (!infoLogVO.updatedAt) {
infoLogVO.updatedAt = new Date();
}
await i18nInfoLog.prototype.create(infoLogVO, {
transaction: tx,
});
};
export async function revert(i18nInfoLogVO: I18nInfoLogVO) {
let dbOneI18nInfoLog = await i18nInfoLog.prototype.findOne({
raw: true,
where: {
id: i18nInfoLogVO.id
}
});
if (!dbOneI18nInfoLog) {
throw '3246';
}
let infoId = dbOneI18nInfoLog.info_id;
let dbOneI18nInfo = await i18nInfo.prototype.findOne({
raw: true,
where: {
id: infoId
}
});
let itemInfo = {
platform: dbOneI18nInfoLog.platform,
module: dbOneI18nInfoLog.module,
code: dbOneI18nInfoLog.code,
sub_code: dbOneI18nInfoLog.sub_code,
lang: dbOneI18nInfoLog.lang,
desc: dbOneI18nInfoLog.desc,
content: dbOneI18nInfoLog.content,
createdAt: dbOneI18nInfoLog.createdAt,
updatedAt: dbOneI18nInfoLog.updatedAt,
}
if (!dbOneI18nInfo) {
await i18nService.add(itemInfo);
return 'ok';
}
else {
delete itemInfo.createdAt;
await i18nInfo.prototype.update(itemInfo, {
where: {
id: infoId
}
});
return 'ok';
}
}
\ No newline at end of file
......@@ -3,13 +3,23 @@ import Express from "express"
const router = Express.Router();
import * as userController from "../../mvc/control/user.control"
import * as userController from "../../mvc/control/user.control";
import * as i18nCtrl from "../../mvc/control/i18n.control";
import * as i18nLogCtrl from "../../mvc/control/i18nlog.control";
const getFunc = {
'user/info': userController.getUserInfo,
};
const postFunc = {};
const postFunc = {
'i18n/info/list': i18nCtrl.list,
'i18n/info/add': i18nCtrl.add,
'i18n/info/update': i18nCtrl.update,
'i18n/info/del': i18nCtrl.del,
'i18n/info/log/list': i18nLogCtrl.list,
'i18n/info/log/revert': i18nLogCtrl.revert,
};
let getErrorMessage = (code: number, message?: string) => {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment