Commit 52ff4ada by chenjinjing

no message

parent 5bf23800
......@@ -81,19 +81,31 @@ export async function enterpriseServiceOption(esId:string, fangKui:string) {
*/
export async function enterpriseServiceEnd(esId:string, outcome:number, desc:string) {
let selectParam:any = {esId};
let filesList = ["esId", "eId"];
let filesList = ["esId", "eId", "needCategory", "applyTime"];
let resInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.企业服务表, selectParam, filesList);
if ( !resInfo || !resInfo.esId) {
throw new BizError(ERRORENUM.数据不存在);
}
let updateInfo = {outcome, followUpStatus:enumConfig.FOLLOWUPSTATUS.已完成, desc, resolveTime:getMySqlMs()};
let resolveTime = getMySqlMs();
let updateInfo = {outcome, followUpStatus:enumConfig.FOLLOWUPSTATUS.已完成, desc, resolveTime};
await operationalData(OPERATIONALDATATYPE.修改, TABLENAME.企业服务表,updateInfo, {esId});
let applyTime = moment(resInfo.applyTime).format("YYYY-MM-DD");
let needCategory = changeEnumValue(enumConfig.NEEDCATEGORY, resInfo.needCategory);
let resolveTimeStr = moment(resolveTime).format("YYYY-MM-DD");
//发送邮件
let mailStr = "";
mailStr +=`<p>您的服务处理结果为:${changeEnumValue(enumConfig.OUTCOME, outcome)}</p>`;
mailStr +=`<p>${desc}</p>`;
mailStr += `<p>贵公司提交的**${needCategory}**申请,已于${resolveTimeStr}办理完毕,相关结果如下:</p>`;
mailStr += `<p><span style='font-weight: 700;'>📌 办结事项详情:</span></p>`;
mailStr += `<ul>`;
mailStr += `<li><span style='font-weight: 700;'>服务事项名称:</span>${needCategory}</li>`;
mailStr += `<li><span style='font-weight: 700;'>提交时间:</span>${applyTime}</li>`;
mailStr += `<li><span style='font-weight: 700;'>办结时间:</span>${resolveTimeStr}</li>`;
mailStr += `<li><span style='font-weight: 700;'>办理结果:</span>${desc}</li>`;
mailStr += `</ul>`;
mailStr += `<p>如涉及提交实物材料(如:营业执照等),携带公司证明材料前往4-1201。</p>`;
mailStr += `<p>如您对上述办理情况有任何疑问或后续服务需求,欢迎随时与我们联系。</p>`;
mailStr += `<p>感谢贵公司对【羽翼孵化器】的信任与支持!</p>`;
await systemSendMail(resInfo.eId, enumConfig.MAILTYPE.结束企业服务, mailStr );
return { isSuccess:true };
......
......@@ -6,7 +6,7 @@ import moment = require("moment");
import { OPERATIONALDATATYPE, TABLEID, TABLENAME } from "../config/enum/dbEnum";
import { BUILDING, CHANGESTATE, CHANGETYPE, DEGREE, EMIGRATIONTYPE, FUHUASTATE, INCOME, INDUSTRY, OFFLINEPROMOTION, ONLINEPROMOTION, PROMOTIONTYPE, STATE } from "../config/enum/enum";
import { operationalData, selectData, selectManyTableData } from "../data/operationalData";
import { getMySqlMs, randomId } from "../tools/system";
import { getIntervalYear, getMySqlMs, randomId } from "../tools/system";
import { changeEnumValue } from "../util/verificationEnum";
import { eccFormParam } from "../util/verificationParam";
import { AdminRegisterAddConfig, YuYiBaseDataUpdateConfig } from "../config/eccParam/enterprise";
......@@ -116,8 +116,11 @@ export async function getBaseData() {
* 孵化器入驻信息
*/
let entryList = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.入驻信息表, {}, [`info_enterId`, `building`, `occupancyRate`, `enteredEnterprises`]);
let entryInfo = {"1":{"入驻率":"", "入驻企业":""}, "3":{"入驻率":"", "入驻企业":""}, "4":{"入驻率":"", "入驻企业":""}};
let 入驻企业 = await get入驻企业列表();
let entryInfo = {
"1":{"入驻率":"", "入驻企业":入驻企业[BUILDING["1号楼"]].length},
"3":{"入驻率":"", "入驻企业":入驻企业[BUILDING["3号楼"]].length},
"4":{"入驻率":"", "入驻企业":入驻企业[BUILDING["4号楼"]].length}};
if (entryList.length) {
entryList.forEach( info => {
// let building = changeEnumValue(BUILDING, info.building);
......@@ -126,7 +129,7 @@ export async function getBaseData() {
entryInfo[building] = { "入驻率": "", "入驻企业": "" };
}
entryInfo[building].入驻率 = info.occupancyRate;
entryInfo[building].入驻企业 = info.enteredEnterprises;
entryInfo[building].入驻企业 = 入驻企业[building].length;
})
}
......@@ -169,6 +172,38 @@ export async function getBaseData() {
}
/**
* 获取各个楼栋的企业列表
* @returns
*/
export async function get入驻企业列表() {
// 获取当前时间
let nowTime = moment().format('YYYY-MM-DD HH:mm:ss');
let fhColumn = ["fId", "eId", "startTime", "endTime", "state", "virtualCause", "virtualCauseDes", "moveOutType",
"moveOutTrace", "moveOutCause", "moveOutTime", "graduationTime", ];
let 租赁Column = ["eId", "year", "alienPatent", "classIPatent", "secondClassPatent", "thirdPentent"];
let 在孵租赁联查includeConf = {};
在孵租赁联查includeConf[TABLENAME.企业孵化信息] = { cloum: fhColumn, where: { state: { "%between%": [FUHUASTATE.实体孵化, FUHUASTATE.虚拟孵化] } } };
在孵租赁联查includeConf[TABLENAME.租赁信息] = { cloum: 租赁Column, where: {} }
let 在孵租赁联查dbList = await selectManyTableData(OPERATIONALDATATYPE.多表联查, TABLENAME.企业基础信息表, { state: CHANGESTATE.已通过 }, ["enterpriseName", "industry", "qiYeGuiMo"], 在孵租赁联查includeConf);
let 楼栋Map = {};
在孵租赁联查dbList.forEach( info => {
let {enterprise_fuhuas, enterprise_leases, enterpriseName, industry, qiYeGuiMo} = info;
// let building = changeEnumValue(BUILDING, parseInt(enterprise_leases[0].building))
let building = enterprise_leases[0].building;
if (!楼栋Map[building]) 楼栋Map[building] = [];
// let intervalYear = getIntervalYear(new Date(enterprise_fuhuas[0].startTime), new Date(enterprise_fuhuas[0].endTime));
let intervalYear = getIntervalYear(new Date(enterprise_fuhuas[0].startTime), new Date());
let industryStr = changeEnumValue(INDUSTRY, industry) || "-";
楼栋Map[building].push([enterpriseName, moment(enterprise_fuhuas[0].startTime).format("YY/MM/DD"), intervalYear, industryStr, qiYeGuiMo]);
})
return 楼栋Map;
}
export async function getOperateData(year) {
let yearTime = moment(year, "YYYY").startOf('year').format("YYYY-MM-DD");
console.log("yearTime:", yearTime);
......@@ -484,7 +519,11 @@ export async function getYuYiFuHua() {
// 2. 获取孵化器入驻信息
let entryList = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.入驻信息表, {}, [`info_enterId`, `building`, `occupancyRate`, `enteredEnterprises`]);
let entryInfo = {"1": {"入驻率": "", "入驻企业": ""}, "3": {"入驻率": "", "入驻企业": ""}, "4": {"入驻率": "", "入驻企业": ""}};
let 入驻企业 = await get入驻企业列表();
let entryInfo = {
"1":{"入驻率":"", "入驻企业":入驻企业[BUILDING["1号楼"]].length},
"3":{"入驻率":"", "入驻企业":入驻企业[BUILDING["3号楼"]].length},
"4":{"入驻率":"", "入驻企业":入驻企业[BUILDING["4号楼"]].length}};
if (entryList.length) {
entryList.forEach(info => {
......@@ -494,7 +533,7 @@ export async function getYuYiFuHua() {
entryInfo[building] = { "入驻率": "", "入驻企业": "" };
}
entryInfo[building].入驻率 = info.occupancyRate;
entryInfo[building].入驻企业 = info.enteredEnterprises;
entryInfo[building].入驻企业 = 入驻企业[building].length;
});
}
......
......@@ -8,13 +8,25 @@ import { BizError } from "../util/bizError";
const nodemailer = require('nodemailer');
// 创建发送邮件的传输对象
// host: 'smtp.qq.com', // SMTP 服务器地址
// user: '1685675085@qq.com', // 你的邮箱地址
// pass: 'hppnsfvnzzhlbdfh' // 你的邮箱密码或应用专用密码
let transporter = nodemailer.createTransport({
host: 'smtp.qq.com', // SMTP 服务器地址
// logger: true,
// host: 'smtp.qq.com', // SMTP 服务器地址
// port: 465, // SMTP 服务器端口(通常是 465 或 587)
// secure: true, // 使用 SSL
// auth: {
// user: '1685675085@qq.com', // 你的邮箱地址
// pass: 'hppnsfvnzzhlbdfh' // 你的邮箱密码或应用专用密码
// }
host: 'smtp.exmail.qq.com', // SMTP 服务器地址
port: 465, // SMTP 服务器端口(通常是 465 或 587)
secure: true, // 使用 SSL
auth: {
user: '1685675085@qq.com', // 你的邮箱地址
pass: 'hppnsfvnzzhlbdfh' // 你的邮箱密码或应用专用密码
user: 'zhaoyue@tninnopark.cn', // 你的邮箱地址
pass: 'PrW7ucysg3ubvE7d' // 你的邮箱密码或应用专用密码
}
});
......@@ -22,9 +34,10 @@ async function send(toMail, name, type, otherStr?, code?) {
let {title, mailStr} = getModel(name, type, otherStr, code);
// 设置邮件选项
let mailOptions = {
from: '羽翼 <1685675085@qq.com>', // 发送者地址
from: '羽翼 <zhaoyue@tninnopark.cn>', // 发送者地址,需要同步发送邮箱的地址,否则发送邮箱会失败
// from: '羽翼 <1685675085@qq.com>', // 发送者地址,需要同步发送邮箱的地址,否则发送邮箱会失败
to: toMail,
subject: `羽翼的${title}通知`, // 邮件主题
subject: `【羽翼孵化器】${title}`, // 邮件主题
// text: 'Hello world?', // 邮件正文(纯文本)
html: mailStr // 邮件正文(HTML 格式)
};
......@@ -45,20 +58,58 @@ function getModel(name, type, otherStr?, code?) {
let str = "";
let title = "";
switch (type) {
case MAILTYPE.通过入孵申请:
str = "<p>感谢贵公司对【羽翼孵化器】的关注与信任。经我们初步审核,贵公司提交的入孵申请已通过<span style='font-weight: 700;'>初审</span>。为推进下一阶段工作,请贵方协助完成以下事项:</p>";
str += "<p><span style='font-weight: 700;'>*电脑端:</span>通过点击链接上传入孵材料:</p>";
str += "<p>https://fh.tninnopark.cn/incubatorApply</p>";
str += "<p><span style='font-weight: 700;'>*手机端:</span>通过扫码上传入孵材料:</p>";
str += "<p><img src='https://fh.tninnopark.cn/yuyi/files/域名访问.png' /></p>";
str += "<p><span style='font-weight: 700;'>下一步事项:</span></p>";
str += "<p>如涉及提交实物材料(如:入驻计划复印件、孵化协议等),携带公司证明材料前往4-1201。</p>";
str += "<p>我们期待与贵公司的进一步合作,共同推动项目成长与落地</p>";
str += "<p>再次感谢您的积极参与!</p>";
str += "<p style='text-align: right;'>祝 商祺!</p>";
str += "<p style='text-align: right;'>羽翼孵化器</p>";
title = "贵公司入孵申请初审已通过";
break;
case MAILTYPE.驳回入孵申请:
str = otherStr;
str += "<p style='text-align: right;'>祝 商祺!</p>";
str += "<p style='text-align: right;'>羽翼孵化器</p>";
title = "贵公司入孵申请初审未通过通知";
break;
case MAILTYPE.通过入孵材料审核:
str = "您提交的企业材料审核成功,欢迎入驻羽翼孵化器。";
title = "审核通过";
str = "<p>感谢贵公司积极配合入孵流程。经审核,贵公司提交的入孵材料<span style='font-weight: 700;'>已审核通过:</span></p>";
str += "<p>我们诚挚欢迎贵公司正式入驻,与我们共同开启创新发展新篇章!</p>";
str += "<p>请搜索小程序“羽翼孵化器”,更多政策动态/消息任务将通过该小程序平台推送,请留心关注。</p>";
str += "<p><img src='https://fh.tninnopark.cn/yuyi/files/小程序.jpg' /></p>";
str += "<p style='text-align: right;'>祝 商祺!</p>";
str += "<p style='text-align: right;'>羽翼孵化器</p>";
title = "贵公司入孵材料审核已通过";
break;
case MAILTYPE.驳回入孵材料申请:
str = otherStr;
str += "<p style='text-align: right;'>祝 商祺!</p>";
str += "<p style='text-align: right;'>羽翼孵化器</p>";
title = "贵公司入孵材料审核未通过通知";
break;
case MAILTYPE.结束企业服务:
str = otherStr;
title = "企业服务受理结果";
str += "<p style='text-align: right;'>祝 商祺!</p>";
str += "<p style='text-align: right;'>羽翼孵化器</p>";
title = "贵公司申请的企业服务已受理完毕";
break;
}
let mailStr = ""
mailStr +=`<p>尊敬的${name}:</p>`;
mailStr +=`<p>尊敬的${name}团队:</p>`;
mailStr +=`<p>您好!</p>`;
mailStr +=`<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;${str}</p>`;
mailStr +=`${str}`;
return {mailStr, title};
}
......
......@@ -185,6 +185,9 @@ export async function settleInEnterprisePass(eId:string) {
}
await operationalData( OPERATIONALDATATYPE.增加, TABLENAME.入孵申请审批表, addInfo, {} );
//发送邮件
await systemSendMail(eId, enumConfig.MAILTYPE.通过入孵申请 );
return {isSuccess:true};
}
......@@ -300,33 +303,50 @@ export async function settleInEnterpriseUpdate(eId:string, param) {
/**
* 入孵申请驳回
* @param eId
* @param descType 驳回类型 [1, 2]
* @param desc
* @returns
*/
export async function settleInEnterpriseOut(eId:string) {
export async function settleInEnterpriseOut(eId:string, descType, desc:string) {
let filesList = ["eId", "enterpriseName", "uscc", "logonTime", "state"];
let resInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.企业基础信息表, {eId}, filesList);
if (!resInfo || !resInfo.eId) {
throw new BizError(ERRORENUM.数据不存在);
}
// if (resInfo.state) throw new BizError(ERRORENUM.该企业已通过审核);
// await operationalData(OPERATIONALDATATYPE.删除, TABLENAME.企业用户表, {}, {eId});//
// await operationalData(OPERATIONALDATATYPE.删除, TABLENAME.企业孵化信息, {}, {eId});
// await operationalData(OPERATIONALDATATYPE.删除, TABLENAME.租赁信息, {}, {eId});
// await operationalData(OPERATIONALDATATYPE.删除, TABLENAME.企业基础信息表, {}, {eId});
await operationalData( OPERATIONALDATATYPE.修改, TABLENAME.企业基础信息表, {register: enumConfig.CHANGESTATE.已驳回 }, { eId });
let descStr = "";
for(let i = 0; i < descType.length; i++) {
if (descType[i] == enumConfig.DESCTYPE.其他) {
if (desc) descStr += `${desc};`
} else {
descStr += `${changeEnumValue(enumConfig.DESCTYPE, descType[i])};`;
}
}
let descTypeStr = JSON.stringify(descType) || '[]';
let addInfo = {
approvalId: randomId(TABLEID.入孵申请审批表),
eId,
changeType: enumConfig.CHANGETYPE.入孵申请,
changeState: enumConfig.CHANGESTATE.已驳回,
createTimeMs: getMySqlMs()
createTimeMs: getMySqlMs(),
descType:descTypeStr,
desc:descStr,
}
await operationalData( OPERATIONALDATATYPE.增加, TABLENAME.入孵申请审批表, addInfo, {} );
/**发送邮件 */
let mailStr = "";
mailStr += "<p>感谢贵公司对【羽翼孵化器】的关注与信任。经我们初步审核,遗憾地通知您,贵公司此次入孵申请<span style='font-weight: 700;'>未通过初审</span>。主要原因为:</p>";
mailStr += `<ul>`;
mailStr += `<li>${descStr}</li>`;
mailStr += `</ul>`;
mailStr += `<p>以上内容仅作为此次审核意见供参考,您可根据反馈进行优化调整。如后续有相关优化材料或补充说明,欢迎重新提交申请。</p>`;
mailStr += `<p>我们期待未来与贵公司的合作机会,衷心祝愿贵公司业务发展顺利!</p>`;
await systemSendMail(resInfo.eId, enumConfig.MAILTYPE.驳回入孵申请, mailStr );
return {isSuccess:true};
}
......@@ -501,9 +521,11 @@ export async function enterpriseRegisterExaminePass(eId:string) {
/**
* 入孵材料审核驳回
* @param eId
* @param descType 驳回类型 [1, 2]
* @param desc
* @returns
*/
export async function enterpriseRegisterExamineOut(eId:string) {
export async function enterpriseRegisterExamineOut(eId:string, descType, desc:string) {
if (!eId) throw new BizError(ERRORENUM.参数错误);
let filesList = ["eId", "enterpriseName", "uscc", "logonTime", "state"];
let resInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.企业基础信息表, {eId}, filesList);
......@@ -521,15 +543,38 @@ export async function enterpriseRegisterExamineOut(eId:string) {
await operationalData(OPERATIONALDATATYPE.修改, TABLENAME.企业基础信息表, {state:enumConfig.CHANGESTATE.已驳回}, {eId});
let descStr = "";
for(let i = 0; i < descType.length; i++) {
if (descType[i] == enumConfig.FILEDESCTYPE.其他) {
if (desc) descStr += `${desc};`
} else {
descStr += `${changeEnumValue(enumConfig.FILEDESCTYPE, descType[i])};`;
}
}
let descTypeStr = JSON.stringify(descType) || '[]';
let addInfo = {
approvalId: randomId(TABLEID.入孵申请审批表),
eId,
changeType: enumConfig.CHANGETYPE.入孵材料审批,
changeState: enumConfig.CHANGESTATE.已驳回,
createTimeMs: getMySqlMs()
createTimeMs: getMySqlMs(),
descType:descTypeStr,
desc:descStr,
}
await operationalData( OPERATIONALDATATYPE.增加, TABLENAME.入孵申请审批表, addInfo, {} );
/**发送邮件 */
let mailStr = "";
mailStr += "<p>感谢贵公司积极配合入孵流程。经审核,贵公司提交的入孵材料<span style='font-weight: 700;'>暂未通过审核</span>,主要原因如下:</p>";
mailStr += `<ul>`;
mailStr += `<li>${descStr}</li>`;
mailStr += `</ul>`;
mailStr += `<p>如贵司愿意继续推进入孵流程,可根据上述意见进行材料完善并重新提交。</p>`;
mailStr += `<p>我们期待贵公司尽快完善材料,并欢迎继续申请入驻。</p>`;
mailStr += `<p>感谢理解与配合!</p>`;
await systemSendMail(resInfo.eId, enumConfig.MAILTYPE.驳回入孵材料申请, mailStr );
return {isSuccess:true};
}
......
......@@ -250,6 +250,52 @@ export enum CHANGETYPE {
}
/**
* 入孵申请审批驳回类型
*/
export enum DESCTYPE {
企业信息填写内容有误 = 1,
企业业务方向与孵化器定位不匹配,
企业孵化阶段与孵化器不符,
孵化器资源限制,
其他 = 999
}
/**
* 入孵材料审批驳回类型
*/
export enum FILEDESCTYPE {
"附件材料有误、不完整" = 101,
附件材料与填报信息不一致,
附件材料模糊不清,
其他 = 999
}
/**
* 入孵申请审批驳回类型
*/
export enum DESCTYPECLIENT {
企业信息填写内容有误 = 1,
企业业务方向与孵化器定位不匹配,
企业孵化阶段与孵化器不符,
孵化器资源限制,
// 其他 = 999
}
/**
* 入孵材料审批驳回类型
*/
export enum FILEDESCTYPECLIENT {
"附件材料有误、不完整" = 101,
附件材料与填报信息不一致,
附件材料模糊不清,
// 其他 = 999
}
export enum QUARTER {
第一季度 = 1,
第二季度,
......@@ -396,6 +442,9 @@ export enum RISKTYPE {
export enum MAILTYPE {
通过入孵材料审核 = 1,
结束企业服务,
通过入孵申请,
驳回入孵申请,
驳回入孵材料申请,
}
......
......@@ -7,9 +7,9 @@ import { updateQCCDataTask } from "../biz/qccInit";
* 设置定时器,每天刷新一次数据
*/
export async function initApiDataStorage() {
await updateQCCDataTask();
// updateQCCDataTask();
setInterval(async function () {
await updateQCCDataTask();
updateQCCDataTask();
}, 3600 * 1000 * 24);
}
......
......@@ -24,14 +24,14 @@ export function setRouter(httpServer) {
httpServer.post('/admin/enterprise/settlein/pass', checkUser, asyncHandler(settleInPass));
httpServer.post('/admin/enterprise/settlein/info', checkUser, asyncHandler(settleInById));
httpServer.post('/admin/enterprise/settlein/update', checkUser, asyncHandler(settleUpdate));
httpServer.post('/admin/enterprise/settlein/out', checkUser, asyncHandler(settleInOut));
httpServer.post('/admin/enterprise/settlein/out', checkUser, asyncHandler(settleInOut));//驳回
httpServer.post('/admin/fuhua/rufu/add', checkUser, asyncHandler(addRuFu));
httpServer.post('/admin/fuhua/rufu/info', checkUser, asyncHandler(getRuFu));
httpServer.post('/admin/fuhua/rufu/update', checkUser, asyncHandler(updateRuFu));//
//审核
httpServer.post('/admin/enterprise/settlein/examine/list', checkUser, asyncHandler(examineSettleIn));
httpServer.post('/admin/enterprise/settlein/examine/pass', checkUser, asyncHandler(examineSettleInPass));//入孵材料审核 通过
httpServer.post('/admin/enterprise/settlein/examine/out', checkUser, asyncHandler(examineSettleInOut));
httpServer.post('/admin/enterprise/settlein/examine/out', checkUser, asyncHandler(examineSettleInOut));//驳回
// //通知
httpServer.post('/admin/notice/list', checkUser, asyncHandler(noticeList));
......@@ -775,8 +775,8 @@ async function settleInById(req, res) {
*/
async function settleInOut(req, res) {
const UserInfo = req.userInfo;
let { eId } = req.body
let result = await ruFuBiz.settleInEnterpriseOut(eId);
let { eId, descType, desc } = req.body
let result = await ruFuBiz.settleInEnterpriseOut(eId, descType, desc);
res.success(result);
}
......@@ -870,8 +870,8 @@ async function examineSettleInPass(req, res) {
async function examineSettleInOut(req, res) {
const UserInfo = req.userInfo;
let { eId } = req.body;
let result = await ruFuBiz.enterpriseRegisterExamineOut(eId);
let { eId, descType, desc } = req.body;
let result = await ruFuBiz.enterpriseRegisterExamineOut(eId, descType, desc );
res.success(result);
}
......@@ -29,6 +29,8 @@ const config = {
"/public/clientpolicytype":enumConfig.CLIENTPOLICYTYPE,// 政策文件类型-前端用
"/public/building":enumConfig.BUILDING,// 园区楼号
"/public/ipralltype":enumConfig.IPRALLTYPE, //企查查知识产权类型
"/public/desctypeclient":enumConfig.DESCTYPECLIENT, //入孵申请审批驳回
"/public/filedesctypeclient":enumConfig.FILEDESCTYPECLIENT, //入孵材料审批驳回
// "/public/output/basedata":outputEnumConfig.BASEDATA,
// "/public/output/opreatdata":outputEnumConfig.OPERATIONDATA,
// "/public/output/financingdata":outputEnumConfig.FINANCINGDATA,
......
......@@ -123,3 +123,47 @@ export function getPinyinInitials(name) {
.join('');
}
/**
* 计算间隔孵化时长
* @param startTime
* @param endTime
*/
export function getIntervalYear(startTime, endTime) {
// 提取开始日期的年、月、日(注意月份需+1)
const startYear = startTime.getFullYear();
const startMonth = startTime.getMonth() + 1;
const startDay = startTime.getDate();
// 提取结束日期的年、月、日
const endYear = endTime.getFullYear();
const endMonth = endTime.getMonth() + 1;
const endDay = endTime.getDate();
// 计算总月份差
let totalMonths = (endYear - startYear) * 12 + (endMonth - startMonth);
// 处理天数不足的情况(未满整月)
if (endDay < startDay) {
totalMonths--;
}
// 处理时间倒流的情况
if (totalMonths < 0) {
return "0个月";
}
// 根据总月份判断输出年或月
if (totalMonths >= 12) {
const years = Math.floor(totalMonths / 12);
return `${years}年`;
} else {
return `${totalMonths}个月`;
}
}
......@@ -39,45 +39,30 @@ export function changeEnumValue(enumConf, value:any) {
if (!value) return '';
if ( typeof value == 'number' ) {
let str = enumConf[value];
/** 特化处理 中文引号在枚举中不适用*/
if (str == "_投资__孵化_类型") {
str = str.replace("__","+");
str = str.replace("_","“");
str = str.replace("_","”");
}
if (str == "经营成本过高_场地成本或人员成本_" || str == "办公空间拓展_无合适办公空间_") {
str = str.replace("_","(");
str = str.replace("_",")");
}
if (str == "迁出孵化器_仍在张江" || str == "迁出张江_仍在浦东" || str == "迁出浦东_仍在上海") {
str = str.replace("_",",");
}
if (str == "科技金融_风险投资_" || str == "科技金融_其他_" || str == "技术专家_法律专家_") {
str = str.replace("_","(");
str = str.replace("_",")");
}
/**特化处理 */
if(/_dou/.test(str)) str = str.replace(/_dou/gm, ",");
if(/_zyh/.test(str)) str = str.replace(/_zyh/gm, "“");
if(/_yyh/.test(str)) str = str.replace(/_yyh/gm, "”");
if(/_dun/.test(str)) str = str.replace(/_dun/gm, "、");
if(/_ju/.test(str)) str = str.replace(/_ju/gm, "。");
return str
} else if (typeof value == 'string') {
try {//兼容数据库 '[1,2,3]'
value = JSON.parse(value);
}catch(err) {
return enumConf[parseInt(value)];
}
}
let str = "";
value.forEach((item, index) => {
let subStr = enumConf[item];
/** 特化处理 中文引号在枚举中不适用*/
if (subStr == "_投资__孵化_类型") {
subStr = subStr.replace("__","+");
subStr = subStr.replace("_","“");
subStr = subStr.replace("_","”");
}
if (subStr == "经营成本过高_场地成本或人员成本_" || subStr == "办公空间拓展_无合适办公空间_") {
subStr = subStr.replace("_","(");
subStr = subStr.replace("_",")");
}
if (subStr == "迁出孵化器_仍在张江" || subStr == "迁出张江_仍在浦东" || subStr == "迁出浦东_仍在上海") {
subStr = subStr.replace("_",",");
}
if (subStr == "科技金融_风险投资_" || subStr == "科技金融_其他_" || subStr == "技术专家_法律专家_") {
subStr = subStr.replace("_","(");
subStr = subStr.replace("_",")");
}
/**特化处理 */
if(/_dou/.test(subStr)) subStr = subStr.replace(/_dou/gm, ",");
if(/_zyh/.test(subStr)) subStr = subStr.replace(/_zyh/gm, "“");
if(/_yyh/.test(subStr)) subStr = subStr.replace(/_yyh/gm, "”");
if(/_dun/.test(subStr)) subStr = subStr.replace(/_dun/gm, "、");
if(/_ju/.test(subStr)) subStr = subStr.replace(/_ju/gm, "。");
str += subStr;
if (index == value.length-1) str+="";
else str += ","
......
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