Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Z
zhichan
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
蒋勇
zhichan
Commits
d793a054
Commit
d793a054
authored
Nov 28, 2019
by
孙亚楠
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dd
parent
a2d78833
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
616 additions
and
7 deletions
+616
-7
xggsve-uc/app/base/api/impl/op/action.js
+31
-1
xggsve-uc/app/base/db/impl/org/orgDao.js
+22
-0
xggsve-uc/app/base/db/impl/user/userDao.js
+29
-0
xggsve-uc/app/base/service/impl/org/orgSve.js
+261
-0
xggsve-uc/app/base/service/impl/role/roleSve.js
+73
-0
xggsve-uc/app/base/service/impl/saas/saasSve.js
+164
-0
xggsve-uc/app/base/service/impl/user/userSve.js
+32
-0
xggsve-uc/app/config/localsettings.js
+3
-6
xggsve-uc/package-lock.json
+0
-0
xggsve-uc/package.json
+1
-0
No files found.
xggsve-uc/app/base/api/impl/op/action.js
View file @
d793a054
...
...
@@ -4,6 +4,10 @@ var settings = require("../../../../config/settings");
class
ActionAPI
extends
APIBase
{
constructor
()
{
super
();
this
.
saasSve
=
system
.
getObject
(
"service.saas.saasSve"
);
this
.
orgSve
=
system
.
getObject
(
"service.org.orgSve"
);
this
.
userSve
=
system
.
getObject
(
"service.user.userSve"
);
this
.
roleSve
=
system
.
getObject
(
"service.role.roleSve"
);
}
/**
* 接口跳转
...
...
@@ -33,24 +37,46 @@ class ActionAPI extends APIBase {
switch
(
action_type
)
{
// saas
case
"addSaas"
:
opResult
=
await
this
.
saasSve
.
apiAddSaas
(
action_body
);
break
;
case
"updSaas"
:
opResult
=
await
this
.
saasSve
.
apiUpdSaas
(
action_body
);
break
;
case
"delSaas"
:
opResult
=
await
this
.
userSve
.
apiFindUserBySaasId
(
action_body
);
if
(
opResult
.
status
==
0
&&
opResult
.
data
.
length
==
0
){
opResult
=
await
this
.
saasSve
.
apiDelSaas
(
action_body
);
}
else
{
opResult
=
system
.
getResult
(
-
1
,
`当前SAAS不能删除`
);
}
break
;
case
"listSaas"
:
opResult
=
await
this
.
saasSve
.
apiListSaas
(
action_body
);
break
;
// 组织机构
case
"addOrg"
:
opResult
=
await
this
.
orgSve
.
apiAddOrg
(
action_body
);
break
;
case
"updOrg"
:
opResult
=
await
this
.
orgSve
.
apiUpdOrg
(
action_body
);
break
;
case
"delOrg"
:
opResult
=
await
this
.
orgSve
.
apiDelOrg
(
action_body
);
break
;
case
"listOrg"
:
opResult
=
await
this
.
orgSve
.
apiListOrg
(
action_body
);
break
;
case
"findById"
:
opResult
=
await
this
.
orgSve
.
apiFindById
(
action_body
);
break
;
case
"byPid"
:
opResult
=
await
this
.
orgSve
.
apiByPid
(
action_body
);
break
;
case
"tree"
:
opResult
=
await
this
.
orgSve
.
apiTree
();
break
;
// 菜单权限
case
"addAuth"
:
break
;
...
...
@@ -63,12 +89,16 @@ class ActionAPI extends APIBase {
// 角色
case
"addRole"
:
opResult
=
await
this
.
roleSve
.
apiAddRole
(
action_body
);
break
;
case
"updRole"
:
opResult
=
await
this
.
roleSve
.
apiUpdRole
(
action_body
);
break
;
case
"delRole"
:
opResult
=
await
this
.
roleSve
.
delRole
(
action_body
);
break
;
case
"listRole"
:
opResult
=
await
this
.
roleSve
.
listRole
(
action_body
);
break
;
...
...
xggsve-uc/app/base/db/impl/org/orgDao.js
View file @
d793a054
...
...
@@ -4,5 +4,26 @@ class OrgDao extends Dao {
constructor
()
{
super
(
Dao
.
getModelName
(
OrgDao
));
}
/**
* 条件查询
* @param {} params
*/
async
findUserByOrgId
(
params
){
let
sql
=
[];
sql
.
push
(
`SELECT c.ucid,c.ucname,c.uctype,c.saas_id,c.isEnabled,c.created_at,c.updated_at,c.deleted_at
FROM uc_org a INNER JOIN uc_user_org b ON a.id = b.org_id INNER JOIN uc_user c ON b.user_id = c.id
WHERE 1=1 and ( c.deleted_at is null or c.deleted_at > NOW() ) `
);
if
(
params
.
id
){
sql
.
push
(
"AND a.id = :id"
);
}
return
await
this
.
customQuery
(
sql
.
join
(
" "
),
params
);
}
async
all
()
{
return
this
.
customQuery
(
"SELECT * FROM uc_org WHERE deleted_at IS NULL"
);
}
}
module
.
exports
=
OrgDao
;
\ No newline at end of file
xggsve-uc/app/base/db/impl/user/userDao.js
View file @
d793a054
...
...
@@ -4,5 +4,33 @@ class UserDao extends Dao {
constructor
()
{
super
(
Dao
.
getModelName
(
UserDao
));
}
/**
* 条件查询
* @param {} params
*/
async
findUserBySaasId
(
params
){
let
sql
=
[];
sql
.
push
(
'select ucid,ucname,uctype,saas_id,isEnabled from uc_user where 1 = 1'
);
if
(
params
.
ucid
){
sql
.
push
(
"AND ucid = :ucid"
);
}
if
(
params
.
ucname
){
sql
.
push
(
"AND ucname = :ucname"
);
}
if
(
params
.
uctype
){
sql
.
push
(
"AND uctype = :uctype"
);
}
if
(
params
.
saas_id
){
sql
.
push
(
"AND saas_id = :saas_id"
);
}
if
(
params
.
isEnabled
){
sql
.
push
(
"AND saas_id = :isEnabled"
);
}
sql
.
push
(
`AND (deleted_at > NOW() or deleted_at is null)`
);
return
await
this
.
customQuery
(
sql
.
join
(
" "
),
params
);
}
}
module
.
exports
=
UserDao
;
\ No newline at end of file
xggsve-uc/app/base/service/impl/org/orgSve.js
View file @
d793a054
...
...
@@ -5,5 +5,265 @@ class OrgService extends ServiceBase {
constructor
()
{
super
(
"org"
,
ServiceBase
.
getDaoName
(
OrgService
));
}
/**
* 添加
* @param {*} params
*/
async
apiAddOrg
(
params
)
{
try
{
return
await
this
.
addOrg
(
params
);
}
catch
(
error
)
{
return
system
.
getResult
(
null
,
`系统错误 错误信息
${
error
}
`
);
}
}
/**
* Org 更新
* @param {*} params
*/
async
apiUpdOrg
(
params
)
{
try
{
return
await
this
.
updOrg
(
params
);
}
catch
(
error
)
{
return
system
.
getResult
(
null
,
`系统错误 错误信息
${
error
}
`
);
}
}
/**
* Org 删除
* @param {*} params
*/
async
apiDelOrg
(
params
)
{
try
{
return
await
this
.
delOrg
(
params
);
}
catch
(
error
)
{
return
system
.
getResult
(
null
,
`系统错误 错误信息
${
error
}
`
);
}
}
/**
* Org 查询列表
* @param {*} params
*/
async
apiListOrg
(
params
)
{
try
{
return
await
this
.
listOrg
(
params
);
}
catch
(
error
)
{
return
system
.
getResult
(
null
,
`系统错误 错误信息
${
error
}
`
);
}
}
/**
* 根据ID查询该组织机构下的所有用户
*/
async
apiFindUserByOrgId
(
params
){
try
{
return
this
.
findUserByOrgId
(
params
.
id
);
}
catch
(
error
)
{
return
system
.
getResult
(
null
,
`系统错误 错误信息
${
error
}
`
);
}
}
/**
* 根据ID查明细
* @param {*} params
*/
async
apiFindById
(
params
){
try
{
return
await
this
.
queryById
(
params
)
}
catch
(
error
)
{
return
system
.
getResult
(
-
1
,
`系统错误 错误信息
${
error
}
`
);
}
}
/**
* 根据Ip查明细
* @param {*} params
*/
async
apiByPid
(
params
){
try
{
return
await
this
.
byPid
(
params
)
}
catch
(
error
)
{
return
system
.
getResult
(
-
1
,
`系统错误 错误信息
${
error
}
`
);
}
}
/**
* 根据ID查明细
* @param {*} params
*/
async
apiTree
(
params
){
try
{
return
await
this
.
tree
(
params
)
}
catch
(
error
)
{
return
system
.
getResult
(
-
1
,
`系统错误 错误信息
${
error
}
`
);
}
}
/********************************************************************** */
/**
* 添加
* @param {T} params
*/
async
addOrg
(
params
)
{
try
{
var
pid
=
Number
(
params
.
pid
||
0
);
params
.
orgname
=
this
.
trim
(
params
.
orgname
);
if
(
!
params
.
orgname
){
return
system
.
getResult
(
-
1
,
`参数错误 组织名称不能为空`
)}
let
_orgByName
=
await
this
.
findOne
({
orgname
:
params
.
orgname
});
if
(
_orgByName
){
return
system
.
getResult
(
-
1
,
`参数错误 组织名称已经存在`
);
}
let
path
=
""
;
if
(
pid
===
0
){
path
=
`/
${
params
.
orgname
}
`
;
}
else
{
let
_org
=
await
this
.
findOne
({
id
:
pid
});
if
(
!
_org
){
return
system
.
getResult
(
-
1
,
`参数错误 父节点不存在`
);
}
path
=
`
${
_org
.
path
}
/
${
params
.
orgname
}
`
;
}
params
.
path
=
path
;
let
res
=
await
this
.
dao
.
create
(
params
);
return
system
.
getResult
(
res
);
}
catch
(
error
)
{
return
system
.
getResult
(
-
1
,
`系统错误 错误信息
${
error
}
`
);
}
}
/**
* 更新
* @param {T} params
*/
async
updOrg
(
params
)
{
// if (!params.id) {
// return system.getResult(-1, `参数错误 ID不能为空`);
// }
// let _org = await this.findById(params.id);
// if (!_org) {
// return system.getResult(-1, `信息不存在 请核对 ID`);
// }
// try {
// let res = await _org.save();
// console.log(`saas 更新成功 : ${JSON.stringify(res)}`);
// return system.getResult(res);
// } catch (error) {
// return system.getResult(-1, `系统错误 错误信息 ${error}`);
// }
return
system
.
getResult
(
`此方法不对外提供服务`
);
}
/**
* 删除
* @param {T} params
*/
async
delOrg
(
params
)
{
try
{
//检查是否存在此组织机构
let
_org
=
await
this
.
findById
(
params
.
id
);
if
(
!
_org
)
{
return
system
.
getResult
(
-
1
,
`信息不存在 请核对 ID`
);
}
//检查组织机构下是否有用户
let
_usersRes
=
await
this
.
findUserByOrgId
(
params
.
id
);
if
(
_usersRes
.
status
===-
1
){
return
_usersRes
;
}
if
(
_usersRes
.
data
.
length
!=
0
){
return
system
.
getResult
(
-
1
,
`该组织机构不能删除`
);
}
//检查父节点 下是否有子节点
let
_orgChildren
=
await
this
.
dao
.
model
.
findAll
({
where
:{
pid
:
this
.
trim
(
params
.
id
)
}
});
if
(
_orgChildren
.
length
!=
0
){
return
system
.
getResult
(
-
1
,
`该组织机构不能删除`
);
}
//删除
let
res
=
await
_org
.
destroy
();
return
system
.
getResult
(
res
);
}
catch
(
error
)
{
return
system
.
getResult
(
-
1
,
`系统错误 错误信息
${
error
}
`
);
}
}
/**
* 查询列表
* @param {T} params
*/
async
listOrg
(
params
)
{
let
where
=
{};
let
pageIndex
=
params
.
pageIndex
||
1
;
let
pageSize
=
params
.
pageSize
||
10
;
if
(
params
.
orgname
)
{
where
.
orgname
=
this
.
trim
(
params
.
orgname
);
}
if
(
params
.
path
)
{
where
.
path
=
this
.
trim
(
params
.
path
);
}
if
(
params
.
pid
)
{
where
.
pid
=
this
.
trim
(
params
.
pid
);
}
if
(
params
.
saas_id
)
{
where
.
saas_id
=
Number
(
params
.
saas_id
);
}
if
(
params
.
hasOwnProperty
(
"is_leaf"
))
{
where
.
is_leaf
=
Number
(
params
.
is_leaf
);
}
try
{
let
orgList
=
await
this
.
getPageList
(
pageIndex
,
pageSize
,
where
);
return
system
.
getResult
(
orgList
);
}
catch
(
error
)
{
return
system
.
getResult
(
-
1
,
`系统错误 错误信息
${
error
}
`
);
}
}
/**
* 根据ID查询该组织机构下的所有用户
*/
async
findUserByOrgId
(
id
){
if
(
!
Number
(
id
)){
return
system
.
getResult
(
-
1
,
`参数错误 组织机构不能为空`
);
}
try
{
let
res
=
await
this
.
dao
.
findUserByOrgId
(
id
);
return
system
.
getResult
(
res
);
}
catch
(
error
)
{
return
system
.
getResult
(
-
1
,
`系统错误 错误信息
${
error
}
`
);
}
}
async
byPid
(
obj
)
{
var
list
=
await
this
.
dao
.
findAll
({
pid
:
obj
.
pid
||
0
,
});
return
list
;
}
async
tree
()
{
var
all
=
await
this
.
dao
.
all
();
var
pmap
=
{};
for
(
var
item
of
all
)
{
var
list
=
pmap
[
item
.
pid
];
if
(
!
list
)
{
list
=
[];
}
list
.
push
(
item
);
pmap
[
item
.
pid
]
=
list
;
if
(
item
.
pid
===
0
)
{
tree
=
item
;
}
console
.
log
(
item
.
pid
);
}
for
(
var
item
of
all
)
{
item
.
childs
=
pmap
[
item
.
id
]
||
[];
}
return
pmap
[
0
];
}
}
module
.
exports
=
OrgService
;
\ No newline at end of file
xggsve-uc/app/base/service/impl/role/roleSve.js
View file @
d793a054
...
...
@@ -5,5 +5,78 @@ class RoleService extends ServiceBase {
constructor
()
{
super
(
"role"
,
ServiceBase
.
getDaoName
(
RoleService
));
}
/**
* role 添加
* @param {*} params
*/
async
apiAddRole
(
params
)
{
try
{
return
await
this
.
addRole
(
params
);
}
catch
(
error
)
{
return
system
.
getResult
(
null
,
`系统错误 错误信息
${
error
}
`
);
}
}
/**
* role 更新
* @param {*} params
*/
async
apiUpdRole
(
params
)
{
try
{
return
await
this
.
updateRole
(
params
);
}
catch
(
error
)
{
return
system
.
getResult
(
null
,
`系统错误 错误信息
${
error
}
`
);
}
}
/***************************************************************** */
/**
* 添加
* @param {T} params
*/
async
addRole
(
params
){
params
.
code
=
this
.
trim
(
params
.
code
);
params
.
name
=
this
.
trim
(
params
.
name
);
params
.
saas_id
=
Number
(
params
.
saas_id
||
0
);
try
{
let
res
=
await
this
.
create
(
params
);
console
.
log
(
`saas 信息插入 :
${
JSON
.
stringify
(
res
)}
`
);
return
system
.
getResult
(
res
);
}
catch
(
error
)
{
return
system
.
getResult
(
-
1
,
`系统错误 错误信息
${
error
}
`
);
}
}
/**
* 更新
* @param {T} params
*/
async
updateRole
(
params
){
if
(
params
.
id
){
params
.
id
=
Number
(
this
.
trim
(
params
.
id
));
}
let
_role
=
await
this
.
findById
({
id
:
params
.
id
});
if
(
!
_role
){
return
system
.
getResult
(
-
1
,
`参数错误 角色不存在`
);
}
if
(
params
.
code
){
_role
.
code
=
this
.
trim
(
params
.
code
);
}
params
.
code
=
this
.
trim
(
params
.
code
);
params
.
name
=
this
.
trim
(
params
.
name
);
try
{
let
res
=
await
this
.
update
(
params
);
console
.
log
(
`saas 信息插入 :
${
JSON
.
stringify
(
res
)}
`
);
return
system
.
getResult
(
res
);
}
catch
(
error
)
{
return
system
.
getResult
(
-
1
,
`系统错误 错误信息
${
error
}
`
);
}
}
}
module
.
exports
=
RoleService
;
xggsve-uc/app/base/service/impl/saas/saasSve.js
View file @
d793a054
...
...
@@ -5,5 +5,168 @@ class SaasService extends ServiceBase {
constructor
()
{
super
(
"saas"
,
ServiceBase
.
getDaoName
(
SaasService
));
}
/**
* saas 添加
* @param {*} params
*/
async
apiAddSaas
(
params
)
{
try
{
return
await
this
.
addSaas
(
params
);
}
catch
(
error
)
{
return
system
.
getResult
(
null
,
`系统错误 错误信息
${
error
}
`
);
}
}
/**
* saas 更新
* @param {*} params
*/
async
apiUpdSaas
(
params
)
{
try
{
return
await
this
.
updSaas
(
params
);
}
catch
(
error
)
{
return
system
.
getResult
(
null
,
`系统错误 错误信息
${
error
}
`
);
}
}
/**
* saas 删除
* @param {*} params
*/
async
apiDelSaas
(
params
)
{
try
{
return
await
this
.
delSaas
(
params
);
}
catch
(
error
)
{
return
system
.
getResult
(
null
,
`系统错误 错误信息
${
error
}
`
);
}
}
/**
* saas 查询列表
* @param {*} params
*/
async
apiListSaas
(
params
)
{
try
{
return
await
this
.
listSaas
(
params
);
}
catch
(
error
)
{
return
system
.
getResult
(
null
,
`系统错误 错误信息
${
error
}
`
);
}
}
/********************************************************************** */
/**
* 添加
* @param {T} params
*/
async
addSaas
(
params
){
if
(
!
this
.
trim
(
params
.
name
)
||
!
this
.
trim
(
params
.
domain
)
||
!
Number
(
this
.
trim
(
params
.
stype
))){
return
system
.
getResult
(
-
1
,
`参数错误 请核对 名称、域名、用户类型 `
);
}
params
.
name
=
this
.
trim
(
params
.
name
);
params
.
domain
=
this
.
trim
(
params
.
domain
);
params
.
managerMobile
=
params
.
managerMobile
?
this
.
trim
(
params
.
managerMobile
):
""
;
params
.
managerId
=
params
.
managerId
?
Number
(
this
.
trim
(
params
.
managerId
)):
null
;
params
.
stype
=
Number
(
this
.
trim
(
params
.
stype
));
try
{
let
res
=
await
this
.
create
(
params
);
console
.
log
(
`saas 信息插入 :
${
JSON
.
stringify
(
res
)}
`
);
return
system
.
getResult
(
res
);
}
catch
(
error
)
{
return
system
.
getResult
(
-
1
,
`系统错误 错误信息
${
error
}
`
);
}
}
/**
* 更新
* @param {T} params
*/
async
updSaas
(
params
){
if
(
!
params
.
id
){
return
system
.
getResult
(
-
1
,
`参数错误 ID不能为空`
);
}
let
_saas
=
await
this
.
findById
(
params
.
id
);
if
(
!
_saas
){
return
system
.
getResult
(
-
1
,
`信息不存在 请核对 ID`
);
}
if
(
params
.
name
){
_saas
.
name
=
this
.
trim
(
params
.
name
);
}
if
(
params
.
domain
){
_saas
.
domain
=
this
.
trim
(
params
.
domain
);
}
if
(
params
.
managerMobile
){
_saas
.
managerMobile
=
this
.
trim
(
params
.
managerMobile
);
}
if
(
params
.
managerId
){
_saas
.
managerId
=
Number
(
params
.
managerId
);
}
if
(
params
.
stype
){
_saas
.
stype
=
Number
(
params
.
stype
);
}
try
{
let
res
=
await
_saas
.
save
();
console
.
log
(
`saas 更新成功 :
${
JSON
.
stringify
(
res
)}
`
);
return
system
.
getResult
(
res
);
}
catch
(
error
)
{
return
system
.
getResult
(
-
1
,
`系统错误 错误信息
${
error
}
`
);
}
}
/**
* 删除
* @param {T} params
*/
async
delSaas
(
params
){
if
(
!
params
.
id
){
return
system
.
getResult
(
-
1
,
`参数错误 ID不能为空`
);
}
let
_saas
=
await
this
.
findById
(
params
.
id
);
if
(
!
_saas
){
return
system
.
getResult
(
-
1
,
`信息不存在 请核对 ID`
);
}
try
{
let
res
=
await
_saas
.
destroy
();
return
system
.
getResult
(
res
);
}
catch
(
error
)
{
return
system
.
getResult
(
-
1
,
`系统错误 错误信息
${
error
}
`
);
}
}
/**
* 查询列表
* @param {T} params
*/
async
listSaas
(
params
){
let
where
=
{};
let
pageIndex
=
params
.
pageIndex
||
1
;
let
pageSize
=
params
.
pageSize
||
10
;
if
(
params
.
name
){
where
.
name
=
this
.
trim
(
params
.
name
);
}
if
(
params
.
domain
){
where
.
domain
=
this
.
trim
(
params
.
domain
);
}
if
(
params
.
managerMobile
){
where
.
managerMobile
=
this
.
trim
(
params
.
managerMobile
);
}
if
(
params
.
managerId
){
where
.
managerId
=
Number
(
params
.
managerId
);
}
if
(
params
.
stype
){
where
.
stype
=
Number
(
params
.
stype
);
}
if
(
params
.
id
){
where
.
id
=
Number
(
params
.
id
);
}
try
{
let
saasList
=
await
this
.
getPageList
(
pageIndex
,
pageSize
,
where
);
return
system
.
getResult
(
saasList
);
}
catch
(
error
)
{
return
system
.
getResult
(
-
1
,
`系统错误 错误信息
${
error
}
`
);
}
}
}
module
.
exports
=
SaasService
;
\ No newline at end of file
xggsve-uc/app/base/service/impl/user/userSve.js
View file @
d793a054
...
...
@@ -5,5 +5,36 @@ class UserService extends ServiceBase {
constructor
()
{
super
(
"user"
,
ServiceBase
.
getDaoName
(
UserService
));
}
/**
* 条件查询
* @param {*} params
*/
async
apiFindUserBySaasId
(
params
){
try
{
return
await
this
.
findUserBySaasId
(
params
);
}
catch
(
error
)
{
return
system
.
getResult
(
-
1
,
`系统错误 错误信息
${
error
}
`
);
}
}
/**************************************************************** */
/**
* 条件查询
* @param {*} params
*/
async
findUserBySaasId
(
params
){
try
{
let
res
=
await
this
.
dao
.
findUserBySaasId
(
params
);
return
system
.
getResult
(
res
);
}
catch
(
error
)
{
return
system
.
getResult
(
-
1
,
`系统错误 错误信息
${
error
}
`
);
}
}
}
module
.
exports
=
UserService
;
\ No newline at end of file
xggsve-uc/app/config/localsettings.js
View file @
d793a054
...
...
@@ -7,14 +7,11 @@ var settings={
},
database
:{
dbname
:
"xgg-uc"
,
user
:
"
root
"
,
password
:
"
root
"
,
user
:
"
write
"
,
password
:
"
write
"
,
config
:
{
// host: '43.247.184.35',
// port: 8899,
host
:
'192.168.18.110'
,
host
:
'192.168.18.237'
,
port
:
3306
,
dialect
:
'mysql'
,
operatorsAliases
:
false
,
pool
:
{
...
...
xggsve-uc/package-lock.json
View file @
d793a054
This diff is collapsed.
Click to expand it.
xggsve-uc/package.json
View file @
d793a054
...
...
@@ -32,6 +32,7 @@
"
gm
"
:
"^1.23.1"
,
"
marked
"
:
"^0.7.0"
,
"
method-override
"
:
"^2.3.10"
,
"
moment
"
:
"^2.24.0"
,
"
morgan
"
:
"^1.9.0"
,
"
multer
"
:
"^1.3.0"
,
"
mysql2
"
:
"^1.5.3"
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment