Commit 45f626e5 by 赵庆

gsb

parent fdf231c3
# Default ignored files
/workspace.xml
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/bpo-admin.iml" filepath="$PROJECT_DIR$/.idea/bpo-admin.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>
\ No newline at end of file
const system = require("../../system");
const settings = require("../../../config/settings");
const CtlBase = require("../ctl.base");
const moment = require("moment");
class EntcompanyCtl extends CtlBase {
constructor() {
super(CtlBase.getServiceName(EntcompanyCtl));
this.userSve = system.getObject("service.userSve");
this.utilesignbaoSve = system.getObject("service.utilesignbaoSve");
this.esealSve = system.getObject("service.esealSve");
}
async signList(queryobj, qobj, req) {
var params = qobj.search;
try {
var page = await this.service.listByCondition(params);
return system.getResult2(page);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
async signSave(queryobj, qobj, req) {
try {
var rtn = null;
var dkcompany = await this.buildCompeny(qobj);
if (dkcompany.id) {
//修改
await dkcompany.save();
} else {
//新增
dkcompany = await this.service.create(dkcompany);
}
var rs;
var eseal = await this.esealSve.findOne({
nameA: dkcompany.sealName
});
if (eseal) {
dkcompany.sealId = eseal.sealId;
await dkcompany.save();
} else {
// var accountId = "740b19e0799a4d7abacfa1a31fb72b1e"; // 测试
// var accountId = "f50d8f8cdd8d4bcda6b1aaad1d4b14bf"; // 生产
var accountId = settings.apiconfig.companyAccountId(); // 生产
var aliasName = dkcompany.sealName + "-alias";
rs = await this.utilesignbaoSve.creatEntSignet(accountId, aliasName, dkcompany.sealName, "", "", "dkcompanyCtl");
if (rs && rs.code == 1) {
dkcompany.sealId = rs.data.sealId;
await dkcompany.save();
await this.esealSve.create({
nameA: dkcompany.sealName,
sealId: dkcompany.sealId,
});
} else {
}
}
// if(isCreateSealKey || !dkcompany.sealFileKey) {
// // 创建企业印章fileKey
// // var accountId = "740b19e0799a4d7abacfa1a31fb72b1e"; // 测试
// var accountId = "f50d8f8cdd8d4bcda6b1aaad1d4b14bf"; // 生产
// var aliasName = dkcompany.id + "-" + uuidv4();
// var rs = await this.utilesignbaoSve.createEntSeal(dkcompany.sealUrl, accountId, aliasName, "dkcompanyCtl");
// if(rs.code == 1) {
// dkcompany.sealFileKey = rs.data.fileKey;
// dkcompany.sealId = rs.data.sealId;
// await dkcompany.save();
// }
// }
return system.getResult2(rs, null);
} catch (e) {
console.log("-----------------------------e");
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
async buildCompeny(qobj) {
var dkcompany = null;
if (qobj.id) {
dkcompany = await this.service.findById(qobj.id);
// dkcompany.isCreateSealKey = dkcompany.sealUrl != qobj.sealUrl;
} else {
dkcompany = {};
}
dkcompany.name = qobj.name;
dkcompany.legal = qobj.legal || "";
dkcompany.contactMobile = qobj.contactMobile || "";
dkcompany.addr = qobj.addr || "";
dkcompany.owner_id = qobj.owner_id;
dkcompany.sealName = qobj.sealName || "";
return dkcompany;
}
async mySignList(queryobj, qobj, req) {
var params = qobj.search;
if (!req.session.user.isAdmin) {
if (!req.session.myIds || req.session.myIds.length == 0) {
params.ownerIds = [req.session.user.id];
} else {
params.ownerIds = req.session.myIds;
}
}
try {
var page = await this.service.pageByCondition(params);
return system.getResult2(page);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
async suggest(queryobj, qobj, req) {
var name = this.trim(qobj.name);
if (!name) {
return system.getResult2([])
}
var ids = [];
if (qobj.ismy) {
ids.push(req.session.user.id);
}
var list = await this.service.suggest(name, ids);
return system.getResult2(list);
}
async allList(queryobj, qobj, req) {
var params = {};
var loginUser = req.session.user;
var roles = loginUser.Roles || [];
var isZC = false;
for (var r of roles) {
if (r.code == 'zcry' || r.code == 'zcgl') {
isZC = true;
break;
}
}
if (!loginUser.isAdmin && !isZC) {
if (!req.session.myIds || req.session.myIds.length == 0) {
return system.getResult2({count: 0, rows: []});
}
params.ownerIds = req.session.myIds;
}
return await this.list(queryobj, qobj, req, params);
}
async myList(queryobj, qobj, req) {
var params = {
owner_id: req.session.user.id
}
return await this.list(queryobj, qobj, req, params);
}
async list(queryobj, qobj, req, params) {
// 1待审核 2通过 3驳回
// "proxyAuditStatus": {"0":"待审核","1":"审核通过","2":"审核驳回"},
if (!qobj.search) {
qobj.search = {};
}
var auditType;
if (params) {
if (params.owner_id) {
qobj.ownerIds = [params.owner_id];
} else if (params.ownerIds) {
qobj.ownerIds = params.ownerIds;
}
}
qobj.raw = true;
var rs = await super.findAndCountAll(queryobj, qobj, req);
if (rs && rs.data && rs.data.rows) {
var ownerIds = [];
for (var row of rs.data.rows) {
if (row.updated_at) {
row.updated_at = new Date(row.updated_at).Format("yyyy-MM-dd hh:mm");
}
if (row.created_at) {
row.created_at = new Date(row.created_at).Format("yyyy-MM-dd hh:mm");
}
if (row.updated_at) {
row.updated_at = new Date(row.updated_at).Format("yyyy-MM-dd hh:mm");
}
if (row.owner_id) {
ownerIds.push(row.owner_id);
}
}
var usermap = await this.userSve.findMapByIds(ownerIds);
if (ownerIds.length > 0) {
for (var row of rs.data.rows) {
if (row.owner_id) {
row.owner = usermap["id_" + row.owner_id];
}
}
}
}
return rs;
}
async info(queryobj, qobj, req) {
var id = qobj.id;
try {
var info = await this.service.getInfo(id);
if (info) {
if (info.owner_id) {
info.owner = await this.userSve.findById(info.owner_id);
}
if (info.created_at) {
info.created_at = moment(info.created_at).format("YYYY-MM-DD HH:mm:ss");
}
}
return system.getResult2(info);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
}
module.exports = EntcompanyCtl;
var system = require("../../system")
var settings = require("../../../config/settings");
const CtlBase = require("../ctl.base");
const moment = require("moment");
class EntcontractCtl extends CtlBase {
constructor() {
super(CtlBase.getServiceName(EntcontractCtl));
this.etemplateSve = system.getObject("service.etemplateSve");
this.userSve = system.getObject("service.userSve");
this.usereaccountSve = system.getObject("service.usereaccountSve");
this.ecompanySve = system.getObject("service.ecompanySve");
this.utilesignbaoSve = system.getObject("service.utilesignbaoSve");
this.ejobapplySve = system.getObject("service.ejobapplySve");
this.esealSve = system.getObject("service.esealSve");
this.Mail = system.getObject("util.mailClient");
this.excelClient = system.getObject("util.excelClient");
this.eSignBaoRedirectBossUrl = settings.apiconfig.eSignBaoRedirectBossUrl();
}
async saveOffline(queryobj, obj, req) {
try {
var rs = await this.service.saveOffline(obj);
return system.getResult2(rs);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
async autoSaveOffline(queryobj, obj, req) {
var loginUser = req.session.user;
try {
var rs = await this.service.autoSaveOffline(obj);
if (rs.code != 1) {
return system.getErrResult2(rs.msg);
} else {
return system.getResult2(rs);
}
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
async allList(queryobj, obj, req) {
var params = obj.search || {};
var ecompanyId = params.ecompany_id;
if (ecompanyId) {
params.ecompanyIds = [ecompanyId];
delete params.ecompany_id;
}
params.eflowstatusList = ['2'];
this.doTimeCondition(params, ["signBegin", "signEnd"]);
try {
var page = await this.service.listByCondition(params);
return system.getResult2(page);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
async allExport(queryobj, req, res) {
var params = JSON.parse(queryobj.search);
params.currentPage = 1;
params.pageSize = 60000;
var ecompanyId = params.ecompany_id;
if (ecompanyId) {
params.ecompanyIds = [ecompanyId];
delete params.ecompany_id;
}
params.eflowstatusList = ['2'];
this.doTimeCondition(params, ["signBegin", "signEnd"]);
try {
var page = await this.service.listByCondition(params);
var csvobj = {
fileName: "签约协议" + moment().format("YYYYMMDD") + ".csv",
rows: page.rows,
opts: {
fields: ['id', 'ecompany.name', 'template.nameA', 'eaccount.userName', 'eaccount.mobile', 'eaccount.personsSign', 'eaccount.bankno', 'fileurl'],
unwind: ['ecompany', 'eaccount'],
unwindBlank: true,
excelStrings: true,
},
headers: {
'id': '编号',
'ecompany.name': "公司名",
'template.nameA': '签约主体',
'eaccount.userName': "姓名",
'eaccount.mobile': "手机号",
'eaccount.personsSign': "身份证",
"eaccount.bankno": "银行卡号",
'fileurl': "签约合同"
},
};
await this.excelClient.exportCsv(req, res, csvobj);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
async myList(queryobj, obj, req) {
var params = obj.search || {};
var ownerIds = null;
if (!req.session.myIds || req.session.myIds.length == 0) {
ownerIds = [req.session.user.id];
} else {
ownerIds = req.session.myIds;
}
var ecompanyIds = await this.ecompanySve.findIdsByOwnerIds(ownerIds);
if (!ecompanyIds || ecompanyIds.length == 0) {
return system.getResult2({count: 0, rows: []});
}
var ecompanyId = params.ecompany_id;
if (ecompanyId) {
delete params.ecompany_id;
}
if (ecompanyId) {
if (ecompanyIds.indexOf(ecompanyId) == -1) {
return system.getResult2({count: 0, rows: []});
} else {
params.ecompanyIds = [ecompanyId];
}
} else {
params.ecompanyIds = ecompanyIds;
}
params.eflowstatusList = ['2'];
this.doTimeCondition(params, ["signBegin", "signEnd"]);
try {
var page = await this.service.pageByCondition(params);
return system.getResult2(page);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
async myExport(queryobj, req, res) {
var params = JSON.parse(queryobj.search);
params.currentPage = 1;
params.pageSize = 60000;
var ownerIds = null;
if (!req.session.myIds || req.session.myIds.length == 0) {
ownerIds = [req.session.user.id];
} else {
ownerIds = req.session.myIds;
}
var ecompanyIds = await this.ecompanySve.findIdsByOwnerIds(ownerIds);
if (!ecompanyIds || ecompanyIds.length == 0) {
return system.getErrResult2("无数据");
}
var ecompanyId = params.ecompany_id;
if (ecompanyId) {
delete params.ecompany_id;
}
if (ecompanyId) {
if (ecompanyIds.indexOf(ecompanyId) == -1) {
return system.getErrResult2("无数据");
} else {
params.ecompanyIds = [ecompanyId];
}
} else {
params.ecompanyIds = ecompanyIds;
}
params.eflowstatusList = ['2'];
this.doTimeCondition(params, ["signBegin", "signEnd"]);
try {
var page = await this.service.pageByCondition(params);
var csvobj = {
fileName: "签约协议" + moment().format("YYYYMMDD") + ".csv",
rows: page.rows,
opts: {
fields: ['id', 'ecompany.name', 'template.nameA', 'eaccount.userName', 'eaccount.mobile', 'eaccount.personsSign', 'eaccount.bankno', 'fileurl'],
unwind: ['ecompany', 'eaccount'],
unwindBlank: true,
excelStrings: true,
},
headers: {
'id': '编号',
'ecompany.name': "公司名",
'template.nameA': '签约主体',
'eaccount.userName': "姓名",
'eaccount.mobile': "手机号",
'eaccount.personsSign': "身份证",
"eaccount.bankno": "银行卡号",
'fileurl': "签约合同"
},
};
await this.excelClient.exportCsv(req, res, csvobj);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
async findAndCountAll(queryobj, obj, req) {
var search = obj.search || {};
if (search.accountMobile) {
obj.accountMobile = search.accountMobile;
delete search.accountMobile;
}
if (search.accountName) {
obj.accountName = search.accountName;
delete search.accountName;
}
if (search.accountIdno) {
obj.accountIdno = search.accountIdno;
delete search.accountIdno;
}
var apps = await super.findAndCountAll(queryobj, obj, req);
if (apps && apps.data && apps.data.rows) {
for (var row of apps.data.rows) {
this.service.handleDate(row, ['completed_at'], "YYYY-MM-DD HH:mm:ss", -8);
}
}
return apps;
}
async findCompleteContracts(q, obj, req) {
obj = obj || {};
obj.eflowstatus = "2";
if (req && req.session && req.session.user.id) {
obj.user_id = req.session.user.id;
}
console.log(obj, "=============================================");
var rs = await this.service.findContracts(obj);
return system.getResult2(rs);
}
async genContract(q, obj, req) {
obj = obj || {};
var referer = req.headers.referer;
let userid = referer.substr(referer.indexOf('&userid=') + 8);
// if (req && req.session && req.session.user.id) {
// userid = req.session.user.id;
// }
if (!userid) {
return system.getErrResult2("登录失效,请重新登录");
}
var isInsure = obj.isInsure || 0;
let eaccount_id = obj.eaccount_id;
let etemplateid = obj.etemplateid;
let apply_id = obj.apply_id || 0;
let user = await this.userSve.findById(userid);
let etemplate = await this.etemplateSve.findById(etemplateid);
let company = await this.ecompanySve.findById(etemplate.ecompany_id);
let eaccount = await this.usereaccountSve.findById(eaccount_id);
if (!eaccount.eaccountid) {
return system.getErrResult2("签署失败,请重新进入");
}
if (!etemplate || !etemplate.templateid) {
return system.getErrResult2("协议不存在,请刷新重新选择");
}
let sinedCompanyIds = await this.service.findUserSinedCompanyIds(eaccount_id);
if (sinedCompanyIds.indexOf(Number(etemplate.ecompany_id)) != -1) {
return system.getErrResult2("你已经签署该公司协议,不可以重复签署");
}
var contract = await this.service.findOne({
"etemplate_id": etemplateid,
"usereaccount_id": eaccount_id,
"eflowstatus": "1"
});
if (contract) {
await this.service.delete({
id: contract.id
});
}
contract = {
name: company.name,
etemplate_id: etemplateid,
user_id: userid,
usereaccount_id: eaccount_id,
ecompany_id: etemplate.ecompany_id,
edocid: "",
eflowid: "",
esignUrl: "",
eflowstatus: "1",
isInsure: isInsure
}
contract = await this.service.create(contract);
let today = new Date().Format("yyyy-MM-dd");
var nameA = etemplate.nameA;
var eseal = await this.esealSve.findOne({
nameA: nameA
});
var sealId = "";
if (!eseal) {
// var rs = await this.utilesignbaoSve.creatEntSignet("f50d8f8cdd8d4bcda6b1aaad1d4b14bf", nameA + "alias", nameA, "", "", "econtractCtl");
var rs = await this.utilesignbaoSve.creatEntSignet(settings.apiconfig.companyAccountId(), nameA + "alias", nameA, "", "", "econtractCtl");
if (rs && rs.code == 1) {
sealId = rs.data.sealId;
await this.esealSve.create({
nameA: nameA,
sealId: sealId,
});
} else {
return system.getErrResult2("签约失败, 生成印章错误");
}
} else {
sealId = eseal.sealId;
}
var params = {
templateId: etemplate.templateid, //模板id,由创建模板接口调用返回的templateId 必填
name: company.name, //合同模板名称 必填
simpleFormFields: {
nameA: nameA, //甲方 必填
nameB: eaccount.userName, //乙方 必填
unit: company.name, //合作单位(国美) 必填---------------------------超出长度风险---目前不知多少长度
signDateA: today, //甲方签约日期 必填\
signDateB: today //乙方签约日期 必填
}
};
var ebaoAccountId = eaccount.eaccountid; //签署人账户id-- 必填
var thirdOrderNo = contract.id; //第三方流水号,通知回调使用---选填
var eBaoRedirectBossUrl = this.eSignBaoRedirectBossUrl + "?ecid=" + etemplate.id + "&cb=1#/ecompany/signed";
console.log({
params: params,
ebaoAccountId: ebaoAccountId,
thirdOrderNo: thirdOrderNo
}, "-============= params ===========================");
let tt = await this.utilesignbaoSve.userSignContractNoTemplate(params, ebaoAccountId, thirdOrderNo, eBaoRedirectBossUrl, "econtractCtl", sealId);
console.log(tt, "-============= result ===========================");
if (tt && tt.code == 1) {
contract.eflowid = tt.data.flowId;
contract.edocid = tt.data.docId;
contract.esignUrl = tt.data.signUrl;
contract.save();
}
if (apply_id) {
var ejobapply = await this.ejobapplySve.findById(apply_id);
if (ejobapply) {
ejobapply.econtract_id = contract.id;
ejobapply.save();
}
}
var genResult = {
tt: tt,
esignUrl: contract.esignUrl,
params: params,
ebaoAccountId: ebaoAccountId,
thirdOrderNo: thirdOrderNo
}
return system.getResult2(genResult, null);
}
async findInfo(q, obj, req) {
obj = obj || {};
var rs = await this.service.findInfo(obj);
return system.getResult2(rs);
}
async delById(q, obj, req) {
obj = obj || {};
var rs = await this.service.findById(obj.id);
if (rs) {
rs.eflowstatus = '1';
rs.save();
}
return system.getResult2(1);
}
async sendContractEmail(q, obj, req) {
obj = obj || {};
let id = obj.id;
let email = obj.email;
let contract = await this.service.findById(id);
if (!contract) {
return {
code: 0,
msg: "发送失败,合同不存在"
}
}
if (contract.eflowstatus != "2") {
return {
code: 0,
msg: "合同还未签署完成"
}
}
if (!contract.fileurl) {
// 请求文件地址
let fileRs = await this.utilesignbaoSve.downloadUserContractFile(contract.eflowid, "econtractCtl");
console.log(fileRs, "===============================================================");
if (fileRs.code == 1 && fileRs.data.selfossUrl) {
contract.fileurl = fileRs.data.selfossUrl;
contract.save();
} else {
return {
code: 0,
msg: "您的网络繁忙,请稍后重试"
}
}
}
var to = email;
var title = '合同信息';
var text = null;
var html = '请点击下载链接获取合同:';
var cc = null;
var bcc = null;
var atts = [];
var html = '<a href="' + contract.fileurl + '">' + contract.name + '</a>'
try {
console.log(to, title, text, html, cc, bcc, atts);
var result = await this.Mail.sendMsg(to, title, text, html, cc, bcc, atts) //发送成功后result的值:250 Data Ok: queued as freedom
console.log(result);
if (result.indexOf("Ok") >= 0) {
return {
code: 1,
msg: "发送成功"
}
} else {
return {
code: 0,
msg: "发送失败"
}
}
} catch (e) {
console.log(e);
return {
code: 0,
msg: "发送失败"
}
}
}
async getContractUrl(q, obj, req) {
var url = await this.service.getContractUrl(obj.id);
return system.getResult2(url);
}
async downloadContractUrl(q, obj, req) {
let contract = await this.service.findById(obj.id);
if (!contract) {
return system.getErrResult2("协议不存在");
}
if (contract.fileurl) {
return system.getResult2(contract.fileurl);
}
// 请求文件地址
let fileRs = await this.utilesignbaoSve.downloadUserContractFile(contract.eflowid, "econtractCtl");
console.log(fileRs, "===============================================================");
if (fileRs.code == 1 && fileRs.data.selfossUrl) {
contract.fileurl = fileRs.data.selfossUrl;
contract.save();
return system.getResult2(fileRs.data.selfossUrl);
}
return system.getErrResult2("网络繁忙,获取合同失败,请稍后重试");
}
async getPayNotify(queryobj, qobj, req) {
try {
var params = qobj.id || {};
var rs = await this.service.getPayNotify(params);
return system.getResult2(rs);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
}
module.exports = EntcontractCtl;
\ No newline at end of file
var system = require("../../system")
var settings = require("../../../config/settings");
const CtlBase = require("../ctl.base");
const uuidv4 = require('uuid/v4');
const logCtl = system.getObject("web.oplogCtl");
const moment = require("moment");
class EnttemplateCtl extends CtlBase {
constructor() {
super(CtlBase.getServiceName(EnttemplateCtl));
this.utilesignbaoSve = system.getObject("service.utilesignbaoSve");
this.econtractSve = system.getObject("service.econtractSve");
this.ecompanySve = system.getObject("service.ecompanySve");
this.ecompanymainSve = system.getObject("service.ecompanymainSve");
this.wxSve = system.getObject("service.wxSve");
this.excelClient = system.getObject("util.excelClient");
}
async findReadyContracts(q, obj, req) {
obj = obj || {};
obj.userId = req.session.user.id;
// 验证companyId
if (!obj.ecompany_id || !obj.eaccount_id) {
return system.getResult2([]);
}
let sinedCompanyIds = await this.econtractSve.findUserSinedCompanyIds(Number(obj.eaccount_id));
if (sinedCompanyIds.indexOf(Number(obj.ecompany_id)) != -1) {
return system.getResult2([]);
}
var rs = await this.service.findReadyContracts(obj);
return system.getResult2(rs);
}
async signList(queryobj, qobj, req) {
var params = qobj.search;
try {
var page = await this.service.signPage(params);
return system.getResult2(page);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
async getListByName(queryobj, qobj, req){
var name = this.trim(qobj.name);
if(!name) {
return system.getResult2([])
}
var list = await this.service.getListByName(name);
return system.getResult2(list);
}
async signExport(pobj, req, res) {
var params = JSON.parse(pobj.search);
try {
params.currentPage = 1;
params.pageSize = 60000;
var ecompanyId = params.ecompany_id;
if (ecompanyId) {
params.ecompanyIds = [ecompanyId];
delete params.ecompany_id;
}
var page = await this.service.signPage(params);
var csvobj = {
fileName: "二维码-" + moment().format("YYYYMMDD") + ".csv",
rows: page.rows,
opts: {
fields: ['id', 'ecompany.name', 'nameA', 'qrcodeurl'],
unwind: ['ecompany'],
excelStrings: true,
unwindBlank: true
},
headers: {
"id": "编号",
'ecompany.name': "公司名",
'nameA': "签约主体",
'qrcodeurl': "二维码"
},
};
await this.excelClient.exportCsv(req, res, csvobj);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
async mySignList(queryobj, qobj, req) {
var params = qobj.search;
try {
var ownerIds = null;
if (!req.session.myIds || req.session.myIds.length == 0) {
ownerIds = [req.session.user.id];
} else {
ownerIds = req.session.myIds;
}
var ecompanyIds = await this.ecompanySve.findIdsByOwnerIds(ownerIds);
if (!ecompanyIds || ecompanyIds.length == 0) {
return system.getResult2({
count: 0,
rows: []
});
}
var ecompanyId = params.ecompany_id;
if (ecompanyId) {
delete params.ecompany_id;
}
if (ecompanyId) {
if (ecompanyIds.indexOf(ecompanyId) == -1) {
return system.getResult2({
count: 0,
rows: []
});
} else {
params.ecompanyIds = [ecompanyId];
}
} else {
params.ecompanyIds = ecompanyIds;
}
var page = await this.service.signPage(params);
return system.getResult2(page);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
async mySignExport(pobj, req, res) {
var params = JSON.parse(pobj.search);
try {
params.currentPage = 1;
params.pageSize = 60000;
var ownerIds = null;
if (!req.session.myIds || req.session.myIds.length == 0) {
ownerIds = [req.session.user.id];
} else {
ownerIds = req.session.myIds;
}
var ecompanyIds = await this.ecompanySve.findIdsByOwnerIds(ownerIds);
if (!ecompanyIds || ecompanyIds.length == 0) {
return system.getErrResult2("无数据");
}
var ecompanyId = params.ecompany_id;
if (ecompanyId) {
delete params.ecompany_id;
}
if (ecompanyId) {
if (ecompanyIds.indexOf(ecompanyId) == -1) {
return system.getErrResult2("无数据");
} else {
params.ecompanyIds = [ecompanyId];
}
} else {
params.ecompanyIds = ecompanyIds;
}
var page = await this.service.signPage(params);
var csvobj = {
fileName: "二维码-" + moment().format("YYYYMMDD") + ".csv",
rows: page.rows,
opts: {
fields: ['id', 'ecompany.name', 'nameA', 'qrcodeurl'],
unwind: ['ecompany'],
excelStrings: true,
unwindBlank: true
},
headers: {'id': '编号', 'ecompany.name': "公司名", 'nameA': "签约主体", 'qrcodeurl': "二维码"},
};
await this.excelClient.exportCsv(req, res, csvobj);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
async info(queryobj, qobj, req) {
console.log("dddddddddss");
var id = Number(qobj.id);
try {
var info = await this.service.getInfo(id);
if (info) {
if (info.created_at) {
info.created_at = moment(info.created_at).format("YYYY-MM-DD HH:mm:ss");
}
var ecompany = await this.ecompanySve.getCompany(info.entcompany_id) || {};
info.ecompany = ecompany || {};
if (ecompany) {
info.ecompanyName = ecompany.name;
}
}
return system.getResult2(info);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
async mysave(queryobj, qobj, req) {
try {
var template = null;
let id = qobj.id;
if (id) {
template = await this.service.findById(id);
}
console.log(qobj)
// var ecompany = await this.ecompanySve.findById(qobj.entcompany_id);
if (template) { //修改
template.name = qobj.name;
template.entcompany_id = qobj.entcompany_id;
template.codeurl = qobj.codeurl;
template.remark = qobj.remark || "";
template.aggreement_id = qobj.aggreement_id;
template.placeholderkey = qobj.placeholderkey || "";
await template.save();
} else { //新增
template = {};
template.name = qobj.name || ecompany.name;
template.entcompany_id = qobj.entcompany_id;
template.aggreement_id = qobj.aggreement_id;
template.codeurl = qobj.codeurl;
template.remark = qobj.remark || "";
template.placeholderkey = qobj.placeholderkey || "";
template = await this.service.create(template);
}
// 调用e签宝接口生成template
if (template.filepath && ecompany.name) {
try {
let templateRs = await this.utilesignbaoSve.createEntTemplate(template.filepath, ecompany.name, "etemplateCtl");
logCtl.info({
optitle: "e签宝===>保存模板信息template",
op: "app/base/controller/impl/etemplateCtl/mysave",
content: "参数:filepath=" + template.filepath + ";name=" + template.name + "; result : " + JSON.stringify(templateRs),
clientIp: ""
});
if (templateRs && templateRs.code == 1 && templateRs.data) {
template.filekey = templateRs.data.fileKey;
template.templateid = templateRs.data.templateId;
await template.save();
} else {
console.log("======================12222222222222222222222222222222222222222222222222222222222222222222222222====================");
}
} catch (e) {
console.error(e);
}
}
template.qrcodeurl = await this.wxSve.makeQrWithScene("wxf616c0a459d66081", template.id);
template.save();
return system.getResult2(template, null);
} catch (e) {
console.log("-----------------------------e");
console.log(e);
return {
code: -1
}
}
}
}
module.exports = EnttemplateCtl;
\ No newline at end of file
const system = require("../../system");
const Dao = require("../dao.base");
class EntcompanyDao extends Dao {
constructor() {
super(Dao.getModelName(EntcompanyDao));
}
async findMapByIds(ids, attrs) {
var result = [];
if (!ids || ids.length == 0) {
return result;
}
attrs = attrs || "*";
var sql = "SELECT " + attrs + " FROM c_dkcompany where id IN (:ids) ";
var list = await this.customQuery(sql, {ids: ids});
if (!list || list.length == 0) {
return result;
}
for (var item of list) {
result["id_" + item.id] = item;
}
return result;
}
async idsLikeName(name) {
var result = [];
if (!name || !name.trim()) {
return result;
}
var sql = "SELECT id FROM c_dkcompany WHERE name LIKE :name ";
var list = await this.customQuery(sql, {name: "%" + name + "%"});
if (list) {
for (var item of list) {
result.push(item.id);
}
}
return result;
}
async findNamesByOwnerIds(ownerIds) {
var result = [];
if (!ownerIds || ownerIds.length == 0) {
return result;
}
var sql = "SELECT name FROM c_dkcompany WHERE owner_id IN (:ownerIds) ";
var list = await this.customQuery(sql, {ownerIds: ownerIds});
if (!list || list.length == 0) {
return result;
}
for (var item of list) {
result.push(item.name);
}
return result;
}
async findIdsByOwnerIds(ownerIds) {
var result = [];
if (!ownerIds || ownerIds.length == 0) {
return result;
}
var sql = "SELECT id FROM c_dkcompany WHERE owner_id IN (:ownerIds) ";
var list = await this.customQuery(sql, {ownerIds: ownerIds});
if (!list || list.length == 0) {
return result;
}
for (var item of list) {
result.push(item.id);
}
return result;
}
async findMapByNames(names, attrs) {
var result = [];
if (!ids || ids.length == 0) {
return result;
}
attrs = attrs || "*";
var sql = "SELECT " + attrs + " FROM c_dkcompany where name IN (:names) WHERE deleted_at IS NULL ";
var list = await this.customQuery(sql, {names: names});
if (!list || list.length == 0) {
return result;
}
for (var item of list) {
result[item.name] = item;
}
return result;
}
async suggest(name, ownerIds) {
if (!name) {
return [];
}
var sql = "SELECT id, name FROM `c_dkcompany` WHERE name LIKE :queryLike AND deleted_at IS NULL ";
if (ownerIds && ownerIds.length > 0) {
sql = sql + " AND owner_id IN (:ownerIds) ";
}
sql = sql + " ORDER BY id ASC ";
var list = await this.customQuery(sql, {queryLike: "%" + name + "%", ownerIds: ownerIds});
return list || [];
}
}
module.exports = EntcompanyDao;
const system=require("../../system");
const Dao=require("../dao.base");
class EntcontractDao extends Dao{
constructor(){
super(Dao.getModelName(EntcontractDao));
}
extraModelFilter(qobj) {
var usereaccountWhere = {};
if(qobj.accountMobile) {
usereaccountWhere.mobile = qobj.accountMobile;
}
if(qobj.accountName) {
usereaccountWhere.userName = qobj.accountName;
}
if(qobj.accountIdno) {
usereaccountWhere.personsSign = qobj.accountIdno;
}
let v = [
{model:this.db.models.ecompany,attributes:["id","name"]},
{model:this.db.models.usereaccount,attributes:["id","userName","mobile", "personsSign", "email"], where:usereaccountWhere},
{model:this.db.models.etemplate,attributes:["id","name"]}
];
//return {"key":"include","value":[{model:this.db.models.app,},{model:this.db.models.role,as:"Roles",attributes:["id","name"],joinTableAttributes:['created_at']}]};
return {"key":"include","value": v};
}
async findUserSinedCompanyIds(usereaccount_id) {
let sql = "SELECT ecompany_id FROM `c_econtract` WHERE usereaccount_id = :usereaccount_id AND begin_at < NOW() AND end_at > NOW() AND eflowstatus = '2' GROUP BY ecompany_id";
let tmpParas = {usereaccount_id : usereaccount_id}
let rs = await this.customQuery(sql, tmpParas);
let list = [];
if(rs && rs.length > 0) {
for(let r of rs) {
list.push(r.ecompany_id);
}
}
return list;
}
}
module.exports=EntcontractDao;
const system=require("../../system");
const Dao=require("../dao.base");
class EnttemplateDao extends Dao{
constructor(){
super(Dao.getModelName(EnttemplateDao));
}
async findIdsLikeName(name) {
var result = [];
if(!name) {
return result;
}
var sql = "SELECT id FROM `c_dktemplate` WHERE NAME LIKE :nameLike";
var list = await this.customQuery(sql, {nameLike: "%" + name + "%"});
if(!list || list.length == 0) {
return result;
}
for(var item of list) {
result.push(item.id);
}
return result;
}
async findMapByIds(ids, attrs) {
var result = {};
if(!ids || ids.length == 0) {
return result;
}
attrs = attrs || "*";
var sql = "SELECT " + attrs + " FROM c_dktemplate where id IN (:ids) ";
var list = await this.customQuery(sql, {ids:ids});
if(!list || list.length == 0) {
return result;
}
for(var item of list) {
result[item.id] = item;
}
return result;
}
}
module.exports=EnttemplateDao;
...@@ -1556,9 +1556,9 @@ module.exports = { ...@@ -1556,9 +1556,9 @@ module.exports = {
"entcontractall": {"title": "签约管理", "config": null, "path": "/entcontractall", "comname": "entcontractall"}, "entcontractall": {"title": "签约管理", "config": null, "path": "/entcontractall", "comname": "entcontractall"},
// 企业电子签-个人 // 企业电子签-个人
"entcompanymy": {"title": "企业管理", "config": null, "path": "/entcompanymy", "comname": "entcompanymy"}, "entcompanymy": {"title": "企业管理", "config": null, "path": "/entcompanyadmin", "comname": "entcompanymy"},
"enttemplatemy": {"title": "模板管理", "config": null, "path": "/enttemplatemy", "comname": "enttemplatemy"}, "enttemplatemy": {"title": "模板管理", "config": null, "path": "/enttemplateadmin", "comname": "enttemplatemy"},
"entcontractmy": {"title": "签约管理", "config": null, "path": "/entcontractmy", "comname": "entcontractmy"}, "entcontractmy": {"title": "签约管理", "config": null, "path": "/entcontractall", "comname": "entcontractmy"},
// "dkcompanyadmin": {"title": "企业管理", "config": null, "path": "/dkcompanyadmin", "comname": "dkcompanyadmin"}, // "dkcompanyadmin": {"title": "企业管理", "config": null, "path": "/dkcompanyadmin", "comname": "dkcompanyadmin"},
}, },
......
module.exports={ module.exports={
"bizName":"dkcompanyadmin", "bizName":"entcompanyadmin",
"list":{ "list":{
columnMetaData:[ columnMetaData:[
] ]
......
module.exports={
"bizName":"enttemplateadmin",
"list":{
columnMetaData:[
]
},
"form":[
],
"search":[
],
"auth":{
"add":[
],
"edit":[
],
"delete":[
// {"icon":"el-icon-remove","title":"删除","type":"default","key":"delete","isInRow":true},
],
"common":[
],
}
}
const system = require("../../system");
const settings = require("../../../config/settings");
const uiconfig = system.getUiConfig2(settings.wxconfig.appId);
module.exports = (db, DataTypes) => {
return db.define("entcompany", {
name: DataTypes.STRING,
sealName: DataTypes.STRING,
sealId: DataTypes.STRING,
legal: DataTypes.STRING,
contactName: DataTypes.STRING,
contactMobile: DataTypes.STRING,
addr: DataTypes.STRING,
owner_id: DataTypes.STRING,
}, {
paranoid: true, //假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'c_entcompany',
validate: {},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
\ No newline at end of file
const system = require("../../system");
const settings = require("../../../config/settings");
const uiconfig = system.getUiConfig2(settings.wxconfig.appId);
module.exports = (db, DataTypes) => {
return db.define("entcontract", {
name: DataTypes.STRING,
edocid: DataTypes.STRING, // 合同id
eflowid: DataTypes.STRING, // 合同流程id
esignUrl: DataTypes.STRING, // 合同签署链接
fileurl: DataTypes.STRING, // 合同文件地址
eflowstatusname: {
// 销售状态名称
type: DataTypes.STRING(20),
defaultValue: "签署中",
},
eflowstatus: {
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.eflowstatus),
set: function (val) {
this.setDataValue("eflowstatus", val);
this.setDataValue("eflowstatusname", uiconfig.config.pdict.eflowstatus[val]);
},
defaultValue: 1,
},
entcompany_id: DataTypes.INTEGER,
enttemplate_id: DataTypes.INTEGER,
user_id: DataTypes.INTEGER,
usereaccount_id: DataTypes.INTEGER,
resultDescription: DataTypes.STRING,
completed_at: DataTypes.DATE,
begin_at: DataTypes.DATE,
end_at: DataTypes.DATE,
}, {
paranoid: true, //假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'c_entcontract',
validate: {},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
\ No newline at end of file
module.exports = (db, DataTypes) => {
return db.define("enttemplate", {
entcompany_id: DataTypes.INTEGER,
aggreement_id: DataTypes.INTEGER,
name: DataTypes.STRING,
codeurl:DataTypes.STRING,
remark:DataTypes.STRING,
placeholderkey:DataTypes.STRING,
},{
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'c_enttemplate',
validate: {
},
indexes:[
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../system");
const ServiceBase = require("../sve.base");
const moment = require("moment");
class EntcompanyService extends ServiceBase {
constructor(){
super(ServiceBase.getDaoName(EntcompanyService));
this.dktemplateDao = system.getObject("db.dktemplateDao");
this.userDao = system.getObject("db.userDao");
}
async isExistsCompanyName(name) {
//0-不存在,1-存在
var company = await super.findOne({name:name});
if(company) {
return 1;
}
return 0;
}
async findMapByIds(ids) {
return await this.dao.findMapByIds(ids);
}
async listByCondition(params) {
var currentPage = Number(params.currentPage || 0);
var pageSize = Number(params.pageSize || 10);
var where = {};
if (params.name) {
where.name = {
[this.db.Op.like]: "%" + params.name + "%"
};
}
if(params.ownerIds && params.ownerIds.length > 0) {
where.owner_id = {[this.db.Op.in]: params.ownerIds};
}
if(params.owner_id) {
where.owner_id = params.owner_id;
}
var orderby = [
["id", 'desc']
];
var attributes = ["id", "name", "sealName", "sealId", "legal", "contactName", "contactMobile", "addr", "owner_id", "created_at"];
var page = await this.getPageList(currentPage, pageSize, where, orderby, attributes);
if (page && page.rows) {
for(var row of page.rows) {
this.handleDate(row, ["created_at"]);
}
await this.setOwner(page.rows);
}
return page;
}
async getInfo(id) {
var attrs = ["id", "name", "sealUrl", "sealFileKey", "sealId", "legal", "phone", "addr", "owner_id", "created_at"];
return await this.dao.model.findOne({
where: { id: id }, attrs, raw: true
});
}
async setOwner(rows) {
if (!rows || rows.length == 0) {
return;
}
var ownerIds = [];
for (var row of rows) {
if (row.owner_id) {
ownerIds.push(row.owner_id);
}
}
if (ownerIds.length == 0) {
return;
}
var ownerMap = await this.userDao.findMapByIds(ownerIds);
for (var row of rows) {
if (row.owner_id) {
row.owner = ownerMap["id_" + row.owner_id] || {};
}
}
console.log(rows);
}
async findNamesByOwnerIds(ownerIds) {
return await this.dao.findNamesByOwnerIds(ownerIds);
}
async findIdsByOwnerIds(ownerIds) {
return await this.dao.findIdsByOwnerIds(ownerIds);
}
async suggest(name, ownerIds) {
return await this.dao.suggest(name, ownerIds);
}
}
module.exports = EntcompanyService;
\ No newline at end of file
const system = require("../../system");
const ServiceBase = require("../sve.base");
const logCtl = system.getObject("web.oplogCtl");
var settings = require("../../../config/settings");
const moment = require('moment');
const crypto = require('crypto');
const cryptoJS = require("crypto-js");
const md5 = require("MD5");
class EntcontractService extends ServiceBase {
constructor() {
super(ServiceBase.getDaoName(EntcontractService));
this.etemplateSve = system.getObject("service.etemplateSve");
this.ecompanyDao = system.getObject("db.ecompanyDao");
this.etemplateDao = system.getObject("db.etemplateDao");
this.usereaccountDao = system.getObject("db.usereaccountDao")
this.utilesignbaoSve = system.getObject("service.utilesignbaoSve");
this.ejobapplyDao = system.getObject("db.ejobapplyDao");
this.emessageDao = system.getObject("db.emessageDao");
this.ecompanybusiDao = system.getObject("db.ecompanybusiDao");
this.userDao = system.getObject("db.userDao");
this.esealSve = system.getObject("service.esealSve");
this.ejobapplySve = system.getObject("service.ejobapplySve");
this.restClient = system.getObject("util.restClient");
this.maindict = system.getObject("util.maindict");
this.eSignBaoRedirectBossUrl = settings.apiconfig.eSignBaoRedirectBossUrl();
}
async saveOffline(obj) {
var ecompanyName = obj.ecompanyName;
var ecompany_id = obj.ecompany_id;
var userName = obj.userName;
var mobile = obj.mobile;
var personsSign = obj.personsSign;
var bankno = obj.bankno;
var fileurl = obj.fileurl;
// 创建account
var account = await this.usereaccountDao.findOne({
personsSign: personsSign
}) || {};
account.userName = userName;
account.mobile = mobile;
account.bankno = bankno;
account.personsSign = personsSign;
if (account.id) {
await account.save();
} else {
account.user_id = 0;
account = await this.usereaccountDao.create(account);
}
var now = moment();
var end = moment().add(1, "years");
// 创建合同
var contract = {
name: ecompanyName,
fileurl: fileurl,
eflowstatusname: "已完成",
eflowstatus: "2",
begin_at: now,
completed_at: now,
user_id: account.user_id,
usereaccount_id: account.id,
etemplate_id: 0,
ecompany_id: ecompany_id,
end_at: end,
}
contract = await this.create(contract);
this.syncContract(contract.id);
return contract.id;
}
async autoSaveOffline(obj) {
var ecompany = {};
//获取模板相关的信息
var etemplate = await this.etemplateSve.getInfo(obj.etemplate_id);
var ecompany = await this.ecompanyDao.findById(etemplate.ecompany_id);
var ecompanyName = ecompany.name || "";
var ecompany_id = ecompany.id || 0;
var now = moment();
var end = moment().add(1, "years");
var errorItems = [];
// 循环上传的excle4要素集合
for (var item in obj.autoExcel) {
try {
var userName = obj.autoExcel[item]['name'];
var mobile = obj.autoExcel[item]['phone'];
var personsSign = obj.autoExcel[item]['id_card'];
var bankno = obj.autoExcel[item]['bank_no'];
// 根据身份证号,获取相应的account
var account = await this.usereaccountDao.findOne({
personsSign: personsSign
}) || {};
//是否需要电子签约
var isNeedCreate = true;
if (account) {
isNeedCreate = !account.eaccountid || userName != account.userName || account.mobile != mobile || account.bankno != bankno;
}
account.userName = userName;
account.mobile = mobile;
account.bankno = bankno;
account.personsSign = personsSign;
if (account.id) {
// 验证是否已经签约过
var signdContract = await this.dao.findOne({
usereaccount_id: account.id,
etemplate_id: etemplate.id,
eflowstatus: '2'
});
if (signdContract) {
errorItems.push(userName + "-已签约");
continue;
}
} else {
// TODO 创建p_user
account.user_id = 0;
account = await this.usereaccountDao.create(account);
}
// isNeedCreate = false;
if (isNeedCreate) {
// 1.三要素验证,验证失败的话 continue, 记录当前用户失败原因
var bankthreeParams = {
name: userName,
idno: personsSign,
cardno: bankno
};
var threeResult = await this.utilesignbaoSve.bankthree(bankthreeParams, "bankinfoAuth");
// {"code":-110,"message":"手机号格式错误","data":{}}
//1成功,-110提示验证信息有误,-120亲,提供的信息不正确,请验证后再试!
console.log("threeResult-----------------------------", threeResult);
if (!threeResult || threeResult.code == -120) {
errorItems.push(userName + "-银行三要素(姓名、身份证、银行卡号)验证失败");
continue;
}
if (threeResult.code == -110) {
errorItems.push(userName + "-" + threeResult.message || "银行三要素验证失败");
continue;
}
var uidStr = await this.getUidStr(8, 36);
var thirdId = etemplate.id + "_" + account.id + uidStr;
//2.创建e签宝account 5.2.1 , 创建后save()
var params = {
thirdId: thirdId,
name: userName,
idNo: personsSign,
idType: 19,
mobile: mobile
};
var getAccount = await this.utilesignbaoSve.createAccountId(params, "econtractSve");
if (getAccount && getAccount.code == 1 && getAccount.data) {
account.eaccountid = getAccount.data.accountId;
await account.save();
} else {
errorItems.push(userName + "-e签宝账户创建失败");
continue;
}
}
//3.设置静默签署授权 5.2.5
if (!account.isGrantAuto) {
var paramsGrant = {
grantAccountId: account.eaccountid
};
var grantAuto = await this.utilesignbaoSve.grantAuthorization(paramsGrant, "econtractSve");
if (grantAuto.code != 1) {
errorItems.push(userName + "-静默签署设置失败");
continue;
}
account.isGrantAuto = true;
await account.save();
}
//------------------------------------------------
var resultAll = {
code: 1,
message: "success",
data: {}
};
// 创建合同 fileurl、esignUrl 怎么赋值????????????
var contract = {
name: ecompanyName,
eflowstatusname: "签约中",
eflowstatus: "1",
// begin_at: now,
// completed_at: now,
user_id: account.user_id,
usereaccount_id: account.id,
etemplate_id: obj.etemplate_id,
ecompany_id: ecompany_id,
// end_at: end,
}
contract = await this.create(contract);
// 创建印章id
var sealId = "";
var eseal = await this.esealSve.findOne({
nameA: etemplate.nameA
});
// TODO 生产环境需要打开
if (!eseal) {
// var rs = await this.utilesignbaoSve.creatEntSignet("f50d8f8cdd8d4bcda6b1aaad1d4b14bf", etemplate.nameA + "alias", etemplate.nameA, "", "", "econtractSve");
var rs = await this.utilesignbaoSve.creatEntSignet(settings.apiconfig.companyAccountId(), etemplate.nameA + "alias", etemplate.nameA, "", "", "econtractSve");
if (rs && rs.code == 1) {
sealId = rs.data.sealId;
await this.esealSve.create({
nameA: etemplate.nameA,
sealId: sealId,
});
} else {
errorItems.push(userName + "-生成印章错误");
continue;
}
} else {
sealId = eseal.sealId;
}
let today = new Date().Format("yyyy-MM-dd");
var signParams = {
templateId: etemplate.templateid, //模板id,由创建模板接口调用返回的templateId 必填
name: ecompany.name, //合同模板名称 必填
simpleFormFields: {
nameA: etemplate.nameA, //甲方 必填
nameB: account.userName, //乙方 必填
unit: ecompany.name, //合作单位(国美) 必填---------------------------超出长度风险---目前不知多少长度
signDateA: today, //甲方签约日期 必填
signDateB: today //乙方签约日期 必填
}
}
var ebaoAccountId = account.eaccountid; //签署人账户id-- 必填
var thirdOrderNo = contract.id; //第三方流水号,通知回调使用---选填
var eBaoRedirectBossUrl = "";
var tt = await this.utilesignbaoSve.userAutoSignContractNoTemplate(signParams, ebaoAccountId, thirdOrderNo, eBaoRedirectBossUrl, "econtractSve", sealId);
if (tt && tt.data && tt.code == 1) {
contract.eflowid = tt.data.flowId;
contract.edocid = tt.data.docId;
contract.eflowstatus = '2';
contract.eflowstatusname = "已完成";
var signTime = new Date();
contract.completed_at = signTime;
contract.begin_at = signTime;
var end_at = new Date();
end_at.setFullYear(end_at.getFullYear() + 1);
contract.end_at = end_at;
contract.save();
}
} catch (error) {
console.log(error.message);
continue;
}
}
if (errorItems.length > 0) {
var errors = "";
for (var item of errorItems) {
errors += item + "、";
}
return system.getErrResult2(errors.substr(0, errors.length - 1));
}
return resultAll;
}
async listByCondition(params) {
var currentPage = Number(params.currentPage || 0);
var pageSize = Number(params.pageSize || 10);
var where = {};
if (params.ecompanyIds) {
where.ecompany_id = {
[this.db.Op.in]: params.ecompanyIds
};
}
if (params.ecompany_id) {
where.ecompany_id = params.ecompany_id;
}
if (params.eflowstatusList) {
where.eflowstatus = {
[this.db.Op.in]: params.eflowstatusList
};
;
}
if (params.accountName || params.accountMobile || params.accountIdno) {
var accountIds = await this.usereaccountDao.idsByCondition({
userName: params.accountName || "",
mobile: params.accountMobile || "",
personsSign: params.accountIdno || "",
});
if (!accountIds || accountIds.length == 0) {
return {
total: 0,
rows: []
};
}
where.usereaccount_id = {
[this.db.Op.in]: accountIds
};
}
this.addWhereTime(where, 'completed_at', params.signBegin, params.signEnd, true);
var orderby = [
["id", 'desc']
];
var attributes = [`id`, `fileurl`, `eflowstatus`, `eflowstatusname`, `completed_at`, `end_at`, `user_id`, `usereaccount_id`, `entcompany_id`, `enttemplate_id`];
var page = await this.getPageList(currentPage, pageSize, where, orderby, attributes);
if (page && page.rows) {
for (var row of page.rows) {
this.handleDate(row, ["completed_at", "end_at"], null);
}
await this.setEaccount(page.rows);
await this.setCompany(page.rows);
await this.setEtemplate(page.rows);
}
return page;
}
async setEaccount(list) {
if (!list || list.length == 0) {
return;
}
var ids = [];
for (var item of list) {
ids.push(item.usereaccount_id);
}
var attrs = " `id`, `mobile`, `userName`, `personsSign`, `bankno` ";
var accountMap = await this.usereaccountDao.findMapByIds(ids, attrs);
for (var item of list) {
item.eaccount = accountMap["id_" + item.usereaccount_id];
}
}
async setCompany(list) {
if (!list || list.length == 0) {
return;
}
var companyIds = [];
for (var item of list) {
companyIds.push(item.entcompany_id || 0);
}
var companyMap = await this.ecompanyDao.findMapByIds(companyIds, " id, name, contractMobile ");
for (var item of list) {
item.ecompany = companyMap["id_" + (item.entcompany_id || 0)];
}
}
async setEtemplate(list) {
if (!list || list.length == 0) {
return;
}
var ids = [];
for (var item of list) {
ids.push(item.enttemplate_id || 0);
}
var map = await this.etemplateDao.findMapByIds(ids, " id, nameA ");
for (var item of list) {
item.template = map[(item.enttemplate_id || 0)];
}
}
async findInfo(obj) {
obj = obj || {};
let v = [{
model: this.db.models.ecompany,
attributes: ["id", "name"]
},
{
model: this.db.models.user,
attributes: ["id", "userName", "mobile"]
},
{
model: this.db.models.usereaccount,
attributes: ["id", "userName", "mobile", "personsSign"]
},
{
model: this.db.models.etemplate,
attributes: ["id", "name"]
}
];
var result = await this.dao.model.findOne({
where: obj,
include: v
});
return result;
}
async findContracts(obj) {
obj = obj || {};
let v = [{
model: this.db.models.ecompany,
attributes: ["id", "name"]
},
{
model: this.db.models.user,
attributes: ["id", "userName", "mobile"]
},
{
model: this.db.models.usereaccount,
attributes: ["id", "userName", "mobile", "personsSign"]
},
{
model: this.db.models.etemplate,
attributes: ["id", "name"]
}
];
var result = await this.dao.model.findAll({
where: obj,
include: v
});
return result;
}
async findUserSinedCompanyIds(usereaccount_id) {
return this.dao.findUserSinedCompanyIds(usereaccount_id);
}
async updateCallbackStatus(obj) {
obj = obj || {};
logCtl.info({
optitle: "e签宝回调修改合同信息info",
op: "app/base/service/impl/econtractSve/updateCallbackStatus",
content: "请求参数:" + JSON.stringify(obj),
clientIp: ""
});
let contract;
try {
let signTime = obj.signTime;
let signResult = obj.signResult || "1";
let thirdOrderNo = Number(obj.thirdOrderNo || 0);
contract = await super.findById(Number(thirdOrderNo));
if (!contract) {
return;
}
contract.eflowstatus = signResult.toString();
contract.completed_at = signTime;
contract.begin_at = signTime;
contract.resultDescription = obj.resultDescription || "";
var end_at = new Date(signTime);
end_at.setFullYear(end_at.getFullYear() + 1);
contract.end_at = end_at;
await contract.save();
if (contract.isInsure) {
try {
// await this.sendInsure(contract.id);
} catch (error) {
logCtl.error({
optitle: "调用团险失败,id = " + contract.id,
op: "app/base/service/impl/econtractSve/updateCallbackStatus",
content: "错误信息:" + e.stack,
clientIp: ""
});
}
}
if (signResult == "2") {
// TODO WANGKUN 改定时任务获取
// let fileRs = await this.utilesignbaoSve.downloadUserContractFile(contract.eflowid, "econtractSve");
// console.log(fileRs, "---------------------------------------------------");
// if(fileRs.code == 1 && fileRs.data.selfossUrl) {
// contract.fileurl = fileRs.data.selfossUrl;
// contract.save();
// }
try {
this.updateApply(contract.id);
} catch (error) {
}
try {
this.syncContract(contract.id);
} catch (error) {
}
try {
// 推送签约信息给客户
this.syncSign(contract.id);
} catch (error) {
}
}
} catch (e) {
logCtl.error({
optitle: "e签宝回调修改合同信息error",
op: "app/base/service/impl/econtractSve/updateCallbackStatus",
content: "错误信息:" + e.stack,
clientIp: ""
});
}
return contract;
}
async sendInsure(id) {
var contract = await this.dao.findById(id);
var account = await this.usereaccountDao.findById(contract.usereaccount_id);
if (!account || !account.userName || !account.personsSign || !account.mobile) {
return;
}
var url = "https://api.baoxianxia.com.cn/api/yxyy/service/insure";
var params = {
"type": "B",
"name": account.userName,
"cid": account.personsSign.toUpperCase(),
"mobile": account.mobile,
"email": account.mobile + "@yxinsur.com",
"underwrite": "B",
"period": "7",
"channel": "gsb",
"job": "OE"
}
console.log(JSON.stringify(params));
var rs = await this.restClient.execPost(params, url);
console.log(rs);
contract.insurecb = rs.stdout;
await contract.save();
}
async syncSign(contractId) {
var contract = await this.dao.findById(contractId);
if (!contract) {
return null;
}
var account = await this.usereaccountDao.findById(contract.usereaccount_id);
if (!account) {
return null;
}
var user = await this.userDao.findById(account.user_id);
var busi = await this.ecompanybusiDao.findOne({
etemplate_id: contract.etemplate_id
});
if (!account.isPush && busi && busi.postsignurl) {
var param = {
"appId": busi.appId,
"idNo": account.personsSign,
"idName": account.userName,
"bankNo": account.bankno,
"mobile": account.mobile,
"appId3rd": user.appId3rd || "",
"userCode3rd": user.userCode3rd || "",
"userId3rd": user.userId3rd || "",
"branchCode3rd": user.branchCode3rd || "",
"nonceStr": await this.getUidStr(16),
"beginDate": await this.formateTime(contract.begin_at),
"endDate": await this.formateTime(contract.end_at),
}
if (!user.userCode3rd && !user.userId3rd) {
param.openId = user.openId;
}
if (contract.ecompany_id == 10173 || contract.ecompany_id == 10174 || contract.ecompany_id == 10175 || contract.ecompany_id == 10207) {
param.pbType = "eSign";
}
var signArr = [];
signArr.push("appId=" + param.appId);
signArr.push("appId3rd=" + param.appId3rd);
signArr.push("bankNo=" + param.bankNo);
signArr.push("beginDate=" + param.beginDate);
signArr.push("branchCode3rd=" + param.branchCode3rd);
signArr.push("endDate=" + param.endDate);
signArr.push("idName=" + param.idName);
signArr.push("idNo=" + param.idNo);
signArr.push("mobile=" + param.mobile);
signArr.push("nonceStr=" + param.nonceStr);
if (!user.userCode3rd && !user.userId3rd) {
signArr.push("openId=" + param.openId);
}
if (contract.ecompany_id == 10173 || contract.ecompany_id == 10174 || contract.ecompany_id == 10175 || contract.ecompany_id == 10207) {
signArr.push("pbType=eSign");
}
signArr.push("userCode3rd=" + param.userCode3rd);
signArr.push("userId3rd=" + param.userId3rd);
signArr.push("key=" + busi.key);
param.sign = md5(signArr.join("&")).toUpperCase();
console.log(JSON.stringify(param));
try {
var rs = await this.restClient.execPost(param, busi.postsignurl);
if (rs.stdout) {
let rsData = JSON.parse(rs.stdout);
if (rsData.code == "0" || rsData.code == "0000") {
account.isPush = true;
account.save();
}
}
return rs.stdout;
} catch (error) {
console.log(error);
return "error";
}
}
}
async pushArr(company, clist, keyHex, ivHex) {
//data加密
var cipherDataStr = JSON.stringify(clist);
var _d = cryptoJS.TripleDES.encrypt(cipherDataStr, keyHex, {
iv: ivHex
}).toString();
var cipherData = encodeURIComponent(_d);
let postData = "md5=" + md5(_d) + "&data=" + cipherData
try {
// let rs = await this.restClient.execPost({md5:md5(cipherData), data : cipherData}, company.posturl);
let rs = await this.restClient.execPostForm(postData, company.posturl);
if (rs.stdout) {
let rsData = JSON.parse(rs.stdout);
if (Number(rsData.code || 0) == 0) {
// 更新push状态
for (let item of clist) {
await this.dao.updateByWhere({
isPush: true
}, {
where: {
id: item.dataId
}
});
}
}
} else {
logCtl.error({
optitle: "curl pos 推送(" + company.name + ", [" + JSON.stringify(errIds) + "])合同签署人信息, 无返回信息异常error",
op: "/app/base/service/impl/econtractSve.js",
content: e.stack,
clientIp: ""
});
}
} catch (e) {
console.error(e);
let errIds = [];
for (let c of clist) {
errIds.push(c.dataId);
}
logCtl.error({
optitle: "curl pos 推送(" + company.name + ", [" + JSON.stringify(errIds) + "])合同签署人信息, 操作异常异常error",
op: "/app/base/service/impl/econtractSve.js",
content: e.stack,
clientIp: ""
});
}
}
async pushContract() {
var comsql = "SELECT id, `name`,`encryptkey`, `posturl` FROM `c_ecompany` WHERE posturl <> '' AND posturl IS NOT NULL AND encryptkey IS NOT NULL AND isEnabled = 1";
var companyList = await this.customQuery(comsql);
var rs = [];
for (let company of companyList) {
let deskey = company.encryptkey || ""
let posturl = company.posturl;
if (deskey.length <= 8 || !posturl) {
continue;
}
// company.posturl = "http://192.168.18.102:8080/gongsibao-web/web/common/reviceData";
var sql = "SELECT " +
"t1.id, t1.etemplate_id, t1.`name`, t1.`eflowstatus`, t1.`eflowstatusname`, t2.`mobile`, t2.`userName`, t2.`personsSign`, t1.`created_at`, t1.`completed_at`, t1.`end_at` " +
"FROM c_econtract t1 " +
"INNER JOIN p_user_eaccount t2 ON t1.`usereaccount_id` = t2.`id` WHERE t1.isPush = 0 AND t1.`eflowstatus` = '2' AND t1.ecompany_id = " + company.id;
var list = await this.dao.customQuery(sql);
if (!list || list.length == 0) {
continue;
}
let keyHex = cryptoJS.enc.Utf8.parse(deskey);
let ivHex = cryptoJS.enc.Utf8.parse(deskey.substring(0, 8));
var clist = [];
for (let item of list) {
let completeTime = item.completed_at || "";
if (completeTime) {
completeTime = completeTime.Format("yyyy-MM-dd hh:mm:ss")
}
let invalidTime = item.end_at || "";
if (invalidTime) {
invalidTime = invalidTime.Format("yyyy-MM-dd hh:mm:ss")
}
clist.push({
"dataId": item.id,
"agreementId": item.etemplate_id,
"contractName": item.name,
"companyName": company.name,
"statusName": item.eflowstatusname,
"mobile": item.mobile,
"userName": item.userName,
"idCard": item.personsSign.toUpperCase(),
"beginTime": item.created_at.Format("yyyy-MM-dd hh:mm:ss"),
"completeTime": completeTime,
"invalidTime": invalidTime
});
if (clist.length >= 2) {
await this.pushArr(company, clist, keyHex, ivHex);
clist = [];
}
}
if (clist.length > 0) {
await this.pushArr(company, clist, keyHex, ivHex);
}
}
return rs;
}
async downloadCompleteUrl(limit) {
var sql = "SELECT id FROM `c_econtract` WHERE eflowstatus = '2' AND (fileurl IS NULL OR fileurl = '') ORDER BY id DESC ";
if (limit) {
sql = sql + " LIMIT " + limit;
}
var list = await this.dao.customQuery(sql);
if (!list || list.length == 0) {
return;
}
for (var o of list) {
var id = o.id;
try {
var contract = await this.dao.findById(id);
if (!contract) {
continue;
}
if (contract.eflowstatus != "2") {
continue;
}
if (!contract.fileurl) {
// 请求文件地址
let fileRs = await this.utilesignbaoSve.downloadUserContractFile(contract.eflowid, "econtractSve");
if (fileRs.code == 1 && fileRs.data.selfossUrl) {
contract.fileurl = fileRs.data.selfossUrl;
contract.save();
}
}
} catch (e) {
console.error(e);
//日志记录
logCtl.error({
optitle: "定时下载合同任务异常, id=" + id,
op: "app/base/service/impl/econtractSve.js",
content: e.stack,
clientIp: ""
});
return {
code: -200,
message: "error",
data: {}
};
}
}
}
async fiterSignedCards(ecompanyId, cardList) {
var sql = "SELECT t2.`personsSign` FROM c_econtract t1 " +
"INNER JOIN p_user_eaccount t2 ON t1.`usereaccount_id` = t2.`id` " +
"WHERE t2.`personsSign` IN (:cardList) AND t1.`ecompany_id` = :ecompanyId AND t1.`eflowstatus` = '2' AND t1.`end_at`>= NOW() " +
"GROUP BY t2.`personsSign` ";
var list = await this.dao.customQuery(sql, {
ecompanyId: ecompanyId,
cardList: cardList
});
var rs = [];
if (list) {
for (var item of list) {
rs.push(item.personsSign);
}
}
return rs;
}
async findSignedUsers(ecompanyId, minId, pageSize) {
var sql = "SELECT t1.id, t2.userName, t2.mobile ,t2.`personsSign` AS idCard, t1.completed_at AS signTime, t1.end_at AS endTime FROM c_econtract t1 " +
"INNER JOIN p_user_eaccount t2 ON t1.`usereaccount_id` = t2.`id` " +
"WHERE t1.id > :minId AND t1.`ecompany_id` = :ecompanyId AND t1.`eflowstatus` = '2' AND t1.`end_at`>= NOW() " +
"ORDER BY t1.id ASC LIMIT :pageSize ";
var list = await this.dao.customQuery(sql, {
ecompanyId: ecompanyId,
minId: minId,
pageSize: pageSize
});
for (var item of list) {
item.endTime = await this.formateTime(item.endTime);
item.signTime = await this.formateTime(item.signTime);
}
return list;
}
async findSignedUses4Push(params) {
// var params = {
// ecompanyId: busi.ecompany_id,
// startId: startId,
// idNo: idNo,
// pageSize: pageSize,
// userId3rd: userId,
// userCode3rd: userCode,
// branchCode3rd: branchCode,
// };
var sql = [];
sql.push("SELECT t1.id,t1.begin_at as beginDate,t1.end_at as endDate,");
sql.push("t2.userName AS idName, t2.mobile ,t2.`personsSign` AS idNo, t1.completed_at AS signTime, t2.bankno AS bankNo,");
sql.push("t3.userId3rd, t3.userCode3rd, t3.branchCode3rd");
sql.push("FROM c_econtract t1");
sql.push("INNER JOIN p_user_eaccount t2 ON t1.`usereaccount_id` = t2.`id`");
sql.push("INNER JOIN p_user t3 ON t2.`user_id` = t3.`id`");
sql.push("WHERE t1.id > :startId AND t1.`ecompany_id` = :ecompanyId AND t1.`eflowstatus` = '2' AND t1.`end_at`>= NOW()");
if (params.idNo) {
sql.push("AND t2.`personsSign` = :idNo");
}
if (params.userId3rd) {
sql.push("AND t3.`userId3rd` = :userId3rd");
}
if (params.userCode3rd) {
sql.push("AND t3.`userCode3rd` = :userCode3rd");
}
if (params.branchCode3rd) {
sql.push("AND t3.`branchCode3rd` = :branchCode3rd");
}
sql.push("ORDER BY t1.id ASC LIMIT :pageSize ");
var list = await this.dao.customQuery(sql.join(" "), params);
for (var item of list) {
item.signTime = await this.formateTime(item.signTime);
item.beginDate = await this.formateTime(item.beginDate);
item.endDate = await this.formateTime(item.endDate);
}
return list;
}
async setUser(list) {
if (!list || list.length == 0) {
return;
}
var ownerIds = [];
for (var row of list) {
if (row.owner_id) {
ownerIds.push(row.owner_id);
}
}
if (ownerIds.length == 0) {
return;
}
var ownerMap = await this.userDao.findMapByIds(ownerIds);
for (var row of rows) {
if (row.owner_id) {
row.owner = ownerMap["id_" + row.owner_id] || {};
}
}
console.log(rows);
}
async syncAllSigners() {
var sql = "SELECT t1.id FROM `c_econtract` t1 " +
" INNER JOIN p_user_eaccount t2 ON t1.`usereaccount_id` = t2.`id` " +
" WHERE t1.`eflowstatus` = '2' AND t1.syncCode <> '0' AND t1.syncCode <> '10010000' " +
" GROUP BY t2.`personsSign` ORDER BY t1.`id` ASC ";
var ids = await this.dao.customQuery(sql);
for (var c of ids) {
try {
await this.syncContract(c.id);
} catch (error) {
console.error(error);
}
}
}
async updateApply(id) {
var sql = "UPDATE `c_ejob_apply` SET sign_at = NOW() , `status` = '2' , statusName = '已签约' WHERE econtract_id = " + id;
await this.dao.customExecAddOrPutSql(sql);
var apply = await this.ejobapplyDao.findOne({
econtract_id: id
});
if (!apply) {
return;
}
var ecompany = await this.ecompanyDao.findById(apply.ecompany_id);
var now = moment().format("YYYY年MM月DD日");
// 发送消息
var msg = "您于" + now + "与" + ecompany.name + "签约成功, 详情可登录薪必果小程序进行查看。";
this.emessageDao.create({
user_id: apply.user_id,
title: '系统消息',
type: '0',
content: msg
});
this.ejobapplySve.addMessage(id, "零工签约", "成功签约");
}
async syncContract(id) {
var contract = null;
var account = null;
var company = null;
var signArr = null;
try {
contract = await this.dao.findById(id);
if (!contract) {
return null;
}
account = await this.usereaccountDao.findById(contract.usereaccount_id);
if (!account) {
return null;
}
company = await this.ecompanyDao.findById(contract.ecompany_id);
var mainId = await this.maindict.getMainId(company.nameA) || "57731585";
if (contract.syncCode == '0' || contract.syncCode == '10010000') {
return null;
}
// 39.96.42.199 端口:80 appId:1086941347 mchtId:108694134791293777 mainId:57731585 secret:def87140063233abc
var item = {
"accNo": account.bankno || "",
"appId": "1086941347",
"beginTime": await this.formateTime2(contract.begin_at),
"completeTime": await this.formateTime2(contract.completed_at),
"idName": account.userName,
"idNo": account.personsSign,
"idType": "00",
"invalidTime": await this.formateTime2(contract.end_at),
"mainId": "57731585",
"mchtId": "108694134791293777",
"mobile": account.mobile,
"nonceStr": await this.getUidStr(16),
"signType": "MD5",
"signedName": company.name
}
signArr = [];
signArr.push("appId=" + (item.appId || ""));
signArr.push("beginTime=" + (item.beginTime || ""));
signArr.push("completeTime=" + (item.completeTime || ""));
signArr.push("idName=" + (item.idName || ""));
signArr.push("idNo=" + (item.idNo || ""));
signArr.push("idType=" + (item.idType || ""));
signArr.push("invalidTime=" + (item.invalidTime || ""));
signArr.push("mainId=" + (item.mainId || ""));
signArr.push("mchtId=" + (item.mchtId || ""));
signArr.push("mobile=" + (item.mobile || ""));
signArr.push("nonceStr=" + (item.nonceStr || ""));
signArr.push("signType=" + (item.signType || ""));
signArr.push("signedName=" + (item.signedName || ""));
signArr.push("key=def87140063233abc");
item.sign = md5(signArr.join("&")).toUpperCase();
try {
let rs = await this.restClient.execPost(item, "https://payadmin.gongsibao.com/merchant/userSigned/asyncNotify");
if (rs && rs.stdout) {
contract.syncCode = JSON.parse(rs.stdout).code;
} else {
contract.syncCode = '-10501';
}
await contract.save();
} catch (error) {
contract.syncCode = '-10500';
await contract.save();
}
} catch (error) {
console.error(error);
if (contract) {
contract.syncCode = '-500';
await contract.save();
}
}
}
async getContractUrl(id) {
var contract = await this.findById(id);
if (contract.fileurl) {
return contract.fileurl;
}
let fileRs = await this.utilesignbaoSve.downloadUserContractFile(contract.eflowid, "econtractSve");
if (fileRs.code == 1 && fileRs.data.selfossUrl) {
contract.fileurl = fileRs.data.selfossUrl;
await contract.save();
return contract.fileurl;
}
return "";
}
async testtransfer(result) {
var date = new Date().Format("yyyy-MM-dd hh:mm:ss");
var v = JSON.stringify(result) + "---" + date;
var sql = "INSERT INTO `testtransfer` (`v`) VALUES ('" + v + "') ";
await this.dao.customExecAddOrPutSql(sql, {});
}
async addPayNotify(result) {
var sql = [];
sql.push("INSERT INTO c_pay_notify");
sql.push("(fromid,username,flag,amount,created_at,orderItemId,income_tax, notifyTime)VALUE(");
sql.push("'" + result.fromid + "',");
sql.push("'" + result.username + "',");
sql.push("'" + result.flag + "',");
sql.push("'" + result.amount + "',");
sql.push("NOW(),");
sql.push("'" + result.orderItemId + "',");
sql.push("'" + (result.income_tax || 0) + "', ");
sql.push("'" + result.notifyTime + "')");
await this.dao.customExecAddOrPutSql(sql.join(""), {});
}
async getPayNotify(result) {
var payNotify = {};
var sql = "SELECT username,amount,income_tax,notifyTime from c_pay_notify where orderItemId =:orderItemId limit 1";
var list = await this.dao.customQuery(sql, {
orderItemId: result
});
if (list && list.length > 0) {
payNotify = list[0] || [];
payNotify.amount = system.f2y(payNotify.amount);
payNotify.income_tax = system.f2y(payNotify.income_tax);
// payNotify.created_at = await this.formateTime3(payNotify.created_at);
payNotify.notifyTime = moment(payNotify.notifyTime).add(-8, "hours").format("YYYY年MM月DD日 HH:mm");
}
return payNotify;
}
async formateTime(inputTime) {
var date = new Date(inputTime);
var y = date.getFullYear();
var m = date.getMonth() + 1;
m = m < 10 ? ('0' + m) : m;
var d = date.getDate();
d = d < 10 ? ('0' + d) : d;
var h = date.getHours();
h = h < 10 ? ('0' + h) : h;
var minute = date.getMinutes();
var second = date.getSeconds();
minute = minute < 10 ? ('0' + minute) : minute;
second = second < 10 ? ('0' + second) : second;
return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + second;
}
async formateTime2(inputTime) {
if (!inputTime) {
return '';
}
var date = new Date(inputTime);
var y = date.getFullYear();
var m = date.getMonth() + 1;
m = m < 10 ? ('0' + m) : m;
var d = date.getDate();
d = d < 10 ? ('0' + d) : d;
var h = date.getHours();
h = h < 10 ? ('0' + h) : h;
var minute = date.getMinutes();
var second = date.getSeconds();
minute = minute < 10 ? ('0' + minute) : minute;
second = second < 10 ? ('0' + second) : second;
return y + '' + m + '' + d + '' + h + '' + minute + '' + second;
}
async formateTime3(inputTime) {
if (!inputTime) {
return '';
}
var date = new Date(inputTime);
var y = date.getFullYear();
var m = date.getMonth() + 1;
m = m < 10 ? ('0' + m) : m;
var d = date.getDate();
d = d < 10 ? ('0' + d) : d;
var h = date.getHours() - 8;
h = h < 10 ? ('0' + h) : h;
var minute = date.getMinutes();
minute = minute < 10 ? ('0' + minute) : minute;
return y + '年' + m + '月' + d + '日 ' + h + ':' + minute;
}
async getUidStr(len, radix) {
var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
var uuid = [],
i;
radix = radix || chars.length;
if (len) {
for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
} else {
var r;
uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
uuid[14] = '4';
for (i = 0; i < 36; i++) {
if (!uuid[i]) {
r = 0 | Math.random() * 16;
uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
}
}
}
return uuid.join('');
}
// 银行三要素查询
async findSinedByThree(userName, personsSign, bankno) {
if (!userName || !personsSign || !bankno) {
return [];
}
var sql = [];
sql.push('SELECT t1.* FROM c_econtract t1 ');
sql.push('INNER JOIN p_user_eaccount t2 ON t1.usereaccount_id = t2.id');
sql.push('WHERE t2.personsSign = :personsSign AND t2.userName = :userName AND t2.bankno = :bankno');
sql.push('GROUP BY t1.id ORDER BY t1.id DESC');
var list = await this.dao.customQuery(sql.join(" "), {
userName: userName,
personsSign: personsSign,
bankno: bankno
});
return list || [];
}
// 根据身份证Id,获取openId status-2 签约成功
async findOpenIdByNo(status, idNo) {
if (!idNo) {
return [];
}
var sql = [];
sql.push('SELECT t2.`openId`, t1.`userName`, t1.`mobile` FROM p_user_eaccount t1');
sql.push('INNER JOIN p_user t2 ON t1.`user_id` = t2.`id`');
sql.push('INNER JOIN c_econtract t3 ON t1.`id` = t3.`usereaccount_id`');
sql.push('WHERE t3.eflowstatus = :status AND t1.personsSign = :idNo');
var list = await this.dao.customQuery(sql.join(" "), {
status: status,
idNo: idNo
});
return list || [];
}
async ydsignnumber() {
var sql = "SELECT COUNT(1), etemplate_id FROM c_econtract WHERE eflowstatus = '2' AND etemplate_id IN (10066, 10074) GROUP BY etemplate_id";
return await this.dao.customQuery(sql);
}
}
module.exports = EntcontractService;
\ No newline at end of file
const system=require("../../system");
const ServiceBase=require("../sve.base");
class EnttemplateService extends ServiceBase{
constructor(){
super(ServiceBase.getDaoName(EnttemplateService));
//this.appDao=system.getObject("db.appDao");
this.ecompanyDao = system.getObject("db.ecompanyDao");
this.ecompanymainDao = system.getObject("db.ecompanymainDao");
}
async signPage(params) {
var currentPage = Number(params.currentPage || 0);
var pageSize = Number(params.pageSize || 10);
var where = {};
if (params.name) {
where.name = {
[this.db.Op.like]: "%" + params.name + "%"
};
}
if (params.entcompany_id) {
where.entcompany_id = params.entcompany_id;
}
var orderby = [
["id", 'desc']
];
var attributes = ["id", "entcompany_id", "aggreement_id", "name", "codeurl", "remark", "created_at", "updated_at"];
var page = await this.getPageList(currentPage, pageSize, where, orderby, attributes);
if (page && page.rows) {
for(var row of page.rows) {
this.handleDate(row, ["created_at" , "updated_at"]);
}
await this.setCompany(page.rows);
}
return page;
}
async getListByName(name){
return await this.dao.getListByName(name);
}
async setCompany(list) {
if (!list || list.length == 0) {
return;
}
var companyIds = [];
for (var item of list) {
companyIds.push(item.entcompany_id || 0);
}
var companyMap = await this.ecompanyDao.findMapByIds(companyIds, " id, name ");
for (var item of list) {
item.ecompany = companyMap["id_" + (item.entcompany_id || 0)];
}
}
// async setMain(list) {
// if (!list || list.length == 0) {
// return;
// }
//
// var ids = [];
// for (var item of list) {
// if(item.ecompanyMainId) {
// ids.push(item.ecompanyMainId);
// }
// }
// var mainMap = await this.ecompanymainDao.findMapByIds(ids);
// for (var item of list) {
// item.ecompanyMain = mainMap[item.ecompanyMainId] || {};
// }
// }
async getInfo(id) {
var attrs = ["id", "name", "ecompanyMainId", "mainId", "nameA", "templateid", "filekey", "filepath", "qrcodeurl",
"placeholderkey", "isEnabled", "created_at", "updated_at", "ecompany_id"];
return await this.dao.model.findOne({
where: { id: id }, attrs, raw: true
});
}
async findReadyContracts(obj){
obj.isEnabled=true;
let sql = "SELECT t1.*, t2.id AS companyid, t2.`name` AS companyname " +
"FROM `c_etemplate` t1 " +
"INNER JOIN c_ecompany t2 ON t1.`ecompany_id` = t2.id " +
"WHERE t1.isEnabled = 1 AND t1.ecompany_id = :ecompany_id " +
"AND t1.id NOT IN (SELECT etemplate_id FROM `c_econtract` WHERE usereaccount_id = :usereaccount_id AND eflowstatus = '2') " +
"AND t2.`deleted_at` IS NULL AND t1.`deleted_at` IS NULL ";
let params = {ecompany_id:obj.ecompany_id, usereaccount_id : obj.eaccount_id};
var list = await this.dao.customQuery(sql, params);
if(!list || list.length == 0) {
return [];
}
list.forEach(item => {
var ecompany = {};
ecompany.id = item.companyid;
ecompany.name = item.companyname;
item.ecompany = ecompany;
});
return list;
}
}
module.exports=EnttemplateService;
...@@ -7,10 +7,10 @@ var settings={ ...@@ -7,10 +7,10 @@ var settings={
}, },
database:{ database:{
dbname : "bpo", dbname : "bpo",
user : "root", user : "write",
password : "root", password : "write",
config : { config : {
host: '192.168.18.110', host: '192.168.18.237',
dialect: 'mysql', dialect: 'mysql',
operatorsAliases: false, operatorsAliases: false,
pool: { pool: {
......
<gsb-pcpage>
<style>
::el-radio-button__inner {
border-color: #D9D9D9;
}
</style>
<div style="padding:20px;">
<div style="height: auto;min-width: 1000px; max-width: 1500px;">
<el-card style="background-color: #FFFFFF;padding:10px 10px 30px 10px;margin-top: 20px;">
<div style="width:100%;line-height: 40px;">
<div style="float:left;width: 300px;">
<span style="color:2F2F2F;font-size: 14px;">企业名称: </span>
<el-input v-model="search.name" placeholder="请输入企业名称" maxlength="100" clearable
style="max-width:200px;height: 36px;"></el-input>
</div>
<div style="float:left;margin-top:5px;">
<el-button @click="resetSearch()"
style="float:right;width:68px;height:36px;background-color: #54C4A7;color: #FFFFFF;font-size: 14px;padding-top:10px;">
重置
</el-button>
<el-button @click="opSearch"
style="float:right;width:68px;height:36px;background-color: #54C4A7;color: #FFFFFF;font-size: 14px;padding-top:10px;margin-right: 10px;">
搜索
</el-button>
</div>
</div>
</el-card>
<el-card style="background-color: #FFFFFF;padding:10px 10px 30px 10px;margin-top: 20px;">
<div>
<div style="line-height: 36px;padding-bottom: 20px;">
<span style="float:left;color:#2F2F2F;font-size: 14px;">共{{search.total}}条记录</span>
<el-button @click="openEdit()"
style="float:right;width:100px;height:36px;color: #FFFFFF;font-weight: 400;border-radius: 4px;font-size: 14px;background-color: #59C1A6;padding-top:11px">
新增企业
</el-button>
</div>
<div>
<el-table
stripe
fix="true"
:data="search.list"
tooltip-effect="light"
style="min-width: 1000px;max-width: 1500px;margin-top: 23px;min-height: 500px;"
empty-text="暂无需求"
header-cell-style="background-color: #F5F5F5;color: #2F2F2F;font-size: 14px;font-weight:400;"
row-style="height:50px;">
<el-table-column prop="id" label="序号" :formatter="onColFormater" width="80"
align="center"></el-table-column>
<el-table-column prop="name" label="企业名称" :formatter="onColFormater" align="center"
show-overflow-tooltip></el-table-column>
<el-table-column prop="legal" label="法人" :formatter="onColFormater"
align="center"></el-table-column>
<el-table-column prop="contactMobile" label="电话" :formatter="onColFormater"
align="center"></el-table-column>
<el-table-column prop="owner.nickName" label="所属人" :formatter="onColFormater"
align="center"></el-table-column>
<el-table-column prop="addr" label="联系地址" :formatter="onColFormater"
align="center"></el-table-column>
<el-table-column prop="sealId" label="公章id" :formatter="onColFormater" align="center"
show-overflow-tooltip></el-table-column>
<!-- <el-table-column label="公章图片" >
<template slot-scope="scope" align="center">
<a :href="scope.row.sealUrl" target="_blank" style="float:left;text-decoration: none;color:#59C1A6;font-size: 14px;margin-left: 10px;">查看公章</a>
</template>
</el-table-column> -->
<el-table-column prop="addr" label="联系地址" :formatter="onColFormater" align="center"
show-overflow-tooltip></el-table-column>
<el-table-column prop="created_at" label="创建日期" :formatter="onColFormater"
align="center"></el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<a href="javascript:;" @click="openEdit(scope.row.id)"
style="text-decoration: none;color:#59C1A6;font-size: 14px;">修改</a>
</template>
</el-table-column>
</el-table>
<div style="width:100%;text-align: center;margin-top: 20px">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="search.currentPage"
:page-sizes="[10, 20, 50, 100]"
:page-size="search.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="search.total">
</el-pagination>
</div>
</div>
</div>
</el-card>
<el-dialog width="862px" :visible.sync="showEdit">
<div slot="title">
<span style="margin-left:9px;margin-top:-3px;;width:72px; height:25px; font-size:18px; font-family:PingFangSC-Regular; font-weight:400; color:rgba(51,51,51,1); line-height:25px;">{{editTitle}}企业</span>
<div style="width: 862px; height: 1px;background-color: #E3E3E3;margin: 17px 20px 0px -20px"></div>
</div>
<el-form :model="entcompany" :rules="rules" ref="entcompany" label-width="100px" label="right"
style="padding:0px 100px;">
<div style="0px 10px; line-height: 15px;padding-bottom:40px;">
<div style="width:2px;height:15px;float: left;background-color: #54C4A7">
</div>
<span style="font-size:15px;color: #333333;float: left;font-weight:bold;margin-left: 7px;">企业信息</span>
</div>
<el-form-item label="企业名称:" prop="name">
<el-input v-model="entcompany.name" placeholder="请输入企业名称" maxlength="100" style="width:468px;"
clearable></el-input>
</el-form-item>
<el-form-item label="法人姓名:" prop="legal">
<el-input v-model="entcompany.legal" placeholder="请输入法人姓名" maxlength="30" style="width:468px;"
clearable></el-input>
</el-form-item>
<el-form-item label="联系电话:" prop="contactMobile">
<el-input v-model="entcompany.contactMobile" placeholder="请输入联系电话" maxlength="200" style="width:468px;"
clearable></el-input>
</el-form-item>
<el-form-item label="联系地址:" prop="addr">
<el-input v-model="entcompany.addr" placeholder="请输入联系地址" maxlength="200" style="width:468px;"
clearable></el-input>
</el-form-item>
<el-form-item label="公章名称:" prop="sealName">
<el-input v-model="entcompany.sealName" placeholder="请输入公章名称" maxlength="100"
style="width:468px;" clearable></el-input>
</el-form-item>
<el-form-item label="归属人员:" prop="owner_id">
<el-select
v-model="entcompany.owner_id"
filterable
remote
clearable
reserve-keyword
style="float:left;width:255px;"
placeholder="请输入姓名或手机号"
@change="ownerChange"
:remote-method="getOwnerList"
:loading="ownerLoading">
<el-option
v-for="item in ownerList"
:key="item.id"
:label="item.nickName"
:value="item.id">
<span style="float: left;width:150px;">{{ item.userName }}</span>
<span style="float: left;width:150px;">{{ item.nickName }}</span>
</el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label="企业公章:" prop="sealUrl" >
<gsb-upload2 ref="upload3" v-model="dkcompany.sealUrl" ></gsb-upload3>
</el-form-item> -->
</el-form>
<div style="margin-left: 200px;">
<el-button :loading="saveLoading" @click="saveCompany"
style="width:120px;height:36px; background:#54C4A7; border-radius:4px;color: #FFFFFF;font-size: 16px;padding-top: 10px;">
保存
</el-button>
</div>
</el-dialog>
</div>
</gsb-pcpage>
\ No newline at end of file
{
template: '${tmpl}',
data: function () {
var validMethod = (rule, value, callback) => {
return this.validfileds(rule, value, callback);
};
return {
entcompany: {},
editTitle: "新增",
showEdit: false,
saveLoading: false,
ownerList:[],
ownerMap:[],
ownerLoading:false,
owner_id: "",
search: {
list: [],
currentPage: 1,
pageSize: 20,
total : 0,
name:'',
},
rules: {
name : [
{ required: true, message: '请输入企业名称', trigger: 'blur' },
{ validator: validMethod, trigger: 'blur' }
],
legal : [
{ required: true, message: '请输入法人姓名', trigger: 'blur' },
{ validator: validMethod, trigger: 'blur' }
],
addr : [
{ required: true, message: '请输入联系地址', trigger: 'blur' },
{ validator: validMethod, trigger: 'blur' }
],
contactMobile: [
{ required: true, message: '请输入联系电话', trigger: 'blur' },
{ validator: validMethod, trigger: 'blur' }
],
sealName: [
{ required: true, message: '请输入公章名称', trigger: 'blur' },
{ validator: validMethod, trigger: 'blur' }
],
/*
sealUrl : [
{ required: true, message: '请上传企业公章', trigger: 'blur' },
{ validator: validMethod, trigger: 'blur' }
],*/
owner_id: [
{ required: true, message: '请选择客户归属人员', trigger: 'blur' },
{ validator: validMethod, trigger: 'blur' }
],
a : [],
},
}
},
mounted: function () {
this.resetSearch(true);
},
created: function () {},
methods: {
getEmptySearch() {
return {
list: [],
currentPage: 1,
pageSize: 20,
total : 0,
name:'',
}
},
resetSearch() {
this.search = this.getEmptySearch();
this.getList();
},
tableHeaderColor({ row, column, rowIndex, columnIndex }) {
if (rowIndex === 0) {
return 'background-color: #F5F5F5;color: #2F2F2F;font-size: 14px;font-weight:400;'
}
},
opSearch() {
this.search.currentPage = 1;
this.search.total = 0;
this.getList();
},
getList() {
var self = this;
var params = this.getParams();
this.$root.postReq("/web/entcompanyCtl/signList", {
search: params
}).then(function (d) {
if (d.status == 0) {
self.search.list = d.data.rows || [];
self.search.total = d.data.count || 0;
} else {
}
});
},
getParams() {
var params = {};
for(var f in this.search) {
if(f == "list") {
continue;
}
params[f] = this.search[f];
}
return params;
},
onColFormater(row, column, cellValue, index) {
return cellValue || "---";
},
getDKcompany(id) {
var self = this;
self.$root.postReq("/web/entcompanyCtl/info", {
id: id,
}).then(function (d) {
if (d.status == 0) {
if(d.data) {
d.data.isEnabled = d.data.isEnabled ? true : false;
}
self.entcompany = d.data;
self.entcompany.owner_id = self.entcompany.owner_id || "";
self.owner_id = (d.data.owner || {}).id || "";
if(d.data.owner) {
self.ownerList = [d.data.owner];
self.ownerMap["id_" + d.data.owner.id] = d.data.owner;
} else {
self.ownerList = null;
}
} else {
self.$message.warning(d.msg || `您的网络不稳定, 请稍后重试`);
}
});
},
toDetail(id) {
},
openEdit(id) {
this.ownerLoading = false;
this.saveLoading = false;
this.owner_id = null;
if(this.$refs.entcompany) {
this.$refs.entcompany.resetFields();
}
if(id) {
this.getDKcompany(id);
this.editTitle = "修改";
} else {
this.ownerList = [];
this.editTitle = "新增";
this.entcompany = {isEnabled:true};
}
this.showEdit = true;
},
handleSizeChange(val) {
this.search.pageSize = val;
this.resetSearch();
},
handleCurrentChange(val) {
this.search.currentPage = val;
this.getList();
},
validfileds(rule, value, callback) {
var self = this;
if(rule.field == 'owner_id') {
if(!self.entcompany.owner_id) {
return callback(new Error("请选择归属人员"));
} else {
return callback();
}
} else {
return callback();
}
},
ownerChange(val) {
console.log(val, );
this.entcompany.owner_id = val || 0;
this.owner = this.ownerMap["id_" + val];
console.log(this.owner);
},
getOwnerList(query) {
var self = this;
self.ownerLoading = true;
self.$root.postReq("/web/userCtl/rolesSuggest", {
name: query,
roleCodes: ["zczy", "zcgl", "qdzy", "qdgl", "ptzy", "ptgl", "dkhzy", "dkhgl", "ziying", "tzgl", "tzzy"]
}).then(function (d) {
self.ownerLoading = false;
self.ownerList = d.data || [];
self.ownerMap = [];
for (var o of self.ownerList) {
self.ownerMap["id_" + o.id] = o;
}
});
setTimeout(() => {
self.ownerLoading = false;
}, 15000);
},
saveCompany() {
var self = this;
self.saveLoading = true;
self.$refs.entcompany.validate((valid) => {
if (valid) {
self.$root.postReq("/web/entcompanyCtl/signSave", self.entcompany).then(function (d) {
if (d.status == 0) {
self.$message.success(`保存成功`);
self.showEdit = false;
self.getList();
} else {
self.$alert(d.msg || '保存失败', '提示', {
confirmButtonText: '确定',
callback: action => {}
});
}
self.saveLoading = false;
});
} else {
self.saveLoading = false;
return false;
}
});
setTimeout(() => {
self.saveLoading = false;
}, 5000);
},
},
vname: "gsb-entcompanyadmin"
}
\ No newline at end of file
<gsb-pcpage>
<div style="padding:10px 20px;">
<div style="height: auto; max-width: 1500px;">
<el-card style="background-color: #FFFFFF;padding:10px 10px 30px 10px;margin-top: 20px;">
<div style="width:100%;line-height: 40px;">
<div style="float:left;width: auto;">
<span style="color:2F2F2F;font-size: 14px;" >所属企业: </span>
<el-select
v-model="selname"
filterable
remote
clearable
reserve-keyword
style="width:200px;"
placeholder="请搜索公司名称"
@change="nameChange"
:remote-method="getCompanyNames"
:loading="nameLoading">
<el-option
v-for="item in nameList"
:key="item.id"
:label="item.name"
:value="item.name">
<span style="float: left;width:150px;">{{ item.name }}</span>
</el-option>
</el-select>
</div>
<div style="float:left;width: auto;margin-left: 40px;">
<span style="color:2F2F2F;font-size: 14px;" >客户姓名: </span>
<el-input v-model="search.accountName" maxlength="50" clearable style="width:160px;height: 36px;" ></el-input>
</div>
<div style="float:left;width: auto;margin-left: 40px;">
<span style="color:2F2F2F;font-size: 14px;" >身份证: </span>
<el-input v-model="search.accountIdno" maxlength="50" clearable style="width:160px;height: 36px;" ></el-input>
</div>
</div>
<div style="clear:both;height:20px;"></div>
<div style="width:100%;line-height: 40px;">
<div style="float:left;width: auto;">
<span style="color:2F2F2F;font-size: 14px;" >客户手机: </span>
<el-input v-model="search.accountMobile" maxlength="50" clearable style="width:200px;height: 36px;" ></el-input>
</div>
<div style="float:left;width: 400px;margin-left: 40px;">
<span style="color:2F2F2F;font-size: 14px; float:left;" >签约日期: </span>
<el-date-picker
v-model="search.signBegin"
type="date"
placeholder="开始时间"
style="width:140px;height: 36px;float:left;"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
default-value="">
</el-date-picker>
<el-date-picker
v-model="search.signEnd"
type="date"
style="width:140px;height: 36px;margin-left: 16px;float:left;"
placeholder="结束时间"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
default-value="">
</el-date-picker>
</div>
<div style="float:left;margin-top:5px;margin-left: 40px;">
<el-button @click="resetSearch" style="float:right;width:68px;height:36px;background-color: #54C4A7;color: #FFFFFF;font-size: 14px;padding-top:10px;" >重置</el-button>
<el-button @click="opSearch" style="float:right;width:68px;height:36px;background-color: #54C4A7;color: #FFFFFF;font-size: 14px;padding-top:10px;margin-right: 10px;" >搜索</el-button>
</div>
</div>
</el-card>
<el-card style="background-color: #FFFFFF;padding:10px 10px 30px 10px;margin-top: 20px;">
<div style="margin-top: -15px;">
<div style="line-height: 36px;padding-bottom: 20px;">
<span style="float:left;color:#2F2F2F;font-size: 14px;">共{{search.total}}条记录</span>
<el-button @click="exportList()" style="float:right;width:100px;height:36px;color: #FFFFFF;font-weight: 400;border-radius: 4px;font-size: 14px;background-color: #59C1A6;padding-top:11px">导出签约</el-button>
<!-- <el-button @click="autoOpenEdit()" style="float:right;width:120px;height:36px;color: #FFFFFF;font-weight: 400;border-radius: 4px;font-size: 14px;background-color: #59C1A6;padding-top:11px">批量签约</el-button>-->
</div>
<div style="margin-top: 15px;">
<el-table
stripe
fix="true"
:data="search.list"
style="width: 100%;margin-top: 23px;min-height: 500px;"
empty-text="暂无申请"
tooltip-effect="light"
header-cell-style="background-color: #F5F5F5;color: #2F2F2F;font-size: 14px;font-weight:400;"
row-style="height:50px;" >
<el-table-column prop="id" label="id" :formatter="onColFormater" align="center" ></el-table-column>
<el-table-column prop="ecompany.name" label="公司名称" :formatter="onColFormater" align="center" show-overflow-tooltip ></el-table-column>
<el-table-column prop="template.nameA" label="签约主体" :formatter="onColFormater" align="center" show-overflow-tooltip ></el-table-column>
<el-table-column prop="eaccount.userName" label="姓名" :formatter="onColFormater" align="center" ></el-table-column>
<el-table-column prop="eaccount.mobile" label="手机号" :formatter="onColFormater" align="center" show-overflow-tooltip ></el-table-column>
<el-table-column prop="eaccount.personsSign" label="身份证" :formatter="onColFormater" align="center" ></el-table-column>
<el-table-column prop="eflowstatusname" label="签署状态" :formatter="onColFormater" align="center" show-overflow-tooltip ></el-table-column>
<el-table-column label="查看合同" >
<template slot-scope="scope" align="center">
<a v-if="scope.row.fileurl" :href="scope.row.fileurl" target="_blank" style="float:left;text-decoration: none;color:#59C1A6;font-size: 14px;margin-left: 10px;">查看合同</a>
<a v-if="!scope.row.fileurl" href="javascript:;" @click="downloadContractUrl(scope.row.id)" target="_blank" style="float:left;text-decoration: none;color:#59C1A6;font-size: 14px;margin-left: 10px;">查看合同</a>
</template>
</el-table-column>
<el-table-column prop="completed_at" label="签约时间" :formatter="onColFormater" align="center" show-overflow-tooltip ></el-table-column>
</el-table>
<div style="width:100%;text-align: center;margin-top: 20px">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="search.currentPage"
:page-sizes="[10, 20, 50, 100]"
:page-size="search.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="search.total">
</el-pagination>
</div>
</div>
</div>
</el-card>
<el-dialog width="730px" :visible.sync="showEdit">
<div slot="title">
<span style="margin-left:9px;margin-top:-3px;;width:72px; height:25px; font-size:18px; font-family:PingFangSC-Regular; font-weight:400; color:rgba(51,51,51,1); line-height:25px;">录入协议</span>
<div style="width: 730px; height: 1px;background-color: #E3E3E3;margin: 17px 20px 0px -20px"></div>
</div>
<el-form :model="aggreement" :rules="rules" ref="aggreement" label-width="100px" label="right" style="padding:0px 100px;" >
<div style="0px 10px; line-height: 15px;padding-bottom:40px;">
<div style="width:2px;height:15px;float: left;background-color: #54C4A7"></div>
<span style="font-size:15px;color: #333333;float: left;font-weight:bold;margin-left: 7px;">签约信息</span>
</div>
<el-form-item label="公司名称:" prop="ecompanyName">
<el-select
v-model="aggreement.ecompanyName"
filterable
remote
clearable
reserve-keyword
style="width:340px;"
placeholder="请搜索公司名称"
@change="nameChange2"
:remote-method="getCompanyNames2"
:loading="nameLoading2">
<el-option
v-for="item in nameList2"
:key="item.id"
:label="item.name"
:value="item.name">
<span style="float: left;width:150px;">{{ item.name }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="姓名:" prop="userName">
<el-input v-model="aggreement.userName" placeholder="请输入姓名" maxlength="20" style="width:340px;" clearable ></el-input>
</el-form-item>
<el-form-item label="手机号:" prop="mobile">
<el-input v-model="aggreement.mobile" placeholder="请输入手机号" maxlength="20" style="width:340px;" clearable ></el-input>
</el-form-item>
<el-form-item label="身份证:" prop="personsSign">
<el-input v-model="aggreement.personsSign" placeholder="请输入手机号" maxlength="30" style="width:340px;" clearable ></el-input>
</el-form-item>
<el-form-item label="银行卡号:" prop="bankno">
<el-input v-model="aggreement.bankno" placeholder="请输入手机号" maxlength="50" style="width:340px;" clearable ></el-input>
</el-form-item>
<el-form-item label="签约协议:" prop="fileurl">
<gsb-upload3 ref="upload3" v-model="uploadResult" @uploadsuccess="uploadsuccess" filetype="pdf"></gsb-upload3>
</el-form-item>
</el-form>
<div style="margin-left: 226px;">
<el-button :loading="submitLoading" @click="save" style="width:120px;height:36px; background:#54C4A7; border-radius:4px;color: #FFFFFF;font-size: 16px;padding-top: 10px;">保存</el-button>
</div>
</el-dialog>
<el-dialog width="730px" :visible.sync="showAutoEdit">
<div slot="title">
<span style="margin-left:9px;margin-top:-3px;;width:72px; height:25px; font-size:18px; font-family:PingFangSC-Regular; font-weight:400; color:rgba(51,51,51,1); line-height:25px;">批量签约</span>
<div style="width: 730px; height: 1px;background-color: #E3E3E3;margin: 17px 20px 0px -20px"></div>
</div>
<el-form :model="autoAggreement" :rules="rules" ref="autoAggreement" label-width="100px" label="right" style="padding:0px 100px;" >
<div style="0px 10px; line-height: 15px;padding-bottom:40px;">
<div style="width:2px;height:15px;float: left;background-color: #54C4A7"></div>
<span style="font-size:15px;color: #333333;float: left;font-weight:bold;margin-left: 7px;">签约信息</span>
</div>
<el-form-item label="模板名称:" prop="etemplateName">
<el-select
v-model="autoAggreement.etemplateName"
filterable
remote
clearable
reserve-keyword
style="width:340px;"
placeholder="请搜索模板名称"
@change="autoNameChange2"
:remote-method="getTemplateNames2"
:loading="autoNameLoading2">
<el-option
v-for="item in autoNameList2"
:key="item.id"
:label="item.name"
:value="item.name">
<span style="float: left;width:150px;">{{ item.name }}</span>
</el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label="签约协议:" prop="fileurl">
<gsb-upload3 ref="upload3" v-model="autoUploadResult" @uploadsuccess="autoUpload" filetype="pdf"></gsb-upload3>
</el-form-item> -->
<el-form-item label="签约人员:" prop="fileFourElement">
<gsb-upload3 ref="upload4" v-model="autoUploadResult" @uploadsuccess="autoUploadFourElement" filetype="xlsx"></gsb-upload3>
<a href="https://gsb-zc.oss-cn-beijing.aliyuncs.com//zc_887156480901876320193131018763autosign.xlsx"
download="四要素.xlsx" target="_blank">下载模板</a>
</el-form-item>
</el-form>
</el-form>
<div style="margin-left: 226px;">
<el-button :loading="submitLoading" @click="autoSave" style="width:120px;height:36px; background:#54C4A7; border-radius:4px;color: #FFFFFF;font-size: 16px;padding-top: 10px;">保存</el-button>
</div>
</el-dialog>
</div>
</gsb-pcpage>
\ No newline at end of file
{
template: '${tmpl}',
data: function () {
var validMethod = (rule, value, callback) => {
return this.validfileds(rule, value, callback);
};
return {
showDetail: false,
showEdit: false,
showAutoEdit: false,
selname: "",
submitLoading:false,
isFirstEdit: true,
eduTypeList: [],
search: {
list: [],
currentPage: 1,
pageSize: 20,
total: 0,
ecompany_id: '',
accountName: '',
accountMobile: '',
accountIdno: '',
signBegin: '',
signEnd: '',
},
rules: {
ecompanyName : [
{ required: true, message: '请输入公司名称', trigger: 'blur' },
{ validator: validMethod, trigger: 'blur' }
],
userName: [
{ required: true, message: '请输入姓名', trigger: 'blur' },
],
mobile: [
{ required: true, message: '请输入手机号', trigger: 'blur' },
{ validator: validMethod, trigger: 'blur' }
],
personsSign: [
{ required: true, message: '请输入身份证', trigger: 'blur' },
],
bankno: [
{ required: true, message: '请输入银行卡', trigger: 'blur' },
],
fileurl: [
{ required: true, message: '请上传签约协议', trigger: 'blur' },
],
fileFourElement: [
{ required: true, message: '请上传签约人员', trigger: 'blur' },
],
a : [],
etemplateName : [
{ required: true, message: '请输入模板名称', trigger: 'blur' },
{ validator: validMethod, trigger: 'blur' }
],
},
nameLoading: false,
nameList: [],
nameMap:[],
nameLoading2: false,
nameList2: [],
nameMap2:[],
uploadResult: null,
autoNameLoading2: false,
autoNameList2: [],
autoNameMap2:[],
aggreement: {},
autoAggreement: {},
autoUploadResult: null,
}
},
mounted: function () {
this.resetSearch();
},
created: function () {},
methods: {
getEmptySearch() {
return {
list: [],
currentPage: 1,
pageSize: 20,
total: 0,
ecompany_id: '',
accountName: '',
accountMobile: '',
accountIdno: '',
signBegin: '',
signEnd: '',
}
},
resetSearch() {
this.search = this.getEmptySearch();
this.selname = "";
this.getList();
},
tableHeaderColor({row, column, rowIndex, columnIndex}) {
if (rowIndex === 0) {
return 'background-color: #F5F5F5;color: #2F2F2F;font-size: 14px;font-weight:400;'
}
},
opSearch() {
this.getList();
},
getList() {
var self = this;
this.$root.postReq("/web/entcontractCtl/allList", {
search: self.getParams()
}).then(function (d) {
if (d.status == 0) {
self.search.list = d.data.rows || [];
self.search.total = d.data.count || 0;
} else {}
});
},
getParams() {
var params = {};
for (var f in this.search) {
if (f == "list") {
continue;
}
params[f] = this.search[f];
}
return params;
},
exportList() {
window.open("/web/entcontractCtl/allExport" + this.getExportParams());
},
getExportParams() {
var params = {};
for(var f in this.search) {
if(f == "list") {
continue;
}
params[f] = this.search[f];
}
return "?search=" + encodeURIComponent(JSON.stringify(params));
},
onColFormater(row, column, cellValue, index) {
return cellValue || "---";
},
handleSizeChange(val) {
this.search.pageSize = val;
this.resetSearch();
},
handleCurrentChange(val) {
this.search.currentPage = val;
this.getList();
},
validfileds(rule, value, callback) {
var self = this;
if(rule.field == 'name') {
if(!self.intention.name) {
return callback(new Error("请输入客户名称"));
}
self.$root.postReq("/web/eintentionCtl/validName", {
name: self.intention.name
}).then(function (d) {
if (d.status == 0) {
return callback();
} else {
return callback(new Error(d.msg));
}
});
} else {
return callback();
}
if(rule.field == "ecompanyName") {
if(!self.aggreement.ecompany_id) {
return callback(new Error("请重新选择公司名称"));
}
}
if(rule.field == "mobile") {
if(!/^(1)\d{10}$/.text(self.aggreement.mobile)) {
return callback(new Error("请输入公司名称"));
}
}
},
changeStatus() {
this.curStatus = this.search.applyStatus;
this.search.currentPage = 1;
this.search.pageSize = 20;
this.search.total = 0;
this.getList();
},
openEdit() {
var self = this;
self.nameList = [];
self.aggreement = {};
self.showEdit = true;
if(self.isFirstEdit) {
self.isFirstEdit = false;
} else {
self.$refs.aggreement.resetFields();
self.clearUpload();
}
},
autoOpenEdit() {
var self = this;
self.autoAggreement = {};
self.showAutoEdit = true;
self.autoClearUpload();
},
nameChange(val) {
console.log(val, "------------------------- ");
var self = this;
var item = self.nameMap[val];
self.search.ecompany_id = (item || {}).id || "";
},
nameChange2(val) {
var self = this;
var item = self.nameMap2[val];
self.aggreement.ecompany_id = (item || {}).id || "";
console.log(val,self.aggreement.ecompany_id, "------------------------- ");
},
autoNameChange2(val) {
var self = this;
var item = self.autoNameMap2[val];
self.autoAggreement.etemplate_id = (item || {}).id || "";
console.log(val,self.autoAggreement.etemplate_id, "---------22222222222---------------- ");
},
save() {
var self = this;
self.submitLoading = true;
self.$refs.aggreement.validate((valid) => {
if (valid) {
setTimeout(() => {
self.submitLoading = false;
}, 5000);
self.$root.postReq("/web/entcontractCtl/saveOffline", self.aggreement).then(function (d) {
if (d.status == 0) {
self.getList();
self.$confirm("保存成功,继续录入下一条?", {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'success'
}).then(() => {
self.aggreement = {};
self.clearUpload();
}).catch(() => {
self.showEdit = false;
});
} else {
self.$alert(d.msg || '保存失败', '提示', {
confirmButtonText: '确定',
callback: action => {}
});
}
self.submitLoading = false;
});
} else {
self.submitLoading = false;
return false;
}
});
},
autoSave() {
var self = this;
self.submitLoading = true;
self.$refs.autoAggreement.validate((valid) => {
self.submitLoading = false;
if (valid) {
var list = self.autoAggreement.autoExcel || [];
var d = 3 * list.length;
const loading = self.$loading({
lock: true,
text: '正在签约,请耐心等待,大约需要' + d + '秒后签约完成',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
self.$root.postReq("/web/entcontractCtl/autoSaveOffline", self.autoAggreement).then(function (d) {
loading.close();
if (d.status == 0) {
self.getList();
self.autoClearUpload();
self.showAutoEdit = false;
self.$alert('批量录入成功', '提示', {
confirmButtonText: '确定',
callback: action => {}
});
} else {
self.$alert(d.msg || '保存失败', '提示', {
confirmButtonText: '确定',
callback: action => {}
});
}
});
} else {
return false;
}
});
},
getCompanyNames(query) {
var self = this;
self.nameLoading = true;
self.$root.postReq("/web/ecompanyCtl/suggest", {
name: query
}).then(function (d) {
self.nameLoading = false;
self.nameList = d.data || [];
self.nameMap = [];
for(var item of self.nameList) {
self.nameMap[item.name] = item;
}
});
setTimeout(() => {
self.nameLoading = false;
}, 15000);
},
getCompanyNames2(query) {
var self = this;
self.nameLoading2 = true;
self.$root.postReq("/web/ecompanyCtl/suggest", {
name: query
}).then(function (d) {
self.nameLoading2 = false;
self.nameList2 = d.data || [];
self.nameMap2 = [];
for(var item of self.nameList2) {
self.nameMap2[item.name] = item;
}
});
setTimeout(() => {
self.nameLoading2 = false;
}, 15000);
},
getTemplateNames2(query) {
var self = this;
self.autoNameLoading2 = true;
self.$root.postReq("/web/etemplateCtl/getListByName", {
name: query
}).then(function (d) {
self.autoNameLoading2 = false;
self.autoNameList2 = d.data || [];
self.autoNameMap2 = [];
for(var item of self.autoNameList2) {
self.autoNameMap2[item.name] = item;
}
});
setTimeout(() => {
self.autoNameLoading2 = false;
}, 15000);
},
clearUpload() {
var self = this;
self.uploadResult = null;
self.aggreement.fileurl = "";
if(self.$refs.upload3 && self.$refs.upload3.$refs && self.$refs.upload3.$refs.upload) {
self.$refs.upload3.$refs.upload.clearFiles();
}
},
autoClearUpload() {
var self = this;
self.autoUploadResult = null;
self.autoAggreement.fileurl = "";
self.autoAggreement.fileFourElement = "";
self.$refs.upload3.$refs.upload.clearFiles();
self.$refs.upload4.$refs.upload.clearFiles();
},
uploadsuccess(v) {
if(!v || !v[0] || !v[0].url) {
this.$message.warning("上传失败");
return;
}
this.aggreement.fileurl = v[0].url;
},
autoUpload(v) {
if(!v || !v[0] || !v[0].url) {
this.$message.warning("上传失败");
return;
}
this.autoAggreement.fileurl = v[0].url;
},
autoUploadFourElement(v) {
if(!v || !v[0] || !v[0].url) {
this.$message.warning("上传失败");
return;
}
this.autoAggreement.fileFourElement = v[0].url;
this.parseExcel();
},
parseExcel() {
var self = this;
const loading = this.$loading({
lock: true,
text: '正在解析签约人员',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
self.$root.postReq("/web/usereaccountCtl/parseItems", {
url: self.autoAggreement.fileFourElement
}).then(function (d) {
loading.close();
if (d.status == 0) {
var itemlist = (d.data || {}).list;
self.autoAggreement.autoExcel = itemlist;
console.log(itemlist,"************22222222222222*****************");
} else {
/* self.autoClearUpload();*/
self.$alert(d.msg || "文件解析失败", '提示', {
confirmButtonText: '确定',
callback: action => {}
});
}
});
},
downloadContractUrl(id) {
var self = this;
self.$root.postReq("/web/entcontractCtl/downloadContractUrl", {
id: id
}).then(function (d) {
if (d.status == 0 && d.data) {
window.open(d.data);
} else {
self.$message.warning(d.msg || "上传失败");
}
});
},
},
vname: "gsb-econtractall"
}
\ No newline at end of file
<gsb-pcpage>
<div style="padding:20px;">
<div style="height: auto;min-width: 1000px; max-width: 1500px;">
<el-card style="background-color: #FFFFFF;padding:10px 10px 30px 10px;margin-top: 20px;">
<div style="width:100%;line-height: 40px;">
<div style="float:left;width: 300px;">
<span style="color:2F2F2F;font-size: 14px;" >模板名称: </span>
<el-input v-model="search.name" placeholder="请输入模板名称" maxlength="100" clearable style="max-width:200px;height: 36px;" ></el-input>
</div>
<div style="float:left;">
<span style="color:2F2F2F;font-size: 14px;" >所属公司: </span>
<el-select
v-model="search.ecompanyName"
filterable
remote
clearable
reserve-keyword
style="width:340px;"
placeholder="请搜索公司名称"
@change="nameChange"
:remote-method="getCompanyNames"
:loading="nameLoading">
<el-option
v-for="item in nameList"
:key="item.id"
:label="item.name"
:value="item.name">
<span style="float: left;width:150px;">{{ item.name }}</span>
</el-option>
</el-select>
</div>
<div style="float:left;margin-top:5px;">
<el-button @click="resetSearch()" style="float:right;width:68px;height:36px;background-color: #54C4A7;color: #FFFFFF;font-size: 14px;padding-top:10px;" >重置</el-button>
<el-button @click="opSearch" style="float:right;width:68px;height:36px;background-color: #54C4A7;color: #FFFFFF;font-size: 14px;padding-top:10px;margin-right: 10px;" >搜索</el-button>
</div>
</div>
</el-card>
<el-card style="background-color: #FFFFFF;padding:10px 10px 30px 10px;margin-top: 20px;">
<div>
<div style="line-height: 36px;padding-bottom: 20px;">
<span style="float:left;color:#2F2F2F;font-size: 14px;">共{{search.total}}条记录</span>
<!-- <el-button @click="exportList()" style="float:right;width:110px;height:36px;color: #FFFFFF;font-weight: 400;border-radius: 4px;font-size: 14px;background-color: #59C1A6;padding-top:11px">导出二维码</el-button>-->
<el-button @click="openEdit()" style="float:right;width:100px;height:36px;color: #FFFFFF;font-weight: 400;border-radius: 4px;font-size: 14px;background-color: #59C1A6;padding-top:11px">新增模板</el-button>
</div>
<div>
<el-table
stripe
fix="true"
:data="search.list"
tooltip-effect="light"
style="min-width: 1000px;max-width: 1500px;margin-top: 23px;min-height: 500px;"
empty-text="暂无需求"
header-cell-style="background-color: #F5F5F5;color: #2F2F2F;font-size: 14px;font-weight:400;"
row-style="height:50px;" >
<el-table-column prop="id" label="序号" :formatter="onColFormater" width="80" align="center" ></el-table-column>
<el-table-column prop="name" label="模板名称" :formatter="onColFormater" align="center" ></el-table-column>
<el-table-column prop="ecompany.name" label="公司名称" :formatter="onColFormater" align="center" ></el-table-column>
<!-- <el-table-column prop="ecompanyMain.alias" label="签约主体" :formatter="onColFormater" align="center" ></el-table-column>-->
<!-- <el-table-column label="二维码" >-->
<!-- <template slot-scope="scope" >-->
<!-- <a v-if="scope.row.qrcodeurl" :href="scope.row.qrcodeurl" target="_blank" style="text-decoration: none;color:#59C1A6;font-size: 14px;">二维码</a>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="模板文件" >
<template slot-scope="scope" >
<a v-if="scope.row.codeurl" :href="scope.row.codeurl" target="_blank" style="text-decoration: none;color:#59C1A6;font-size: 14px;">查看</a>
</template>
</el-table-column>
<!-- <el-table-column prop="filekey" label="模板key" :formatter="onColFormater" align="center" show-overflow-tooltip></el-table-column>-->
<el-table-column prop="created_at" label="创建日期" :formatter="onColFormater" align="center" ></el-table-column>
<el-table-column prop="updated_at" label="修改日期" :formatter="onColFormater" align="center" ></el-table-column>
<el-table-column label="操作" align="center" >
<template slot-scope="scope">
<a href="javascript:;" @click="openEdit(scope.row.id)" style="text-decoration: none;color:#59C1A6;font-size: 14px;">修改</a>
</template>
</el-table-column>
</el-table>
<div style="width:100%;text-align: center;margin-top: 20px">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="search.currentPage"
:page-sizes="[10, 20, 50, 100]"
:page-size="search.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="search.total">
</el-pagination>
</div>
</div>
</div>
</el-card>
<el-dialog width="862px" :visible.sync="showEdit">
<div slot="title">
<span style="margin-left:9px;margin-top:-3px;;width:72px; height:25px; font-size:18px; font-family:PingFangSC-Regular; font-weight:400; color:rgba(51,51,51,1); line-height:25px;">{{editTitle}}模板</span>
<div style="width: 862px; height: 1px;background-color: #E3E3E3;margin: 17px 20px 0px -20px"></div>
</div>
<el-form :model="etemplate" :rules="rules" ref="etemplate" label-width="100px" label="right" style="padding:0px 100px;" >
<div style="0px 10px; line-height: 15px;padding-bottom:40px;">
<div style="width:2px;height:15px;float: left;background-color: #54C4A7">
</div>
<span style="font-size:15px;color: #333333;float: left;font-weight:bold;margin-left: 7px;">模板信息</span>
</div>
<el-form-item label="模板名称:" prop="name" >
<el-input v-model="etemplate.name" placeholder="请输入模板名称:例如韵达、沐冉" maxlength="50" style="width:468px;" clearable ></el-input>
</el-form-item>
<el-form-item label="所属公司:" prop="ecompanyName">
<el-select
v-model="etemplate.ecompanyName"
filterable
remote
clearable
reserve-keyword
style="width:468px;"
placeholder="请搜索公司名称"
@change="nameChange2"
:remote-method="getCompanyNames2"
:loading="nameLoading2">
<el-option
v-for="item in nameList2"
:key="item.id"
:label="item.name"
:value="item.name">
<span style="float: left;width:150px;">{{ item.name }}</span>
</el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label="签约主体:" prop="ecompanyMainId" >-->
<!-- <el-select v-model="etemplate.ecompanyMainId" style="width:468px;" filterable placeholder="请选择">-->
<!-- <el-option-->
<!-- v-for="item in mainList"-->
<!-- :key="item.id"-->
<!-- :label="item.alias"-->
<!-- :value="item.id">-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- &lt;!&ndash; <el-input v-model="etemplate.nameA" placeholder="请输入签约主体" maxlength="50" style="width:468px;" clearable ></el-input> &ndash;&gt;-->
<!-- </el-form-item>-->
<el-form-item label="签约协议:" prop="codeurl">
<gsb-upload3 ref="upload3" v-model="uploadResult" @uploadsuccess="uploadsuccess" :fileList="fileList" filetype="pdf"></gsb-upload3>
</el-form-item>
<el-form-item label="备注信息:" prop="remark" >
<el-input type="textarea" v-model="etemplate.remark" placeholder="请输入备注信息" maxlength="50" style="width:468px;" clearable ></el-input>
</el-form-item>
<el-form-item label="模板参数:" prop="placeholderkey" >
<el-input v-model="etemplate.placeholderkey" placeholder="请输入模板参数" maxlength="255" style="width:468px;" showlist="true" :file-list="fileList" clearable ></el-input>
</el-form-item>
</el-form>
<div style="margin-left: 200px;">
<el-button :loading="saveLoading" @click="saveTemplate" style="width:120px;height:36px; background:#54C4A7; border-radius:4px;color: #FFFFFF;font-size: 16px;padding-top: 10px;">保存</el-button>
</div>
</el-dialog>
</div>
</gsb-pcpage>
\ No newline at end of file
{
template: '${tmpl}',
data: function () {
var validMethod = (rule, value, callback) => {
return this.validfileds(rule, value, callback);
};
return {
etemplate: {isEnabled:true},
editTitle: "新增",
showEdit: false,
saveLoading: false,
nameLoading: false,
nameList: [],
nameMap: [],
nameLoading2: false,
nameList2: [],
nameMap2:[],
uploadResult: null,
fileList:[],
mainList:[],
search: {
list: [],
currentPage: 1,
pageSize: 20,
total : 0,
name:'',
},
rules: {
ecompanyName : [
{ required: true, message: '请输入公司名称', trigger: 'blur' },
{ validator: validMethod, trigger: 'blur' }
],
codeurl: [
{ required: true, message: '请上传签约协议', trigger: 'blur' },
],
a : [],
},
}
},
mounted: function () {
this.resetSearch(true);
this.getMainList();
},
created: function () {},
methods: {
getEmptySearch() {
return {
list: [],
currentPage: 1,
pageSize: 20,
total : 0,
name:'',
}
},
resetSearch() {
this.search = this.getEmptySearch();
this.getList();
},
tableHeaderColor({ row, column, rowIndex, columnIndex }) {
if (rowIndex === 0) {
return 'background-color: #F5F5F5;color: #2F2F2F;font-size: 14px;font-weight:400;'
}
},
opSearch() {
this.search.currentPage = 1;
this.search.total = 0;
this.getList();
},
getMainList() {
var self = this;
this.$root.postReq("/web/ecompanymainCtl/all", {
}).then(function (d) {
if (d.status == 0) {
self.mainList = d.data || [];
} else {
}
});
},
getList() {
var self = this;
var params = this.getParams();
this.$root.postReq("/web/enttemplateCtl/signList", {
search: params
}).then(function (d) {
if (d.status == 0) {
self.search.list = d.data.rows || [];
self.search.total = d.data.count || 0;
} else {
}
});
},
exportList() {
window.open("/web/enttemplateCtl/signExport" + this.getExportParams());
},
getParams() {
var params = {};
for(var f in this.search) {
if(f == "list") {
continue;
}
params[f] = this.search[f];
}
return params;
},
getExportParams() {
var params = {};
for(var f in this.search) {
if(f == "list") {
continue;
}
params[f] = this.search[f];
}
return "?search=" + encodeURIComponent(JSON.stringify(params));
},
onColFormater(row, column, cellValue, index) {
return cellValue || "---";
},
getEtemplate(id) {
var self = this;
self.$root.postReq("/web/enttemplateCtl/info", {
id: id,
}).then(function (d) {
if (d.status == 0) {
if(d.data) {
d.data.isEnabled = d.data.isEnabled ? true : false;
}
self.etemplate = d.data;
if(self.etemplate.codeurl) {
self.fileList = [{
name: "模板文件",
url: self.etemplate.codeurl,
}];
} else {
self.uploadResult = null;
}
console.log(self.uploadResult);
} else {
self.$message.warning(d.msg || `您的网络不稳定, 请稍后重试`);
}
});
},
toDetail(id) {
},
openEdit(id) {
this.clearUpload();
if(id) {
this.editTitle = "修改";
this.getEtemplate(id);
} else {
this.editTitle = "修改";
this.etemplate = {isEnabled:true};
}
this.showEdit = true;
},
handleSizeChange(val) {
this.search.pageSize = val;
this.resetSearch();
},
handleCurrentChange(val) {
this.search.currentPage = val;
this.getList();
},
validfileds(rule, value, callback) {
var self = this;
if(rule.field == "ecompanyName") {
if(!self.etemplate.entcompany_id) {
return callback(new Error("请重新选择公司名称"));
}
}
return callback();
},
nameChange(val) {
var self = this;
var item = self.nameMap[val];
self.search.entcompany_id = (item || {}).id || "";
},
nameChange2(val) {
var self = this;
var item = self.nameMap2[val];
self.etemplate.entcompany_id = (item || {}).id || "";
},
getCompanyNames(query) {
var self = this;
self.nameLoading = true;
self.$root.postReq("/web/ecompanyCtl/suggest", {
name: query
}).then(function (d) {
self.nameLoading = false;
self.nameList = d.data || [];
self.nameMap = [];
for(var item of self.nameList) {
self.nameMap[item.name] = item;
}
});
setTimeout(() => {
self.nameLoading = false;
}, 15000);
},
getCompanyNames2(query) {
var self = this;
self.nameLoading2 = true;
self.$root.postReq("/web/ecompanyCtl/suggest", {
name: query
}).then(function (d) {
self.nameLoading2 = false;
self.nameList2 = d.data || [];
self.nameMap2 = [];
for(var item of self.nameList2) {
self.nameMap2[item.name] = item;
}
});
setTimeout(() => {
self.nameLoading2 = false;
}, 15000);
},
clearUpload() {
var self = this;
self.uploadResult = null;
self.etemplate.codeurl = "";
if(self.$refs.upload3 && self.$refs.upload3.$refs && self.$refs.upload3.$refs.upload) {
self.$refs.upload3.$refs.upload.clearFiles();
}
},
uploadsuccess(v) {
if(!v || !v[0] || !v[0].url) {
this.$message.warning("上传失败");
return;
}
this.etemplate.codeurl = v[0].url;
},
saveTemplate() {
var self = this;
self.$refs.etemplate.validate((valid) => {
if (valid) {
self.saveLoading = true;
setTimeout(() => {
self.saveLoading = false;
}, 15000);
self.$root.postReq("/web/enttemplateCtl/mysave", self.etemplate).then(function (d) {
if (d.status == 0) {
self.$message.success(`保存成功`);
self.showEdit = false;
self.getList();
} else {
self.$alert(d.msg || '保存失败', '提示', {
confirmButtonText: '确定',
callback: action => {}
});
}
self.saveLoading = false;
});
} else {
self.saveLoading = false;
return false;
}
});
},
},
vname: "gsb-ecompanyadmin"
}
\ No newline at end of file
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