Commit b80d5290 by 王昆

gsb

parent f3a66706
...@@ -1422,7 +1422,6 @@ class EcontractApi { ...@@ -1422,7 +1422,6 @@ class EcontractApi {
} }
} }
//二要素验证(姓名、银行卡) //二要素验证(姓名、银行卡)
async autoSignBankTwo(pobj) { async autoSignBankTwo(pobj) {
// 处理参数 // 处理参数
......
const system=require("../system"); const system = require("../system");
const settings=require("../../config/settings"); const settings = require("../../config/settings");
class CtlBase{ class CtlBase {
constructor(sname){ constructor(sname) {
this.serviceName=sname; this.serviceName = sname;
this.service=system.getObject("service."+sname); this.service = system.getObject("service." + sname);
this.cacheManager=system.getObject("db.cacheManager"); this.cacheManager = system.getObject("db.cacheManager");
this.md5 = require("MD5"); this.md5 = require("MD5");
} }
notify(req,msg){
if(req.session){ notify(req, msg) {
req.session.bizmsg=msg; if (req.session) {
req.session.bizmsg = msg;
} }
} }
async findOne(queryobj,qobj){
var rd=await this.service.findOne(qobj); async findOne(queryobj, qobj) {
return system.getResult2(rd,null); var rd = await this.service.findOne(qobj);
return system.getResult2(rd, null);
} }
async findAndCountAll(queryobj,obj,req){
obj.codepath=req.codepath;
if(req.session.user){ async findAndCountAll(queryobj, obj, req) {
obj.uid=req.session.user.id; obj.codepath = req.codepath;
obj.appid=req.session.user.app_id;
obj.onlyCode=req.session.user.unionId; if (req.session.user) {
obj.ukstr=req.session.user.app_id+"¥"+req.session.user.id+"¥"+req.session.user.nickName+"¥"+req.session.user.headUrl; obj.uid = req.session.user.id;
obj.appid = req.session.user.app_id;
obj.onlyCode = req.session.user.unionId;
obj.ukstr = req.session.user.app_id + "¥" + req.session.user.id + "¥" + req.session.user.nickName + "¥" + req.session.user.headUrl;
} }
var apps=await this.service.findAndCountAll(obj); var apps = await this.service.findAndCountAll(obj);
return system.getResult2(apps,null); return system.getResult2(apps, null);
} }
async refQuery(queryobj,qobj){
var rd=await this.service.refQuery(qobj); async refQuery(queryobj, qobj) {
return system.getResult2(rd,null); var rd = await this.service.refQuery(qobj);
} return system.getResult2(rd, null);
async bulkDelete(queryobj,ids){ }
var rd=await this.service.bulkDelete(ids);
return system.getResult2(rd,null); async bulkDelete(queryobj, ids) {
} var rd = await this.service.bulkDelete(ids);
async delete(queryobj,qobj){ return system.getResult2(rd, null);
var rd=await this.service.delete(qobj); }
return system.getResult2(rd,null);
} async delete(queryobj, qobj) {
async create(queryobj,qobj,req){ var rd = await this.service.delete(qobj);
if(req && req.session && req.session.app){ return system.getResult2(rd, null);
qobj.app_id=req.session.app.id; }
qobj.onlyCode=req.session.user.unionId;
if(req.codepath){ async create(queryobj, qobj, req) {
qobj.codepath=req.codepath; if (req && req.session && req.session.app) {
qobj.app_id = req.session.app.id;
qobj.onlyCode = req.session.user.unionId;
if (req.codepath) {
qobj.codepath = req.codepath;
} }
} }
var rd=await this.service.create(qobj); var rd = await this.service.create(qobj);
return system.getResult2(rd,null); return system.getResult2(rd, null);
} }
async update(queryobj,qobj,req){
if(req && req.session && req.session.user){ async update(queryobj, qobj, req) {
qobj.onlyCode=req.session.user.unionId; if (req && req.session && req.session.user) {
qobj.onlyCode = req.session.user.unionId;
} }
if(req.codepath){ if (req.codepath) {
qobj.codepath=req.codepath; qobj.codepath = req.codepath;
} }
var rd=await this.service.update(qobj); var rd = await this.service.update(qobj);
return system.getResult2(rd,null); return system.getResult2(rd, null);
} }
static getServiceName(ClassObj){
return ClassObj["name"].substring(0,ClassObj["name"].lastIndexOf("Ctl")).toLowerCase()+"Sve"; static getServiceName(ClassObj) {
return ClassObj["name"].substring(0, ClassObj["name"].lastIndexOf("Ctl")).toLowerCase() + "Sve";
} }
async initNewInstance(queryobj,req){
return system.getResult2({},null); async initNewInstance(queryobj, req) {
return system.getResult2({}, null);
} }
async findById(oid){
var rd=await this.service.findById(oid); async findById(oid) {
return system.getResult2(rd,null); var rd = await this.service.findById(oid);
return system.getResult2(rd, null);
} }
trim(o) { trim(o) {
if(!o) { if (!o) {
return ""; return "";
} }
return o.toString().trim(); return o.toString().trim();
...@@ -86,32 +98,52 @@ class CtlBase{ ...@@ -86,32 +98,52 @@ class CtlBase{
} }
for (var f of fields) { for (var f of fields) {
if (params[f]) { if (params[f]) {
var suffix = this.endWith(f, 'Begin') ? " 00:00:00" : " 23:59:59"; var suffix = this.endWith(f, 'Begin') ? " 00:00:00" : " 23:59:59";
params[f] = params[f] + suffix; params[f] = params[f] + suffix;
} }
} }
} }
encryptPasswd(passwd) { encryptPasswd(passwd) {
if(!passwd) { if (!passwd) {
throw new Error("请输入密码"); throw new Error("请输入密码");
} }
var md5 = this.md5(passwd + "_" + settings.salt); var md5 = this.md5(passwd + "_" + settings.salt);
return md5.toString().toLowerCase(); return md5.toString().toLowerCase();
} }
endWith(source, str){ endWith(source, str) {
if(!str || !source || source.length == 0 || str.length > source.length) { if (!str || !source || source.length == 0 || str.length > source.length) {
return false; return false;
} }
return source.substring(source.length - str.length) == str; return source.substring(source.length - str.length) == str;
} }
getUidInfo(len, radix) {
let chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');//长度62,到yz长度为长36
let uuid = [], i;
radix = radix || chars.length;
if (len) {
for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
} else {
let 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 doExecute(methodname,params){ // async doExecute(methodname,params){
// var result= await this[methodname](params); // var result= await this[methodname](params);
// return system.getResult2(result,null); // return system.getResult2(result,null);
// } // }
} }
module.exports=CtlBase;
module.exports = CtlBase;
...@@ -50,7 +50,7 @@ class WxCtl extends CtlBase { ...@@ -50,7 +50,7 @@ class WxCtl extends CtlBase {
console.log(rtn); console.log(rtn);
var result = rtn.data; var result = rtn.data;
if(result.openid) { if(result.openid) {
await this.redisClient.set(redisKey, result.openid, 6 * 60 * 60); await this.redisClient.set(redisKey, result.openid, 60 * 60 * 60);
return system.getResult2(result.openid); return system.getResult2(result.openid);
} }
return system.getErrResult2("openId获取失败,请重新打开页面"); return system.getErrResult2("openId获取失败,请重新打开页面");
......
...@@ -4,5 +4,25 @@ class DKcontractDao extends Dao{ ...@@ -4,5 +4,25 @@ class DKcontractDao extends Dao{
constructor(){ constructor(){
super(Dao.getModelName(DKcontractDao)); super(Dao.getModelName(DKcontractDao));
} }
async findSignedContractId(params) {
// idno, begin, end
let sql = [];
sql.push("SELECT t1.id FROM c_dkcontract t1");
sql.push("INNER JOIN `p_user_eaccount` t2 ON t1.`usereaccount_id` = t2.`id`");
sql.push("WHERE t2.`personsSign` = :idno AND t1.eflowstatus = '2'");
if (params.ecid) {
sql.push("AND t1.`dktemplate_id` = :ecid");
}
if (params.today) {
sql.push("AND t1.`end_at` >= :today");
}
let list = await this.customQuery(sql.join(" "), params);
if (!list || list.length == 0) {
return 0;
}
return list[0].id || 0;
}
} }
module.exports=DKcontractDao; module.exports=DKcontractDao;
...@@ -4,11 +4,11 @@ const uiconfig=system.getUiConfig2(settings.wxconfig.appId); ...@@ -4,11 +4,11 @@ const uiconfig=system.getUiConfig2(settings.wxconfig.appId);
module.exports = (db, DataTypes) => { module.exports = (db, DataTypes) => {
return db.define("cwxsignapi", { return db.define("cwxsignapi", {
app_id: { app_id: {
type: DataTypes.BIGINT, type: DataTypes.STRING,
allowNull: true, allowNull: true,
}, },
app_secret: { app_secret: {
type: DataTypes.BIGINT, type: DataTypes.STRING,
allowNull: true, allowNull: true,
}, },
app_type: { app_type: {
...@@ -29,14 +29,10 @@ module.exports = (db, DataTypes) => { ...@@ -29,14 +29,10 @@ module.exports = (db, DataTypes) => {
type: DataTypes.BIGINT, type: DataTypes.BIGINT,
allowNull: true, allowNull: true,
}, },
wx_notify_url:{ notify_url:{
type:DataTypes.STRING, type:DataTypes.STRING,
allowNull: true allowNull: true
}, },
sign_notify_url:{
type:DataTypes.STRING,
allowNull: true,
},
redirect_url:{ redirect_url:{
type:DataTypes.STRING, type:DataTypes.STRING,
allowNull: true, allowNull: true,
......
...@@ -11,6 +11,10 @@ module.exports = (db, DataTypes) => { ...@@ -11,6 +11,10 @@ module.exports = (db, DataTypes) => {
type: DataTypes.STRING, type: DataTypes.STRING,
allowNull: true, allowNull: true,
}, },
userId: {
type: DataTypes.STRING,
allowNull: true,
},
id_name: { id_name: {
type: DataTypes.STRING, type: DataTypes.STRING,
allowNull: true allowNull: true
......
const system=require("../../system"); const system = require("../../system");
const ServiceBase=require("../sve.base"); const ServiceBase = require("../sve.base");
class BankthreelogService extends ServiceBase{
constructor(){ class BankthreelogService extends ServiceBase {
super(ServiceBase.getDaoName(BankthreelogService)); constructor() {
super(ServiceBase.getDaoName(BankthreelogService));
this.utilesignbaoSve = system.getObject("service.utilesignbaoSve");
}
async personTwo(params) {
params.userIdNo = params.userIdNo.toUpperCase();
// 验证电子签
let exists = await this.dao.findOne({
userName: params.userName,
userIdNo: params.userIdNo,
result: 1,
});
params.use_esign = false;
params.result = false;
let log = await this.dao.create(params);
if (exists) {
log.result = 1;
log.save();
return system.getResult2({pass: true});
}
log.use_esign = 1;
let vp = {
name: params.userName,
idno: params.userIdNo,
cardno: log.id
};
let res = await this.utilesignbaoSve.personTwo(vp, "BankthreelogService.personTwo");
console.log("personTwo, res-----------------------------", res);
if (!res || res.code == -120 || res.code == -110) {
return system.getErrResult2("二要素(姓名、身份证)验证失败");
}
log.result = 1;
log.save();
return system.getResult2({pass: true});
}
async bankThree(params) {
params.userIdNo = params.userIdNo.toUpperCase();
// 验证电子签
let exists = await this.dao.findOne({
userName: params.userName,
userIdNo: params.userIdNo,
userBankNo: params.userBankNo,
result: 1,
});
params.use_esign = false;
params.result = false;
let log = await this.dao.create(params);
if (exists) {
log.result = 1;
log.save();
return system.getResult2({pass: true});
}
log.use_esign = 1;
let vp = {
name: params.userName,
idno: params.userIdNo,
cardno: params.userBankNo
};
let res = await this.utilesignbaoSve.bankthree(vp, "BankthreelogService.bankThree");
console.log("personTwo, res-----------------------------", res);
if (!res || res.code == -120 || res.code == -110) {
return system.getErrResult2("银行卡三要素(姓名、身份证、银行卡号)验证失败");
}
log.result = 1;
log.save();
return system.getResult2({pass: true});
}
async bankFour(params) {
params.userIdNo = params.userIdNo.toUpperCase();
// 验证电子签
let exists = await this.dao.findOne({
userName: params.userName,
userIdNo: params.userIdNo,
userBankNo: params.userBankNo,
userMobile: params.userMobile,
result: 1,
});
params.use_esign = false;
params.result = false;
let log = await this.dao.create(params);
if (exists) {
log.result = 1;
log.save();
return system.getResult2({pass: true});
}
log.use_esign = 1;
let vp = {
name: params.userName,
idno: params.userIdNo,
cardno: params.userBankNo,
mobile: params.userMobile
};
let res = await this.utilesignbaoSve.bankfour(vp, "BankthreelogService.bankfour");
console.log("personTwo, res-----------------------------", res);
if (!res || res.code == -120 || res.code == -110) {
return system.getErrResult2("银行卡四要素(姓名、身份证、银行卡号、银行预留手机号)验证失败");
}
log.result = 1;
log.save();
return system.getResult2({pass: true});
} }
} }
module.exports=BankthreelogService;
module.exports = BankthreelogService;
...@@ -605,6 +605,153 @@ class DKcontractService extends ServiceBase { ...@@ -605,6 +605,153 @@ class DKcontractService extends ServiceBase {
return this.returnjson(-1, tt.message || "签约失败", tt.code); return this.returnjson(-1, tt.message || "签约失败", tt.code);
} }
async autoSignNew(params) {
let ecid = params.ecid;
let unionId = params.appId + "_" + params.idNo;
let todays = moment().format("YYYY-MM-DD") + " 00:00:00";
let contractId = await this.dao.findSignedContractId({idno: params.idNo, ecid: ecid, today : todays}) || 0;
if (contractId) {
return this.returnjson(0, "用户已经签约", {
contractId: contractId
});
}
// ecid dketemplate
let etemplate = await this.dktemplateSve.findById(ecid);
// dkecompany
let dkcompany = await this.dkcompanyDao.findById(etemplate.dkcompany_id);
// p_user
let user = await this.userDao.findOne({
unionId: unionId,
});
if (!user) {
user = await this.userDao.create({
appkey: params.appId,
unionId: unionId,
userId3rd: params.userId,
userName: params.idName,
mobile: params.mobile,
utype: 0,
});
}
// p_user_eaccount
let eaccount = await this.usereaccountDao.findOne({
user_id: user.id,
personsSign: params.idNo,
}) || {};
let isNeedCreate = !eaccount.eaccountid || eaccount.userName != params.idName || eaccount.mobile != params.mobile || eaccount.bankno != params.bankno;
eaccount.user_id = user.id;
eaccount.userName = params.idName;
eaccount.mobile = params.mobile;
eaccount.bankno = params.bankno;
eaccount.personsSign = params.idNo;
if (!eaccount.id) {
eaccount = await this.usereaccountDao.create(eaccount);
}
// c_dkecontract
if (eaccount.id) {
await eaccount.save();
}
if (isNeedCreate) {
let uidStr = await this.getUidStr(8, 36);
let thirdId = ecid + "_" + eaccount.id + uidStr;
//创建e签宝account 5.2.1 , 创建后save()
let cparams = {
thirdId: thirdId,
name: eaccount.userName,
idNo: eaccount.personsSign,
idType: 19,
mobile: eaccount.mobile
};
var getAccount = await this.utilesignbaoSve.createAccountId(cparams, "econtractSve");
if (getAccount && getAccount.code == 1 && getAccount.data) {
eaccount.eaccountid = getAccount.data.accountId;
await eaccount.save();
} else {
return this.returnjson(-1, "账户创建失败");
}
}
// 设置静默签署授权 5.2.5
if (!eaccount.isGrantAuto) {
var paramsGrant = {
grantAccountId: eaccount.eaccountid
};
var grantAuto = await this.utilesignbaoSve.grantAuthorization(paramsGrant, "econtractSve");
if (grantAuto.code != 1) {
return this.returnjson(-1, "静默签署设置失败");
}
eaccount.isGrantAuto = true;
await eaccount.save();
}
let dkecontract = {
name: dkcompany.name,
dktemplate_id: ecid,
user_id: user.id,
usereaccount_id: eaccount.id,
dkcompany_id: dkcompany.id,
edocid: "",
eflowid: "",
esignUrl: "",
eflowstatus: "1",
}
dkecontract = await this.create(dkecontract);
var dkaggreement = await this.dkaggreementDao.findById(etemplate.dkaggreement_id);
var contractParams = {
templateId: dkaggreement.templateid, //模板id,由创建模板接口调用返回的templateId 必填
name: dkcompany.name, //合同模板名称 必填
simpleFormFields: {
nameA: dkcompany.name, //甲方 必填
addressA: dkcompany.addr, // 甲方地址
phoneA: dkcompany.phone, // 甲方电话
nameB: eaccount.userName, //乙方姓名 必填
phoneB: eaccount.mobile, //乙方电话 必填
nameC: eaccount.userName, // 已方姓名
phoneC: eaccount.mobile, // 乙方电话
idcardC: eaccount.personsSign, // 乙方身份证
banknoC: eaccount.bankno, // 乙方银行卡号
signdate: moment().format("YYYY/MM/DD"), // 签约日期
}
};
var ebaoAccountId = eaccount.eaccountid; //签署人账户id-- 必填
var thirdOrderNo = "dk_" + dkecontract.id; //第三方流水号,通知回调使用---选填
var eBaoRedirectBossUrl = "";
var sealId = dkcompany.sealId;
let tt = await this.utilesignbaoSve.userAutoSignContractNoTemplate(contractParams, ebaoAccountId, thirdOrderNo, eBaoRedirectBossUrl, "econtractSve", sealId);
console.log("-============= result ===========================", tt);
if (tt && tt.data && tt.code == 1) {
dkecontract.eflowid = tt.data.flowId;
dkecontract.edocid = tt.data.docId;
dkecontract.eflowstatus = '2',
dkecontract.esignUrl = tt.data.signUrl;
var signTime = new Date();
dkecontract.completed_at = signTime;
dkecontract.begin_at = signTime;
var end_at = new Date();
end_at.setFullYear(end_at.getFullYear() + 1);
dkecontract.end_at = end_at;
dkecontract.save();
}
this.redisClient.rpushBCD({id: dkecontract.id, sve: "dk"});
return this.returnjson(0, "success", {
contractId: dkecontract.id
});
}
returnjson(code, msg, data) { returnjson(code, msg, data) {
return { return {
......
...@@ -9,6 +9,13 @@ class DKtemplateService extends ServiceBase{ ...@@ -9,6 +9,13 @@ class DKtemplateService extends ServiceBase{
this.dkaggreementDao = system.getObject("db.dkaggreementDao"); this.dkaggreementDao = system.getObject("db.dkaggreementDao");
} }
async allByEcid(ecid) {
let all = {};
all.template = await this.dao.findById(ecid);
all.company = await this.dkcompanyDao.findById(all.template.dkcompany_id || 0);
return all;
}
async pageByCondition(params) { async pageByCondition(params) {
var currentPage = Number(params.currentPage || 0); var currentPage = Number(params.currentPage || 0);
var pageSize = Number(params.pageSize || 10); var pageSize = Number(params.pageSize || 10);
......
...@@ -9,6 +9,14 @@ class EtemplateService extends ServiceBase{ ...@@ -9,6 +9,14 @@ class EtemplateService extends ServiceBase{
this.ecompanymainDao = system.getObject("db.ecompanymainDao"); this.ecompanymainDao = system.getObject("db.ecompanymainDao");
} }
async allByEcid(ecid) {
let all = {};
all.template = await this.dao.findById(ecid);
all.company = await this.ecompanyDao.findById(all.template.ecompany_id || 0);
all.main = await this.ecompanymainDao.findById(all.template.ecompanyMainId || 0);
return all;
}
async signPage(params) { async signPage(params) {
var currentPage = Number(params.currentPage || 0); var currentPage = Number(params.currentPage || 0);
var pageSize = Number(params.pageSize || 10); var pageSize = Number(params.pageSize || 10);
......
...@@ -43,7 +43,7 @@ class UtilESignBaoService { ...@@ -43,7 +43,7 @@ class UtilESignBaoService {
"idType": "01", "idType": "01",
"idNum": params.idno,//身份证号, "idNum": params.idno,//身份证号,
"mchInfo": "汉唐信通(北京)科技有限公司", "mchInfo": "汉唐信通(北京)科技有限公司",
"riskInfo": params.idno, "riskInfo": params.riskInfo || params.idno,
}; };
var encryptStr = JSON.stringify(encrypt); var encryptStr = JSON.stringify(encrypt);
var str = crypto.privateEncrypt(this.lbwConfig.pik, Buffer.from(encryptStr)).toString('base64'); var str = crypto.privateEncrypt(this.lbwConfig.pik, Buffer.from(encryptStr)).toString('base64');
......
...@@ -147,6 +147,7 @@ module.exports = function (app) { ...@@ -147,6 +147,7 @@ module.exports = function (app) {
req.url.indexOf("ecompanywxuserCtl/companyByEcid") > 0 || req.url.indexOf("ecompanywxuserCtl/companyByEcid") > 0 ||
/dksignCtl\/./.test(req.url) || /dksignCtl\/./.test(req.url) ||
/cwxsignapiCtl\/./.test(req.url) ||
req.url.indexOf("econtractCtl/getPayNotify") > 0 || req.url.indexOf("econtractCtl/getPayNotify") > 0 ||
req.url.indexOf("ecompanyCtl/wxsignCompany") > 0 || req.url.indexOf("ecompanyCtl/wxsignCompany") > 0 ||
...@@ -308,16 +309,24 @@ module.exports = function (app) { ...@@ -308,16 +309,24 @@ module.exports = function (app) {
app.get('/bpostat', function (req, res) { app.get('/bpostat', function (req, res) {
res.render("bpostat", {}); res.render("bpostat", {});
}); });
app.get('/wxsign', function (req, res) { app.get('/wxsign', function (req, res) {
res.render("wxsign", {}); res.render("wxsign", {});
}); });
app.get('/wxsignaggreement', function (req, res) { app.get('/wxsignaggreement', function (req, res) {
res.render("wxsignaggreement", {}); res.render("wxsignaggreement", {});
}); });
app.get('/bpowxsignaggreement2', function (req, res) {
res.render("bpowxsignaggreement2", {});
});
app.get('/bpowxsignaggreement3', function (req, res) {
res.render("bpowxsignaggreement3", {});
});
app.get('/wxsign3rd', function (req, res) { app.get('/wxsign3rd', function (req, res) {
res.render("wxsign3rd", {}); res.render("wxsign3rd", {});
}); });
app.get('/bpowxsign', function (req, res) {
res.render("bpowxsign", {});
});
app.get('/errpage', function (req, res) { app.get('/errpage', function (req, res) {
res.render("errpage", {}); res.render("errpage", {});
......
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" ">
<title id=" idtitle"> 薪必果签约 </title>
<link rel="stylesheet" href="/css/ele/chalk.css">
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/fontawesome/css/font-awesome.min.css">
<link rel="stylesheet" href="/css/autocomplete.css">
<script src="/js/vue/vue.min.js"></script>
<script src="/js/vue/vue-router.min.js"></script>
<script src="/js/vue/vuex.min.js"></script>
<script src="/js/ele/index.js"></script>
<style>
body {
padding: 0px;
margin: 0px;
}
#loading {
background-color: #2c3e50;
height: 100%;
width: 100%;
position: fixed;
z-index: 9999;
margin-top: 0px;
top: 0px;
}
#loading-center {
width: 100%;
height: 100%;
position: relative;
}
#loading-center-absolute {
position: absolute;
left: 50%;
top: 50%;
height: 50px;
width: 50px;
margin-top: -25px;
margin-left: -25px;
-ms-transform: rotate(45deg);
-webkit-transform: rotate(45deg);
transform: rotate(45deg);
-webkit-animation: loading-center-absolute 1.5s infinite;
animation: loading-center-absolute 1.5s infinite;
}
.object {
width: 25px;
height: 25px;
background-color: #FFF;
float: left;
}
#object_one {
-webkit-animation: object_one 1.5s infinite;
animation: object_one 1.5s infinite;
}
#object_two {
-webkit-animation: object_two 1.5s infinite;
animation: object_two 1.5s infinite;
}
#object_three {
-webkit-animation: object_three 1.5s infinite;
animation: object_three 1.5s infinite;
}
#object_four {
-webkit-animation: object_four 1.5s infinite;
animation: object_four 1.5s infinite;
}
@-webkit-keyframes loading-center-absolute {
100% {
-webkit-transform: rotate(-45deg);
}
}
@keyframes loading-center-absolute {
100% {
transform: rotate(-45deg);
-webkit-transform: rotate(-45deg);
}
}
@-webkit-keyframes object_one {
25% {
-webkit-transform: translate(0, -50px) rotate(-180deg);
}
100% {
-webkit-transform: translate(0, 0) rotate(-180deg);
}
}
@keyframes object_one {
25% {
transform: translate(0, -50px) rotate(-180deg);
-webkit-transform: translate(0, -50px) rotate(-180deg);
}
100% {
transform: translate(0, 0) rotate(-180deg);
-webkit-transform: translate(0, 0) rotate(-180deg);
}
}
@-webkit-keyframes object_two {
25% {
-webkit-transform: translate(50px, 0) rotate(-180deg);
}
100% {
-webkit-transform: translate(0, 0) rotate(-180deg);
}
}
{
"icon": "tool-order", "title":"商标列表", "type":"default", "key":"myTmList", "isOnGrid":true
}
,
@keyframes object_two {
25% {
transform: translate(50px, 0) rotate(-180deg);
-webkit-transform: translate(50px, 0) rotate(-180deg);
}
100% {
transform: translate(0, 0) rotate(-180deg);
-webkit-transform: translate(0, 0) rotate(-180deg);
}
}
@-webkit-keyframes object_three {
25% {
-webkit-transform: translate(-50px, 0) rotate(-180deg);
}
100% {
-webkit-transform: translate(0, 0) rotate(-180deg);
}
}
@keyframes object_three {
25% {
transform: translate(-50px, 0) rotate(-180deg);
-webkit-transform: translate(-50px, 0) rotate(-180deg);
}
100% {
transform: translate(0, 0) rotate(-180deg);
-webkit-transform: rtranslate(0, 0) rotate(-180deg);
}
}
@-webkit-keyframes object_four {
25% {
-webkit-transform: translate(0, 50px) rotate(-180deg);
}
100% {
-webkit-transform: translate(0, 0) rotate(-180deg);
}
}
@keyframes object_four {
25% {
transform: translate(0, 50px) rotate(-180deg);
-webkit-transform: translate(0, 50px) rotate(-180deg);
}
100% {
transform: translate(0, 0) rotate(-180deg);
-webkit-transform: translate(0, 0) rotate(-180deg);
}
}
.el-input__inner {
border: none;
border-radius: 0px;
padding: 0px;
color: #ddd
}
.el-input__inner {
color: #2F2F2F;
}
.page_header {
width:100%;
text-align: center;
}
.modifybtn {
margin: 20px auto;
width:300px;
height:40px;
text-align: center;
background:#2b85e4;
border-radius:20px;
font-size:16px;
font-family:HiraginoSansGB-W3;
font-weight:normal;
color: #fff;
}
</style>
</head>
<body style="overflow: auto;">
<div id="loading">
<div id="loading-center">
<div id="loading-center-absolute">
<div class="object" id="object_one"></div>
<div class="object" id="object_two"></div>
<div class="object" id="object_three"></div>
<div class="object" id="object_four"></div>
</div>
</div>
</div>
<div id="app">
<el-container>
<div style="margin-top:10px;text-align: center;width: 100%;line-height: 40px;">
<div style="width:100%;border-bottom:solid 1px #eee;padding-bottom: 5px;">
<span style="width:300px;color: #000000;font-size: 18px;font-weight: 700;text-align: center;"> 薪必果签约 </span>
</div>
<div style="margin-top:15px;width:100%;text-align: center;">
<div style="width: 300px;text-align: center;margin: 0 auto">
<span id="companyTitle" style="padding-left:5px;color:#222222;font-size: 15px;float:left;">{{apiInfo.companyName}}</span>
</div>
<div style="clear:both;"></div>
<el-form :model="params" label-position="left" status-icon :rules="rules" ref="userform" style="width: 300px;text-align: center;margin: 0 auto;">
<el-form-item label="" prop="idName" >
<el-row gutter="1" style="border-bottom:solid 1px #eee;">
<el-col :span="2"><img src="/imgs/h5/icon_cell_ name.png" style="margin-top:5px"/></el-col>
<el-col v-if="isIdNameEdit" :span="22" style="text-align:left">
<el-input v-model="params.idName" placeHolder="请输入真实姓名" autocomplete="off" style="padding-left:5px;"></el-input>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="" prop="idNo">
<el-row gutter="1" style="border-bottom:solid 1px #eee">
<el-col :span="2"><img src="/imgs/h5/icon_cell_IDnumber.png" style="margin-top:5px"/></el-col>
<el-col :span="22" style="text-align:left">
<el-input v-model="params.idNo" placeHolder="请输入您的身份证号" autocomplete="off" style="padding-left:5px;"></el-input>
</el-col>
</el-row>
</el-form-item>
<el-form-item v-if="apiInfo.form_field.mobile == 'mobile'" label="" prop="mobile">
<el-row gutter="1" style="border-bottom:solid 1px #eee">
<el-col :span="2"><img src="/imgs/h5/icon_cell_phone.png" style="margin-top:5px"/></el-col>
<el-col :span="22" style="text-align:left">
<el-input v-model="params.mobile" placeHolder="请输入您的手机号" autocomplete="off" style="padding-left:5px;"></el-input>
</el-col>
</el-row>
</el-form-item>
<el-form-item v-if="apiInfo.form_field.bankNo == 'bankNo'" label="" prop="bankNo">
<el-row gutter="1" style="border-bottom:solid 1px #eee">
<el-col :span="2"><img src="/imgs/h5/icon_cell_code.png" style="margin-top:5px"/></el-col>
<el-col :span="22" style="text-align:left">
<el-input v-model="params.bankNo" placeHolder="请输入您的银行卡号" autocomplete="off" style="padding-left:5px;"></el-input>
</el-col>
</el-row>
</el-form-item>
<div style="float:left;">
<el-checkbox style="float:left" v-model="isaggree" >我已知悉并同意</el-checkbox>
<a @click.stop="showaggreement" href="javascript:;"
style="float:left;text-decoration:none;color:blue;font-size: 13px;
padding-top: 1px;" target="_blank">《薪必果分包协议》</a>
</div>
<el-button :disabled="!isaggree" :loading="btnloading" class="modifybtn" @click="subform" type="primary">提交信息</el-button>
</el-form>
</div>
</div>
</el-container>
</div>
<script src="/js/vue/jquery.min.js"></script>
<script src="/js/vue/base64.js"></script>
<script src="/js/vue/axios.min.js"></script>
<script src="/js/bpowxsign.js"></script>
</html>
var app = new Vue({
el: "#app",
data: function () {
let checkField = (rule, value, callback) => {
console.log(this.apiInfo.form_field);
if (rule.field == "idName") {
if (!value) {
return callback(new Error('请输入真实姓名'));
} else {
callback();
}
}
if (rule.field == "idNo") {
if (!value) {
return callback(new Error('请输入身份证号'));
} else {
callback();
}
}
if (this.apiInfo.form_field.mobile && rule.field == "mobile") {
if (!value) {
return callback(new Error('请输入手机号'));
} else {
callback();
}
}
if (this.apiInfo.form_field.bankNo && rule.field == "bankNo") {
if (!value) {
return callback(new Error('请输入银行卡号'));
} else {
callback();
}
}
callback();
};
return {
isaggree: false,
companyName: "",
btnloading: true,
wxAppId:"wxf616c0a459d66081",
isIdNameEdit: true,
isIdNoEdit: true,
code: "",
state: "",
openId: "",
companyId:"",
wxuser: {},
apiInfo: {form_field:{}},
params: {},
rules: {
idNo: [
{ validator: checkField, trigger: 'blur' }
],
idName: [
{ validator: checkField, trigger: 'blur' }
],
mobile: [
{ validator: checkField, trigger: 'blur' }
],
bankNo: [
{ validator: checkField, trigger: 'blur' }
],
},
}
},
created: function () {
},
mounted: function () {
let self = this;
let url = window.location.href;
// 微信返回参数
this.code = this.getUrlParam("code") || "";
this.state = this.getUrlParam("state") || "";
if(this.code) {
let rparams = localStorage.getItem("requestParams");
if (!rparams) {
alert("请求失败,请刷新重试");
return;
}
console.log(rparams, "-----------------------2");
this.params = JSON.parse(rparams);
$("#loading").fadeOut();
// api信息
this.getApiInfo();
// 获取openId
this.getOpenId();
} else {
// 第一次请求参数
localStorage.removeItem("requestParams");
this.params.appId = this.getUrlParam("appId");
this.params.ecid = this.getUrlParam("ecid");
this.params.sign = this.getUrlParam("sign");
this.params.userId = this.getUrlParam("userId");
this.params.nonceStr = this.getUrlParam("nonceStr");
this.params.idName = decodeURIComponent(this.getUrlParam("idName"));
this.params.idNo = this.getUrlParam("idNo");
this.params.mobile = this.getUrlParam("mobile");
this.params.bankNo = this.getUrlParam("bankNo");
localStorage.setItem("requestParams", JSON.stringify(this.params));
this.getApiInfo();
console.log(this.params, "-----------------------");
self.$root.postReq("/web/cwxsignapiCtl/checkSign", {
params: this.params,
}).then(rd => {
if (rd.status == 0) {
url = url.split("?")[0];
url = "https://bpohhr.gongsibao.com/bpoproxy";
// http://127.0.0.1:3333/wxsign?comid=10172&userCode=100018&nonceStr=nonceStrnonceStr&sign=E47D90EA49DCB7E9114A27767DCBF3C2
let redirect_uri = encodeURIComponent(url);
let wxAppId = this.wxAppId;
let wxurl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${wxAppId}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_base&state=1#wechat_redirect`;
window.location.href = wxurl;
console.log(wxurl);
} else {
alert(rd.msg || "签名失败,请关闭该页重试");
}
});
}
},
methods: {
postReq(path, data) {
return axios.post(path, data).then(function (r) {
return r.data ? r.data : null;
})
},
getApiInfo() {
let self = this;
this.$root.postReq("/web/cwxsignapiCtl/getApiInfo", {
params: this.params
}).then(rd => {
if (rd.status == 0) {
self.apiInfo = rd.data || {};
} else {
self.$message.error(rd.msg || "api配置错误");
}
});
},
getOpenId() {
let self = this;
if(self.params.openId) {
return;
}
//调用接口,根据用户名判断是否协议
this.$root.postReq("/web/wxCtl/wxuseropenid", {
code: self.code
}).then(rd => {
if (rd.status == 0) {
self.params.openId = rd.data;
self.btnloading = false;
} else {
self.$message.error(`获取openId失败,请退出重试`);
}
});
},
getUrlParam(name) {
let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
let r = window.location.search.substr(1).match(reg);
return r ? unescape(r[2]) : "";
},
showaggreement() {
// window.location.href = "https://bpohhr.gongsibao.com/bpowxsignaggreement.js";
if (this.apiInfo.app_type == 1) {
let p = {
companyName: this.apiInfo.companyName || "",
addr: this.apiInfo.addr || "",
phone: this.apiInfo.phone || "",
idName: this.params.idName || "",
mobile: this.params.mobile || "",
};
localStorage.setItem("aggreement_params", JSON.stringify(p));
window.location.href = "http://127.0.0.1:3333/bpowxsignaggreement2";
} else {
let p = {
nameA: this.apiInfo.companyName,
name: this.params.idName || ""
};
localStorage.setItem("aggreement_params", JSON.stringify(p));
window.location.href = "http://127.0.0.1:3333/bpowxsignaggreement3";
}
},
subform() {
let msg;
self.btnloading = true;
if (this.apiInfo.app_type != 0) {
msg = "提交信息后,会进行静默签约《薪必果分包协议》,是否同意?";
} else {
msg = "确定提交信息?";
}
if(confirm(msg)){
this.save();
} else {
self.btnloading = false;
}
},
save() {
let self = this;
if(!self.params.openId) {
self.$message.error(`获取openId失败,请刷新重试`);
return;
}
self.btnloading = true;
self.$refs['userform'].validate((valid) => {
console.log(valid);
if (valid) {
//处理登录逻辑
self.$root.postReq("/web/cwxsignapiCtl/saveSign", {params: self.params}).then(function(d){
console.log(d);
if(d.status==0) {
self.$message.success("保存成功");
if (d.data.redirectUrl) {
window.location.href = d.data.redirectUrl;
}
} else {
self.$message.warning(d.msg || "登录失败, 请稍候重试");
}
self.btnloading = false;
});
} else {
self.btnloading = false;
return false;
}
});
},
patnerValid() {
// var self = this;
// //调用接口,根据用户名判断是否协议
// this.$root.postReq("/web/userCtl/patnerValid", {
// userName: self.loginForm.userName
// }).then(rd => {
// self.showAggree = false;
// if (rd.status == 0) {
// if (rd.data == "1") {
// self.showAggree = true;
// }
// }
// });
},
},
});
\ No newline at end of file
var app = new Vue({
el: "#app",
data: function () {
return {
companyId: 0,
nameA: "",
name: "",
}
},
created: function () {
},
mounted: function () {
let self = this;
let params = localStorage.getItem("aggreement_params") || "{}";
console.log(params, "-------------------------");
params = JSON.parse(params);
this.nameA = params.nameA;
this.name = params.name;
},
methods: {
postReq(path, data) {
return axios.post(path, data).then(function (r) {
return r.data ? r.data : null;
})
},
btnclick: function (pfm, code) {
},
goback() {
window.history.go(-1);
},
},
});
\ No newline at end of file
var app = new Vue({
el: "#app",
data: function () {
return {
companyId: 0,
nameA: "",
name: "",
params: "",
}
},
created: function () {
},
mounted: function () {
let self = this;
let params = localStorage.getItem("aggreement_params") || "{}";
console.log(params, "-------------------------");
this.params = JSON.parse(params);
},
methods: {
postReq(path, data) {
return axios.post(path, data).then(function (r) {
return r.data ? r.data : null;
})
},
btnclick: function (pfm, code) {
},
goback() {
window.history.go(-1);
},
},
});
\ No newline at end of file
var app = new Vue({
el: "#app",
data: function () {
return {
companyId: 0,
nameA: "",
name: "",
}
},
created: function () {
},
mounted: function () {
let self = this;
let params = localStorage.getItem("aggreement_params") || "{}";
console.log(params, "-------------------------");
params = JSON.parse(params);
this.nameA = params.nameA;
this.name = params.name;
},
methods: {
postReq(path, data) {
return axios.post(path, data).then(function (r) {
return r.data ? r.data : null;
})
},
btnclick: function (pfm, code) {
},
goback() {
window.history.go(-1);
},
},
});
\ 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