Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wenHuaBu_adminServer
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
node_server
wenHuaBu_adminServer
Commits
38965cfe
Commit
38965cfe
authored
Mar 12, 2024
by
chenjinjing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
no message
parent
503c751b
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
357 additions
and
144 deletions
+357
-144
member.ts
src/biz/member/member.ts
+201
-102
sms.ts
src/biz/sms.ts
+2
-2
enum.ts
src/config/enum.ts
+4
-1
errorEnum.ts
src/config/errorEnum.ts
+4
-1
model.ts
src/data/models/model.ts
+9
-10
router.ts
src/routers/member/router.ts
+127
-24
router.ts
src/routers/public/router.ts
+6
-0
router.ts
src/routers/router.ts
+1
-1
system.ts
src/tools/system.ts
+3
-3
No files found.
src/biz/member/member.ts
View file @
38965cfe
...
...
@@ -2,10 +2,10 @@
* 会员逻辑
*/
import
{
MEMBERSTATE
,
MEMBERLEVEL
,
DOCUMENTTYPE
,
NATION
,
PROFCATEGORY
,
CODETYPE
,
UNITINFOTYPE
,
MEMBERTYPE
,
REGISTERFLOW
}
from
"../../config/enum"
;
import
{
MEMBERSTATE
,
MEMBERLEVEL
,
DOCUMENTTYPE
,
NATION
,
PROFCATEGORY
,
CODETYPE
,
UNITINFOTYPE
,
MEMBERTYPE
,
REGISTERFLOW
,
SEX
}
from
"../../config/enum"
;
import
{
ERRORENUM
}
from
"../../config/errorEnum"
;
import
{
TABLEENUM
}
from
"../../data/models/model"
;
import
{
find
,
find
Onc
e
}
from
"../../data/select"
;
import
{
find
,
find
Count
,
findOnce
,
findToPag
e
}
from
"../../data/select"
;
import
{
updateOneData
}
from
"../../data/update"
;
import
{
generateSystemId
,
successResult
}
from
"../../tools/system"
;
import
{
BizError
}
from
"../../util/bizError"
;
...
...
@@ -13,14 +13,15 @@ import { extractData } from "../../util/piecemeal";
import
{
changeEnumValue
,
eccEnumValue
}
from
"../../util/verificationEnum"
;
import
*
as
sysTools
from
"../../tools/system"
;
import
{
sendRegisterCode
}
from
"../sms"
;
import
{
addOneData
}
from
"../../data/add"
;
import
{
addManyData
,
addOneData
}
from
"../../data/add"
;
import
{
deleteManyData
,
deleteOneData
}
from
"../../data/delete"
;
/**
* 单位会员列表
* @param param0
*/
export
async
function
unitMemberList
({
unitName
,
joinTime
,
unitMemberType
,
workDuties
,
session
,
sheng
,
shi
,
qu
})
{
export
async
function
unitMemberList
({
unitName
,
joinTime
,
unitMemberType
,
workDuties
,
session
,
sheng
,
shi
,
qu
,
pageNumber
})
{
let
selectParam
:
any
=
{};
if
(
unitName
)
selectParam
.
unitName
=
unitName
;
if
(
joinTime
)
selectParam
.
joinTime
=
joinTime
;
...
...
@@ -31,7 +32,9 @@ export async function unitMemberList({unitName, joinTime, unitMemberType, workDu
if
(
shi
)
selectParam
.
shi
=
shi
;
if
(
qu
)
selectParam
.
qu
=
qu
;
let
dbList
=
await
find
(
TABLEENUM
.
用户表
,
selectParam
);
let
dbList
=
await
findToPage
(
TABLEENUM
.
用户表
,
selectParam
,
[],
pageNumber
);
let
dataCount
=
await
findCount
(
TABLEENUM
.
用户表
,
selectParam
);
let
dataList
=
[];
dbList
.
forEach
(
info
=>
{
let
item
:
any
=
extractData
(
info
,
[
"userId"
,
"memberState"
,
"unitName"
,
"loginId"
,
"phone"
,
"joinTime"
,
"unitMemberLevel"
,
"sheng"
,
"shi"
,
"qu"
]);
...
...
@@ -41,7 +44,7 @@ export async function unitMemberList({unitName, joinTime, unitMemberType, workDu
dataList
.
push
(
item
);
});
return
{
dataList
};
return
{
dataList
,
dataCount
};
}
...
...
@@ -67,7 +70,7 @@ export async function unitMemberDetails({userId}) {
let
unitInfo
=
extractData
(
oldInfo
,
UnitConfig
);
let
oldKeYanInfo
=
await
findOnce
(
TABLEENUM
.
单位所获得科研成果表
,
{
userId
});
let
scientificResearch
=
extractData
(
oldKeYanInfo
,
[
"startTime"
,
"endTime"
,
"describe"
]);
let
scientificResearch
=
extractData
(
oldKeYanInfo
,
[
"
id"
,
"
startTime"
,
"endTime"
,
"describe"
]);
return
{
topInfo
,
basicInfo
,
unitInfo
,
scientificResearch
};
}
...
...
@@ -79,60 +82,57 @@ export async function unitMemberDetails({userId}) {
* @param form
* @returns
*/
export
async
function
unitMemberUpdate
(
secureArgs
:
any
)
{
let
{
userId
,
form
,
keyanForm
}
=
secureArgs
;
export
async
function
unitMemberUpdate
({
form
,
keyanForm
,
userId
})
{
let
oldInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
userId
});
/**校验枚举 */
changeEnumValue
(
UNITINFOTYPE
,
form
.
unitInfoType
);
changeEnumValue
(
UNITINFOTYPE
,
form
.
unitInfoType
);
if
(
!
oldInfo
||
!
oldInfo
.
userId
)
throw
new
BizError
(
ERRORENUM
.
目标数据不存在
);
await
updateOneData
(
TABLEENUM
.
用户表
,
{
userId
},
form
);
/**删除对应userId科研成果 */
let
oldKeYanInfo
=
await
find
(
TABLEENUM
.
单位所获得科研成果表
,
{
userId
});
let
dataList
=
[];
oldKeYanInfo
.
forEach
(
info
=>
{
let
item
:
any
=
extractData
(
info
,
[
"userId"
,
"memberState"
,
"unitName"
,
"loginId"
,
"phone"
,
"joinTime"
,
"unitMemberLevel"
,
"sheng"
,
"shi"
,
"qu"
]);
//todo 等夏先圣回来对一下前端数据怎么传
dataList
.
push
(
item
);
});
if
(
!
oldKeYanInfo
||
!
oldKeYanInfo
.
id
)
throw
new
BizError
(
ERRORENUM
.
目标数据不存在
);
await
deleteManyData
(
TABLEENUM
.
单位所获得科研成果表
,
{
userId
});
let
addList
=
[];
for
(
let
i
=
0
;
i
<
keyanForm
.
length
;
i
++
)
{
keyanForm
[
i
].
id
=
generateSystemId
(
TABLEENUM
.
单位所获得科研成果表
,
userId
);
keyanForm
[
i
].
userId
=
userId
;
addList
.
push
(
keyanForm
);
}
await
addManyData
(
TABLEENUM
.
单位所获得科研成果表
,
addList
);
return
successResult
();
}
/**
* 单位入会流程1
* @param secureArgs
* 删除单位所获得科研成果
* @param param0
* @returns
*/
export
async
function
unitMemberRegister
(
secureArgs
)
{
let
{
form
}
=
secureArgs
;
/**校验枚举 */
const
EccFuncName
=
'注册单位会员'
;
eccEnumValue
(
EccFuncName
,
'单位信息类型'
,
UNITINFOTYPE
,
form
.
unitInfoType
);
let
oldData
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
"$or"
:[{
loginId
:
form
.
loginId
},
{
phone
:
form
.
phone
},
{
mail
:
form
.
mail
}]
});
if
(
oldData
&&
oldData
.
userId
)
{
if
(
oldData
.
loginId
==
form
.
loginId
)
throw
new
BizError
(
ERRORENUM
.
用户名重复
,
form
.
loginId
);
if
(
oldData
.
phone
==
form
.
phone
)
throw
new
BizError
(
ERRORENUM
.
联系人手机号重复
,
form
.
phone
);
if
(
oldData
.
mail
==
form
.
mail
)
throw
new
BizError
(
ERRORENUM
.
邮箱重复
,
form
.
loginId
);
}
/**校验密码 */
if
(
form
.
pwd
.
search
(
/^
[
A-Za-z0-9
]{6,18}
$/
)
<
0
)
throw
new
BizError
(
ERRORENUM
.
密码只能由
6
至
18
位字符和数字组成
);
if
(
form
.
pwd
!=
form
.
confirmation
)
throw
new
BizError
(
ERRORENUM
.
两次密码不一致
);
delete
form
.
confirmation
;
form
.
userId
=
sysTools
.
generateUserId
();
form
.
memberType
=
MEMBERTYPE
.
单位会员
;
form
.
isAdmin
=
0
;
form
.
registerFlow
=
REGISTERFLOW
.
单位会员注册
1
;
await
addOneData
(
TABLEENUM
.
用户表
,
form
);
export
async
function
delResearch
({
id
})
{
let
dataInfo
=
await
findOnce
(
TABLEENUM
.
单位所获得科研成果表
,
{
id
});
if
(
!
dataInfo
||
!
dataInfo
.
id
)
throw
new
BizError
(
ERRORENUM
.
目标数据不存在
);
await
deleteOneData
(
TABLEENUM
.
单位所获得科研成果表
,
{
id
});
return
successResult
();
}
/**验证码 */
/**
* 会员注册的短信验证码
* @param userId
* @param phone
* @returns
*/
export
async
function
memberRegisterSendCode
({
loginId
,
phone
,
codeType
})
{
let
todayMs
=
sysTools
.
getTodayMs
();
let
todayCodeList
=
await
find
Once
(
TABLEENUM
.
验证码表
,
{
userId
:
form
.
userId
})
;
if
(
todayCodeList
.
length
>=
4
)
throw
new
BizError
(
ERRORENUM
.
发送验证码次数超限制
,
`
${
form
.
user
Id
}
修改密码发送验证码次数超限制4`
);
let
todayCodeList
=
await
find
(
TABLEENUM
.
验证码表
,
{
phone
})
||
[]
;
// if (todayCodeList.length >= 4) throw new BizError(ERRORENUM.发送验证码次数超限制, `${login
Id} 修改密码发送验证码次数超限制4`);
let
sendMs
=
todayMs
;
todayCodeList
.
forEach
(
info
=>
{
...
...
@@ -140,70 +140,27 @@ export async function unitMemberRegister(secureArgs) {
});
let
now
=
new
Date
().
valueOf
();
if
((
now
-
sendMs
)
<=
(
60
*
1000
)
)
throw
new
BizError
(
ERRORENUM
.
发送验证码频率过快
,
`
${
form
.
user
Id
}
`
);
if
((
now
-
sendMs
)
<=
(
60
*
1000
)
)
throw
new
BizError
(
ERRORENUM
.
发送验证码频率过快
,
`
${
login
Id
}
`
);
let
codeId
=
sysTools
.
getSMSCodeId
(
form
.
userId
,
todayCodeList
.
length
);
let
codeId
=
sysTools
.
getSMSCodeId
(
loginId
,
todayCodeList
.
length
||
0
);
let
code
=
sysTools
.
getSMSCode
();
await
sendRegisterCode
(
form
.
phone
,
code
);
//await sendRegisterCode(phone, code, codeType); //todo 发送短信
now
=
new
Date
().
valueOf
();
await
addOneData
(
TABLEENUM
.
验证码表
,
{
codeId
,
code
,
now
,
phone
:
form
.
phone
,
codeType
:
CODETYPE
.
单位会员注册
,
isUse
:
true
});
return
successResult
();
}
await
addOneData
(
TABLEENUM
.
验证码表
,
{
codeId
,
codeNum
:
code
,
sendMs
:
now
,
phone
,
type
:
codeType
,
isUse
:
true
});
let
dataList
=
{
codeId
}
return
dataList
;
}
/**
* 个人会员列表
* @param param0
*/
export
async
function
individualMemberList
({
name
,
documentId
,
phone
,
memberLevel
,
workDuties
,
session
,
joinTime
,
auditTime
,
memberState
})
{
export
async
function
individualMemberList
({
name
,
documentId
,
phone
,
memberLevel
,
workDuties
,
session
,
joinTime
,
auditTime
,
memberState
,
pageNumber
})
{
let
selectParam
:
any
=
{};
if
(
name
)
selectParam
.
name
=
name
;
if
(
documentId
)
selectParam
.
documentId
=
documentId
;
...
...
@@ -215,17 +172,20 @@ export async function individualMemberList({name, documentId, phone, memberLevel
if
(
auditTime
)
selectParam
.
auditTime
=
auditTime
;
if
(
memberState
)
selectParam
.
memberState
=
memberState
;
let
dbList
=
await
find
(
TABLEENUM
.
用户表
,
selectParam
);
let
selectConf
=
[
"userId"
,
"memberState"
,
"unitName"
,
"name"
,
"sex"
,
"nation"
,
"loginId"
,
"phone"
,
"joinTime"
,
"memberLevel"
,
"sheng"
,
"shi"
,
"qu"
];
let
dbList
=
await
findToPage
(
TABLEENUM
.
用户表
,
selectParam
,
selectConf
,
pageNumber
,
10
);
let
dataCount
=
await
findCount
(
TABLEENUM
.
用户表
,
selectParam
);
let
dataList
=
[];
dbList
.
forEach
(
info
=>
{
let
item
:
any
=
extractData
(
info
,
[
"userId"
,
"memberState"
,
"unitName"
,
"name"
,
"sex"
,
"nation"
,
"loginId"
,
"phone"
,
"joinTime"
,
"memberLevel"
,
"sheng"
,
"shi"
,
"qu"
]
);
let
item
:
any
=
extractData
(
info
,
selectConf
);
changeEnumValue
(
MEMBERSTATE
,
item
.
memberState
);
if
(
!
item
.
memberLevel
)
item
.
memberLevel
=
"未选择"
;
else
changeEnumValue
(
MEMBERLEVEL
,
item
.
memberLevel
);
dataList
.
push
(
item
);
});
return
{
dataList
};
return
{
dataList
,
dataCount
};
}
...
...
@@ -264,8 +224,7 @@ export async function individualMemberDetails({userId}) {
* @param form
* @returns
*/
export
async
function
individualMemberUpdate
(
secureArgs
:
any
)
{
let
{
userId
,
form
,
keyanForm
}
=
secureArgs
;
export
async
function
individualMemberUpdate
({
form
,
userId
})
{
let
oldInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
userId
});
if
(
!
oldInfo
||
!
oldInfo
.
userId
)
throw
new
BizError
(
ERRORENUM
.
目标数据不存在
);
await
updateOneData
(
TABLEENUM
.
用户表
,
{
userId
},
form
);
...
...
@@ -274,6 +233,146 @@ export async function individualMemberDetails({userId}) {
}
/**
* 个人入会流程1
* @param secureArgs
*/
export
async
function
memberRegister1
({
form
,
codeId
})
{
let
oldData
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
"$or"
:[{
loginId
:
form
.
loginId
},
{
phone
:
form
.
phone
},
{
mail
:
form
.
mail
}]
});
if
(
oldData
&&
oldData
.
userId
)
{
if
(
oldData
.
loginId
==
form
.
loginId
)
throw
new
BizError
(
ERRORENUM
.
用户名重复
,
form
.
loginId
);
if
(
oldData
.
phone
==
form
.
phone
)
throw
new
BizError
(
ERRORENUM
.
联系人手机号重复
,
form
.
phone
);
if
(
oldData
.
mail
==
form
.
mail
)
throw
new
BizError
(
ERRORENUM
.
邮箱重复
,
form
.
loginId
);
}
/**校验密码 */
if
(
form
.
pwd
.
search
(
/^
[
A-Za-z0-9
]{6,18}
$/
)
<
0
)
throw
new
BizError
(
ERRORENUM
.
密码只能由
6
至
18
位字符和数字组成
);
if
(
form
.
pwd
!=
form
.
confirmation
)
throw
new
BizError
(
ERRORENUM
.
两次密码不一致
);
form
.
userId
=
sysTools
.
generateUserId
();
form
.
memberType
=
MEMBERTYPE
.
个人会员
;
form
.
isAdmin
=
0
;
form
.
registerFlow
=
REGISTERFLOW
.
个人会员注册
1
;
// let todayMs = sysTools.getTodayMs();
let
codeList
=
await
findOnce
(
TABLEENUM
.
验证码表
,
{
codeId
});
let
now
=
new
Date
().
valueOf
();
let
msg
=
ERRORENUM
.
验证码错误
;
if
(
codeList
.
codeNum
==
form
.
codeNum
)
{
if
(
codeList
.
isUse
)
msg
=
ERRORENUM
.
验证码失效
;
else
if
(
(
now
-
codeList
.
sendMs
)
>
(
30
*
60
*
1000
)
)
msg
=
ERRORENUM
.
验证码过期
}
if
(
!
codeId
)
throw
new
BizError
(
msg
,
`userId:
${
form
.
userId
}
个人入会注册流程1的code:
${
form
.
code
}
`
);
/**修改验证码状态为已使用 */
await
updateOneData
(
TABLEENUM
.
验证码表
,
{
codeId
},
{
isUse
:
true
});
await
addOneData
(
TABLEENUM
.
用户表
,
form
);
/**注册成功,返回userId和会员注册流程字段 */
let
oldInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
userId
:
form
.
userId
});
let
dataList
=
extractData
(
oldInfo
,
[
"userId"
,
"registerFlow"
]);
return
dataList
;
}
/**
* 个人入会流程2
* @param userId
* @param secureArgs
* @returns
*/
export
async
function
memberRegister2
({
form
,
userId
})
{
let
oldInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
userId
});
if
(
!
oldInfo
||
!
oldInfo
.
userId
)
throw
new
BizError
(
ERRORENUM
.
目标数据不存在
);
/**校验枚举 */
const
EccFuncName
=
'注册个人会员'
;
eccEnumValue
(
EccFuncName
,
'性别'
,
SEX
,
form
.
sex
);
eccEnumValue
(
EccFuncName
,
'证件类型'
,
DOCUMENTTYPE
,
form
.
documentType
);
eccEnumValue
(
EccFuncName
,
'民族'
,
NATION
,
form
.
nation
);
eccEnumValue
(
EccFuncName
,
'专业类别'
,
PROFCATEGORY
,
form
.
profCategory
);
form
.
registerFlow
=
REGISTERFLOW
.
个人会员注册
2
;
await
updateOneData
(
TABLEENUM
.
用户表
,
{
userId
},
form
);
let
unitInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
userId
});
let
dataList
=
extractData
(
unitInfo
,
[
"userId"
,
"registerFlow"
]);
return
dataList
;
}
/**
* 单位入会流程1
* @param secureArgs
*/
export
async
function
unitMemberRegister1
({
form
,
codeId
})
{
let
oldData
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
"$or"
:[{
loginId
:
form
.
loginId
},
{
phone
:
form
.
phone
},
{
mail
:
form
.
mail
}]
});
if
(
oldData
&&
oldData
.
userId
)
{
if
(
oldData
.
loginId
==
form
.
loginId
)
throw
new
BizError
(
ERRORENUM
.
用户名重复
,
form
.
loginId
);
if
(
oldData
.
phone
==
form
.
phone
)
throw
new
BizError
(
ERRORENUM
.
联系人手机号重复
,
form
.
phone
);
if
(
oldData
.
mail
==
form
.
mail
)
throw
new
BizError
(
ERRORENUM
.
邮箱重复
,
form
.
loginId
);
}
/**校验密码 */
if
(
form
.
pwd
.
search
(
/^
[
A-Za-z0-9
]{6,18}
$/
)
<
0
)
throw
new
BizError
(
ERRORENUM
.
密码只能由
6
至
18
位字符和数字组成
);
if
(
form
.
pwd
!=
form
.
confirmation
)
throw
new
BizError
(
ERRORENUM
.
两次密码不一致
);
form
.
userId
=
sysTools
.
generateUserId
();
form
.
memberType
=
MEMBERTYPE
.
单位会员
;
form
.
isAdmin
=
0
;
form
.
registerFlow
=
REGISTERFLOW
.
单位会员注册
1
;
// let todayMs = sysTools.getTodayMs();
let
codeList
=
await
findOnce
(
TABLEENUM
.
验证码表
,
{
codeId
});
let
now
=
new
Date
().
valueOf
();
let
msg
=
ERRORENUM
.
验证码错误
;
if
(
codeList
.
codeNum
==
form
.
codeNum
)
{
if
(
codeList
.
isUse
)
msg
=
ERRORENUM
.
验证码失效
;
else
if
(
(
now
-
codeList
.
sendMs
)
>
(
30
*
60
*
1000
)
)
msg
=
ERRORENUM
.
验证码过期
}
if
(
!
codeId
)
throw
new
BizError
(
msg
,
`userId:
${
form
.
userId
}
单位入会注册流程1的code:
${
form
.
code
}
`
);
/**修改验证码状态为已使用 */
await
updateOneData
(
TABLEENUM
.
验证码表
,
{
codeId
},
{
isUse
:
true
});
await
addOneData
(
TABLEENUM
.
用户表
,
form
);
/**注册成功,返回userId和会员注册流程字段 */
let
oldInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
userId
:
form
.
userId
});
let
dataList
=
extractData
(
oldInfo
,
[
"userId"
,
"registerFlow"
]);
return
dataList
;
}
/**
* 单位入会流程2
* @param userId
* @param secureArgs
* @returns
*/
export
async
function
unitMemberRegister2
({
form
,
keyanForm
,
userId
})
{
let
oldInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
userId
});
if
(
!
oldInfo
||
!
oldInfo
.
userId
)
throw
new
BizError
(
ERRORENUM
.
目标数据不存在
);
form
.
registerFlow
=
REGISTERFLOW
.
单位会员注册
2
;
await
updateOneData
(
TABLEENUM
.
用户表
,
{
userId
},
form
);
let
unitInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
userId
});
let
dataList
=
extractData
(
unitInfo
,
[
"userId"
,
"registerFlow"
]);
return
dataList
;
}
...
...
src/biz/sms.ts
View file @
38965cfe
...
...
@@ -101,10 +101,10 @@ export function initSMS() {
* @param phone
* @param code
*/
export
async
function
sendRegisterCode
(
phone
:
string
,
code
:
string
)
{
export
async
function
sendRegisterCode
(
phone
:
string
,
code
:
string
,
codeType
)
{
let
sendPhoneList
=
[
phone
];
let
params
=
[
code
];
let
sendRes
:
any
=
await
sendMsmToPhoneNumber
(
sendPhoneList
,
SMSTYPE
.
单位会员注册
,
params
);
let
sendRes
:
any
=
await
sendMsmToPhoneNumber
(
sendPhoneList
,
codeType
,
params
);
return
sendRes
.
isError
;
}
...
...
src/config/enum.ts
View file @
38965cfe
...
...
@@ -358,6 +358,7 @@ export enum CERTIFICATETYPE {
*/
export
enum
CODETYPE
{
单位会员注册
=
1
,
个人会员注册
,
}
...
...
@@ -376,7 +377,9 @@ export enum SMSTYPE {
export
enum
REGISTERFLOW
{
单位会员注册
1
=
1
,
单位会员注册
2
,
单位会员注册
3
单位会员注册
3
,
个人会员注册
1
,
个人会员注册
2
}
src/config/errorEnum.ts
View file @
38965cfe
...
...
@@ -21,7 +21,10 @@ export enum ERRORENUM {
两次密码不一致
,
密码只能由
6
至
18
位字符和数字组成
,
发送验证码次数超限制
,
发送验证码频率过快
发送验证码频率过快
,
验证码错误
,
验证码失效
,
验证码过期
}
export
enum
ERRORCODEENUM
{
...
...
src/data/models/model.ts
View file @
38965cfe
...
...
@@ -53,7 +53,7 @@
},
*/
import
{
MEMBERSTATE
,
USERREGISTERSTATE
}
from
"../../config/enum"
;
import
{
MEMBERSTATE
,
REGISTERFLOW
,
USERREGISTERSTATE
}
from
"../../config/enum"
;
...
...
@@ -338,8 +338,8 @@ const ModelArray = [
pwd
:{
type
:
'String'
},
//密码
token
:{
type
:
'String'
,
default
:
''
},
//token
tokenMs
:{
type
:
'Number'
,
default
:
0
},
//token过期时间
phone
:{
type
:
'String'
,
index
:
true
},
mail
:{
type
:
'String'
,
index
:
true
},
phone
:{
type
:
'String'
,
index
:
true
},
//联系电话
mail
:{
type
:
'String'
,
index
:
true
},
//邮箱
sex
:
'Number'
,
//性别 枚举
documentType
:
'Number'
,
//证件类型 枚举
documentId
:
'String'
,
//证件id 身份证
...
...
@@ -379,7 +379,7 @@ const ModelArray = [
personInChargeDesc
:
'String'
,
//单位主要负责人或负责人集体描述
/**单位会员信息 */
unitInfoType
:
'Number'
,
//单位信息类型 枚举
‘ ’
unitInfoType
:
'Number'
,
//单位信息类型 枚举
yuanXiaoBanXueLeiXing
:
'String'
,
//院校办学类型
yuanXiaoZhuGuanBuMen
:
'String'
,
//院校主管部门
yuanXiaoFuZeRen
:
'String'
,
//院校主要负责人
...
...
@@ -438,7 +438,6 @@ const ModelArray = [
membershipFeesType
:
'Number'
,
//会费类别 枚举
invoiceAdd
:
'String'
,
//发票地址
state
:
'Number'
,
//状态 枚举
}
},
{
...
...
@@ -446,11 +445,11 @@ const ModelArray = [
source
:
TABLESOURCEENUM
.
mongo
,
schema
:{
codeId
:{
type
:
'String'
,
index
:
true
},
code
:
String
,
sendMs
:
Number
,
//下发时间 时间戳
phone
:{
type
:
String
,
index
:
true
},
//用户电话
type
:
Number
,
//验证码类型
isUse
:{
type
:
Boolean
,
default
:
false
},
//是否使用 默认false
code
Num
:
'String'
,
sendMs
:
'Number'
,
//下发时间 时间戳
phone
:{
type
:
'String'
,
index
:
true
},
//用户电话
type
:
'Number'
,
//验证码类型
isUse
:{
type
:
'Boolean'
,
default
:
false
},
//是否使用 默认false
}
},
];
...
...
src/routers/member/router.ts
View file @
38965cfe
...
...
@@ -122,7 +122,8 @@ export const Config = {
{
key
:
"session"
,
type
:
"String"
,
desc
:
"届次"
,
isNull
:
true
},
//todo
{
key
:
"sheng"
,
type
:
"String"
,
desc
:
"省"
,
isNull
:
true
},
{
key
:
"shi"
,
type
:
"String"
,
desc
:
"市"
,
isNull
:
true
},
{
key
:
"qu"
,
type
:
"String"
,
desc
:
"区"
,
isNull
:
true
}
{
key
:
"qu"
,
type
:
"String"
,
desc
:
"区"
,
isNull
:
true
},
{
key
:
"pageNumber"
,
type
:
"Number"
,
desc
:
"当前页"
}
],
bindBiz
:
memberBiz
.
unitMemberList
},
...
...
@@ -133,12 +134,13 @@ export const Config = {
{
key
:
"name"
,
type
:
"String"
,
desc
:
"姓名"
,
isNull
:
true
},
{
key
:
"documentId"
,
type
:
"String"
,
desc
:
"身份证"
,
isNull
:
true
},
{
key
:
"phone"
,
type
:
"String"
,
desc
:
"手机号"
,
isNull
:
true
},
{
key
:
"memberLevel"
,
type
:
"
String"
,
desc
:
"级别
"
,
isNull
:
true
},
{
key
:
"memberLevel"
,
type
:
"
Number"
,
desc
:
"会员等级
"
,
isNull
:
true
},
{
key
:
"workDuties"
,
type
:
"String"
,
desc
:
"职务"
,
isNull
:
true
},
{
key
:
"session"
,
type
:
"String"
,
desc
:
"届次"
,
isNull
:
true
},
{
key
:
"joinTime"
,
type
:
"String"
,
desc
:
"入会时间"
,
isNull
:
true
},
{
key
:
"auditTime"
,
type
:
"String"
,
desc
:
"审核时间"
,
isNull
:
true
},
{
key
:
"memberState"
,
type
:
"String"
,
desc
:
"状态"
,
isNull
:
true
},
{
key
:
"joinTime"
,
type
:
"Number"
,
desc
:
"入会时间"
,
isNull
:
true
},
{
key
:
"auditTime"
,
type
:
"Number"
,
desc
:
"审核时间"
,
isNull
:
true
},
{
key
:
"memberState"
,
type
:
"Number"
,
desc
:
"状态"
,
isNull
:
true
},
{
key
:
"pageNumber"
,
type
:
"Number"
,
desc
:
"当前页"
}
],
bindBiz
:
memberBiz
.
individualMemberList
},
...
...
@@ -148,7 +150,7 @@ export const Config = {
param
:[
{
key
:
"userId"
,
type
:
"String"
,
desc
:
"用户id"
}
],
binBiz
:
memberBiz
.
unitMemberDetails
bin
d
Biz
:
memberBiz
.
unitMemberDetails
},
{
apiName
:
"个人会员详情"
,
...
...
@@ -156,7 +158,15 @@ export const Config = {
param
:[
{
key
:
"userId"
,
type
:
"String"
,
desc
:
"用户id"
}
],
binBiz
:
memberBiz
.
individualMemberDetails
bindBiz
:
memberBiz
.
individualMemberDetails
},
{
apiName
:
"删除单位所获得科研成果"
,
subUrl
:
'/memberdb/delresearch'
,
param
:[
{
key
:
"id"
,
type
:
"String"
,
desc
:
"单位会员列表下发的标识"
}
],
bindBiz
:
memberBiz
.
delResearch
},
{
apiName
:
"单位会员修改"
,
...
...
@@ -173,7 +183,7 @@ export const Config = {
legalPerson
:{
type
:
'String'
,
desc
:
'法人代表'
},
legalPersonPhone
:{
type
:
'String'
,
desc
:
'法人联系电话'
},
gongZhongHao
:{
type
:
'String'
,
desc
:
'单位公众号'
},
unitPhone
:{
type
:
'
String
'
,
desc
:
'单位电话'
},
unitPhone
:{
type
:
'
Number
'
,
desc
:
'单位电话'
},
contactPerson
:{
type
:
'String'
,
desc
:
'日常联系人'
},
contactPersonDuties
:{
type
:
'String'
,
desc
:
'日常联系人职务'
},
sheng
:{
type
:
'String'
,
desc
:
'省'
},
...
...
@@ -205,17 +215,17 @@ export const Config = {
{
key
:
"keyanForm"
,
type
:
"Object"
,
sub
:
{
startTime
:{
type
:
'
String
'
,
desc
:
'开始时间'
},
endTime
:{
type
:
'
String
'
,
desc
:
'结束时间'
},
startTime
:{
type
:
'
Number
'
,
desc
:
'开始时间'
},
endTime
:{
type
:
'
Number
'
,
desc
:
'结束时间'
},
describe
:{
type
:
'String'
,
desc
:
'科研描述'
},
},
desc
:
"表单"
desc
:
"
单位所获得科研成果
表单"
},
{
key
:
"userId"
,
type
:
"String"
,
desc
:
"用户id"
}
],
binBiz
:
memberBiz
.
unitMemberUpdate
bin
d
Biz
:
memberBiz
.
unitMemberUpdate
},
{
apiName
:
"个人会员修改"
,
...
...
@@ -252,13 +262,26 @@ export const Config = {
professionalCERTUrl
:{
type
:
'String'
,
desc
:
'个人工作证明扫描件'
},
auxiliaryMaterial
:{
type
:
'[String]'
,
desc
:
'论文发表或成绩材料'
},
}
},
{
key
:
"userId"
,
type
:
"String"
,
desc
:
"用户id"
}
],
binBiz
:
memberBiz
.
individualMemberUpdate
bin
d
Biz
:
memberBiz
.
individualMemberUpdate
},
{
apiName
:
"单位入会流程1"
,
subUrl
:
'/memberdb/unitmemberregister'
,
apiName
:
"发送短信验证码"
,
subUrl
:
'/memberdb/registersendcode'
,
param
:[
{
key
:
"loginId"
,
type
:
"String"
,
desc
:
"用户名"
},
{
key
:
"phone"
,
type
:
"String"
,
desc
:
"联系人手机号"
},
{
key
:
"codeType"
,
type
:
"Number"
,
desc
:
"验证码类型枚举"
}
],
bindBiz
:
memberBiz
.
memberRegisterSendCode
},
{
apiName
:
"个人入会流程1"
,
subUrl
:
'/memberdb/memberregister1'
,
param
:[
{
key
:
"form"
,
type
:
"Object"
,
sub
:
...
...
@@ -268,15 +291,16 @@ export const Config = {
pwd
:{
type
:
'String'
,
desc
:
'密码'
},
confirmation
:{
type
:
'String'
,
desc
:
'确认密码'
},
phone
:{
type
:
'String'
,
desc
:
'联系人手机号'
},
code
:{
type
:
'String'
,
desc
:
'验证码'
},
code
Num
:{
type
:
'String'
,
desc
:
'验证码'
},
}
}
},
{
key
:
"codeId"
,
type
:
"String"
,
desc
:
"验证码Id"
}
],
bin
Biz
:
memberBiz
.
unitMemberRegister
bin
dBiz
:
memberBiz
.
memberRegister1
},
{
apiName
:
"
单位
入会流程2"
,
subUrl
:
'/memberdb/
unitmember
'
,
apiName
:
"
个人
入会流程2"
,
subUrl
:
'/memberdb/
memberregister2
'
,
param
:[
{
key
:
"form"
,
type
:
"Object"
,
sub
:
...
...
@@ -304,11 +328,91 @@ export const Config = {
cardUrl
:{
type
:
'[String]'
,
desc
:
'个人身份证扫描件'
},
academicCERTUrl
:{
type
:
'String'
,
desc
:
'个人学历证明扫描件'
},
professionalCERTUrl
:{
type
:
'String'
,
desc
:
'个人工作证明扫描件'
},
auxiliaryMaterial
:{
type
:
'String'
,
desc
:
'论文发表等证明工作成果或成绩的材料'
},
auxiliaryMaterial
:{
type
:
'[String]'
,
desc
:
'论文发表等证明工作成果或成绩的材料'
},
}
},
{
key
:
"userId"
,
type
:
"String"
,
desc
:
"用户id"
}
],
bindBiz
:
memberBiz
.
memberRegister2
},
{
apiName
:
"单位入会流程1"
,
subUrl
:
'/memberdb/unitmemberregister1'
,
param
:[
{
key
:
"form"
,
type
:
"Object"
,
sub
:
{
loginId
:{
type
:
'String'
,
desc
:
'用户名'
},
mail
:{
type
:
'String'
,
desc
:
'邮箱'
},
pwd
:{
type
:
'String'
,
desc
:
'密码'
},
confirmation
:{
type
:
'String'
,
desc
:
'确认密码'
},
phone
:{
type
:
'String'
,
desc
:
'联系人手机号'
},
codeNum
:{
type
:
'String'
,
desc
:
'验证码'
},
}
},
{
key
:
"codeId"
,
type
:
"String"
,
desc
:
"验证码Id"
}
],
bindBiz
:
memberBiz
.
unitMemberRegister1
},
{
apiName
:
"单位入会流程2"
,
subUrl
:
'/memberdb/unitmemberregister2'
,
param
:[
{
key
:
"form"
,
type
:
"Object"
,
sub
:
{
unitName
:{
type
:
'String'
,
desc
:
'单位名称'
},
addres
:{
type
:
'String'
,
desc
:
'通信地址'
},
officialWebsite
:{
type
:
'String'
,
desc
:
'单位网站'
},
uscc
:{
type
:
'String'
,
desc
:
'单位信用代码'
},
legalPerson
:{
type
:
'String'
,
desc
:
'法人代表'
},
legalPersonPhone
:{
type
:
'String'
,
desc
:
'法人联系电话'
},
sheng
:{
type
:
'String'
,
desc
:
'省'
},
shi
:{
type
:
'String'
,
desc
:
'市'
},
qu
:{
type
:
'String'
,
desc
:
'区'
},
gongZhongHao
:{
type
:
'String'
,
desc
:
'单位公众号'
},
unitPhone
:{
type
:
'String'
,
desc
:
'单位电话'
},
contactPerson
:{
type
:
'String'
,
desc
:
'日常联系人'
},
contactPersonDuties
:{
type
:
'String'
,
desc
:
'日常联系人职务'
},
uusinessLicenseUrl
:{
type
:
'String'
,
desc
:
'营业执照复印件'
},
personInChargeDesc
:{
type
:
'String'
,
desc
:
'单位主要负责人简介'
},
/**单位信息 */
unitInfoType
:{
type
:
'Number'
,
desc
:
'单位信息类型'
},
yuanXiaoBanXueLeiXing
:{
type
:
'String'
,
desc
:
'院校办学类型'
},
yuanXiaoZhuGuanBuMen
:{
type
:
'String'
,
desc
:
'院校主管部门'
},
yuanXiaoFuZeRen
:{
type
:
'String'
,
desc
:
'院校主要负责人'
},
yuanXiaoFuZeRenZhiWu
:{
type
:
'String'
,
desc
:
'院校主要负责人职务'
},
yuanXiaoFuZeRenDianHua
:{
type
:
'String'
,
desc
:
'院校主要负责人电话'
},
yuanXiaoBanGongFuZeRen
:{
type
:
'String'
,
desc
:
'院校办公负责人'
},
yuanXiaoBanGongFuZeRenZhiWu
:{
type
:
'String'
,
desc
:
'院校办公负责人职务'
},
yuanXiaoBanGongFuZeRenDianHua
:{
type
:
'String'
,
desc
:
'院校办公负责人电话'
},
yuanXiaoKeYanFuZeRen
:{
type
:
'String'
,
desc
:
'院校科研负责人'
},
yuanXiaoKeYanFuZeRenZhiWu
:{
type
:
'String'
,
desc
:
'院校科研负责人职务'
},
yuanXiaoKeYanFuZeRenDianHua
:{
type
:
'String'
,
desc
:
'院校科研负责人电话'
},
yuanXiaoXueShengZongRenShu
:{
type
:
'String'
,
desc
:
'院校学生总人数'
},
yuanXiaoJiaoZhiGongZongRenShu
:{
type
:
'String'
,
desc
:
'院校教职工总人数'
},
yuanXiaoJianZhuMianJi
:{
type
:
'String'
,
desc
:
'院校建筑总面积'
},
yuanXiaoGaoJiZhiCheng
:{
type
:
'String'
,
desc
:
'院校高级职称人数'
},
yuanXiaoKaiSheZhuanYe
:{
type
:
'String'
,
desc
:
'院校开设专业'
},
}
},
{
key
:
"keyanForm"
,
type
:
"Object"
,
sub
:
{
startTime
:{
type
:
'Number'
,
desc
:
'开始时间'
},
endTime
:{
type
:
'Number'
,
desc
:
'结束时间'
},
describe
:{
type
:
'String'
,
desc
:
'科研描述'
},
},
desc
:
"单位所获得科研成果表单"
},
{
key
:
"userId"
,
type
:
"String"
,
desc
:
"用户id"
}
],
bin
Biz
:
memberBiz
.
unitMemberRegister
bin
dBiz
:
memberBiz
.
unitMemberRegister2
}
]
}
\ No newline at end of file
}
src/routers/public/router.ts
View file @
38965cfe
...
...
@@ -90,6 +90,12 @@ export const Config = {
param
:[],
bindBiz
:
setEnumInterface
(
enumConfig
.
DWTYPE
)
},
{
apiName
:
"验证码类型"
,
subUrl
:
'/codetype'
,
param
:[],
bindBiz
:
setEnumInterface
(
enumConfig
.
CODETYPE
)
},
],
}
src/routers/router.ts
View file @
38965cfe
...
...
@@ -14,7 +14,7 @@ import * as memberRouter from "./member/router";
import
*
as
officalWebsiteRouter
from
"./officalWebsite/router"
;
import
*
as
asyncHandler
from
'express-async-handler'
;
const
Look
=
tru
e
;
//true更新文档
const
Look
=
fals
e
;
//true更新文档
export
async
function
setRouter
(
httpServer
){
if
(
Look
)
{
...
...
src/tools/system.ts
View file @
38965cfe
...
...
@@ -43,12 +43,12 @@ export function generateUserId() {
/**
* 获取code的id
* @param
user
Id 用户Id
* @param
login
Id 用户Id
* @param todaySendCount 今日发送次数
* @returns ''
*/
export
function
getSMSCodeId
(
user
Id
:
string
,
todaySendCount
:
number
)
{
return
md5
(
`
${
user
Id
}${
todaySendCount
}${
new
Date
().
valueOf
()}
`
);
export
function
getSMSCodeId
(
login
Id
:
string
,
todaySendCount
:
number
)
{
return
md5
(
`
${
login
Id
}${
todaySendCount
}${
new
Date
().
valueOf
()}
`
);
}
...
...
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