Commit 5f72618d by 孙香冬

no message

parent dde61b27
...@@ -990,6 +990,14 @@ ...@@ -990,6 +990,14 @@
} }
} }
}, },
"mongoose-auto-increment": {
"version": "5.0.1",
"resolved": "https://registry.npmmirror.com/mongoose-auto-increment/-/mongoose-auto-increment-5.0.1.tgz",
"integrity": "sha512-fuSw0np0ZZXYjNBBrD6Wg0y70N0i5NhBuH3AIETTXCchaq45FeHpISoQ3fFbbdSFhfVEDRtg+hVxEDpFjdI2lw==",
"requires": {
"extend": "^3.0.0"
}
},
"mongoose-legacy-pluralize": { "mongoose-legacy-pluralize": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/mongoose-legacy-pluralize/download/mongoose-legacy-pluralize-1.0.2.tgz", "resolved": "https://registry.npm.taobao.org/mongoose-legacy-pluralize/download/mongoose-legacy-pluralize-1.0.2.tgz",
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
"md5": "^2.2.1", "md5": "^2.2.1",
"moment": "^2.24.0", "moment": "^2.24.0",
"mongoose": "^5.4.0", "mongoose": "^5.4.0",
"mongoose-auto-increment": "^5.0.1",
"mysql": "^2.18.1", "mysql": "^2.18.1",
"node-xlsx": "^0.16.1", "node-xlsx": "^0.16.1",
"nodemailer": "^6.1.1", "nodemailer": "^6.1.1",
......
<config> <config>
<port>7078</port> <port>7079</port>
<mongodb> <mongodb>
<path>127.0.0.1</path> <path>127.0.0.1</path>
<port>27017</port> <port>27017</port>
......
...@@ -9,26 +9,23 @@ import * as configEnum from "../../config/enum"; ...@@ -9,26 +9,23 @@ import * as configEnum from "../../config/enum";
import * as splitResultConfig from "../../config/splitResultConfig"; import * as splitResultConfig from "../../config/splitResultConfig";
import { extractData } from '../../util/piecemeal'; import { extractData } from '../../util/piecemeal';
import { changeEnumValue, eccEnumValue } from '../../util/verificationEnum'; import { changeEnumValue, eccEnumValue } from '../../util/verificationEnum';
import { BizError } from '../../util/bizError'; import moment = require('moment');
import { ERRORENUM } from '../../config/errorEnum';
/** /**
* 主页基础数据 * 主页基础数据
*/ */
export async function homeData() { export async function homeData() {
/**党员总数 */ let partyMemberNum = await partyMemberData.groupFindPartyMemberCount({}); //党员总数
let partyMemberNum = await partyMemberData.groupFindPartyMemberCount({}); let massIndex = 87.6; //党建指令指数
/**党建指令指数 */
let massIndex = 87.6;
/**党内职务人员 */ let partyPositions = []; //党内职务人员
let partyPositions = [];
for (let key in configEnum.PARTYPOSITIONS) { for (let key in configEnum.PARTYPOSITIONS) {
let anyKey:any = key; let anyKey:any = key;
if (key != "党员" && key != "入党积极分子" && key != "预备党员") {
if (isNaN(anyKey)) { //枚举key key = string if (isNaN(anyKey)) { //枚举key key = string
const EnumValue = parseInt(configEnum.PARTYPOSITIONS[key]) const EnumValue = parseInt(configEnum.PARTYPOSITIONS[key])
let dataBaseList = await partyMemberData.getBaseListByPartyPositions( EnumValue ); let dataBaseList = await partyMemberData.getBaseListByPartyPositions( [EnumValue] );
let nameList = []; let nameList = [];
dataBaseList.forEach( info => { dataBaseList.forEach( info => {
...@@ -43,6 +40,8 @@ export async function homeData() { ...@@ -43,6 +40,8 @@ export async function homeData() {
} }
} }
}
return { partyMemberNum, massIndex, partyPositions }; return { partyMemberNum, massIndex, partyPositions };
} }
...@@ -53,19 +52,15 @@ export async function homeData() { ...@@ -53,19 +52,15 @@ export async function homeData() {
* @returns * @returns
*/ */
export async function informationData(informationType:number) { export async function informationData(informationType:number) {
let selectParam:any = {}; if (informationType) eccEnumValue("党建资讯列表查询", "资讯类型", configEnum.INFORMATIONTYPE, informationType);
if (informationType) {
eccEnumValue("党建资讯列表查询", "资讯类型", configEnum.INFORMATIONTYPE, informationType);
selectParam.informationType = informationType;
}
/**医院文化 */ let partyInformationInfo = await partyInformationData.findPartyInformationListByType(informationType);
let partyInformationInfo = await partyInformationData.findPartyInformationList(selectParam);
let dataList = []; let dataList = [];
partyInformationInfo.forEach( info => { partyInformationInfo.forEach( info => {
let changeData:any = extractData(splitResultConfig.partyInformationConfig, info, false); let changeData:any = extractData(splitResultConfig.partyInformationConfig, info, false);
changeData.informationType = changeEnumValue(configEnum.INFORMATIONTYPE, changeData.informationType); changeData.informationType = changeEnumValue(configEnum.INFORMATIONTYPE, changeData.informationType);
changeData.informationTime = moment(changeData.informationTime).format("YYYY.MM.DD HH:mm");
dataList.push(changeData); dataList.push(changeData);
}) })
......
/**
* 小程序
* 组织生活
*/
import moment = require("moment");
import * as organizationalLifeData from "../../../data/organizationalLife";
import * as configEnum from "../../../config/enum";
import { eccFormParam } from "../../../util/verificationParam";
import * as eccFormParamConfig from "../../../config/eccFormParamConfig";
import * as verificationEnumTools from "../../../util/verificationEnum";
import { ERRORENUM } from "../../../config/errorEnum";
import { BizError } from "../../../util/bizError";
import { extractData } from "../../../util/piecemeal";
import * as splitResultConfig from "../../../config/splitResultConfig";
/**
* 组织生活列表
* todo 接口协议不对
* @param status 活动状态 全部、正在进行、即将开展、已经开展
* @return {allActivity, afootActivity, beginInActivity, startedActivity}
* 返回说明 {全部活动列表, 正在进行活动列表, 即将开展活动列表, 已经开展活动列表}
*/
export async function getOrganizationalLifeList(type) {
let selectParam = {};
let now = new Date().valueOf();
switch (type) {
case enum.正在进行:
selectParam.startTime:{"$gt"}
}
1000
let organizationalLifeInfo = await organizationalLifeData.findOrganizationalLifeList(selectParam);
/**全部活动列表 */
let allActivity = [];
/**正在进行活动列表 */
let afootActivity = [];
/**即将开展活动列表 */
let beginInActivity = [];
/**已经开展活动列表 */
let startedActivity = [];
organizationalLifeInfo.forEach( info => {
let activityStatus = getActivityStatus(info.activityStartTime, info.activityEndTime)
let activityTime = "2023.05.17 14:00--16:00"; // -----------todo 活动时间 格式不确定,之后修改---------------------
allActivity.push({
_id: info._id,
partyActivityType: info.partyActivityType,
activityTime,
activityAdd: info.activityAdd,
activityStatus
});
switch (activityStatus) {
case "正在进行":
afootActivity.push({
_id: info._id,
partyActivityType: info.partyActivityType,
activityTime,
activityAdd: info.activityAdd,
activityStatus
});
break;
case "即将开展":
beginInActivity.push({
_id: info._id,
partyActivityType: info.partyActivityType,
activityTime,
activityAdd: info.activityAdd,
activityStatus
});
break;
case "已经开展":
startedActivity.push({
_id: info._id,
partyActivityType: info.partyActivityType,
activityTime,
activityAdd: info.activityAdd,
activityStatus
});
break;
}
})
return {allActivity, afootActivity, beginInActivity, startedActivity};
}
/**
* 组织生活活动状态
* 活动状态 1:正在进行、2:即将开展、3:已经开展
* @param activityStartTime 活动开始时间
* @param activityEndTime 活动结束时间
* @return status --活动状态
*/
function getActivityStatus(activityStartTime, activityEndTime) {
let nowTime = new Date().valueOf();
let startTime = moment(activityStartTime).format("YYYY.MM.DD HH:mm");
let endTime = moment(activityEndTime).format("YYYY.MM.DD HH:mm");
let underway = moment().isBetween(startTime, endTime); //true:正在进行
let status;
if (underway) {
status = "正在进行";
}
if (nowTime < activityStartTime) {
status = "即将开展";
}
if (nowTime > activityStartTime) {
status = "已经开展";
}
return status
}
/**
* 创建组织生活活动
* @param param {党建活动类型, 活动开始时间, 活动结束时间, 活动地点, 活动主持人, 活动记录人, 请假党员, 参与党员, 活动记录}
* 参数类型 { number, number, number, string, [string], [string], [string], [string], string}
* @return {isSuccess: true}
*/
export async function createActivity(param) {
eccFormParam("创建组织生活活动", eccFormParamConfig.CreateActivityConfig, param)
verificationEnumTools.eccEnumValue('创建组织生活活动的党建活动类型', 'partyActivityType', configEnum.ACTIVITYTYPE, param.partyActivityType);
await organizationalLifeData.createActivity(param);
return {isSuccess: true};
}
export async function getActivityById(_id) {
let activityInfo = await organizationalLifeData.findEventDetails(_id);
if (!activityInfo ) throw new BizError(ERRORENUM.未找到数据, `库中不存在${_id}这个组织生活活动`);
/**截取返回字段 */
let data = extractData(splitResultConfig.activityInfoConfig, activityInfo, false);
}
\ No newline at end of file
/**
* 小程序
* 组织生活
*/
import moment = require("moment");
import * as organizationalLifeData from "../../../data/organizationalLife";
import * as configEnum from "../../../config/enum";
import { eccFormParam } from "../../../util/verificationParam";
import * as eccFormParamConfig from "../../../config/eccFormParamConfig";
import * as verificationEnumTools from "../../../util/verificationEnum";
import { checkChange, extractData } from "../../../util/piecemeal";
import * as splitResultConfig from "../../../config/splitResultConfig";
import * as partyMemberData from "../../../data/partyMember";
import { BizError } from "../../../util/bizError";
import { ERRORENUM } from "../../../config/errorEnum";
moment.suppressDeprecationWarnings = true;
/**
* 组织生活列表
* todo 接口协议不对
* @param status 活动状态 全部、正在进行、即将开展、已经开展
* @return data
* 返回说明 根据传入的活动状态返回不同的列表
*/
export async function getOrganizationalLifeList(type:number, name:number) {
let allmoveAbout = []; //全部活动列表
let moveAboutList = [];
let data = [];
switch (type) {
case configEnum.TYPE.正在进行:
moveAboutList = await organizationalLifeData.findAfootActivityList(name);
break;
case configEnum.TYPE.即将开展:
moveAboutList = await organizationalLifeData.findBeginInActivityList(name);
break;
case configEnum.TYPE.已经开展:
moveAboutList = await organizationalLifeData.findStartedActivityList(name);
break;
default:
allmoveAbout = await organizationalLifeData.findOrganizationalLifeList({partyActivityType:name});
allmoveAbout.forEach(info => {
let activityStatus = getActivityStatus(info.activityStartTime, info.activityEndTime);
data.push({
id: info.id,
partyActivityType: verificationEnumTools.changeEnumValue(configEnum.ACTIVITYTYPE, info.partyActivityType),
activityStartTime: moment(info.activityStartTime).format("YYYY.MM.DD HH:mm"),
activityEndTime: moment(info.activityEndTime).format("YYYY.MM.DD HH:mm"),
activityAdd: info.activityAdd,
activityStatus
});
})
break;
}
moveAboutList.forEach( info => {
let changeData:any = extractData(splitResultConfig.moveAboutInfoConfig, info, false);
changeData.partyActivityType = verificationEnumTools.changeEnumValue(configEnum.ACTIVITYTYPE, info.partyActivityType);
changeData.activityStartTime = moment(info.activityStartTime).format("YYYY.MM.DD HH:mm");
changeData.activityEndTime = moment(info.activityEndTime).format("YYYY.MM.DD HH:mm");
changeData.activityStatus = getActivityStatus(info.activityStartTime, info.activityEndTime);
data.push(changeData);
})
return data;
}
/**
* 创建组织生活活动
* @param param {党建活动类型, 活动开始时间, 活动结束时间, 活动地点, 活动主持人, 活动记录人, 请假党员, 参与党员, 活动记录}
* 参数类型 { number, number, number, string, [string], [string], [number], [number], string}
* @return {isSuccess: true}
*/
export async function createOrganizationalLife(param) {
eccFormParam("创建组织生活活动", eccFormParamConfig.CreateActivityConfig, param)
verificationEnumTools.eccEnumValue('创建组织生活活动的党建活动类型', 'partyActivityType', configEnum.ACTIVITYTYPE, param.partyActivityType);
await organizationalLifeData.createActivity(param);
return {isSuccess: true};
}
/**
* 组织生活详细信息
* @param oId 编号
* @returns
*/
export async function getOrganizationalLifeById(oId:number) {
let activityInfo = await organizationalLifeData.findEventDetails(oId);
let changeData:any = {};
let leavePartyMember = [];
let participatingPartyMember = [];
/**截取返回字段 */
changeData = extractData(splitResultConfig.activityInfoConfig, activityInfo, false);
changeData.partyActivityType = verificationEnumTools.changeEnumValue(configEnum.ACTIVITYTYPE, activityInfo.partyActivityType);
changeData.activityStartTime = moment(activityInfo.activityStartTime).format("YYYY.MM.DD HH:mm");
changeData.activityEndTime = moment(activityInfo.activityEndTime).format("YYYY.MM.DD HH:mm");
//请假党员
for (let i = 0; i < activityInfo.leavePartyMember.length; i++) {
let nameData = await partyMemberData.getNameById(activityInfo.leavePartyMember[i]);
nameData.forEach( nameInfo => {
leavePartyMember.push(nameInfo.name);
})
};
//参与党员
for (let i = 0; i < activityInfo.participatingPartyMember.length; i++) {
let name = await partyMemberData.getNameById(activityInfo.participatingPartyMember[i]);
name.forEach( nameInfo => {
participatingPartyMember.push(nameInfo.name);
})
};
changeData.activityStatus = getActivityStatus(activityInfo.activityStartTime, activityInfo.activityEndTime);
changeData.leavePartyMember = leavePartyMember;
changeData.participatingPartyMember = participatingPartyMember;
return changeData;
}
/**
* 修改组织生活活动详情
* @param oId 组织生活id 修改对应oId的组织生活信息
* @param param {党建活动类型, 活动开始时间, 活动结束时间, 活动地点, 活动主持人, 活动记录人, 请假党员, 参与党员, 活动记录}
* 参数类型 { number, number, number, string, [string], [string], [number], [number], string}
* @returns
*/
export async function updateOrganizationalLife(oId:number, param) {
/**校验表单参数 */
eccFormParam("组织生活活动表单修改", eccFormParamConfig.UpdateActivityFormConfig, param );
verificationEnumTools.eccEnumValue('修改组织生活', 'partyActivityType', configEnum.ACTIVITYTYPE, param.partyActivityType);
let activityInfo = await organizationalLifeData.findEventDetails(oId);
if (!activityInfo) throw new BizError(ERRORENUM.未找到数据, `库中不存在id为${oId}的组织活动`);
let changeList = checkChange(param, activityInfo);
if ( !changeList.length ) throw new BizError(ERRORENUM.数据无更新, `${oId}数据无更新`);
changeList.forEach(key => {
activityInfo[key] = param[key];
});
await activityInfo.save();
return {isSuccess:true};
}
/**
* 创建/修改组织生活选择党员
* @param type 1:党员干部、2:入党积极分子、3:预备党员、4:全部党员 用于选项卡切换类型
* @param name 党员姓名 用于输入党员姓名查询
* @returns 根据传入的type返回不同党员信息
*/
export async function getPartyMemberNameList(type:number, name:string) {
let selectParam:any = {};
let partyMemberList;
if (type != 4) {
selectParam.entryType = type;
if(name != null) {
selectParam.name = name;
}
partyMemberList = await partyMemberData.getPartyMemberListByEntryType(selectParam);
} else {
partyMemberList = await partyMemberData.findPartyMemberAll(selectParam);
}
let data = [];
partyMemberList.forEach( info => {
let changeData:any = extractData(splitResultConfig.partyMemberConfig, info, false);
changeData.partyPositions = verificationEnumTools.changeEnumValue(configEnum.PARTYPOSITIONS, info.partyPositions);
data.push(changeData);
})
return data;
}
/**
* 创建/修改组织生活选择党员
* @returns 返回所有党员信息
*/
export async function getAllPartyMember() {
let partyMemberList = await partyMemberData.findPartyMemberAll({});
let data = [];
partyMemberList.forEach( info => {
let changeData:any = extractData(splitResultConfig.partyMemberConfig, info, false);
changeData.partyPositions = verificationEnumTools.changeEnumValue(configEnum.PARTYPOSITIONS, info.partyPositions);
switch (changeData.entryType) {
case 1:
changeData.color = "#C62A23";
break;
case 2:
changeData.color = "#3549B0";
break;
case 3:
changeData.color = "#E4B386";
break;
}
data.push(changeData);
})
return data;
}
/**
* 删除组织生活活动
* @param oId 活动id
* @returns
*/
export async function deleteOrganizationalLife(oId:number) {
let activityInfo = await organizationalLifeData.findEventDetails(oId);
if (activityInfo) throw new BizError(ERRORENUM.未找到数据, `库中不存在id为${oId}的组织活动`);
await organizationalLifeData.deleteActivity(oId);
return {isSuccess:true};
}
/**
* 组织生活活动状态
* 活动状态 1:正在进行、2:即将开展、3:已经开展
* @param activityStartTime 活动开始时间
* @param activityEndTime 活动结束时间
* @return status --活动状态
*/
function getActivityStatus(activityStartTime:number, activityEndTime:number) {
let nowTime = new Date().valueOf();
let startTime = moment(activityStartTime).format("YYYY.MM.DD HH:mm");
let endTime = moment(activityEndTime).format("YYYY.MM.DD HH:mm");
let underway = moment().isBetween(startTime, endTime); //true:正在进行
let status;
if (underway) {
status = "正在进行";
}
if (nowTime < activityStartTime) {
status = "即将开展";
}
if (nowTime > activityStartTime) {
status = "已经开展";
}
return status;
}
\ No newline at end of file
/**
* 小程序
* 党建资讯
*/
import * as partyInformationData from "../../../data/partyInformation";
import { eccFormParam } from "../../../util/verificationParam";
import * as eccFormParamConfig from "../../../config/eccFormParamConfig";
import * as verificationEnumTools from "../../../util/verificationEnum";
import * as configEnum from "../../../config/enum";
/**
* 创建党建资讯
* @param param {informationType: 党建资讯类型, title: "资讯标题", branch: "支部名称", informationTime: 资讯时间, detailedInformation: "资讯详细", img: "资讯图片"}
* @return {isSuccess: true}
*/
export async function createPartyInformation(param) {
eccFormParam("创建党建资讯", eccFormParamConfig.CreatePartyMemberFormConfig, param)
let partyInformation = await partyInformationData.createPartyInformation(param);
verificationEnumTools.eccEnumValue('党建资讯类型', 'informationType', configEnum.INFORMATIONTYPE, param.informationType);
await partyInformation.save();
return {isSuccess: true};
}
\ No newline at end of file
/**
* 小程序
* 党员基本信息
*/
import * as partyMemberData from "../../../data/partyMember";
import * as configEnum from "../../../config/enum";
import { extractData } from "../../../util/piecemeal";
import * as splitResultConfig from "../../../config/splitResultConfig";
import * as verificationEnumTools from "../../../util/verificationEnum";
import { eccFormParam } from "../../../util/verificationParam";
import * as eccFormParamConfig from "../../../config/eccFormParamConfig";
import { getPwdMd5, getToken } from "../../../tools/system";
/**
* 创建党员基础信息
* @param param {name: "姓名", sex: 性别, birthDate: 出生年月, phone: "手机号码", levelOfEducation: "文化程度", partyJoiningTime: 入党时间, administrativePosition: 行政职务,
* remarks: "备注", entryType: 名册录入类型, partyPositions: [党内职务, ...], listedAsActivistsTime: 列为积极份子时间, talkTime: 谈话时间, loginId: "登录账号"}
* @return {isSuccess: true}
*/
export async function createPartyMember(param) {
eccFormParam("创建正式党员录入", eccFormParamConfig.CreatePartyMemberFormConfig, param);
verificationEnumTools.eccEnumValue('正式党员录入性别', 'partyActivityType', configEnum.SEX, param.partyActivityType);
verificationEnumTools.eccEnumValue('正式党员录入党内职务', 'partyPositions', configEnum.PARTYPOSITIONS, param.partyPositions);
verificationEnumTools.eccEnumValue('正式党员名册录入类型', 'entryType', configEnum.ENTRYTYPE, param.entryType);
let partyMemberInfo:any = await partyMemberData.createPartyMember(param);
partyMemberInfo.pwd = getPwdMd5(param.phone, param.phone.slice(5, 11));
partyMemberInfo.token = getToken(param.phone);
partyMemberInfo.tokenMs = new Date().valueOf();
await partyMemberInfo.save();
return {isSuccess: true};
}
\ No newline at end of file
...@@ -36,6 +36,7 @@ export async function login(loginId:string, pwd:string) { ...@@ -36,6 +36,7 @@ export async function login(loginId:string, pwd:string) {
return loginUserInfo; return loginUserInfo;
} }
/** /**
* 首次登录修改密码 * 首次登录修改密码
* @param loginId 登录账号 * @param loginId 登录账号
...@@ -57,3 +58,34 @@ export async function firstLoginChangePwd(loginId:string, pwd:string, confirmPwd ...@@ -57,3 +58,34 @@ export async function firstLoginChangePwd(loginId:string, pwd:string, confirmPwd
return {isSuccess: true}; return {isSuccess: true};
} }
/**
* 修改密码
* 小程序端 2.0
* @param uscc 信用代码
* @param pwd 原密码 md5之后的
* @param newPwd 新密码 未md5
* @param confirmPwd 确认新密码 未md5
* @returns {isSuccess:true/false}
*/
export async function changePassword(loginId:string, pwd:string, newPwd:string, confirmPwd:string ) {
if (newPwd != confirmPwd) throw new BizError(ERRORENUM.密码不一致);
if (newPwd.search(/^[A-Za-z0-9]{6,18}$/) < 0) throw new BizError(ERRORENUM.密码只能由618位字符和数字组成);
let partyMemberInfo = await partyMemberData.findPartyMemberByLoginId(loginId);
if (!partyMemberInfo) throw new BizError(ERRORENUM.未找到数据);
/**由于pwd是md5之后的 所以这里md5一次即可 */
let checkPwd = sysTools.getPwdMd5(partyMemberInfo.uscc, pwd);
if (partyMemberInfo.pwd != checkPwd) throw new BizError(ERRORENUM.密码错误);
/**考虑到如果前端把新密码也md5 就不可以验证是不是符合规则 所以前端传的是明文
* 我们初始化密码的时候 有两次加密 第一次是密码md5 然后再和uscc 进行md5
* 于是这里也要如此操作
*/
partyMemberInfo.pwd = sysTools.getPwdMd5(loginId, sysTools.md5PwdStr(newPwd));
await partyMemberInfo.save();
return {isSuccess:true};
}
\ No newline at end of file
...@@ -8,18 +8,76 @@ ...@@ -8,18 +8,76 @@
/** /**
* 使用端: 小程序端 * 使用端: 小程序端_党员入口
* 场景: 创建组织生活活动表单 * 场景: 创建组织生活活动表单
* 备注: * 备注: 全部非必填
*/ */
export const CreateActivityConfig = { export const CreateActivityConfig = {
partyActivityType:{type:"Number"},//党建活动类型 partyActivityType:{type:"Number", notMustHave:true},//党建活动类型
activityStartTime:{type:"Number"},//活动开始时间 activityStartTime:{type:"Number", notMustHave:true},//活动开始时间
activityEndTime:{type:"Number"},//活动结束时间 activityEndTime:{type:"Number", notMustHave:true},//活动结束时间
activityAdd:{type:"String"},//活动地点 activityAdd:{type:"String", notMustHave:true},//活动地点
activityHost:{type:"[Object]"},//活动主持人 activityHost:{type:"[String]", notMustHave:true},//活动主持人
activityNoteTaker:{type:"[Object]"},//活动记录人 activityNoteTaker:{type:"[String]", notMustHave:true},//活动记录人
leavePartyMember:{type:"[Object]", notMustHave:true},//请假党员 leavePartyMember:{type:"[Number]", notMustHave:true},//请假党员
participatingPartyMember:{type:"[Object]", notMustHave:true},//参与党员 participatingPartyMember:{type:"[Number]", notMustHave:true},//参与党员
participationRecord:{type:"String", notMustHave:true},//活动记录 participationRecord:{type:"String", notMustHave:true},//活动记录
}; };
/**
* 使用端: 小程序端_党员入口
* 场景: 修改组织生活活动表单
* 备注: 全部非必填
*/
export const UpdateActivityFormConfig = {
partyActivityType:{type:"Number", notMustHave:true},//党建活动类型
activityStartTime:{type:"Number", notMustHave:true},//活动开始时间
activityEndTime:{type:"Number", notMustHave:true},//活动结束时间
activityAdd:{type:"String", notMustHave:true},//活动地点
activityHost:{type:"[String]", notMustHave:true},//活动主持人
activityNoteTaker:{type:"[String]", notMustHave:true},//活动记录人
leavePartyMember:{type:"[Number]", notMustHave:true},//请假党员
participatingPartyMember:{type:"[Number]", notMustHave:true},//参与党员
participationRecord:{type:"String", notMustHave:true},//活动记录
}
/**
* 使用端: 小程序端_党员入口
* 场景: 创建正式党员录入表单
* 备注: 全部非必填
*/
export const CreatePartyMemberFormConfig = {
name:{type:"String"},//姓名
sex:{type:"Number"},//性别
birthDate:{type:"Number"},//出生年月
phone:{type:"String"},//手机号码
levelOfEducation:{type:"String"},//文化程度
partyJoiningTime:{type:"Number"},//入党时间
administrativePosition:{type:"Number"},//行政职务
remarks:{type:"String", notMustHave:true},//备注
entryType:{type:"Number"},//名册录入类型
partyPositions:{type:"[Number]"},//党内职务
listedAsActivistsTime:{type:"Number", notMustHave:true},//列为积极份子时间
talkTime:{type:"Number", notMustHave:true},//谈话时间
loginId:{type:"String", notMustHave:true},//登录账号
pwd:{type:"String", notMustHave:true},//密码
}
/**
* 使用端: 小程序端_党员入口
* 场景: 创建党建资讯录入表单
* 备注: 全部非必填
*/
export const createPartyInformation = {
pid:{type:"Number", notMustHave:true},
informationType:{type:"Number", notMustHave:true},
title:{type:"String", notMustHave:true},
branch:{type:"String", notMustHave:true},
inforMationTime:{type:"Number", notMustHave:true},
detailedInformation:{type:"String", notMustHave:true},
img:{type:"String", notMustHave:true}
}
\ No newline at end of file
...@@ -7,7 +7,20 @@ export enum PARTYPOSITIONS { ...@@ -7,7 +7,20 @@ export enum PARTYPOSITIONS {
支部副书记, 支部副书记,
纪检委员, 纪检委员,
组织委员, 组织委员,
宣传委员 宣传委员,
党员,
入党积极分子,
预备党员,
}
/**
* 组织生活活动类型
*/
export enum TYPE {
正在进行 = 1,
即将开展,
已经开展
} }
...@@ -34,7 +47,7 @@ export enum ACTIVITYTYPE { ...@@ -34,7 +47,7 @@ export enum ACTIVITYTYPE {
} }
/** /**
* 党建咨询类型 * 党建资讯类型
*/ */
export enum INFORMATIONTYPE { export enum INFORMATIONTYPE {
医院文化 = 1, 医院文化 = 1,
...@@ -44,15 +57,6 @@ export enum INFORMATIONTYPE { ...@@ -44,15 +57,6 @@ export enum INFORMATIONTYPE {
} }
/** /**
* 最高学历
*/
export enum DEGREE {
本科 = 1,
硕士,
博士
}
/**
* 性别 * 性别
*/ */
export enum SEX { export enum SEX {
......
export enum ERRORENUM { export enum ERRORENUM {
未找到数据, 未找到数据,
账号不存在,
密码错误,
密码不一致,
密码只能由618位字符和数字组成,
不能重复修改密码,
表单校验失败,
参数错误,
数据无更新,
地址数据不完整
} }
export enum ERRORCODEENUM { export enum ERRORCODEENUM {
......
...@@ -6,12 +6,12 @@ ...@@ -6,12 +6,12 @@
/** /**
* 使用端: 管理后台 * 使用端: 小程序_党员入口
* 场景: 孵化器基础数据列表 * 场景: 首页党建资讯列表
* 备注: 导出和列表共用一份配置 * 备注:
*/ */
export const partyInformationConfig = { export const partyInformationConfig = {
_id:{key:"id"}, id:{key:"id"},
informationType:{key:"党建资讯类型"}, informationType:{key:"党建资讯类型"},
title:{key:"资讯标题"}, title:{key:"资讯标题"},
branch:{key:"支部"}, branch:{key:"支部"},
...@@ -20,8 +20,12 @@ export const partyInformationConfig = { ...@@ -20,8 +20,12 @@ export const partyInformationConfig = {
}; };
/**
* 使用端: 小程序_党员入口
* 场景: 组织生活详细信息
* 备注:
*/
export const activityInfoConfig = { export const activityInfoConfig = {
partyActivityType:{key:"党建活动类型"}, partyActivityType:{key:"党建活动类型"},
activityStartTime:{key:"活动开始时间"}, activityStartTime:{key:"活动开始时间"},
activityEndTime:{key:"活动结束时间"}, activityEndTime:{key:"活动结束时间"},
...@@ -31,4 +35,34 @@ export const activityInfoConfig = { ...@@ -31,4 +35,34 @@ export const activityInfoConfig = {
leavePartyMember:{key:"请假党员"}, leavePartyMember:{key:"请假党员"},
participatingPartyMember:{key:"参与党员"}, participatingPartyMember:{key:"参与党员"},
participationRecord:{key:"活动记录"}, participationRecord:{key:"活动记录"},
activityStatus:{key:"活动状态"}
}
/**
* 使用端: 小程序_党员入口
* 场景: 组织生活
* 备注:
*/
export const moveAboutInfoConfig = {
id:{key:"id"},
partyActivityType:{key:"党建活动类型"},
activityStartTime:{key:"活动时间"},
activityEndTime:{key:"活动结束时间"},
activityAdd:{key:"活动地点"},
activityStatus:{key:"活动状态"}
}
/**
* 使用端: 小程序_党员入口
* 场景: 选择党员
* 备注:
*/
export const partyMemberConfig = {
id:{key:"id"},
name:{key:"姓名"},
entryType:{key: "党员类型"},
partyPositions:{key:"党内职务"},
color:{key:"颜色"},
} }
\ No newline at end of file
...@@ -4,35 +4,35 @@ ...@@ -4,35 +4,35 @@
*/ */
import { Schema } from "mongoose"; import { Schema } from "mongoose";
import {yfsDB} from '../db/mongo/dbInit'; import {yfsDB} from '../db/dbInit';
var autoIncrement = require('mongoose-auto-increment');
const organizationalLifeSchema = new Schema({ const organizationalLifeSchema = new Schema({
//todo 缺个id oId: {type:Number, index:{unique: true}}, //自增的活动id
/**党建活动类型 1:日常教育培训、2:主题党日活动、3:骨干队伍培训、4:支部工作会、5:二十大精神、6:三会一课 */ partyActivityType: Number, //党建活动类型 1:日常教育培训、2:主题党日活动、3:骨干队伍培训、4:支部工作会、5:二十大精神、6:三会一课
partyActivityType: Number, activityStartTime: {type:Number, index:true}, //活动开始时间
/**活动开始时间 */ activityEndTime:{type:Number, index:true}, //活动结束时间
activityStartTime: {type:Number, index:true}, activityAdd: String, //活动地点
/**活动结束时间 */ activityHost: {type:[String], default:[]}, //活动主持人
activityEndTime:{type:Number, index:true}, activityNoteTaker:{type:[String], default:[]}, //活动记录人
/**活动地点 */ leavePartyMember:[Number], //请假党员 非必填
activityAdd: String, participatingPartyMember:[Number], //参与党员
/**活动主持人 */ participationRecord:String, //活动记录
activityHost: [String],
/**活动记录人 */
activityNoteTaker:[String],
/**请假党员 非必填*/
leavePartyMember:[String],
/**参与党员 */
participatingPartyMember:[String],
/**活动记录 */
participationRecord:String,
}) })
var organizationalLifeModel; var organizationalLifeModel;
export function initModel(){ export function initModel(){
organizationalLifeSchema.plugin(autoIncrement.plugin, {
model: 'organizationalLifeSchema',
field: 'oId',
startAt: 1, //初始化id从1开始
incrementBy: 1 //每次自增1
});
organizationalLifeModel = yfsDB.model('organizationalLife', organizationalLifeSchema); organizationalLifeModel = yfsDB.model('organizationalLife', organizationalLifeSchema);
organizationalLifeModel.selectOnceData = async function (paramater:object) { organizationalLifeModel.selectOnceData = async function (paramater:object) {
let selectInfo = await organizationalLifeModel.findOne(paramater).exec(); let selectInfo = await organizationalLifeModel.findOne(paramater).exec();
if (selectInfo) { if (selectInfo) {
...@@ -41,10 +41,13 @@ export function initModel(){ ...@@ -41,10 +41,13 @@ export function initModel(){
selectInfo.save = save.bind(selectInfo) selectInfo.save = save.bind(selectInfo)
} }
} }
return selectInfo; return selectInfo;
} }
} }
export async function save(throwError=false) { export async function save(throwError=false) {
if (!this.isModified()) return; if (!this.isModified()) return;
await this.runSave({validateBeforeSave:false}).catch(err=>{ await this.runSave({validateBeforeSave:false}).catch(err=>{
...@@ -54,12 +57,46 @@ export async function save(throwError=false) { ...@@ -54,12 +57,46 @@ export async function save(throwError=false) {
/** /**
* 获取符合条件的党建资讯列表 * 获取符合条件的组织生活列表
* @param selectParam 查询参数 * @param param 查询参数
* @returns
*/
export async function findOrganizationalLifeList(param) {
return await organizationalLifeModel.find(param);
}
/**
* 获取正在进行的组织生活列表
* 开始时间小于当前时间,结束时间大于当前时间
* gt:大于某个值的数据、lt:小于某个值的数据
* @returns
*/
export async function findAfootActivityList(partyActivityType:number) {
let nowTime = new Date().valueOf();
return await organizationalLifeModel.find({"$and":[ {"activityStartTime":{"$lt":(nowTime)}}, {"activityEndTime":{"$gt":(nowTime)}}, {partyActivityType} ]});
}
/**
* 获取即将开展的组织生活列表
* 开始时间大于当前时间
* @returns * @returns
*/ */
export async function findOrganizationalLifeList(selectParam) { export async function findBeginInActivityList(partyActivityType:number) {
return await organizationalLifeModel.find(selectParam); let nowTime = new Date().valueOf();
return await organizationalLifeModel.find({"activityStartTime":{"$gt":(nowTime)}, partyActivityType});
}
/**
* 获取已经开展的组织生活列表
* 结束时间小于当前时间
* @returns
*/
export async function findStartedActivityList(partyActivityType:number) {
let nowTime = new Date().valueOf();
return await organizationalLifeModel.find({"activityEndTime":{"$lt":(nowTime)}, partyActivityType});
} }
...@@ -74,9 +111,19 @@ export async function createActivity(param) { ...@@ -74,9 +111,19 @@ export async function createActivity(param) {
/** /**
* 获取活动详情 * 获取活动详情
* @param _id id 唯一标识 * @param id id 唯一标识
* @returns
*/
export async function findEventDetails(oId) {
return await organizationalLifeModel.findOne({oId});
}
/**
* 删除组织生活活动
* @param oId 活动id
* @returns * @returns
*/ */
export async function findEventDetails(_id) { export async function deleteActivity(oId:number) {
return await organizationalLifeModel.find({_id}); return await organizationalLifeModel.deleteOne({oId}).exec();
} }
\ No newline at end of file
...@@ -4,28 +4,29 @@ ...@@ -4,28 +4,29 @@
*/ */
import { Schema } from "mongoose"; import { Schema } from "mongoose";
import {yfsDB} from '../db/mongo/dbInit'; import {yfsDB} from '../db/dbInit'
var autoIncrement = require('mongoose-auto-increment');;
const partyInformationSchema = new Schema({ const partyInformationSchema = new Schema({
_id: {type: String, index:true}, pId: {type:Number, index:{unique: true}}, //自增的id
/**党建资讯类型 1:医院文化、2:精神文明、3:科普知识、4、先进典型 */ informationType: Number, //党建资讯类型 1:医院文化、2:精神文明、3:科普知识、4、先进典型
informationType: Number, title: String, //资讯标题
/**资讯标题 */ branch: String, //支部
title: String, informationTime: Number, //资讯时间
/**支部 */ detailedInformation: String, //资讯详细
branch: String, img: {type:String, data:Buffer}, //图片
/**资讯时间 */
informationTime: Number,
/**资讯详细 */
detailedInformation: String,
/**图片 */
img: String,
}) })
var partyInformationModel; var partyInformationModel;
export function initModel(){ export function initModel(){
partyInformationSchema.plugin(autoIncrement.plugin, {
model: 'partyInformationSchema',
field: 'pId',
startAt: 1, //初始化id从1开始
incrementBy: 1 //每次自增1
});
partyInformationModel = yfsDB.model('partyInformation', partyInformationSchema); partyInformationModel = yfsDB.model('partyInformation', partyInformationSchema);
partyInformationModel.selectOnceData = async function (paramater:object) { partyInformationModel.selectOnceData = async function (paramater:object) {
let selectInfo = await partyInformationModel.findOne(paramater).exec(); let selectInfo = await partyInformationModel.findOne(paramater).exec();
...@@ -35,10 +36,12 @@ export function initModel(){ ...@@ -35,10 +36,12 @@ export function initModel(){
selectInfo.save = save.bind(selectInfo) selectInfo.save = save.bind(selectInfo)
} }
} }
return selectInfo; return selectInfo;
} }
} }
export async function save(throwError=false) { export async function save(throwError=false) {
if (!this.isModified()) return; if (!this.isModified()) return;
await this.runSave({validateBeforeSave:false}).catch(err=>{ await this.runSave({validateBeforeSave:false}).catch(err=>{
...@@ -48,11 +51,20 @@ export async function save(throwError=false) { ...@@ -48,11 +51,20 @@ export async function save(throwError=false) {
/** /**
* 获取符合条件的党建资讯列表 * 根据党建资讯类型查询的党建资讯列表
* @param selectParam 查询参数 * @param informationType 党建资讯类型 1:医院文化、2:精神文明、3:科普知识、4、先进典型
* @returns * @returns
*/ */
export async function findPartyInformationList(selectParam) { export async function findPartyInformationListByType(informationType:number) {
return await partyInformationModel.find(selectParam); return await partyInformationModel.find({informationType});
} }
/**
* 创建党建资讯
* @param param 所添加表单 需要提前验证
* @returns
*/
export async function createPartyInformation(param) {
return await partyInformationModel.create(param);
}
\ No newline at end of file
/** /**
* 党员基信息表 * 党员基信息表
*/ */
import { Schema } from "mongoose"; import { Schema } from "mongoose";
import {yfsDB} from '../db/mongo/dbInit'; import {yfsDB} from '../db/dbInit';
var autoIncrement = require('mongoose-auto-increment');
const partyMemberSchema = new Schema({ const partyMemberSchema = new Schema({
_id: {type: String, index:true}, id: {type:Number, index:{unique: true}}, //自增的id
/**姓名 必填 */ name: String, //姓名
name: String, sex: Number, //性别 1:男、2:女
/**性别 0:男、1:女 必填 */ birthDate: Number, //出生年月
sex: Number, phone: String, //手机号码
/**出生年月 必填 */ levelOfEducation: String, //文化程度
birthDate: Number, partyJoiningTime: Number, //入党时间
/**手机号码 必填 */ administrativePosition: Number, //行政职务 1:
phone: Number, remarks: String, //备注
/**文化程度 必填 */ entryType: Number, //名册录入类型 1:正式党员录入、2:入党积极分子录入、3:入党申请录入
levelOfEducation: Number, partyPositions: [Number], //党内职务 多选 --正式党员录入 1:书记、2:副书记、3:纪检委员、4:组织委员、5:宣传委员、6:党员、7:入党积极分子、8:预备党员
/**入党时间 必填 */ listedAsActivistsTime: Number, //列为积极份子时间 --入党积极份子录入
partyJoiningTime: Number, talkTime: Number, //谈话时间 --入党申请录入
/**行政职务 必填 1: */
administrativePosition: Number,
/**备注 非必填 */
remarks: String,
/**名册录入类型 1:正式党员录入、2:入党积极分子录入、3:入党申请录入 */
entryType: Number,
/**党内职务 多选 --正式党员录入 1:书记、2:副书记、3:纪检委员、4:组织委员、5:宣传委员 */
partyPositions: [Number],
/**列为积极份子时间 --入党积极份子录入 */
listedAsActivistsTime: Number,
/**谈话时间 --入党申请录入 */
talkTime: Number,
/**-----用户相关----- */ /**-----用户相关----- */
/**登录账号 */ loginId: {type: String, index: true}, //登录账号
loginId: {type: String, index: true}, pwd: String, //密码
/**密码 */
pwd: String,
token:{type:String, index:true}, token:{type:String, index:true},
tokenMs:Number, tokenMs:Number,
/**首次登录是否修改密码 */ firstLoginIsChangePwd:{type:Boolean, default:false}, //首次登录是否修改密码
firstLoginIsChangePwd:{type:Boolean, default:false},
}) })
var partyMemberModel; var partyMemberModel;
export function initModel(){ export function initModel(){
partyMemberSchema.plugin(autoIncrement.plugin, {
model: 'partyMemberSchema',
field: 'id',
startAt: 1, //初始化id从1开始
incrementBy: 1 //每次自增1
});
partyMemberModel = yfsDB.model('partyMember', partyMemberSchema); partyMemberModel = yfsDB.model('partyMember', partyMemberSchema);
partyMemberModel.selectOnceData = async function (paramater:object) { partyMemberModel.selectOnceData = async function (paramater:object) {
let selectInfo = await partyMemberModel.findOne(paramater).exec(); let selectInfo = await partyMemberModel.findOne(paramater).exec();
...@@ -55,10 +48,12 @@ export function initModel(){ ...@@ -55,10 +48,12 @@ export function initModel(){
selectInfo.save = save.bind(selectInfo) selectInfo.save = save.bind(selectInfo)
} }
} }
return selectInfo; return selectInfo;
} }
} }
export async function save(throwError=false) { export async function save(throwError=false) {
if (!this.isModified()) return; if (!this.isModified()) return;
await this.runSave({validateBeforeSave:false}).catch(err=>{ await this.runSave({validateBeforeSave:false}).catch(err=>{
...@@ -66,8 +61,14 @@ export async function save(throwError=false) { ...@@ -66,8 +61,14 @@ export async function save(throwError=false) {
}); });
} }
export async function findPartyMemberAll() {
return await partyMemberModel.find({}); /**
* 获取符合条件的所有党员信息
* @param param 查询参数
* @returns
*/
export async function findPartyMemberAll(param) {
return await partyMemberModel.find(param);
} }
...@@ -83,22 +84,48 @@ export async function findPartyMemberByLoginId(loginId:string) { ...@@ -83,22 +84,48 @@ export async function findPartyMemberByLoginId(loginId:string) {
/** /**
* 获取符合条件的党员数量 * 获取符合条件的党员数量
* @param selectParam 查询参数 * @param param 查询参数
* @returns number 数据数量 * @returns number 数据数量
*/ */
export async function groupFindPartyMemberCount(selectParam) { export async function groupFindPartyMemberCount(param:object) {
return await partyMemberModel.find(selectParam).count(); return await partyMemberModel.find(param).count();
} }
/** /**
* 根据党内职务查询在职人员信息 * 根据党内职务查询在职人员信息
* @param partyPositions 党内职务 * @param partyPositions 党内职务 [1, 2]
* @returns * @returns
*/ */
export async function getBaseListByPartyPositions(partyPositions:number) { export async function getBaseListByPartyPositions(partyPositions) {
//todo sql有问题,重写一下 return await partyMemberModel.find({partyPositions:{$in: partyPositions }});
return await partyMemberModel.find({partyPositions:{"in": partyPositions }});
} }
/**
*
* @param id 根据id查询党员名称
* @returns
*/
export async function getNameById(id:number) {
return await partyMemberModel.find({id});
}
/**
* 根据党员类型查询党员信息
* @param param entryType 党员类型
* @returns
*/
export async function getPartyMemberListByEntryType(param) {
return await partyMemberModel.find(param);
}
/**
* 创建正式党员信息
* @param param 所添加表单 需要提前验证
*/
export async function createPartyMember(param) {
return await partyMemberModel.create(param);
}
...@@ -13,6 +13,7 @@ let defaultOptions = { ...@@ -13,6 +13,7 @@ let defaultOptions = {
export async function createDbConnect(connectUrl:string, options?:object) { export async function createDbConnect(connectUrl:string, options?:object) {
mongoose.set('useFindAndModify', false); //解决mongoose旧版弹出的警告
if (!options) options = defaultOptions; if (!options) options = defaultOptions;
return await mongoose.createConnection(connectUrl, options).catch( return await mongoose.createConnection(connectUrl, options).catch(
(err)=>{ (err)=>{
......
import { systemConfig } from "../config/systemConfig"; import { systemConfig } from "../config/systemConfig";
import { BizError } from "../util/bizError"; import { BizError } from "../util/bizError";
import { createDbConnect } from "./dbConnect"; import { createDbConnect } from "./dbConnect";
import { initTable } from "./tableInit"; import { initTable } from "./tableInit";
var autoIncrement = require('mongoose-auto-increment');
var yfsDB; var yfsDB;
export async function initDB() { export async function initDB() {
...@@ -14,6 +13,7 @@ export async function initDB() { ...@@ -14,6 +13,7 @@ export async function initDB() {
throw err throw err
}); });
autoIncrement.initialize(yfsDB);
await initTable(); await initTable();
console.log('mongodb init success'); console.log('mongodb init success');
} else { } else {
......
// import * as taskinModel from "../../data/fuHuaQi/task"; import * as organizationalLifeModel from "../data/organizationalLife";
import * as partyInformationModel from "../data/partyInformation";
import * as partyMemberModel from "../data/partyMember";
export async function initTable() { export async function initTable() {
// taskinModel.initModel(); partyMemberModel.initModel();
organizationalLifeModel.initModel();
partyInformationModel.initModel();
} }
\ No newline at end of file
import { initConfig, systemConfig} from "./config/systemConfig"; import { initConfig, systemConfig} from "./config/systemConfig";
import { initDB } from "./db/dbInit"; import { initDB } from "./db/dbInit";
import { httpServer } from "./net/http_server"; import { httpServer } from "./net/http_server";
import { getPwdMd5, getToken } from "./tools/system";
async function lanuch() { async function lanuch() {
// test();
/**初始化配置解析 */ /**初始化配置解析 */
await initConfig(); await initConfig();
/**初始化数据库 */ /**初始化数据库 */
...@@ -12,6 +14,10 @@ async function lanuch() { ...@@ -12,6 +14,10 @@ async function lanuch() {
console.log('This indicates that the server is started successfully.'); console.log('This indicates that the server is started successfully.');
} }
function test() {
let pwd = getPwdMd5("13572364589", "364589");
let token = getToken("13572364589");
console.log();
}
lanuch(); lanuch();
\ No newline at end of file
/**
* 小程序端 党员入口 党建首页路由
*/
import * as baseBiz from '../../biz/applet/base';
import * as asyncHandler from 'express-async-handler';
import { eccReqParamater } from '../../util/verificationParam';
export function setRouter(httpServer) {
httpServer.post('/partymember/home', asyncHandler(homeBase));
httpServer.post('/partymember/information', asyncHandler(informationBase));
}
/**
* 党建首页基础数据
* @param req
* @param res
*/
async function homeBase(req, res) {
let baseInfo = await baseBiz.homeData();
res.success(baseInfo);
}
/**
* 党建首页党建资讯列表
* @param req
* @param res
*/
async function informationBase(req, res) {
let reqConf = {informationType:'Number'};
let {informationType} = eccReqParamater(reqConf, req.body);
let informationInfo = await baseBiz.informationData(informationType);
res.success(informationInfo);
}
\ No newline at end of file
/**
* 小程序端 党员入口 组织生活路由
*/
import * as organizationalLifeBiz from '../../biz/applet/organizationalLife/organizationalLife';
import * as asyncHandler from 'express-async-handler';
import { eccReqParamater } from '../../util/verificationParam';
export function setRouter(httpServer) {
httpServer.post('/partymember/organizationallife/list', asyncHandler(organizationalLifeList));
httpServer.post('/partymember/organizationallife/create', asyncHandler(createOrganizationalLife));
httpServer.post('/partymember/organizationallife/details', asyncHandler(detailsList));
httpServer.post('/partymember/organizationallife/update', asyncHandler(updateOrganizationalLife));
// httpServer.post('/applet/organizationallife/partymembernamelist', asyncHandler(getPartyMemberNameList));
httpServer.post('/partymember/organizationallife/partymembernamelist', asyncHandler(getAllPartyMember));
}
/**
* 组织生活列表
* @param req
* @param res
*/
async function organizationalLifeList(req, res) {
let reqConf = {type:'Number', name:'Number'};
let {type, name} = eccReqParamater(reqConf, req.body, ["name"]);
let result = await organizationalLifeBiz.getOrganizationalLifeList(type, name);
res.success(result);
}
/**
* 创建活动
* @param req
* @param res
*/
async function createOrganizationalLife(req, res) {
let reqConf = {form: 'Object' };
let { form } = eccReqParamater(reqConf, req.body);
let result = await organizationalLifeBiz.createOrganizationalLife(form);
res.success(result);
}
/**
* 组织生活详情
* @param req
* @param res
*/
async function detailsList(req, res) {
let reqConf = {oId: 'Number' };
let {oId} = eccReqParamater(reqConf, req.body);
let result = await organizationalLifeBiz.getOrganizationalLifeById(oId);
res.success(result);
}
/**
* 修改对应oId的组织生活
* @param req
* @param res
*/
async function updateOrganizationalLife(req, res) {
let reqConf = {oId: 'Number', form: 'Object' };
let { oId, form } = eccReqParamater(reqConf, req.body);
let result = await organizationalLifeBiz.updateOrganizationalLife(oId, form);
res.success(result);
}
/**
* 获取选择类型的党员信息
* @param req
* @param res
* 停用
*/
async function getPartyMemberNameList(req, res) {
let reqConf = {type: "Number", name: "String"};
let {type, name} = eccReqParamater(reqConf, req.body, ["name"]);
let result = await organizationalLifeBiz.getPartyMemberNameList(type, name);
res.success(result);
}
/**
* 获取全部党员信息
* @param req
* @param res
*/
async function getAllPartyMember(req, res) {
let result = await organizationalLifeBiz.getAllPartyMember();
res.success(result);
}
\ No newline at end of file
/**
* 小程序端 党员入口 党建资讯
*/
import * as partyInforMationBiz from '../../biz/applet/partyMember/partyInforMation';
import * as asyncHandler from 'express-async-handler';
import { eccReqParamater } from '../../util/verificationParam';
export function setRouter(httpServer) {
httpServer.post('/partymember/partyInforMation/create', asyncHandler(createPartyInformation));
}
/**
* 创建党员
* @param req
* @param res
*/
async function createPartyInformation(req, res) {
let reqConf = {form: 'Object' };
let { form } = eccReqParamater(reqConf, req.body);
let result = await partyInforMationBiz.createPartyInformation(form);
res.success(result);
}
/**
* 小程序端 党员入口 党员基础信息
*/
import * as partyMemberBiz from '../../biz/applet/partyMember/partyMember';
import * as asyncHandler from 'express-async-handler';
import { eccReqParamater } from '../../util/verificationParam';
export function setRouter(httpServer) {
httpServer.post('/partymember/partymember/create', asyncHandler(createPartyMenber));
}
/**
* 创建党员
* @param req
* @param res
*/
async function createPartyMenber(req, res) {
let reqConf = {form: 'Object' };
let { form } = eccReqParamater(reqConf, req.body);
let result = await partyMemberBiz.createPartyMember(form);
res.success(result);
}
/**
* 小程序端 党员入口 用户基础功能路由
*/
import * as userBiz from '../../biz/applet/user';
import * as asyncHandler from 'express-async-handler';
import { eccReqParamater } from '../../util/verificationParam';
export function setRouter(httpServer) {
httpServer.post('/partymember/login', asyncHandler(login));
httpServer.post('/partymember/changePwd', asyncHandler(changePwd));
httpServer.post('/partymember/login/firstupdate', asyncHandler(firstUpdatePwd));
}
/**
* 党员入口登录
* @param req
* @param res
*/
async function login(req, res) {
let reqConf = {loginId:'String', pwd:'String'};
let {loginId, pwd} = eccReqParamater(reqConf, req.body);
let userInfo = await userBiz.login(loginId, pwd);
res.success(userInfo);
}
/**
* 首次登录
* @param req
* @param res
*/
async function firstUpdatePwd(req, res) {
let reqConf = {confirmPwd:'String', pwd:'String' };
let {confirmPwd, pwd} = eccReqParamater(reqConf, req.body);
const LoginId = req.headers.loginId;
let result = await userBiz.firstLoginChangePwd(LoginId, pwd, confirmPwd);
res.success(result);
}
/**
* 修改密码
* @param req
* @param res
*/
async function changePwd(req, res) {
let reqConf = {confirmPwd:'String', newPwd:'String', pwd:'String' };
let {confirmPwd, newPwd, pwd} = eccReqParamater(reqConf, req.body);
const Uscc = req.headers.uscc;
let result = await userBiz.changePassword(Uscc, pwd, newPwd, confirmPwd);
res.success(result);
}
\ No newline at end of file
/**
* 公共资源路由
*/
import * as asyncHandler from 'express-async-handler';
import * as configEnum from "../config/enum";
export function setRouter(httpServer) {
httpServer.post('/public/partypositions', asyncHandler(partyPositions));
httpServer.post('/public/type', asyncHandler(type));
httpServer.post('/public/entrytype', asyncHandler(entryType));
httpServer.post('/public/activitytype', asyncHandler(activityType));
httpServer.post('/public/informationtype', asyncHandler(informationType));
}
/**
* 党内职务
* @param req
* @param res
*/
function partyPositions(req, res) {
let dataList = [];
for (let key in configEnum.PARTYPOSITIONS) {
let anyKey:any = key;
if (isNaN(anyKey)) {
let keyStr = key;
dataList.push({key:keyStr, value:configEnum.PARTYPOSITIONS[key]});
}
}
res.success(dataList);
}
/**
* 组织生活活动类型
* @param req
* @param res
*/
function type(req, res) {
let dataList = [];
for (let key in configEnum.TYPE) {
let anyKey:any = key;
if (isNaN(anyKey)) {
let keyStr = key;
dataList.push({key:keyStr, value:configEnum.TYPE[key]});
}
}
res.success(dataList);
}
/**
* 名册录入类型
* @param req
* @param res
*/
function entryType(req, res) {
let dataList = [];
for (let key in configEnum.ENTRYTYPE) {
let anyKey:any = key;
if (isNaN(anyKey)) {
let keyStr = key;
dataList.push({key:keyStr, value:configEnum.ENTRYTYPE[key]});
}
}
res.success(dataList);
}
/**
* 党建活动类型
* @param req
* @param res
*/
function activityType(req, res) {
let dataList = [];
for (let key in configEnum.ACTIVITYTYPE) {
let anyKey:any = key;
if (isNaN(anyKey)) {
let keyStr = key;
dataList.push({key:keyStr, value:configEnum.ACTIVITYTYPE[key]});
}
}
res.success(dataList);
}
/**
* 党建资讯类型
* @param req
* @param res
*/
function informationType(req, res) {
let dataList = [];
for (let key in configEnum.INFORMATIONTYPE) {
let anyKey:any = key;
if (isNaN(anyKey)) {
let keyStr = key;
dataList.push({key:keyStr, value:configEnum.INFORMATIONTYPE[key]});
}
}
res.success(dataList);
}
...@@ -2,6 +2,22 @@ ...@@ -2,6 +2,22 @@
* 总路由入口 * 总路由入口
*/ */
import * as appletUserRouters from '../routers/applet/user';
import * as appletBaseRouters from '../routers/applet/base';
import * as appletOrganizationalLifeRouters from '../routers/applet/organizationalLife';
import * as appletPartyMemberRouters from '../routers/applet/partyMember';
import * as appletPartyInforMationRouters from '../routers/applet/partyInforMation';
import * as publicRouters from '../routers/public';
export function setRouter(httpServer){ export function setRouter(httpServer){
/**小程序端 党员入口 */
appletUserRouters.setRouter(httpServer);
appletBaseRouters.setRouter(httpServer);
appletOrganizationalLifeRouters.setRouter(httpServer);
appletPartyMemberRouters.setRouter(httpServer);
appletPartyMemberRouters.setRouter(httpServer);
appletPartyInforMationRouters.setRouter(httpServer);
/**小程序端 公共资源 */
publicRouters.setRouter(httpServer);
} }
\ No newline at end of file
...@@ -95,10 +95,10 @@ export function md5PwdStr(pwd:string) { ...@@ -95,10 +95,10 @@ export function md5PwdStr(pwd:string) {
/** /**
* 获取token * 获取token
* @param uscc 统一信用代码 * @param loginId 统一信用代码
*/ */
export function getToken(uscc:string) { export function getToken(loginId:string) {
return md5(`${uscc}${new Date().valueOf()}${Math.ceil(Math.random() *100)}`); return md5(`${loginId}${new Date().valueOf()}${Math.ceil(Math.random() *100)}`);
} }
......
...@@ -17,7 +17,19 @@ import { BizError } from "./bizError"; ...@@ -17,7 +17,19 @@ import { BizError } from "./bizError";
* @param param 需要校验的参数 * @param param 需要校验的参数
* @returns true 无需关注返回 * @returns true 无需关注返回
*/ */
export function eccFormParam(name:string, keyTypeConf:object, param:object) {
/**
* 通过config校验表单参数param
* 包括类型 String, Number, Boolean, [Number], [Object]
* 参数是必填
* 方法会校验表单中存在的多余字段
* todo 后续优化配置
* @param name 被调用的方法名
* @param config 校验配置
* @param param 需要校验的参数
* @returns true 无需关注返回
*/
export function eccFormParam(name:string, keyTypeConf:object, param:object) {
for (let key in keyTypeConf ) { for (let key in keyTypeConf ) {
let {type, notMustHave} = keyTypeConf[key]; let {type, notMustHave} = keyTypeConf[key];
...@@ -58,6 +70,16 @@ export function eccFormParam(name:string, keyTypeConf:object, param:object) { ...@@ -58,6 +70,16 @@ export function eccFormParam(name:string, keyTypeConf:object, param:object) {
} }
} }
break; break;
case '[String]':
if ( !Array.isArray(param[key]) ) isError = true;
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'string' ) {
isError = true;
errorStr = `${key}应是string型数组其中下标${i}${typeof item}`;
}
}
break;
case '[Object]': case '[Object]':
if ( !Array.isArray(param[key]) ) isError = true; if ( !Array.isArray(param[key]) ) isError = true;
for (let i =0; i < param[key].length; i++) { for (let i =0; i < param[key].length; i++) {
...@@ -68,6 +90,39 @@ export function eccFormParam(name:string, keyTypeConf:object, param:object) { ...@@ -68,6 +90,39 @@ export function eccFormParam(name:string, keyTypeConf:object, param:object) {
} }
} }
break; break;
case 'Address':
/**地址类型 基本数据类型为数组字符串但是要判断层级关系 */
if ( !Array.isArray(param[key]) ) {
isError = true;
errorStr = `${key}应是数组形`;
}
if ( param[key].length != 4) {
isError = true;
errorStr = `${key}超过特定长度4 目前长度 ${param[key].length}`;
}
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'string' ) {
isError = true;
errorStr = `${key}应是string型数组其中下标${i}${typeof item}`;
}
}
/** 不符合规则的 */
let nullIndex = -1;
for (let i = 0; i < param[key].length; i++) {
if (nullIndex != -1) {//出现过空 第一次出现后的位置 都不能有值
if (param[key]) {
//做一个特化
throw new BizError(ERRORENUM.地址数据不完整, `${key} 下标 ${nullIndex} 为空 `);
}
}
if (nullIndex == -1 && !param[key][i]) {
/**按顺序第一次赋值 */
nullIndex = i;
}
}
break;
} }
errorStr = isError && errorStr == "" ? `${key}应该是${type}型 而不是${paramType}`: errorStr; errorStr = isError && errorStr == "" ? `${key}应该是${type}型 而不是${paramType}`: errorStr;
......
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