Commit 57dc8a16 by chenjinjing

no message

parent f5dba496
......@@ -9,3 +9,4 @@
*test*
*.logs
*.zip
/dist
/**
* 岗位信息
*/
import { ERRORENUM } from "../config/errorEnum";
import { systemConfig } from "../config/serverConfig";
import { employmentTableData } from "../data/table/employment";
import { tablePackage } from "../dataPackage/inFrontOut";
import { getTableOut } from "../dataPackage/out";
import { BizError } from "../util/bizError";
import { get, post } from "../util/request";
let fs = require("fs");
/**
* 竖屏岗位信息
* @param req
* @param res
*/
export function getVerticalScreen(req, res) {
let name = req.body.name;
let tableData = employmentTableData();
//'gsmc:公司名称', 'gwmc:岗位名称', 'xlyq:学历要求', 'nlfw:年龄范围', 'zprs:招聘人数', 'fbsj:发布时间', 'xzdy:薪资待遇',
//'gzsj:工作时间', 'gzdd:工作地点', 'gwyq:岗位要求', 'gwzz:岗位职责'
let ret:any = {};
let oldConf = ['gwmc', 'zprs', 'zpjd', 'fbsj', 'lggw', 'tyjryx', 'syyhg'];
tableData['浦兴路街道招聘岗位信息'].dataList.sort((a, b) => {
return Date.parse(b.fbsj) - Date.parse(a.fbsj);
})
let newConf = ['岗位名称', '招聘人数', '招聘进度', '发布时间', '零工岗位', '退役军人优先', '生育友好岗'];
let jobTableDataList = change(oldConf, newConf, tableData['浦兴路街道招聘岗位信息'].dataList, name, 'gwmc');
ret['jobInformation'] = jobTableDataList;
res.send(ret);
}
/**
* 竖屏岗位信息-数据库
* @param req
* @param res
*/
// export async function getVerticalScreen(req, res) {
// let name = req.body.name;
// let job = `${systemConfig.aiPositionIp}${systemConfig.job}`;
// let jobPostList = await post(job, {company_name:name}, {});
// if(!jobPostList || !jobPostList['body'] || !jobPostList['body']['data']) throw new BizError(ERRORENUM.接口数据获取失败, `岗位信息列表获取接口失败`);
// let jobData = jobPostList['body']['data'];
// let conf = {
// company_name:"公司名称",
// job_title:"岗位名称",
// recruitment_count:"招聘人数",
// publish_date:"发布时间",
// salary_range:"薪资待遇",
// working_hours:"工作时间",
// work_location:"工作地点",
// job_responsibilities:"岗位职责",
// priority_type:"岗位类型",
// job_status:"岗位状态",
// education_requirement:"学历要求",
// experience_requirement:"工作经验要求",
// contact_info:"联系方式",
// };
// let ret:any = {};
// // let oldConf = ['company_name', 'job_title', 'recruitment_count', 'publish_date', 'salary_range', 'working_hours', 'work_location',
// // 'job_responsibilities', 'priority_type', 'job_status', 'education_requirement', 'experience_requirement', 'contact_info'];
// let oldConf = ['job_title', 'recruitment_count', 'job_status', 'publish_date', 'priority_type'];
// jobData.sort((a, b) => {
// return Date.parse(b.publish_date) - Date.parse(a.publish_date);
// })
// // let newConf = ['公司名称', '岗位名称', '招聘人数', '发布时间', '薪资待遇', '工作时间', '工作地点',
// // '岗位职责', '岗位类型', '岗位状态', '学历要求', '工作经验要求', '联系方式'];
// let newConf = ['岗位名称', '招聘人数', '岗位状态', '发布时间', '岗位类型'];
// let jobTableDataList = changeDB(oldConf, newConf, jobData, name, 'job_title');
// ret['jobInformation'] = jobTableDataList;
// res.send(ret);
// }
/**
* 竖屏岗位详情
* @param req
* @param res
*/
export async function getVerticalJobDetailed(req, res) {
let company = req.body.company;
if (!company) throw new BizError(ERRORENUM.参数错误, `缺失竖屏岗位详情===>company参数`);
let job = `${systemConfig.aiPositionIp}${systemConfig.job}`;
let jobPostList = await post(job, {company_name:company}, {});
if(!jobPostList || !jobPostList['body'] || !jobPostList['body']['data']) throw new BizError(ERRORENUM.接口数据获取失败, `岗位信息列表获取接口失败`);
let jobData = jobPostList['body']['data'];
let ret:any = {};
let conf = {
company_name:"公司名称",
job_title:"岗位名称",
recruitment_count:"招聘人数",
publish_date:"发布时间",
salary_range:"薪资待遇",
working_hours:"工作时间",
work_location:"工作地点",
job_responsibilities:"岗位职责",
priority_type:"岗位类型",
job_status:"岗位状态",
education_requirement:"学历要求",
experience_requirement:"工作经验要求",
contact_info:"联系方式",
};
// let oldConf = ['gwmc', 'zprs', 'fbsj', 'xzdy', 'gzsj', 'gzdd', 'gwzz', 'lggw', 'tyjryx', 'syyhg'];
// let newConf = ['岗位名称', '招聘人数', '发布时间', '薪资待遇', '工作时间', '工作地点', '岗位职责', '零工岗位', '退役军人优先', '生育友好岗'];
let oldConf = ['job_title', 'recruitment_count', 'publish_date', 'salary_range', 'working_hours', 'work_location', 'job_responsibilities', 'priority_type'];
let newConf = ['岗位名称', '招聘人数', '发布时间', '薪资待遇', '工作时间', '工作地点', '岗位职责', '岗位类型'];
let jobDetailed = changeDB(oldConf, newConf, jobData, company, 'company_name'); //公司名称
ret['jobDetailed'] = jobDetailed;
res.send(ret);
}
/**
* 政策文件
* @param req
* @param res
*/
// export function getVerticalPolicy(req, res) {
// let ret:any = {};
// let zcwjInfo = fs.readdirSync('img/政策图片');
// let policyInfo = [];
// for (let i = 0; i < zcwjInfo.length; i++) {
// let fileName = 'img/政策图片/' + zcwjInfo[i];
// let list = fs.readdirSync(fileName);
// let fileList = [];
// for (let file = 0; file < list.length; file++) {
// fileList.push(`/政策图片/${zcwjInfo[i]}/${list[file]}`)
// }
// policyInfo.push({name: zcwjInfo[i], list:fileList});
// }
// ret['policy'] = policyInfo;
// res.send(ret);
// }
/**
* 政策文件-数据库
* @param req
* @param res
*/
export async function getVerticalPolicy(req, res) {
let ret:any = {};
let policy = `${systemConfig.aiPositionIp}${systemConfig.policy}`;
let policyPostList = await post(policy, {}, {});
if(!policyPostList || !policyPostList['body'] || !policyPostList['body']['data']) throw new BizError(ERRORENUM.接口数据获取失败, `政策文件信息列表获取接口失败`);
let policyData = policyPostList['body']['data'];
let policyList = [];
policyData.forEach( info => {
let item = {
name: info.file_name,
list: info.policy_imgname,
};
policyList.push(item);
})
ret['policy'] = policyList;
res.send(ret);
}
/**
* 大屏区网岗位信息
* @param req
* @param res
*/
export async function getQWLargeScreen(req, res) {
let ret:any = {};
let qwPostList = await get(systemConfig.qwUrl);
if(!qwPostList || !qwPostList['body'] || !qwPostList['body']['PostList']) throw new BizError(ERRORENUM.接口数据获取失败, `区网岗位信息列表获取接口失败`);
let qwJobInfo = qwPostList['body']['PostList'];
let qwJobInformation = {dataList: [], total: qwPostList['body']['TotalRecord']};
qwJobInfo.forEach( info => {
let qwList = [];
qwList.push(
{
key: '岗位编码',
value: info.PostCode
},
{
key: '公司名称',
value: info.UnitName
},
{
key: '招聘人数',
value: info.RecruitmentPersonCount
},
{
key: '发布时间',
value: info.CreateDateText
}
)
let jobDetailed = {name:"", list:[]};
let {UnitName, PostName, View_Education, View_Salary, View_AgeRange, View_WorkArea, View_PostDescriptionC, View_PostDescriptionB,
View_PostDescriptionA, View_WorkNature, WorkClass, PostCode} = info;
jobDetailed.name = UnitName;
jobDetailed.list.push(
{
key: '招聘岗位',
value: PostName
},
{
key: '岗位职责',
value: View_PostDescriptionA
},
{
key: '工作性质',
value: View_WorkNature
},
{
key: '工作时间',
value: WorkClass||'暂无'
},
{
key: '工资待遇',
value: View_Salary
},
{
key: '工作地点',
value: View_WorkArea + View_PostDescriptionC
},
{
key: '岗位编码',
value: PostCode
},
)
qwJobInformation.dataList.push({base:qwList, detailed:jobDetailed});
})
ret['qwJobInformation'] = qwJobInformation;
res.send(ret);
}
/**
* 大屏浦兴岗位信息
* @param req
* @param res
*/
// export async function getPXLargeScreen(req, res) {
// let tableData = employmentTableData();
// let ret:any = {};
// let oldConf = ['gsmc', 'zprs', 'fbsj', 'lggw', 'tyjryx', 'syyhg'];
// let newConf = ['公司名称', '招聘人数', '发布时间', '零工岗位', '退役军人优先', '生育友好岗'];
// tableData['浦兴路街道招聘岗位信息'].dataList.sort((a, b) => {
// return Date.parse(b.fbsj) - Date.parse(a.fbsj);
// })
// let jobTableDataList = change(oldConf, newConf, tableData['浦兴路街道招聘岗位信息'].dataList, '', 'gwmc');
// let jobTableData = [];
// jobTableDataList.forEach(info => {
// let {name, list} = info;
// let recruit = {key:'', value:0};
// for (let i = 0; i < list.length; i++) {
// recruit['key'] = '招聘人数';
// // console.log(list[i][1].value);
// // console.log(isNaN(list[i][1].value));
// if(isNaN(list[i][1].value)) {
// recruit['value'] = list[i][1].value;
// break;
// }
// else recruit['value'] += parseInt(list[i][1].value);
// }
// let dataList = [list[0][0], recruit, list[0][2], list[0][3], list[0][4], list[0][5]];
// jobTableData.push(dataList)
// })
// console.log(jobTableData);
// ret['jobInformation'] = jobTableData;
// res.send(ret);
// }
/**
* 大屏浦兴岗位信息-数据库
* @param req
* @param res
*/
export async function getPXLargeScreen(req, res) {
let name = req.body.name;
let job = `${systemConfig.aiPositionIp}${systemConfig.job}`;
let jobPostList = await post(job, {company_name:name}, {});
if(!jobPostList || !jobPostList['body'] || !jobPostList['body']['data']) throw new BizError(ERRORENUM.接口数据获取失败, `岗位信息列表获取接口失败`);
let jobData = jobPostList['body']['data'];
let ret:any = {};
// let oldConf = ['company_name', 'job_title', 'recruitment_count', 'publish_date', 'salary_range', 'working_hours', 'work_location',
// 'job_responsibilities', 'priority_type', 'job_status', 'education_requirement', 'experience_requirement', 'contact_info'];
let oldConf = ['company_name', 'recruitment_count', 'publish_date', 'priority_type'];
jobData.sort((a, b) => {
return Date.parse(b.publish_date) - Date.parse(a.publish_date);
})
// let newConf = ['公司名称', '岗位名称', '招聘人数', '发布时间', '薪资待遇', '工作时间', '工作地点',
// '岗位职责', '岗位类型', '岗位状态', '学历要求', '工作经验要求', '联系方式'];
let newConf = ['公司名称', '招聘人数', '发布时间', '岗位类型'];
let jobTableDataList = changeDB(oldConf, newConf, jobData, name, 'company_name');
let jobTableData = [];
jobTableDataList.forEach(info => {
let {name, list} = info;
let recruit = {key:'', value:0};
for (let i = 0; i < list.length; i++) {
recruit['key'] = '招聘人数';
if(isNaN(list[i][1].value)) {
recruit['value'] = list[i][1].value;
break;
}
else recruit['value'] += parseInt(list[i][1].value);
}
let dataList = [list[0][0], recruit, list[0][2], list[0][3]];
jobTableData.push(dataList)
})
ret['jobInformation'] = jobTableData;
res.send(ret);
}
/**
* 大屏浦兴岗位详情
* @param req
* @param res
*/
// export function getPXJobDetailed(req, res) {
// let company = req.body.company;
// if (!company) throw new BizError(ERRORENUM.参数错误, `缺失竖屏岗位详情===>company参数`);
// let tableData = employmentTableData();
// let ret:any = {};
// let oldConf = ['gwmc', 'gwzz', 'gzsj', 'xzdy', 'gzdd', 'lggw', 'tyjryx', 'syyhg'];
// let newConf = ['招聘岗位', '岗位职责', '工作时间', '工资待遇', '工作地点', '零工岗位', '退役军人优先', '生育友好岗'];
// let jobDetailed = change(oldConf, newConf, tableData['浦兴路街道招聘岗位信息'].dataList, company, 'gsmc');
// ret['jobDetailed'] = jobDetailed;
// res.send(ret);
// }
/**
* 大屏浦兴岗位详情-数据库
* @param req
* @param res
*/
export async function getPXJobDetailed(req, res) {
let company = req.body.company;
if (!company) throw new BizError(ERRORENUM.参数错误, `缺失大屏岗位详情===>company参数`);
let job = `${systemConfig.aiPositionIp}${systemConfig.job}`;
let jobPostList = await post(job, {company_name:company}, {});
if(!jobPostList || !jobPostList['body'] || !jobPostList['body']['data']) throw new BizError(ERRORENUM.接口数据获取失败, `岗位信息列表获取接口失败`);
let jobData = jobPostList['body']['data'];
let ret:any = {};
let oldConf = ['job_title', 'job_responsibilities', 'work_location', 'salary_range', 'working_hours', 'recruitment_count', 'publish_date', 'priority_type'];
let newConf = ['招聘岗位', '岗位职责', '工作时间', '薪资待遇', '工作地点', '招聘人数', '发布时间', '岗位类型'];
let jobDetailed = changeDB(oldConf, newConf, jobData, company, 'company_name'); //公司名称
ret['jobDetailed'] = jobDetailed;
res.send(ret);
}
/**
* 修改数据结构
* @param oldConf 表格数据原本的key
* @param newConf 需要修改成的中文key
* @param dataList 表格数据
* @param name 匹配数据的参数
* @param subName 参数匹配数据的字段key
* @returns
*/
export function change(oldConf, newConf, dataList, name, subName){
let reg = new RegExp(name);
let data = {};
dataList.forEach((subList) => {
if (reg.test(subList[subName])) {
if (!data[subList['gsmc']]) data[subList['gsmc']] = [];
let gsList = [];
for(let i = 0; i < newConf.length; i++) {
if (newConf[i] == "招聘进度") {
gsList.push({
key: newConf[i],
value: '招聘中'
})
} else {
gsList.push({
key: newConf[i],
value: subList[oldConf[i]] || ""
})
}
}
data[subList['gsmc']].push(gsList);
}
});
let result = [];
for (let key in data) {
result.push({
name: key,
list: data[key]
})
}
return result;
}
/**
* 修改数据结构-数据库
* @param oldConf 表格数据原本的key
* @param newConf 需要修改成的中文key
* @param dataList 表格数据
* @param name 匹配数据的参数
* @param subName 参数匹配数据的字段key
* @returns
*/
export function changeDB(oldConf, newConf, dataList, name, subName){
let reg = new RegExp(name);
let data = {};
dataList.forEach((subList) => {
if (reg.test(subList[subName])) {
if (!data[subList['company_name']]) data[subList['company_name']] = [];
let gsList = [];
for(let i = 0; i < newConf.length; i++) {
if (newConf[i] == "岗位状态") {
gsList.push({
key: newConf[i],
value: '招聘中'
})
} else {
gsList.push({
key: newConf[i],
value: subList[oldConf[i]] || ""
})
}
}
data[subList['company_name']].push(gsList);
}
});
let result = [];
for (let key in data) {
result.push({
name: key,
list: data[key]
})
}
return result;
}
......@@ -17,27 +17,27 @@ let fs = require("fs");
* @param req
* @param res
*/
// export function getVerticalScreen(req, res) {
// let name = req.body.name;
// let tableData = employmentTableData();
// //'gsmc:公司名称', 'gwmc:岗位名称', 'xlyq:学历要求', 'nlfw:年龄范围', 'zprs:招聘人数', 'fbsj:发布时间', 'xzdy:薪资待遇',
// //'gzsj:工作时间', 'gzdd:工作地点', 'gwyq:岗位要求', 'gwzz:岗位职责'
export function getVerticalScreen(req, res) {
let name = req.body.name;
let tableData = employmentTableData();
//'gsmc:公司名称', 'gwmc:岗位名称', 'xlyq:学历要求', 'nlfw:年龄范围', 'zprs:招聘人数', 'fbsj:发布时间', 'xzdy:薪资待遇',
//'gzsj:工作时间', 'gzdd:工作地点', 'gwyq:岗位要求', 'gwzz:岗位职责'
// let ret:any = {};
let ret:any = {};
// let oldConf = ['gwmc', 'zprs', 'zpjd', 'fbsj', 'lggw', 'tyjryx', 'syyhg'];
let oldConf = ['gwmc', 'zprs', 'zpjd', 'fbsj', 'lggw', 'tyjryx', 'syyhg'];
// tableData['浦兴路街道招聘岗位信息'].dataList.sort((a, b) => {
// return Date.parse(b.fbsj) - Date.parse(a.fbsj);
// })
tableData['浦兴路街道招聘岗位信息'].dataList.sort((a, b) => {
return Date.parse(b.fbsj) - Date.parse(a.fbsj);
})
// let newConf = ['岗位名称', '招聘人数', '招聘进度', '发布时间', '零工岗位', '退役军人优先', '生育友好岗'];
// let jobTableDataList = change(oldConf, newConf, tableData['浦兴路街道招聘岗位信息'].dataList, name, 'gwmc');
let newConf = ['岗位名称', '招聘人数', '招聘进度', '发布时间', '零工岗位', '退役军人优先', '生育友好岗'];
let jobTableDataList = change(oldConf, newConf, tableData['浦兴路街道招聘岗位信息'].dataList, name, 'gwmc');
// ret['jobInformation'] = jobTableDataList;
ret['jobInformation'] = jobTableDataList;
// res.send(ret);
// }
res.send(ret);
}
/**
......@@ -45,51 +45,51 @@ let fs = require("fs");
* @param req
* @param res
*/
export async function getVerticalScreen(req, res) {
let name = req.body.name;
// export async function getVerticalScreen(req, res) {
// let name = req.body.name;
let job = `${systemConfig.aiPositionIp}${systemConfig.job}`;
let jobPostList = await post(job, {company_name:name}, {});
if(!jobPostList || !jobPostList['body'] || !jobPostList['body']['data']) throw new BizError(ERRORENUM.接口数据获取失败, `岗位信息列表获取接口失败`);
let jobData = jobPostList['body']['data'];
let conf = {
company_name:"公司名称",
job_title:"岗位名称",
recruitment_count:"招聘人数",
publish_date:"发布时间",
salary_range:"薪资待遇",
working_hours:"工作时间",
work_location:"工作地点",
job_responsibilities:"岗位职责",
priority_type:"岗位类型",
job_status:"岗位状态",
education_requirement:"学历要求",
experience_requirement:"工作经验要求",
contact_info:"联系方式",
};
// let job = `${systemConfig.aiPositionIp}${systemConfig.job}`;
// let jobPostList = await post(job, {company_name:name}, {});
// if(!jobPostList || !jobPostList['body'] || !jobPostList['body']['data']) throw new BizError(ERRORENUM.接口数据获取失败, `岗位信息列表获取接口失败`);
// let jobData = jobPostList['body']['data'];
// let conf = {
// company_name:"公司名称",
// job_title:"岗位名称",
// recruitment_count:"招聘人数",
// publish_date:"发布时间",
// salary_range:"薪资待遇",
// working_hours:"工作时间",
// work_location:"工作地点",
// job_responsibilities:"岗位职责",
// priority_type:"岗位类型",
// job_status:"岗位状态",
// education_requirement:"学历要求",
// experience_requirement:"工作经验要求",
// contact_info:"联系方式",
// };
let ret:any = {};
// let ret:any = {};
// let oldConf = ['company_name', 'job_title', 'recruitment_count', 'publish_date', 'salary_range', 'working_hours', 'work_location',
// 'job_responsibilities', 'priority_type', 'job_status', 'education_requirement', 'experience_requirement', 'contact_info'];
// // let oldConf = ['company_name', 'job_title', 'recruitment_count', 'publish_date', 'salary_range', 'working_hours', 'work_location',
// // 'job_responsibilities', 'priority_type', 'job_status', 'education_requirement', 'experience_requirement', 'contact_info'];
let oldConf = ['job_title', 'recruitment_count', 'job_status', 'publish_date', 'priority_type'];
// let oldConf = ['job_title', 'recruitment_count', 'job_status', 'publish_date', 'priority_type'];
jobData.sort((a, b) => {
return Date.parse(b.publish_date) - Date.parse(a.publish_date);
})
// jobData.sort((a, b) => {
// return Date.parse(b.publish_date) - Date.parse(a.publish_date);
// })
// let newConf = ['公司名称', '岗位名称', '招聘人数', '发布时间', '薪资待遇', '工作时间', '工作地点',
// '岗位职责', '岗位类型', '岗位状态', '学历要求', '工作经验要求', '联系方式'];
// // let newConf = ['公司名称', '岗位名称', '招聘人数', '发布时间', '薪资待遇', '工作时间', '工作地点',
// // '岗位职责', '岗位类型', '岗位状态', '学历要求', '工作经验要求', '联系方式'];
let newConf = ['岗位名称', '招聘人数', '岗位状态', '发布时间', '岗位类型'];
let jobTableDataList = changeDB(oldConf, newConf, jobData, name, 'job_title');
// let newConf = ['岗位名称', '招聘人数', '岗位状态', '发布时间', '岗位类型'];
// let jobTableDataList = changeDB(oldConf, newConf, jobData, name, 'job_title');
ret['jobInformation'] = jobTableDataList;
// ret['jobInformation'] = jobTableDataList;
res.send(ret);
}
// res.send(ret);
// }
/**
......@@ -100,36 +100,13 @@ let fs = require("fs");
export async function getVerticalJobDetailed(req, res) {
let company = req.body.company;
if (!company) throw new BizError(ERRORENUM.参数错误, `缺失竖屏岗位详情===>company参数`);
let job = `${systemConfig.aiPositionIp}${systemConfig.job}`;
let jobPostList = await post(job, {company_name:company}, {});
if(!jobPostList || !jobPostList['body'] || !jobPostList['body']['data']) throw new BizError(ERRORENUM.接口数据获取失败, `岗位信息列表获取接口失败`);
let jobData = jobPostList['body']['data'];
let tableData = employmentTableData();
let ret:any = {};
let conf = {
company_name:"公司名称",
job_title:"岗位名称",
recruitment_count:"招聘人数",
publish_date:"发布时间",
salary_range:"薪资待遇",
working_hours:"工作时间",
work_location:"工作地点",
job_responsibilities:"岗位职责",
priority_type:"岗位类型",
job_status:"岗位状态",
education_requirement:"学历要求",
experience_requirement:"工作经验要求",
contact_info:"联系方式",
};
// let oldConf = ['gwmc', 'zprs', 'fbsj', 'xzdy', 'gzsj', 'gzdd', 'gwzz', 'lggw', 'tyjryx', 'syyhg'];
// let newConf = ['岗位名称', '招聘人数', '发布时间', '薪资待遇', '工作时间', '工作地点', '岗位职责', '零工岗位', '退役军人优先', '生育友好岗'];
let oldConf = ['job_title', 'recruitment_count', 'publish_date', 'salary_range', 'working_hours', 'work_location', 'job_responsibilities', 'priority_type'];
let newConf = ['岗位名称', '招聘人数', '发布时间', '薪资待遇', '工作时间', '工作地点', '岗位职责', '岗位类型'];
let jobDetailed = changeDB(oldConf, newConf, jobData, company, 'company_name'); //公司名称
let oldConf = ['gwmc', 'zprs', 'fbsj', 'xzdy', 'gzsj', 'gzdd', 'gwzz', 'lggw', 'tyjryx', 'syyhg'];
let newConf = ['岗位名称', '招聘人数', '发布时间', '薪资待遇', '工作时间', '工作地点', '岗位职责', '零工岗位', '退役军人优先', '生育友好岗'];
let jobDetailed = change(oldConf, newConf, tableData['浦兴路街道招聘岗位信息'].dataList, company, 'gsmc');
ret['jobDetailed'] = jobDetailed;
......@@ -142,24 +119,24 @@ export async function getVerticalJobDetailed(req, res) {
* @param req
* @param res
*/
// export function getVerticalPolicy(req, res) {
// let ret:any = {};
export function getVerticalPolicy(req, res) {
let ret:any = {};
// let zcwjInfo = fs.readdirSync('img/政策图片');
// let policyInfo = [];
// for (let i = 0; i < zcwjInfo.length; i++) {
// let fileName = 'img/政策图片/' + zcwjInfo[i];
// let list = fs.readdirSync(fileName);
// let fileList = [];
// for (let file = 0; file < list.length; file++) {
// fileList.push(`/政策图片/${zcwjInfo[i]}/${list[file]}`)
// }
// policyInfo.push({name: zcwjInfo[i], list:fileList});
// }
// ret['policy'] = policyInfo;
let zcwjInfo = fs.readdirSync('img/政策图片');
let policyInfo = [];
for (let i = 0; i < zcwjInfo.length; i++) {
let fileName = 'img/政策图片/' + zcwjInfo[i];
let list = fs.readdirSync(fileName);
let fileList = [];
for (let file = 0; file < list.length; file++) {
fileList.push(`/政策图片/${zcwjInfo[i]}/${list[file]}`)
}
policyInfo.push({name: zcwjInfo[i], list:fileList});
}
ret['policy'] = policyInfo;
// res.send(ret);
// }
res.send(ret);
}
/**
......@@ -167,29 +144,29 @@ export async function getVerticalJobDetailed(req, res) {
* @param req
* @param res
*/
export async function getVerticalPolicy(req, res) {
let ret:any = {};
// export async function getVerticalPolicy(req, res) {
// let ret:any = {};
let policy = `${systemConfig.aiPositionIp}${systemConfig.policy}`;
let policyPostList = await post(policy, {}, {});
if(!policyPostList || !policyPostList['body'] || !policyPostList['body']['data']) throw new BizError(ERRORENUM.接口数据获取失败, `政策文件信息列表获取接口失败`);
let policyData = policyPostList['body']['data'];
// let policy = `${systemConfig.aiPositionIp}${systemConfig.policy}`;
// let policyPostList = await post(policy, {}, {});
// if(!policyPostList || !policyPostList['body'] || !policyPostList['body']['data']) throw new BizError(ERRORENUM.接口数据获取失败, `政策文件信息列表获取接口失败`);
// let policyData = policyPostList['body']['data'];
let policyList = [];
// let policyList = [];
policyData.forEach( info => {
let item = {
name: info.file_name,
list: info.policy_imgname,
};
// policyData.forEach( info => {
// let item = {
// name: info.file_name,
// list: info.policy_imgname,
// };
policyList.push(item);
})
// policyList.push(item);
// })
ret['policy'] = policyList;
// ret['policy'] = policyList;
res.send(ret);
}
// res.send(ret);
// }
/**
......@@ -276,84 +253,28 @@ export async function getQWLargeScreen(req, res) {
* @param req
* @param res
*/
// export async function getPXLargeScreen(req, res) {
// let tableData = employmentTableData();
// let ret:any = {};
// let oldConf = ['gsmc', 'zprs', 'fbsj', 'lggw', 'tyjryx', 'syyhg'];
// let newConf = ['公司名称', '招聘人数', '发布时间', '零工岗位', '退役军人优先', '生育友好岗'];
// tableData['浦兴路街道招聘岗位信息'].dataList.sort((a, b) => {
// return Date.parse(b.fbsj) - Date.parse(a.fbsj);
// })
// let jobTableDataList = change(oldConf, newConf, tableData['浦兴路街道招聘岗位信息'].dataList, '', 'gwmc');
// let jobTableData = [];
// jobTableDataList.forEach(info => {
// let {name, list} = info;
// let recruit = {key:'', value:0};
// for (let i = 0; i < list.length; i++) {
// recruit['key'] = '招聘人数';
// // console.log(list[i][1].value);
// // console.log(isNaN(list[i][1].value));
// if(isNaN(list[i][1].value)) {
// recruit['value'] = list[i][1].value;
// break;
// }
// else recruit['value'] += parseInt(list[i][1].value);
// }
// let dataList = [list[0][0], recruit, list[0][2], list[0][3], list[0][4], list[0][5]];
// jobTableData.push(dataList)
// })
// console.log(jobTableData);
// ret['jobInformation'] = jobTableData;
// res.send(ret);
// }
/**
* 大屏浦兴岗位信息-数据库
* @param req
* @param res
*/
export async function getPXLargeScreen(req, res) {
let name = req.body.name;
let job = `${systemConfig.aiPositionIp}${systemConfig.job}`;
let jobPostList = await post(job, {company_name:name}, {});
if(!jobPostList || !jobPostList['body'] || !jobPostList['body']['data']) throw new BizError(ERRORENUM.接口数据获取失败, `岗位信息列表获取接口失败`);
let jobData = jobPostList['body']['data'];
let tableData = employmentTableData();
let ret:any = {};
// let oldConf = ['company_name', 'job_title', 'recruitment_count', 'publish_date', 'salary_range', 'working_hours', 'work_location',
// 'job_responsibilities', 'priority_type', 'job_status', 'education_requirement', 'experience_requirement', 'contact_info'];
let oldConf = ['company_name', 'recruitment_count', 'publish_date', 'priority_type'];
jobData.sort((a, b) => {
return Date.parse(b.publish_date) - Date.parse(a.publish_date);
let oldConf = ['gsmc', 'zprs', 'fbsj', 'lggw', 'tyjryx', 'syyhg'];
let newConf = ['公司名称', '招聘人数', '发布时间', '零工岗位', '退役军人优先', '生育友好岗'];
tableData['浦兴路街道招聘岗位信息'].dataList.sort((a, b) => {
return Date.parse(b.fbsj) - Date.parse(a.fbsj);
})
// let newConf = ['公司名称', '岗位名称', '招聘人数', '发布时间', '薪资待遇', '工作时间', '工作地点',
// '岗位职责', '岗位类型', '岗位状态', '学历要求', '工作经验要求', '联系方式'];
let jobTableDataList = change(oldConf, newConf, tableData['浦兴路街道招聘岗位信息'].dataList, '', 'gwmc');
let newConf = ['公司名称', '招聘人数', '发布时间', '岗位类型'];
let jobTableDataList = changeDB(oldConf, newConf, jobData, name, 'company_name');
let jobTableData = [];
jobTableDataList.forEach(info => {
let {name, list} = info;
let recruit = {key:'', value:0};
for (let i = 0; i < list.length; i++) {
recruit['key'] = '招聘人数';
// console.log(list[i][1].value);
// console.log(isNaN(list[i][1].value));
if(isNaN(list[i][1].value)) {
recruit['value'] = list[i][1].value;
break;
......@@ -361,10 +282,11 @@ export async function getPXLargeScreen(req, res) {
else recruit['value'] += parseInt(list[i][1].value);
}
let dataList = [list[0][0], recruit, list[0][2], list[0][3]];
let dataList = [list[0][0], recruit, list[0][2], list[0][3], list[0][4], list[0][5]];
jobTableData.push(dataList)
})
console.log(jobTableData);
ret['jobInformation'] = jobTableData;
......@@ -373,46 +295,75 @@ export async function getPXLargeScreen(req, res) {
/**
* 大屏浦兴岗位详情
* 大屏浦兴岗位信息-数据库
* @param req
* @param res
*/
// export function getPXJobDetailed(req, res) {
// let company = req.body.company;
// if (!company) throw new BizError(ERRORENUM.参数错误, `缺失竖屏岗位详情===>company参数`);
// let tableData = employmentTableData();
// export async function getPXLargeScreen(req, res) {
// let name = req.body.name;
// let job = `${systemConfig.aiPositionIp}${systemConfig.job}`;
// let jobPostList = await post(job, {company_name:name}, {});
// if(!jobPostList || !jobPostList['body'] || !jobPostList['body']['data']) throw new BizError(ERRORENUM.接口数据获取失败, `岗位信息列表获取接口失败`);
// let jobData = jobPostList['body']['data'];
// let ret:any = {};
// let oldConf = ['gwmc', 'gwzz', 'gzsj', 'xzdy', 'gzdd', 'lggw', 'tyjryx', 'syyhg'];
// let newConf = ['招聘岗位', '岗位职责', '工作时间', '工资待遇', '工作地点', '零工岗位', '退役军人优先', '生育友好岗'];
// let jobDetailed = change(oldConf, newConf, tableData['浦兴路街道招聘岗位信息'].dataList, company, 'gsmc');
// // let oldConf = ['company_name', 'job_title', 'recruitment_count', 'publish_date', 'salary_range', 'working_hours', 'work_location',
// // 'job_responsibilities', 'priority_type', 'job_status', 'education_requirement', 'experience_requirement', 'contact_info'];
// let oldConf = ['company_name', 'recruitment_count', 'publish_date', 'priority_type'];
// jobData.sort((a, b) => {
// return Date.parse(b.publish_date) - Date.parse(a.publish_date);
// })
// ret['jobDetailed'] = jobDetailed;
// // let newConf = ['公司名称', '岗位名称', '招聘人数', '发布时间', '薪资待遇', '工作时间', '工作地点',
// // '岗位职责', '岗位类型', '岗位状态', '学历要求', '工作经验要求', '联系方式'];
// let newConf = ['公司名称', '招聘人数', '发布时间', '岗位类型'];
// let jobTableDataList = changeDB(oldConf, newConf, jobData, name, 'company_name');
// let jobTableData = [];
// jobTableDataList.forEach(info => {
// let {name, list} = info;
// let recruit = {key:'', value:0};
// for (let i = 0; i < list.length; i++) {
// recruit['key'] = '招聘人数';
// if(isNaN(list[i][1].value)) {
// recruit['value'] = list[i][1].value;
// break;
// }
// else recruit['value'] += parseInt(list[i][1].value);
// }
// let dataList = [list[0][0], recruit, list[0][2], list[0][3]];
// jobTableData.push(dataList)
// })
// ret['jobInformation'] = jobTableData;
// res.send(ret);
// }
/**
* 大屏浦兴岗位详情-数据库
* 大屏浦兴岗位详情
* @param req
* @param res
*/
export async function getPXJobDetailed(req, res) {
export function getPXJobDetailed(req, res) {
let company = req.body.company;
if (!company) throw new BizError(ERRORENUM.参数错误, `缺失大屏岗位详情===>company参数`);
let job = `${systemConfig.aiPositionIp}${systemConfig.job}`;
let jobPostList = await post(job, {company_name:company}, {});
if(!jobPostList || !jobPostList['body'] || !jobPostList['body']['data']) throw new BizError(ERRORENUM.接口数据获取失败, `岗位信息列表获取接口失败`);
let jobData = jobPostList['body']['data'];
if (!company) throw new BizError(ERRORENUM.参数错误, `缺失竖屏岗位详情===>company参数`);
let tableData = employmentTableData();
let ret:any = {};
let oldConf = ['job_title', 'job_responsibilities', 'work_location', 'salary_range', 'working_hours', 'recruitment_count', 'publish_date', 'priority_type'];
let newConf = ['招聘岗位', '岗位职责', '工作时间', '薪资待遇', '工作地点', '招聘人数', '发布时间', '岗位类型'];
let jobDetailed = changeDB(oldConf, newConf, jobData, company, 'company_name'); //公司名称
let oldConf = ['gwmc', 'gwzz', 'gzsj', 'xzdy', 'gzdd', 'lggw', 'tyjryx', 'syyhg'];
let newConf = ['招聘岗位', '岗位职责', '工作时间', '工资待遇', '工作地点', '零工岗位', '退役军人优先', '生育友好岗'];
let jobDetailed = change(oldConf, newConf, tableData['浦兴路街道招聘岗位信息'].dataList, company, 'gsmc');
ret['jobDetailed'] = jobDetailed;
......@@ -421,6 +372,32 @@ export async function getPXJobDetailed(req, res) {
/**
* 大屏浦兴岗位详情-数据库
* @param req
* @param res
*/
// export async function getPXJobDetailed(req, res) {
// let company = req.body.company;
// if (!company) throw new BizError(ERRORENUM.参数错误, `缺失大屏岗位详情===>company参数`);
// let job = `${systemConfig.aiPositionIp}${systemConfig.job}`;
// let jobPostList = await post(job, {company_name:company}, {});
// if(!jobPostList || !jobPostList['body'] || !jobPostList['body']['data']) throw new BizError(ERRORENUM.接口数据获取失败, `岗位信息列表获取接口失败`);
// let jobData = jobPostList['body']['data'];
// let ret:any = {};
// let oldConf = ['job_title', 'job_responsibilities', 'work_location', 'salary_range', 'working_hours', 'recruitment_count', 'publish_date', 'priority_type'];
// let newConf = ['招聘岗位', '岗位职责', '工作时间', '薪资待遇', '工作地点', '招聘人数', '发布时间', '岗位类型'];
// let jobDetailed = changeDB(oldConf, newConf, jobData, company, 'company_name'); //公司名称
// ret['jobDetailed'] = jobDetailed;
// res.send(ret);
// }
/**
* 修改数据结构
* @param oldConf 表格数据原本的key
* @param newConf 需要修改成的中文key
......
1、重点调度企业清单
1、重点调度企业清单
企业名称
所属行业
企业类别
经营地址
注册地址
是否户管
营收/产值/销售额情况-当年累计-规模(万元)
营收/产值/销售额情况-当年累计-同比增速(%)
营收/产值/销售额情况-全年预计-规模(万元)
营收/产值/销售额情况-全年预计-同比增速(%)
税收情况-当年累计-规模(万元)
税收情况-当年累计-同比增速(%)
税收情况-全年预计-规模(万元)
税收情况-全年预计-同比增速(%)
走访日期
走访人
走访企业具体情况
企业联系人
企业联系方式
所属区域责任人
所属区域联系方式
2、全量纳统企业清单
企业名称
所属行业
主营业务活动
当年累计情况-营收/产值/销售额
当年累计情况-同比增速(%)
走访日期
走访人
走访企业具体情况
企业联系人
企业联系方式
3、新增和潜力纳统企业清单
企业(项目)名称
企业(项目)类别
所属行业
经营地址
当年累计情况-营收(万元)
当年累计情况-同比增速(%)
进度跟踪情况-预计全年营收(万元)
进度跟踪情况-预计达规时间
进度跟踪情况-计划纳统时间
企业联系人
企业联系方式
4、重点招商服务目标清单
企业名称
所属行业
属性(固投/非固投)
意向落户区域
企业(项目)简介
预计投资额/注册资本金(万元)
预计税收贡献(万元)
预计纳统贡献(万元)
资金来源(外资/国有/民营)
项目最新进展情况-项目洽谈
项目最新进展情况-接触
项目最新进展情况-进度情况
预计时间节点-注册
预计时间节点-开工
预计时间节点-运营
企业联系人
企业联系方式
所属区域责任人
所属区域联系方式
5-1、本地经营、注册外区重点企业清单
企业名称
所属行业
经营地址
自有用房/租赁用房
租约到期时间
注册所在地
当年累计营收/产值/销售额情况-规模(万元)
当年累计营收/产值/销售额情况-同比增速(%)
当年累计税收排摸情况-规模(万元)
当年累计税收排摸情况-同比增速(%)
推进企业注册落地的工作进展
企业联系人
企业联系方式
所属区域责任人
所属区域联系方式
5-2、本地注册、经营外区重点企业清单
企业名称
所属行业
注册地址
经营所在地
当年累计营收/产值/销售额情况-规模(万元)
当年累计营收/产值/销售额情况-同比增速(%)
当年累计税收排摸情况-规模(万元)
当年累计税收排摸情况-同比增速(%)
推进企业注册落地的工作进展
企业联系人
企业联系方式
所属区域责任人
所属区域联系方式
6、问题解决清单
企业名称
所属行业
企业诉求
内部协调解决情况
与其他部门对接协调情况
企业联系人
企业联系方式
所属区域责任人
所属区域联系方式
1、重点调度企业清单
企业名称:qiYeMingChen
所属行业:suoShuHangYe
企业类别:qiYeLeiBie
经营地址:jingYingDiZhi
注册地址:zhuCeDiZhi
是否户管:shiFouHuGuan
营收/产值/销售额情况-当年累计-规模(万元):yingShouChanZhiXiaoShouEQingKuangDangNianLeiJiGuiMoWanYuan
营收/产值/销售额情况-当年累计-同比增速(%):yingShouChanZhiXiaoShouEQingKuangDangNianLeiJiTongBiSuZhu
营收/产值/销售额情况-全年预计-规模(万元):yingShouChanZhiXiaoShouEQingKuangQuanNianYuJiGuiMoWanYuan
营收/产值/销售额情况-全年预计-同比增速(%):yingShouChanZhiXiaoShouEQingKuangQuanNianYuJiTongBiSuZhu
税收情况-当年累计-规模(万元):shuiShouQingKuangDangNianLeiJiGuiMoWanYuan
税收情况-当年累计-同比增速(%):shuiShouQingKuangDangNianLeiJiTongBiSuZhu
税收情况-全年预计-规模(万元):shuiShouQingKuangQuanNianYuJiGuiMoWanYuan
税收情况-全年预计-同比增速(%):shuiShouQingKuangQuanNianYuJiTongBiSuZhu
走访日期:zouFangRiQi
走访人:zouFangRen
走访企业具体情况:zouFangQiYeJuTiQingKuang
企业联系人:qiYeLianXiRen
企业联系方式:qiYeLianXiFangShi
所属区域责任人:suoShuQuYuZeRenRen
所属区域联系方式:suoShuQuYuLianXiFangShi
2、全量纳统企业清单
企业名称:qiYeMingChen
所属行业:suoShuHangYe
主营业务活动:zhuYingYeWuHuoDong
当年累计情况-营收/产值/销售额:dangNianLeiJiQingKuangYingShouChanZhiXiaoShouE
当年累计情况-同比增速(%):dangNianLeiJiQingKuangTongBiSuZhu
走访日期:zouFangRiQi
走访人:zouFangRen
走访企业具体情况:zouFangQiYeJuTiQingKuang
企业联系人:qiYeLianXiRen
企业联系方式:qiYeLianXiFangShi
3、新增和潜力纳统企业清单
企业(项目)名称:qiYeXiangMuMingChen
企业(项目)类别:qiYeXiangMuLeiBie
所属行业:suoShuHangYe
经营地址:jingYingDiZhi
当年累计情况-营收(万元):dangNianLeiJiQingKuangYingShouWanYuan
当年累计情况-同比增速(%):dangNianLeiJiQingKuangTongBiSuZhu
进度跟踪情况-预计全年营收(万元):jinDuGenZongQingKuangYuJiQuanNianYingShouWanYuan
进度跟踪情况-预计达规时间:jinDuGenZongQingKuangYuJiDaGuiShiJian
进度跟踪情况-计划纳统时间:jinDuGenZongQingKuangJiHuaNaTongShiJian
企业联系人:qiYeLianXiRen
企业联系方式:qiYeLianXiFangShi
4、重点招商服务目标清单
企业名称:qiYeMingChen
所属行业:suoShuHangYe
属性(固投/非固投):shuXingGuTouFeiGuTou
意向落户区域:yiXiangLuoHuoQuYu
企业(项目)简介:qiYeXiangMuJianJie
预计投资额/注册资本金(万元):yuJiTouZiEZhuCeZiBenJinWanYuan
预计税收贡献(万元):yuJiShuiShouGongXianWanYuan
预计纳统贡献(万元):yuJiNaTongGongXianWanYuan
资金来源(外资/国有/民营):ziJinLaiYuanWaiZiGuoYouMinYing
项目最新进展情况-项目洽谈:xiangMuZuiXinJinZhanQingKuangXiangMuQiaTan
项目最新进展情况-接触:xiangMuZuiXinJinZhanQingKuangJieChu
项目最新进展情况-进度情况:xiangMuZuiXinJinZhanQingKuangJinDuQingKuang
预计时间节点-注册:yuJiShiJianJieDianZhuCe
预计时间节点-开工:yuJiShiJianJieDianKaiGong
预计时间节点-运营:yuJiShiJianJieDianYunYing
企业联系人:qiYeLianXiRen
企业联系方式:qiYeLianXiFangShi
所属区域责任人:suoShuQuYuZeRenRen
所属区域联系方式:suoShuQuYuLianXiFangShi
5-1、本地经营、注册外区重点企业清单
企业名称:qiYeMingChen
所属行业:suoShuHangYe
经营地址:jingYingDiZhi
自有用房/租赁用房:ziYouYongFangZuLinYongFang
租约到期时间:zuYueDaoQiShiJian
注册所在地:zhuCeSuoZaiDi
当年累计营收/产值/销售额情况-规模(万元):dangNianLeiJiYingShouChanZhiXiaoShouEQingKuangGuiMoWanYuan
当年累计营收/产值/销售额情况-同比增速(%):dangNianLeiJiYingShouChanZhiXiaoShouEQingKuangTongBiSuZhu
当年累计税收排摸情况-规模(万元):dangNianLeiJiShuiShouPaiMoQingKuangGuiMoWanYuan
当年累计税收排摸情况-同比增速(%):dangNianLeiJiShuiShouPaiMoQingKuangTongBiSuZhu
推进企业注册落地的工作进展:tuiJinQiYeZhuCeLuoDiDeGongZuoJinZhan
企业联系人:qiYeLianXiRen
企业联系方式:qiYeLianXiFangShi
所属区域责任人:suoShuQuYuZeRenRen
所属区域联系方式:suoShuQuYuLianXiFangShi
5-2、本地注册、经营外区重点企业清单
企业名称:qiYeMingChen
所属行业:suoShuHangYe
注册地址:zhuCeDiZhi
经营所在地:jingYingSuoZaiDi
当年累计营收/产值/销售额情况-规模(万元):dangNianLeiJiYingShouChanZhiXiaoShouEQingKuangGuiMoWanYuan
当年累计营收/产值/销售额情况-同比增速(%):dangNianLeiJiYingShouChanZhiXiaoShouEQingKuangTongBiSuZhu
当年累计税收排摸情况-规模(万元):dangNianLeiJiShuiShouPaiMoQingKuangGuiMoWanYuan
当年累计税收排摸情况-同比增速(%):dangNianLeiJiShuiShouPaiMoQingKuangTongBiSuZhu
推进企业注册落地的工作进展:tuiJinQiYeZhuCeLuoDiDeGongZuoJinZhan
企业联系人:qiYeLianXiRen
企业联系方式:qiYeLianXiFangShi
所属区域责任人:suoShuQuYuZeRenRen
所属区域联系方式:suoShuQuYuLianXiFangShi
6、问题解决清单
企业名称:qiYeMingChen
所属行业:suoShuHangYe
企业诉求:qiYeSuQiu
内部协调解决情况:neiBuXieTiaoJieJueQingKuang
与其他部门对接协调情况:yuQiTaBuMenDuiJieXieTiaoQingKuang
企业联系人:qiYeLianXiRen
企业联系方式:qiYeLianXiFangShi
所属区域责任人:suoShuQuYuZeRenRen
所属区域联系方式:suoShuQuYuLianXiFangShi
当前我有一个选导师管理后台需要开发,主要功能有学生选择导师(以学年为单位进行开放选择,展示导师相关也要展示最新的学年,但是需要保存历史数据在数据库),导师写成长寄语,导师与学生、与家长的沟通记录,预约学生开启课程并且上传相关记录以及学生作品
当前我有一个选导师管理后台需要开发,主要功能有学生选择导师(以学年为单位进行开放选择,展示导师相关也要展示最新的学年,但是需要保存历史数据在数据库),导师写成长寄语,导师与学生、与家长的沟通记录,预约学生开启课程并且上传相关记录以及学生作品
分为5个角色:导师、学生、班主任、管理员、家长
导师的主要功能有:
1.我的工作台:
2.我的学生:
3.师生交流:
4.成长寄语:
5.家校沟通:
6.导师案例:
7.预约管理:
8.导师见面会:
学生的主要功能有:
1.我的工作台:
2.选导师:
3.我的导师:
4.预约管理:
5.成长寄语:
6.我的作品:
班主任的主要功能有:
1.我的工作台:
2.学生导师匹配:
3.成长寄语汇总:
4.消息通知:
管理员的主要功能有:我的工作台、学生列表、导师列表、师生匹配、匹配配置、过程性记录
家长的主要功能有:我的工作台、孩子成长寄语、孩子作品、预约导师沟通
......@@ -2,7 +2,7 @@ import express = require('express');
import bodyParser = require('body-parser');
import routers = require('../routers/router');
import compression = require('compression');
import * as fallback from 'express-history-api-fallback';
import fallback from 'express-history-api-fallback';
import * as path from "path";
import { watch } from '../middleware/watch';
import { httpErrorHandler } from '../middleware/httpErrorHandler';
......
......@@ -4,7 +4,13 @@
"target": "es2017",
"sourceMap": true,
"rootDir":"./src",
"outDir":"./out"
"outDir":"./out",
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": false,
"noImplicitAny": false,
"strictNullChecks": false,
"types": ["node"]
},
"exclude": [
"node_modules"
......
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