Commit c186d73c by chenjinjing

理事变更申请

parent 7f160a5f
/**
* 变更审批
*/
import moment = require("moment");
import { CERTIFICATETYPE, CHANGEAPPLYTYPE, CLIENTMSGLABLE, INDIVIDUALMEMBERTYPE, MEMBERLEVEL, MEMBERSTATE, MEMBERTYPE, STATE, UNITMEMBERTYPE } from "../../config/enum";
import { TABLEENUM } from "../../data/models/model";
import { find, findCount, findOnce, findToSortToPage } from "../../data/select";
import { extractData } from "../../util/piecemeal";
import { changeEnumValue } from "../../util/verificationEnum";
import { BizError } from "../../util/bizError";
import { ERRORENUM } from "../../config/errorEnum";
import { getMenberNum, successResult } from "../../tools/system";
import { updateOneData } from "../../data/update";
import { setEnumInterface } from "../public";
/**
* 变更审批列表
* @param name 单位名称,名称
* @param joinStartTime 入会开始时间
* @param joinEndTime 入会结束时间
* @param memberCategory 会员类别 UNITMEMBERTYPE INDIVIDUALMEMBERTYPE 前端用:MEMBERTYPEECCENUM
* @param beforeChange 变更前会员
* @param memberLevel 申请变更会员
* @returns
*/
export async function applyList({name, joinStartTime, joinEndTime, memberCategory, beforeChange, memberLevel, pageNumber}) {
let selectParam:any = {
isBlackUser:STATE.,
changeApplyType:{"$gt":CHANGEAPPLYTYPE.注册信息补充完成} //返回除了补充注册信息之外的所有状态数据
};
if (name) selectParam["$or"] = [{name:name}, {unitName:name}];
if (joinStartTime) {
selectParam["joinTime"] = {"$gt":joinStartTime};
}
if (joinEndTime) {
if (!selectParam["joinTime"]) selectParam["joinTime"] = {};
selectParam["joinTime"]["$lt"] = joinEndTime;
}
if (memberCategory) {
if ( memberCategory >= 9) selectParam.unitMemberType = memberCategory;
else selectParam.individualMemberType = memberCategory;
}
if (memberLevel && memberLevel.length) selectParam.applyMemberLevel = {"$in":memberLevel};
if (beforeChange && beforeChange.length) selectParam.beforeChange = {"$in":beforeChange};
let selectConf = ["userId", "changeApplyType", "unitName", "name", "beforeChange", "applyMemberLevel", "applyStr", "applyApplicationTime", "applyReviewTime", "individualMemberType", "unitMemberType", "memberType"];
let dbList = await findToSortToPage(TABLEENUM.用户表, selectParam, selectConf, {applyApplicationTime:-1}, pageNumber);
let dataCount = await findCount(TABLEENUM.用户表, selectParam);
let dataList = [];
let itemConf = ["userId", "changeApplyType", "unitName", "name", "beforeChange", "applyMemberLevel", "applyStr", "applyApplicationTime", "applyReviewTime", "memberType"];
for (let i = 0; i < dbList.length; i++) {
let info = dbList[i];
let item:any = extractData(info, itemConf);
item.changeApplyType = changeEnumValue(CHANGEAPPLYTYPE, item.changeApplyType);
item.memberType = changeEnumValue(MEMBERTYPE, item.memberType);
let applyMemberLevel = "";
if (!item.applyMemberLevel) applyMemberLevel = "未选择";
else applyMemberLevel = changeEnumValue(MEMBERLEVEL, item.applyMemberLevel)
if (!item.beforeChange) item.beforeChange = "未选择";
else item.beforeChange = changeEnumValue(MEMBERLEVEL, item.beforeChange)
// MEMBERTYPEECCENUM
let memberCategory = "";
if (info.memberType == MEMBERTYPE.个人会员) {
memberCategory = changeEnumValue(INDIVIDUALMEMBERTYPE, info.individualMemberType);//会员类别/级别
}
else{
memberCategory = changeEnumValue(UNITMEMBERTYPE, info.unitMemberType);//会员类别/级别
}
item.memberCategory = `${memberCategory}${applyMemberLevel}`;
item.applyApplicationTime = moment(item.applyApplicationTime).format("YYYY-MM-DD")
item.applyReviewTime = moment(item.applyReviewTime).format("YYYY-MM-DD")
dataList.push(item);
}
return {dataList, dataCount};
}
/**
* 通过
* @param id 待审核列表返回的用户id
* @returns
*/
export async function applyAdopt({id}) {
// let selectConf = [];
let userInfo = await findOnce(TABLEENUM.用户表, {userId:id, isAdmin:STATE.});
if (!userInfo || !userInfo.userId) throw new BizError(ERRORENUM.目标数据不存在);
if (userInfo.changeApplyType == CHANGEAPPLYTYPE.注册信息待补充) {
throw new BizError(ERRORENUM.注册信息待补充, `${userInfo.userId}用户注册信息未补充完整`);
}
if (userInfo.changeApplyType == CHANGEAPPLYTYPE.驳回修改) {
throw new BizError(ERRORENUM.不具备审批条件, `${userInfo.userId}当前状态为驳回修改`);
}
if (userInfo.changeApplyType == CHANGEAPPLYTYPE.通过) {
throw new BizError(ERRORENUM.重复提交, `${userInfo.userId}当前状态为已通过`);
}
let thisDate = new Date();
const NowMs = thisDate.valueOf();
let lableInfo = userInfo.lableId.toObject() || [];
let newLable = lableInfo.filter( (item) => {
return item !== CLIENTMSGLABLE.驳回申请;
})
if (!newLable.includes(CLIENTMSGLABLE.通过申请)) {
newLable.push(CLIENTMSGLABLE.通过申请);
}
let lableId = newLable;
let updateInfo:any = {
memberLevel:userInfo.applyMemberLevel,
applyReviewTime:NowMs,
changeApplyType:CHANGEAPPLYTYPE.通过,
lableId
};
await updateOneData(TABLEENUM.用户表, {userId:id}, updateInfo);
return successResult();
}
/**
* 批量通过
* @param param0
*/
export async function applyBatchAdopt({idList}) {
//限制长度
if (idList.length >= 10) throw new BizError(ERRORENUM.批量操作超过个数限制);
let thisDate = new Date();
const NowMs = thisDate.valueOf();
for (let i = 0; i < idList.length; i++) {
let id = idList[i];
if (!id) continue;//空id跳过
let userInfo = await findOnce(TABLEENUM.用户表, {userId:id, isAdmin:STATE.});
if (!userInfo || !userInfo.userId) throw new BizError(ERRORENUM.目标数据不存在);
if (userInfo.changeApplyType == CHANGEAPPLYTYPE.注册信息待补充) {
throw new BizError(ERRORENUM.注册信息待补充, `${userInfo.userId}用户注册信息未补充完整`);
}
if (userInfo.changeApplyType == CHANGEAPPLYTYPE.驳回修改) {
throw new BizError(ERRORENUM.不具备审批条件, `${userInfo.userId}当前状态为驳回修改`);
}
if (userInfo.changeApplyType == CHANGEAPPLYTYPE.通过) {
throw new BizError(ERRORENUM.重复提交, `${userInfo.userId}当前状态为已通过`);
}
let lableInfo = userInfo.lableId.toObject() || [];
let newLable = lableInfo.filter( (item) => {
return item !== CLIENTMSGLABLE.驳回申请;
})
if (!newLable.includes(CLIENTMSGLABLE.通过申请)) {
newLable.push(CLIENTMSGLABLE.通过申请);
}
let lableId = newLable;
let updateInfo:any = {
memberLevel:userInfo.applyMemberLevel,
applyReviewTime:NowMs,
changeApplyType:CHANGEAPPLYTYPE.通过,
lableId,
};
await updateOneData(TABLEENUM.用户表, {userId:id}, updateInfo);
}
return successResult();
}
/**
* 驳回 success
* @param userId
* @param remarks 驳回理由
* @returns
*/
export async function applyReject({id, remarks}) {
let userInfo = await findOnce(TABLEENUM.用户表, {userId:id, isAdmin:STATE.});
if (!userInfo || !userInfo.userId) throw new BizError(ERRORENUM.目标数据不存在);
if (userInfo.changeApplyType == CHANGEAPPLYTYPE.注册信息待补充) {
throw new BizError(ERRORENUM.注册信息待补充, `${userInfo.userId}用户注册信息未补充完整`);
}
if (userInfo.changeApplyType == CHANGEAPPLYTYPE.驳回修改) {
throw new BizError(ERRORENUM.不具备审批条件, `${userInfo.userId}当前状态为驳回修改`);
}
if (userInfo.changeApplyType == CHANGEAPPLYTYPE.通过) {
throw new BizError(ERRORENUM.重复提交, `${userInfo.userId}当前状态为已通过`);
}
let thisDate = new Date();
const NowMs = thisDate.valueOf();
let lableInfo = userInfo.lableId.toObject() || [];
let newLable = lableInfo.filter( (item) => {
return item !== CLIENTMSGLABLE.通过申请;
})
if (!newLable.includes(CLIENTMSGLABLE.驳回申请)) {
newLable.push(CLIENTMSGLABLE.驳回申请);
}
let lableId = newLable;
let updateInfo:any = {
applyReviewTime:NowMs,
changeApplyType:CHANGEAPPLYTYPE.驳回修改,
lableId,
rejectRemarks:remarks
};
await updateOneData(TABLEENUM.用户表, {userId:id}, updateInfo);
return successResult();
}
/**
* 变更审批数据导出
* @param param0
* @returns
*/
export async function outPutApply() {
// let exportColumns:any = setEnumInterface({defaultParam:APPLYCOLUMNS});
let selectParam = {
isAdmin:STATE.,
changeApplyType:{"$gt":CHANGEAPPLYTYPE.注册信息补充完成} //返回除了补充注册信息之外的所有状态数据
};
let selectTitle = ["状态", "单位/个人名称", "变更前职位", "申请变更职位", "申请理由", "申请时间", "审核时间"];
let selectConf = ["changeApplyType", "unitName", "name", "memberType", "beforeChange", "applyMemberLevel", "applyStr", "applyApplicationTime", "applyReviewTime"];
let dbList = await find(TABLEENUM.用户表, selectParam, selectConf);
let timeChnageList = ["applyApplicationTime", "applyReviewTime"];
let dataList = [selectTitle];
let dataConf = ["changeApplyType", "name", "beforeChange", "applyMemberLevel", "applyStr", "applyApplicationTime", "applyReviewTime"];
for (let i = 0; i < dbList.length; i++) {
let info = dbList[i];
let subList = [];
for (let i = 0; i < dataConf.length; i++) {
let key = dataConf[i];
let value = info[key] || "";
if (key == "name") {
if (info.memberType == MEMBERTYPE.个人会员) value = info.name;
else if (info.memberType == MEMBERTYPE.单位会员) value = info.unitName;
}
if (value) {
if (timeChnageList.indexOf(key) != -1) value = moment(value).format("YYYY-MM-DD");
else if (key == "applyMemberLevel") value = changeEnumValue(MEMBERLEVEL, value);
else if (key == "beforeChange") value = changeEnumValue(MEMBERLEVEL, value);
else if (key == "changeApplyType") value = changeEnumValue(CHANGEAPPLYTYPE, value);
}
subList.push(value);
}
dataList.push(subList);
}
return {dataList};
}
...@@ -46,6 +46,7 @@ export async function getAuthority({unitName, memberLevel, memberCategory, pageN ...@@ -46,6 +46,7 @@ export async function getAuthority({unitName, memberLevel, memberCategory, pageN
item.memberCategory = changeEnumValue(UNITMEMBERTYPE, info.unitMemberType);//会员类别/级别 item.memberCategory = changeEnumValue(UNITMEMBERTYPE, info.unitMemberType);//会员类别/级别
} }
item.memberState = changeEnumValue(MEMBERSTATE, item.memberState); item.memberState = changeEnumValue(MEMBERSTATE, item.memberState);
// if(!item.beforeChange && item.changeApplyType != CHANGEAPPLYTYPE.通过) topInfo.memberLevel = oldInfo.beforeChange;
item.memberLevel = changeEnumValue(MEMBERLEVEL, item.memberLevel);//会员等级、职务 item.memberLevel = changeEnumValue(MEMBERLEVEL, item.memberLevel);//会员等级、职务
dataList.push(item); dataList.push(item);
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
*/ */
import moment = require("moment"); import moment = require("moment");
import { INDIVIDUALMEMBERTYPE, MEMBERSTATE, MEMBERTYPE, PAYMENTSTATUS, STATE, UNITMEMBERTYPE, USERREGISTERSTATE } from "../../config/enum"; import { CHANGEAPPLYTYPE, CLIENTMSGLABLE, DOCUMENTTYPE, INDIVIDUALMEMBERTYPE, MEMBERLEVEL, MEMBERLEVELCHANGE, MEMBERSTATE, MEMBERTYPE, NATION, PAYMENTSTATUS, PROFCATEGORY, SEX, STATE, UNITMEMBERTYPE, USERREGISTERSTATE } from "../../config/enum";
import { ERRORENUM } from "../../config/errorEnum"; import { ERRORENUM } from "../../config/errorEnum";
import { addManyData } from "../../data/add"; import { addManyData } from "../../data/add";
import { deleteManyData } from "../../data/delete"; import { deleteManyData } from "../../data/delete";
...@@ -62,6 +62,8 @@ export async function getMemberData({userId}) { ...@@ -62,6 +62,8 @@ export async function getMemberData({userId}) {
/**返回指定配置字段 */ /**返回指定配置字段 */
let topInfo:any = extractData(oldInfo, topSelectFiles); let topInfo:any = extractData(oldInfo, topSelectFiles);
// 变更申请职位不为空并且状态不等于通过的时候,代表提交了变更理事申请,并且还未通过审批,需要先使用变更前职位
// if(!oldInfo.beforeChange && oldInfo.changeApplyType != CHANGEAPPLYTYPE.通过) topInfo.memberLevel = oldInfo.beforeChange;
let baseInfo:any = extractData(oldInfo, baseSelectFiles); let baseInfo:any = extractData(oldInfo, baseSelectFiles);
let majorInfo:any = extractData(oldInfo, majorSelectFiles); let majorInfo:any = extractData(oldInfo, majorSelectFiles);
...@@ -313,18 +315,26 @@ export async function getSheng ({userId}) { ...@@ -313,18 +315,26 @@ export async function getSheng ({userId}) {
/** /**
* 变更申请,判断注册资料是否完整,不完整返回false(需要补充用户信息) * 变更理事申请,职位未发生变更不需要走当前流程
* @param param0 * @param memberLevel 变更理事
* @param userId 登录的userid
* @returns * @returns
*/ */
export async function memberlevelUpdate({memberLevelChange, userId}) { export async function memberlevelUpdate({memberLevel, userId}) {
let oldInfo = await findOnce(TABLEENUM.用户表, {userId}); let oldInfo = await findOnce(TABLEENUM.用户表, {userId});
if (!oldInfo || !oldInfo.userId) throw new BizError(ERRORENUM.目标数据不存在); if (!oldInfo || !oldInfo.userId) throw new BizError(ERRORENUM.目标数据不存在);
if (oldInfo.memberLever == memberLevelChange) throw new BizError(ERRORENUM.当前变更申请未发生变化); if (oldInfo.memberLevel == memberLevel) throw new BizError(ERRORENUM.当前变更申请未发生变化);
if (memberLevel > oldInfo.memberLevel +1) throw new BizError(`当前职位为:${oldInfo.memberLevel},申请${memberLevel}${ERRORENUM.超出可申请范围}`);
/**添加至变更职位 */ /**添加至变更职位 */
await updateOneData(TABLEENUM.用户表, {userId}, {memberLevelChange}); eccEnumValue("变更申请", '变更申请职位' , MEMBERLEVELCHANGE, memberLevel); //校验枚举
let param = {
applyMemberLevel:memberLevel,
beforeChange:oldInfo.memberLevel,
}
await updateOneData(TABLEENUM.用户表, {userId}, param);
return successResult(); return successResult();
} }
...@@ -332,62 +342,98 @@ export async function memberlevelUpdate({memberLevelChange, userId}) { ...@@ -332,62 +342,98 @@ export async function memberlevelUpdate({memberLevelChange, userId}) {
/** /**
* 是否需要补充用户信息 * 是否需要补充用户信息
* @param userId * 判断注册资料是否完整,不完整返回false(需要补充用户信息)
* @param userId 登录的userid
*/ */
export async function isNeedSupplement(userId) { export async function isNeedSupplement({userId}) {
let oldInfo = await findOnce(TABLEENUM.用户表, {userId}); let oldInfo = await findOnce(TABLEENUM.用户表, {userId});
let grRequiredConf = { const GrRequiredConf = {
"基本信息": ["name", "sex", "documentId", "documentType", "birth", "nation", "sheng", "shi", "qu", "addres", "education", "photoUrl"], "基本信息": ["name", "sex", "documentId", "documentType", "birth", "nation", "sheng", "shi", "qu", "addres", "education", "photoUrl"],
"专业信息": ["duties", "workTitle", "studyResume", "workResume", "profAchievement", "otherEMP", "otherPROF", "profCategory"], "专业信息": ["duties", "workTitle", "studyResume", "workResume", "profAchievement", "otherEMP", "otherPROF", "profCategory"],
"其他附件": ["cardUrlJust", "cardUrlBack", "academicCERTUrl", "professionalCERTUrl", "auxiliaryMaterial"] "其他附件": ["cardUrlJust", "cardUrlBack", "academicCERTUrl"]
}; };
let dwRequiredConf = { const DwRequiredConf = {
"基本信息": ["unitName", "uscc", "legalPerson", "legalPersonPhone", "legalPersonMail", "unitMail", "contactPerson", "contactPersonDuties", "基本信息": ["unitName", "sheng", "shi", "qu", "addres", "uscc", "legalPerson", "legalPersonPhone", "legalPersonMail", "contactPerson",
"contactPersonPhone", "uusinessLicenseUrl", "sheng", "shi", "qu", "addres"], "contactPersonDuties", "contactPersonPhone", "uusinessLicenseUrl"],
"单位信息": ["unitMemberType", "yuanXiaoBanXueLeiXing", "yuanXiaoZhuGuanBuMen", "yuanXiaoFuZeRen", "yuanXiaoFuZeRenZhiWu", "yuanXiaoFuZeRenDianHua", "单位信息": ["unitMemberType", "yuanXiaoBanXueLeiXing", "yuanXiaoZhuGuanBuMen", "yuanXiaoFuZeRen", "yuanXiaoFuZeRenZhiWu",
"yuanXiaoBanGongFuZeRen", "yuanXiaoBanGongFuZeRenDianHua", "ZhuYaoFuZeRenYouXiang", "yuanXiaoKeYanFuZeRen", "yuanXiaoKeYanFuZeRenDianHua", "yuanXiaoFuZeRenDianHua", "yuanXiaoBanGongFuZeRen", "yuanXiaoBanGongFuZeRenDianHua", "ZhuYaoFuZeRenYouXiang", "yuanXiaoKeYanFuZeRen",
"jiaoXueFuZeRenXinMing", "yuanXiaoXueShengZongRenShu", "yuanXiaoJiaoZhiGongZongRenShu", "jiaoXueFuZeRenDianHua", "kaishezhuanYe", "danWeiJianJie"] "yuanXiaoKeYanFuZeRenDianHua", "jiaoXueFuZeRenXinMing", "jiaoXueFuZeRenDianHua"]
}; };
let dwshzycj = {
const Dwshzycj = {
"单位所获主要成绩及科研成果": ["startTime", "endTime", "describe"] "单位所获主要成绩及科研成果": ["startTime", "endTime", "describe"]
}; };
let dwshzycjInfo = await findOnce(TABLEENUM.单位所获得科研成果表, {userId}); let dwshzycjInfo = await findOnce(TABLEENUM.单位所获得科研成果表, {userId});
let infoComplete = {}; let infoCompleteData = {};
let changeApplyType = CHANGEAPPLYTYPE.注册信息补充完成;
if (oldInfo.memberType == MEMBERTYPE.个人会员) { if (oldInfo.memberType == MEMBERTYPE.个人会员) {
for (let key in grRequiredConf) { for (let key in GrRequiredConf) {
for (let i = 0; i < grRequiredConf[key].length; i++) { for (let i = 0; i < GrRequiredConf[key].length; i++) {
if(!oldInfo[grRequiredConf[key][i]]) infoComplete[key] = false; if(!oldInfo[GrRequiredConf[key][i]]) {
infoCompleteData[key] = false;
changeApplyType = CHANGEAPPLYTYPE.注册信息待补充
} else {
infoCompleteData[key] = true;
}
} }
} }
} else { } else {
for (let key in dwRequiredConf) { for (let key in DwRequiredConf) {
for (let i = 0; i < dwRequiredConf[key].length; i++) { for (let i = 0; i < DwRequiredConf[key].length; i++) {
if(!oldInfo[dwRequiredConf[key][i]]) infoComplete[key] = false; if(!oldInfo[DwRequiredConf[key][i]]) {
infoCompleteData[key] = false;
changeApplyType = CHANGEAPPLYTYPE.注册信息待补充
} else {
infoCompleteData[key] = true;
} }
} }
for (let i = 0; i < dwshzycj.单位所获主要成绩及科研成果.length; i++) { }
if(!dwshzycjInfo[dwshzycj.单位所获主要成绩及科研成果[i]]) infoComplete["单位所获主要成绩及科研成果"] = false; for (let i = 0; i < Dwshzycj.单位所获主要成绩及科研成果.length; i++) {
if (!dwshzycjInfo) {
infoCompleteData["单位所获主要成绩及科研成果"] = false;
} else {
if(!dwshzycjInfo[Dwshzycj.单位所获主要成绩及科研成果[i]]) {
infoCompleteData["单位所获主要成绩及科研成果"] = false;
changeApplyType = CHANGEAPPLYTYPE.注册信息待补充
} else {
infoCompleteData["单位所获主要成绩及科研成果"] = true;
} }
} }
}
}
let infoComplete = [];
for (let key in infoCompleteData) {
infoComplete.push({key, value:infoCompleteData[key]})
}
return infoComplete; return infoComplete;
} }
/** /**
* 个人会员用户注册信息补充 * 个人会员用户注册信息补充
* @param userId 登录的用户id * @param userId 登录的userid
* @param form 修改信息表单 * @param form 补充的信息表单
* @returns * @returns
*/ */
export async function infoSupplement({form, userId}) { export async function infoSupplement({form, userId}) {
let oldInfo = await findOnce(TABLEENUM.用户表, {userId}); let oldInfo = await findOnce(TABLEENUM.用户表, {userId});
if (!oldInfo || !oldInfo.userId) throw new BizError(ERRORENUM.目标数据不存在); 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);
await updateOneData(TABLEENUM.用户表, {userId}, form); await updateOneData(TABLEENUM.用户表, {userId}, form);
return successResult(); return successResult();
...@@ -397,7 +443,7 @@ export async function infoSupplement({form, userId}) { ...@@ -397,7 +443,7 @@ export async function infoSupplement({form, userId}) {
/** /**
* 单位会员用户注册信息补充 * 单位会员用户注册信息补充
* @param userId 登录的用户id * @param userId 登录的用户id
* @param form 修改信息表单 * @param form 补充的信息表单
* @returns * @returns
*/ */
export async function unitInfoSupplement({form, keyanForm, userId}) { export async function unitInfoSupplement({form, keyanForm, userId}) {
...@@ -407,19 +453,19 @@ export async function unitInfoSupplement({form, keyanForm, userId}) { ...@@ -407,19 +453,19 @@ export async function unitInfoSupplement({form, keyanForm, userId}) {
describe: 'String' describe: 'String'
}; };
keyanForm.forEach(item => { keyanForm.forEach(item => {
eccFormParam("单位会员修改", keyanFormItemConfig, item ); eccFormParam("单位会员用户注册信息补充", keyanFormItemConfig, item );
}); });
let oldInfo = await findOnce(TABLEENUM.用户表, {userId}); let oldInfo = await findOnce(TABLEENUM.用户表, {userId});
if (!oldInfo || !oldInfo.userId) throw new BizError(ERRORENUM.目标数据不存在); if (!oldInfo || !oldInfo.userId) throw new BizError(ERRORENUM.目标数据不存在);
/**校验枚举 */ /**校验枚举 */
const EccFuncName = '单位会员修改'; const EccFuncName = '单位会员用户注册信息补充';
eccEnumValue(EccFuncName, '单位信息类型', UNITMEMBERTYPE, form.unitMemberType); eccEnumValue(EccFuncName, '单位信息类型', UNITMEMBERTYPE, form.unitMemberType);
/**确保邮箱的唯一性 */ /**确保邮箱的唯一性 */
let distinctMailInfo = await findOnce(TABLEENUM.用户表, {mail:form.unitMail}, ["userId"]); // let distinctMailInfo = await findOnce(TABLEENUM.用户表, {mail:form.unitMail}, ["userId"]);
if (distinctMailInfo && distinctMailInfo.userId && distinctMailInfo.userId != oldInfo.userId) throw new BizError(ERRORENUM.邮箱重复, oldInfo.loginId, oldInfo.mail ); // if (distinctMailInfo && distinctMailInfo.userId && distinctMailInfo.userId != oldInfo.userId) throw new BizError(ERRORENUM.邮箱重复, oldInfo.loginId, oldInfo.mail );
form.mail = form.unitMail; form.mail = form.unitMail;
/**修改会员用户信息 */ /**修改会员用户信息 */
await updateOneData(TABLEENUM.用户表, {userId}, form); await updateOneData(TABLEENUM.用户表, {userId}, form);
...@@ -430,7 +476,6 @@ export async function unitInfoSupplement({form, keyanForm, userId}) { ...@@ -430,7 +476,6 @@ export async function unitInfoSupplement({form, keyanForm, userId}) {
await deleteManyData(TABLEENUM.单位所获得科研成果表, {userId}); await deleteManyData(TABLEENUM.单位所获得科研成果表, {userId});
} }
/**添加新的科研信息 */ /**添加新的科研信息 */
let addList = []; let addList = [];
for (let i = 0; i < keyanForm.length; i++) { for (let i = 0; i < keyanForm.length; i++) {
...@@ -447,11 +492,26 @@ export async function unitInfoSupplement({form, keyanForm, userId}) { ...@@ -447,11 +492,26 @@ export async function unitInfoSupplement({form, keyanForm, userId}) {
} }
/**
* 变更理事申请理由
* @param applyStr 变更申请理由
* @param userId 登录的userid
* @returns
*/
export async function applyReason({applyStr, userId}) {
let oldInfo = await findOnce(TABLEENUM.用户表, {userId});
if (!oldInfo || !oldInfo.userId) throw new BizError(ERRORENUM.目标数据不存在);
const Now = new Date().valueOf();
let param = {
applyStr,
changeApplyType:CHANGEAPPLYTYPE.待审批,
applyApplicationTime:Now,
}
await updateOneData(TABLEENUM.用户表, {userId}, param);
return successResult();
}
......
...@@ -234,7 +234,8 @@ export async function noticeMessage({userId}) { ...@@ -234,7 +234,8 @@ export async function noticeMessage({userId}) {
let dataList = []; let dataList = [];
const SelectFiles = ["msgId", "msgTitle", "effectiveTime", "msgContent", "isPop"]; const SelectFiles = ["msgId", "msgTitle", "effectiveTime", "msgContent", "isPop"];
let msgInfo = await find(TABLEENUM.消息通知表, selectParam, SelectFiles); let msgInfo = await findToSort(TABLEENUM.消息通知表, selectParam, {createTime:-1}, SelectFiles);
// let msgInfo = await find(TABLEENUM.消息通知表, selectParam, SelectFiles);
// if (!msgInfo || !msgInfo.msgId) throw new BizError(ERRORENUM.目标数据不存在); // if (!msgInfo || !msgInfo.msgId) throw new BizError(ERRORENUM.目标数据不存在);
if (msgInfo) { if (msgInfo) {
msgInfo.forEach( info => { msgInfo.forEach( info => {
......
...@@ -699,6 +699,8 @@ export enum CLIENTMSGLABLE { ...@@ -699,6 +699,8 @@ export enum CLIENTMSGLABLE {
单位会员 = "单位会员", 单位会员 = "单位会员",
理事 = "理事会员", 理事 = "理事会员",
常务理事 = "常务理事会员", 常务理事 = "常务理事会员",
驳回申请 = "驳回理事申请",
通过申请 = "通过理事申请",
} }
...@@ -758,3 +760,39 @@ export enum ORDEREXAMINE { ...@@ -758,3 +760,39 @@ export enum ORDEREXAMINE {
用户提交 = 1, 用户提交 = 1,
退回 退回
} }
/**
* 会员等级 会员职务【变更理事】
*/
export enum MEMBERLEVELCHANGE {
申请理事 = MEMBERLEVEL.理事会员,
申请常务理事 = MEMBERLEVEL.常务理事会员,
}
/**
* 变更审批状态
*/
export enum CHANGEAPPLYTYPE {
注册信息待补充 = 1,
注册信息补充完成,
通过,
待审批,
驳回修改,
}
...@@ -64,7 +64,9 @@ export enum ERRORENUM { ...@@ -64,7 +64,9 @@ export enum ERRORENUM {
当前变更申请未发生变化, 当前变更申请未发生变化,
不可重复提交, 不可重复提交,
订单非退回状态, 订单非退回状态,
该类型退款无需确认 该类型退款无需确认,
注册信息待补充,
超出可申请范围
} }
export enum ERRORCODEENUM { export enum ERRORCODEENUM {
......
...@@ -445,7 +445,14 @@ const ModelArray = [ ...@@ -445,7 +445,14 @@ const ModelArray = [
/**注册第二步保存未提交 */ /**注册第二步保存未提交 */
saveUnsubmitted:{type:'Number', default:STATE.},//是否提交注册完成 0:否, 1:是 STATE saveUnsubmitted:{type:'Number', default:STATE.},//是否提交注册完成 0:否, 1:是 STATE
firstStep:'Number',//第一步完成时间 firstStep:'Number',//第一步完成时间
memberLevelChange:'Number',//会员等级、职务 枚举 MEMBERLEVEL 【变更申请职位】 /**变更理事 */
applyMemberLevel:'Number',//申请变更的职位
beforeChange:'Number',//会员等级、职务 枚举 MEMBERLEVEL 【变更申请前的职位】
applyStr:'String',//变更理事申请理由
changeApplyType:'Number',//变更审批状态
applyApplicationTime:'Number',//变更理事申请时间
applyReviewTime:'Number',//变更理事审核时间
rejectRemarks:'String',//变更理事驳回理由
} }
}, },
{ {
......
/**
* 变更审批
*/
import * as applyBiz from "../../biz/member/apply";
export const FirstName = '变更审批';
export const FirstRouter = '/manage/apply';
export const Config = {
"变更审批管理":[
{
apiName:"变更审批列表",
subUrl:'/applydb/applylist',
param:[ // name, joinStartTime, joinEndTime, beforeChange, memberLevel, pageNumber
{key:"name", type:"String", desc:"单位/个人名称", isNull:true},
{key:"joinStartTime", type:"Number", desc:"入会开始时间", isNull:true},
{key:"joinEndTime", type:"Number", desc:"入会结束时间", isNull:true},
{key:"beforeChange", type:"[Number]", desc:"变更前会员等级职务", isNull:true},
{key:"memberLevel", type:"[Number]", desc:"变更后会员等级职务", isNull:true},
{key:"memberCategory", type:"Number", desc:"会员类别", isNull:true},
{key:"pageNumber", type:"Number", desc:"当前页"}
],
bindBiz:applyBiz.applyList
},
{
apiName:"变更审批通过",
subUrl:'/applydb/applyadopt',
param:[
{key:"id", type:"String", desc:"用户id"},
],
bindBiz:applyBiz.applyAdopt
},
{
apiName:"批量通过",
subUrl:'/applydb/applybatchadopt',
param:[
{key:"idList", type:"[String]", desc:"批量通过的用户列表"},
],
bindBiz:applyBiz.applyBatchAdopt
},
{
apiName:"驳回",
subUrl:'/applydb/applyreject',
param:[
{key:"id", type:"String", desc:"用户id"},
{key:"remarks", type:"String", desc:"驳回理由"}
],
bindBiz:applyBiz.applyReject
},
{
apiName:"数据导出",
subUrl:'/applydb/outputapply',
param:[
],
bindBiz:applyBiz.outPutApply
},
]
}
\ No newline at end of file
...@@ -959,20 +959,20 @@ export const Config = { ...@@ -959,20 +959,20 @@ export const Config = {
apiName:"变更职位", apiName:"变更职位",
subUrl:'/homepage/memberlevelupdate', subUrl:'/homepage/memberlevelupdate',
param:[ param:[
{key:"memberLevelChange", type:"Number", desc:"变更职位"} {key:"memberLevel", type:"Number", desc:"变更职位"}
], ],
bindBiz:homePageBiz.memberlevelUpdate bindBiz:homePageBiz.memberlevelUpdate
}, },
{ {
apiName:"是否需要补充用户信息", apiName:"是否需要补充用户信息",
subUrl:'/homepage/getcertificate', subUrl:'/homepage/isneedsupplement',
param:[ param:[
], ],
bindBiz:homePageBiz.isNeedSupplement bindBiz:homePageBiz.isNeedSupplement
}, },
{ {
apiName:"个人会员用户注册信息补充", apiName:"个人会员用户注册信息补充",
subUrl:'/homepage/getcertificate', subUrl:'/homepage/infosupplement',
param:[ param:[
{ {
key:"form", type:"Object", sub: key:"form", type:"Object", sub:
...@@ -980,34 +980,32 @@ export const Config = { ...@@ -980,34 +980,32 @@ export const Config = {
/**基本信息 */ /**基本信息 */
name:{type:'String', desc:'真实姓名'}, name:{type:'String', desc:'真实姓名'},
sex:{type:'Number', desc:'性别'}, sex:{type:'Number', desc:'性别'},
nation:{type:'Number', desc:'民族'},
birth:{type:'Number', desc:'出身年月'},
documentType:{type:'Number', desc:'证件类型'}, documentType:{type:'Number', desc:'证件类型'},
documentId:{type:'String', desc:'证件号码'}, documentId:{type:'String', desc:'证件号码'},
birth:{type:'Number', desc:'出生年月'},
nation:{type:'Number', desc:'民族'},
sheng:{type:'String', desc:'省'}, sheng:{type:'String', desc:'省'},
shi:{type:'String', desc:'市'}, shi:{type:'String', desc:'市'},
qu:{type:'String', desc:'区'}, qu:{type:'String', desc:'区'},
phone:{type:'String', desc:'手机号码'},
mail:{type:'String', desc:'电子邮箱'},
addres:{type:'String', desc:'通信地址'}, addres:{type:'String', desc:'通信地址'},
photoUrl:{type:'String', desc:'蓝底证件照'},
education:{type:'Number', desc:'学历'},
/**专业信息 */ /**专业信息 */
education:{type:'Number', desc:'学历'},
photoUrl:{type:'String', desc:'蓝底证件照'},
unitName:{type:'String', desc:'工作单位'}, unitName:{type:'String', desc:'工作单位'},
duties:{type:'String', desc:'职务'}, duties:{type:'String', desc:'职务'},
workTitle:{type:'String', desc:'职称'}, workTitle:{type:'String', desc:'职称'},
profCategory:{type:'[Number]', desc:'专业类别'}, profCategory:{type:'[Number]', desc:'专业类别'},
studyResume:{type:'String', desc:'学习简历'}, studyResume:{type:'String', desc:'学习简历'},
workResume:{type:'String', desc:'工作简历'}, workResume:{type:'String', desc:'工作简历'},
profAchievement:{type:'String', desc:'教研成果'}, profAchievement:{type:'String', desc:'专业成果'},
otherEMP:{type:'String', desc:'其他组织任职情况'}, otherEMP:{type:'String', desc:'在其他社会组织任职情况'},
otherPROF:{type:'String', desc:'其他情况'}, otherPROF:{type:'String', desc:'其他与本学会专业有关的情况'},
/**其他附件 */ /**其他附件 */
cardUrlJust:{type:'String', desc:'个人身份证扫描件正面'}, cardUrlJust:{type:'String', desc:'个人身份证扫描件正面'},
cardUrlBack:{type:'String', desc:'个人身份证扫描件反面'}, cardUrlBack:{type:'String', desc:'个人身份证扫描件反面'},
academicCERTUrl:{type:'String', desc:'个人学历证明扫描件'}, academicCERTUrl:{type:'String', desc:'个人学历证明扫描件'},
professionalCERTUrl:{type:'String', desc:'个人工作证明扫描件'}, professionalCERTUrl:{type:'String', desc:'个人工作证明扫描件', notMustHave:true},
auxiliaryMaterial:{type:'[String]', desc:'论文发表或成绩材料'}, auxiliaryMaterial:{type:'[String]', desc:'论文发表等证明工作成果或成绩的材料', notMustHave:true},
} }
} }
], ],
...@@ -1015,41 +1013,43 @@ export const Config = { ...@@ -1015,41 +1013,43 @@ export const Config = {
}, },
{ {
apiName:"单位会员用户注册信息补充", apiName:"单位会员用户注册信息补充",
subUrl:'/homepage/getcertificate', subUrl:'/homepage/unitinfosupplement',
param:[ param:[
{ {
key:"form", type:"Object", sub: key:"form", type:"Object", sub:
{ {
/**基本信息 */ unitName:{type:'String', desc:'单位名称', notMustHave:false},
unitName:{type:'String', desc:'单位名称'}, sheng:{type:'String', desc:'省', notMustHave:false},
addres:{type:'String', desc:'通信地址'}, shi:{type:'String', desc:'市', notMustHave:false},
legalPerson:{type:'String', desc:'法人代表'}, qu:{type:'String', desc:'区', notMustHave:false},
legalPersonPhone:{type:'String', desc:'法人联系电话'}, addres:{type:'String', desc:'通信地址', notMustHave:false},
legalPersonMail:{type:'String', desc:'法人邮箱'}, uscc:{type:'String', desc:'单位信用代码', notMustHave:false},
unitMail:{type:'String', desc:'单位电子邮箱'}, legalPerson:{type:'String', desc:'法人代表', notMustHave:false},
contactPerson:{type:'String', desc:'日常联系人'}, legalPersonPhone:{type:'String', desc:'法人联系电话', notMustHave:false},
contactPersonDuties:{type:'String', desc:'日常联系人职务'}, legalPersonMail:{type:'String', desc:'法人邮箱', notMustHave:false},
contactPersonPhone:{type:'String', desc:'日常联系人电话'}, // unitMail:{type:'String', desc:'单位电子邮箱', notMustHave:false}, 2024.4.22日的需求 去掉
sheng:{type:'String', desc:'省'}, contactPerson:{type:'String', desc:'日常联系人', notMustHave:false},
shi:{type:'String', desc:'市'}, contactPersonDuties:{type:'String', desc:'日常联系人职务', notMustHave:false},
qu:{type:'String', desc:'区'}, contactPersonPhone:{type:'String', desc:'日常联系人手机', notMustHave:false},
uusinessLicenseUrl:{type:'String', desc:'营业执照'}, uusinessLicenseUrl:{type:'String', desc:'营业执照复印件', notMustHave:false},
/**单位信息 */ /**单位信息 */
unitMemberType:{type:'Number', desc:'单位类型'}, unitMemberType:{type:'Number', desc:'单位信息类型,枚举', notMustHave:false},
yuanXiaoBanXueLeiXing:{type:'Number', desc:'办学类型'}, yuanXiaoBanXueLeiXing:{type:'Number', desc:'院校办学类型,枚举', notMustHave:false},
yuanXiaoZhuGuanBuMen:{type:'String', desc:'主管部门'}, yuanXiaoZhuGuanBuMen:{type:'String', desc:'院校主管部门', notMustHave:false},
yuanXiaoFuZeRen:{type:'String', desc:'主要负责人姓名'}, yuanXiaoFuZeRen:{type:'String', desc:'院校主要负责人', notMustHave:false},
yuanXiaoFuZeRenZhiWu:{type:'String', desc:'主要负责人职位'}, yuanXiaoFuZeRenZhiWu:{type:'String', desc:'院校主要负责人职务', notMustHave:false},
yuanXiaoFuZeRenDianHua:{type:'String', desc:'主要负责人电话'}, yuanXiaoFuZeRenDianHua:{type:'String', desc:'院校主要负责人电话', notMustHave:false},
ZhuYaoFuZeRenYouXiang:{type:'String', desc:'主要负责人邮箱'}, yuanXiaoBanGongFuZeRen:{type:'String', desc:'院校办公负责人', notMustHave:false},
yuanXiaoBanGongFuZeRen:{type:'String', desc:'办公负责人姓名'}, yuanXiaoBanGongFuZeRenDianHua:{type:'String', desc:'院校办公负责人电话', notMustHave:false},
yuanXiaoBanGongFuZeRenDianHua:{type:'String', desc:'办公负责人电话'}, ZhuYaoFuZeRenYouXiang:{type:'String', desc:'主要负责人邮箱', notMustHave:false},
yuanXiaoKeYanFuZeRen:{type:'String', desc:'科研负责人姓名'}, yuanXiaoKeYanFuZeRen:{type:'String', desc:'院校科研负责人', notMustHave:false},
yuanXiaoKeYanFuZeRenDianHua:{type:'String', desc:'科研负责人电话'}, yuanXiaoKeYanFuZeRenDianHua:{type:'String', desc:'院校科研负责人电话', notMustHave:false},
jiaoXueFuZeRenXinMing:{type:'String', desc:'教学负责人姓名'}, jiaoXueFuZeRenXinMing:{type:'String', desc:'教学负责人姓名', notMustHave:false},
jiaoXueFuZeRenDianHua:{type:'String', desc:'教学负责人电话'}, yuanXiaoXueShengZongRenShu:{type:'Number', desc:'院校学生总人数', notMustHave:true},
yuanXiaoJiaoZhiGongZongRenShu:{type:'Number', desc:'院校教职工总人数', notMustHave:true},
jiaoXueFuZeRenDianHua:{type:'String', desc:'教学负责人电话', notMustHave:false},
kaishezhuanYe:{type:'String', desc:'开设专业', notMustHave:true}, kaishezhuanYe:{type:'String', desc:'开设专业', notMustHave:true},
danWeiJianJie:{type:'String', desc:'单位简介', notMustHave:true} danWeiJianJie:{type:'String', desc:'单位简介', notMustHave:true},
}, },
desc:"表单" desc:"表单"
}, },
...@@ -1065,6 +1065,14 @@ export const Config = { ...@@ -1065,6 +1065,14 @@ export const Config = {
], ],
bindBiz:homePageBiz.unitInfoSupplement bindBiz:homePageBiz.unitInfoSupplement
}, },
{
apiName:"变更申请理由",
subUrl:'/homepage/applyreason',
param:[
{key:"applyStr", type:"String", desc:"变更申请理由"}
],
bindBiz:homePageBiz.applyReason
},
], ],
"oss授权":[ "oss授权":[
{ {
......
...@@ -308,6 +308,13 @@ export const Config = { ...@@ -308,6 +308,13 @@ export const Config = {
param:[], param:[],
defaultParam:enumConfig.ISRECEIVE, defaultParam:enumConfig.ISRECEIVE,
bindBiz:publicBiz.setEnumInterface bindBiz:publicBiz.setEnumInterface
},
{
apiName:"变更理事",
subUrl:'/memberlevelchange',
param:[],
defaultParam:enumConfig.MEMBERLEVELCHANGE,
bindBiz:publicBiz.setEnumInterface
} }
], ],
......
...@@ -18,6 +18,7 @@ import * as outPutRouter from "./outPut/routers"; ...@@ -18,6 +18,7 @@ import * as outPutRouter from "./outPut/routers";
import * as labelRouter from "./lable/router"; import * as labelRouter from "./lable/router";
import * as blacklistRouter from "./blackList/router"; import * as blacklistRouter from "./blackList/router";
import * as msgActivityRouter from "./msgActivity/router"; import * as msgActivityRouter from "./msgActivity/router";
import * as applyRouter from "./apply/router";
import * as asyncHandler from 'express-async-handler'; import * as asyncHandler from 'express-async-handler';
import { payCallback } from "../biz/member/cost"; import { payCallback } from "../biz/member/cost";
import { checkUser } from "../middleware/user"; import { checkUser } from "../middleware/user";
...@@ -28,16 +29,17 @@ export async function setRouter(httpServer){ ...@@ -28,16 +29,17 @@ export async function setRouter(httpServer){
if (Look) { if (Look) {
await getDoc(); await getDoc();
// await initDoc(portalRouter.FirstName, portalRouter.Config, portalRouter.FirstRouter);//网站编辑 // await initDoc(portalRouter.FirstName, portalRouter.Config, portalRouter.FirstRouter);//网站编辑
// await initDoc(publicRouter.FirstName, publicRouter.Config, publicRouter.FirstRouter);//公用组件 await initDoc(publicRouter.FirstName, publicRouter.Config, publicRouter.FirstRouter);//公用组件
// await initDoc(memberRouter.FirstName, memberRouter.Config, memberRouter.FirstRouter);//用户路由 await initDoc(memberRouter.FirstName, memberRouter.Config, memberRouter.FirstRouter);//用户路由
// await initDoc(officalWebsiteRouter.FirstName, officalWebsiteRouter.Config, officalWebsiteRouter.FirstRouter);//官网路由 // await initDoc(officalWebsiteRouter.FirstName, officalWebsiteRouter.Config, officalWebsiteRouter.FirstRouter);//官网路由
await initDoc(orderRouter.FirstName, orderRouter.Config, orderRouter.FirstRouter);//会费相关 // await initDoc(orderRouter.FirstName, orderRouter.Config, orderRouter.FirstRouter);//会费相关
// await initDoc(costRouter.FirstName, costRouter.Config, costRouter.FirstRouter);//支付 // await initDoc(costRouter.FirstName, costRouter.Config, costRouter.FirstRouter);//支付
// await initDoc(outPutRouter.FirstName, outPutRouter.Config, outPutRouter.FirstRouter);//导出路由 // await initDoc(outPutRouter.FirstName, outPutRouter.Config, outPutRouter.FirstRouter);//导出路由
// await initDoc(labelRouter.FirstName, labelRouter.Config, labelRouter.FirstRouter);//标签路由 // await initDoc(labelRouter.FirstName, labelRouter.Config, labelRouter.FirstRouter);//标签路由
// await initDoc("2.0", labelRouter.Config, labelRouter.FirstRouter);//标签路由 // await initDoc("2.0", labelRouter.Config, labelRouter.FirstRouter);//标签路由
// await initDoc("2.0", blacklistRouter.Config, blacklistRouter.FirstRouter);//黑名单路由 // await initDoc("2.0", blacklistRouter.Config, blacklistRouter.FirstRouter);//黑名单路由
// await initDoc("2.0", msgActivityRouter.Config, msgActivityRouter.FirstRouter);//消息活动通知路由 // await initDoc("2.0", msgActivityRouter.Config, msgActivityRouter.FirstRouter);//消息活动通知路由
await initDoc(applyRouter.FirstName, applyRouter.Config, applyRouter.FirstRouter);//变更审批路由
} }
analysisRouter(httpServer, portalRouter.Config, portalRouter.FirstRouter, true);//网站编辑 analysisRouter(httpServer, portalRouter.Config, portalRouter.FirstRouter, true);//网站编辑
analysisRouter(httpServer, publicRouter.Config, publicRouter.FirstRouter, false);//公用组件 analysisRouter(httpServer, publicRouter.Config, publicRouter.FirstRouter, false);//公用组件
...@@ -49,6 +51,7 @@ export async function setRouter(httpServer){ ...@@ -49,6 +51,7 @@ export async function setRouter(httpServer){
analysisRouter(httpServer, labelRouter.Config, labelRouter.FirstRouter, true);//标签相关 analysisRouter(httpServer, labelRouter.Config, labelRouter.FirstRouter, true);//标签相关
analysisRouter(httpServer, blacklistRouter.Config, blacklistRouter.FirstRouter, true);//黑名单相关 analysisRouter(httpServer, blacklistRouter.Config, blacklistRouter.FirstRouter, true);//黑名单相关
analysisRouter(httpServer, msgActivityRouter.Config, msgActivityRouter.FirstRouter, true);//消息活动通知 analysisRouter(httpServer, msgActivityRouter.Config, msgActivityRouter.FirstRouter, true);//消息活动通知
analysisRouter(httpServer, applyRouter.Config, applyRouter.FirstRouter, true);//消息活动通知
} }
......
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