Commit b80d5290 by 王昆

gsb

parent f3a66706
......@@ -1422,7 +1422,6 @@ class EcontractApi {
}
}
//二要素验证(姓名、银行卡)
async autoSignBankTwo(pobj) {
// 处理参数
......
const system=require("../system");
const settings=require("../../config/settings");
class CtlBase{
constructor(sname){
this.serviceName=sname;
this.service=system.getObject("service."+sname);
this.cacheManager=system.getObject("db.cacheManager");
const system = require("../system");
const settings = require("../../config/settings");
class CtlBase {
constructor(sname) {
this.serviceName = sname;
this.service = system.getObject("service." + sname);
this.cacheManager = system.getObject("db.cacheManager");
this.md5 = require("MD5");
}
notify(req,msg){
if(req.session){
req.session.bizmsg=msg;
notify(req, msg) {
if (req.session) {
req.session.bizmsg = msg;
}
}
async findOne(queryobj,qobj){
var rd=await this.service.findOne(qobj);
return system.getResult2(rd,null);
async findOne(queryobj, qobj) {
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){
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;
async findAndCountAll(queryobj, obj, req) {
obj.codepath = req.codepath;
if (req.session.user) {
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);
return system.getResult2(apps,null);
var apps = await this.service.findAndCountAll(obj);
return system.getResult2(apps, null);
}
async refQuery(queryobj,qobj){
var rd=await this.service.refQuery(qobj);
return system.getResult2(rd,null);
async refQuery(queryobj, qobj) {
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);
return system.getResult2(rd, null);
}
async delete(queryobj,qobj){
var rd=await this.service.delete(qobj);
return system.getResult2(rd,null);
async delete(queryobj, qobj) {
var rd = await this.service.delete(qobj);
return system.getResult2(rd, null);
}
async create(queryobj,qobj,req){
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;
async create(queryobj, qobj, req) {
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);
return system.getResult2(rd,null);
var rd = await this.service.create(qobj);
return system.getResult2(rd, null);
}
async update(queryobj,qobj,req){
if(req && req.session && req.session.user){
qobj.onlyCode=req.session.user.unionId;
async update(queryobj, qobj, req) {
if (req && req.session && req.session.user) {
qobj.onlyCode = req.session.user.unionId;
}
if(req.codepath){
qobj.codepath=req.codepath;
if (req.codepath) {
qobj.codepath = req.codepath;
}
var rd=await this.service.update(qobj);
return system.getResult2(rd,null);
var rd = await this.service.update(qobj);
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);
return system.getResult2(rd,null);
async findById(oid) {
var rd = await this.service.findById(oid);
return system.getResult2(rd, null);
}
trim(o) {
if(!o) {
if (!o) {
return "";
}
return o.toString().trim();
......@@ -94,24 +106,44 @@ class CtlBase{
}
encryptPasswd(passwd) {
if(!passwd) {
if (!passwd) {
throw new Error("请输入密码");
}
var md5 = this.md5(passwd + "_" + settings.salt);
return md5.toString().toLowerCase();
}
endWith(source, str){
if(!str || !source || source.length == 0 || str.length > source.length) {
endWith(source, str) {
if (!str || !source || source.length == 0 || str.length > source.length) {
return false;
}
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){
// var result= await this[methodname](params);
// return system.getResult2(result,null);
// }
}
module.exports=CtlBase;
module.exports = CtlBase;
var system = require("../../system")
var settings = require("../../../config/settings");
const CtlBase = require("../ctl.base");
const uuidv4 = require('uuid/v4');
const moment = require('moment');
const md5 = require("MD5");
class CWxSignApiCtl extends CtlBase {
constructor() {
super(CtlBase.getServiceName(CWxSignApiCtl));
this.idcardClient = system.getObject("util.idcardClient");
this.redisClient = system.getObject("util.redisClient");
this.cwxsigninfoSve = system.getObject("service.cwxsigninfoSve");
this.utilesignbaoSve = system.getObject("service.utilesignbaoSve");
this.ecompanySve = system.getObject("service.ecompanySve");
this.etemplateSve = system.getObject("service.etemplateSve");
this.econtractSve = system.getObject("service.econtractSve");
this.dkcompanySve = system.getObject("service.dkcompanySve");
this.dktemplateSve = system.getObject("service.dktemplateSve");
this.dkcontractSve = system.getObject("service.dkcontractSve");
this.bankthreelogSve = system.getObject("service.bankthreelogSve");
this.EXCEPT_KEYS = ['sign', 'idName'];
}
async checkSign(q, p, req) {
let params = p.params || {};
let appId = this.trim(params.appId);
let ecid = this.trim(params.ecid);
let nonceStr = this.trim(params.nonceStr);
if (!nonceStr) {
return system.getErrResult2(`签名失败,随机码不存在`);
}
let api = await this.service.findOne({app_id: appId, ecid: ecid});
if (!api) {
return system.getErrResult2(`未找到应用,请联系薪必果运维人员进行配置`);
}
let keys = Object.keys(params).sort();
let signArr = [];
for (let k = 0; k < keys.length; k++) {
let tKey = keys[k];
if (this.EXCEPT_KEYS.indexOf(tKey) == -1 && params[tKey]) {
signArr.push(tKey + "=" + params[tKey]);
}
}
let signStr = signArr.join("&") + "&key=" + api.app_secret;
let sign = md5(signStr).toUpperCase();
console.log(params.sign, signStr, sign);
if (params.sign != sign) {
return system.getErrResult2("签名验证失败");
}
return system.getResult2(1);
}
async getApiInfo(q, p, req) {
let params = p.params || {};
let appId = this.trim(params.appId);
let ecid = this.trim(params.ecid);
let api = await this.service.findOne({app_id: appId, ecid: ecid});
if (!api) {
return system.getErrResult2(`未找到应用,请联系薪必果运维人员进行配置`);
}
let company = await this.getCompanyInfo(api);
let fieldMap = {};
for (let f of api.form_field.split(",")) {
fieldMap[f] = f;
}
let rs = {
app_type: api.app_type,
auth_type: api.auth_type,
form_field: fieldMap,
};
for (let f in company) {
rs[f] = company[f];
}
return system.getResult2(rs);
}
async getCompanyInfo(api) {
let result = {};
if (api.app_type == 1) {
let all = await this.dktemplateSve.allByEcid(api.ecid);
result.companyName = all.company.name;
result.phone = all.company.phone;
result.addr = all.company.addr;
} else {
let all = await this.etemplateSve.allByEcid(api.ecid);
result.companyName = all.company.name;
result.nameA = all.main.name;
}
return result;
}
async createApi(q, p, req) {
try {
// app_id
let app_id = this.trim(p.app_id);
if (!app_id) {
app_id = await this.redisClient.genrateId("c_wxsign_api");
}
let app_secret = this.trim(p.app_secret);
if (!app_secret) {
app_secret = this.getUidInfo(32).toLowerCase();
}
let rs = await this.service.create({
app_id: app_id,
app_secret: app_secret
});
return system.getResult2(rs);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
// 通过用户id保存用户,目前只有北京酷酷在用
async saveSign(q, p, req) {
try {
let params = p.params || {};
params.id_no = this.trim(params.id_no).toUpperCase();
params.appId = this.trim(params.appId);
params.ecid = this.trim(params.ecid);
params.idName = this.trim(params.idName);
params.idNo = this.trim(params.idNo);
params.mobile = this.trim(params.mobile);
params.bankNo = this.trim(params.bankNo);
params.userId = this.trim(params.userId);
let api = await this.service.findOne({app_id: params.appId, ecid: params.ecid});
if (!api) {
return system.getErrResult2(`未找到应用,请联系薪必果运维人员进行配置`);
}
// 验证参数
let checkParamsRes = await this.checkParams(params, api);
if (checkParamsRes.status !== 0) {
return checkParamsRes;
}
// 要素认证
let authRes = await this.doAuth(params, api);
if (authRes.status != 0) {
return authRes;
}
// 插入数据库
let signInfo = {
api_id: api.id,
userId: params.userId,
openId: params.openId,
id_name: params.idName,
id_no: params.idNo,
mobile: params.mobile,
bank_no: params.bankNo,
contract_id: 0,
};
signInfo = await this.cwxsigninfoSve.create(signInfo);
// 异步签约
await this.doSign(api, signInfo, params);
// openId回调
let rs = {};
rs.redirectUrl = await this.getApiRedirectUrl(api, signInfo);
return system.getResult2(rs);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
async getApiRedirectUrl(api, signInfo) {
if (!api.redirect_url) {
return "";
}
let p = {
appId: api.app_id,
userId: signInfo.userId,
nonceStr: await this.getUidInfo(16),
idName: encodeURIComponent(encodeURIComponent(signInfo.id_name)),
openId: signInfo.openId,
mobile: signInfo.mobile,
bankNo: signInfo.bank_no
};
let keys = Object.keys(p).sort();
let signArr = [];
for (let k = 0; k < keys.length; k++) {
let tKey = keys[k];
if (this.EXCEPT_KEYS.indexOf(tKey) == -1 && p[tKey]) {
signArr.push(tKey + "=" + p[tKey]);
}
}
let urlParams = signArr.join("&");
let sign = md5(urlParams + "&key=" + api.app_secret).toUpperCase();
return `${api.redirect_url}?${urlParams}&sign=${sign}`;
}
async checkParams(params, api) {
if (!params.openId) {
return system.getErrResult2("openid获取失败");
}
if (!params.idName) {
return system.getErrResult2("请填写姓名");
}
if (!params.idNo) {
return system.getErrResult2("请填写身份证号码");
}
if (!await this.idcardClient.checkIDCard(params.idNo)) {
return system.getErrResult2("您的身份证号格式错误");
}
let card = await this.idcardClient.cardInfo(params.idNo);
let age = card.age || 0;
if (!age) {
return system.getErrResult2("您的身份证号格式错误");
}
if (card.sex == 'male') {
if (age < 18 || age > 60) {
return system.getErrResult2("男性要求18-60岁");
}
} else {
if (age < 18 || age > 55) {
return system.getErrResult2("女性要求18-55岁");
}
}
if (!params.userId) {
return system.getErrResult2("用户唯一标识出错");
}
// auth_type 认证类型 0无认证 1姓名二要素 2银行卡三要素 3银行卡四要素
if (api.auth_type == 2) {
if (!params.bankNo) {
return system.getErrResult2("请填写银行卡号");
}
} else if (api.auth_type == 3) {
if (!params.bankNo) {
return system.getErrResult2("请填写银行卡号");
}
if (!params.mobile) {
return system.getErrResult2("请填写银行预留手机号");
}
} else {
console.log(api, `------checkParams ${api.auth_type} else---------`)
}
return system.getResult2(1);
}
async doAuth(params, api) {
// auth_type 认证类型 0无认证 1姓名二要素 2银行卡三要素 3银行卡四要素
let res;
if (api.auth_type == 1) {
// 姓名二要素
res = await this.bankthreelogSve.personTwo({
appId: "wxsign_" + api.app_id,
userName: params.idName,
userIdNo: params.idNo
});
// res = system.getResult2({pass: true}); // TODO 注释掉
} else if (api.auth_type == 2) {
// 银行卡三要素
res = await this.bankthreelogSve.bankThree({
appId: "wxsign_" + api.app_id,
userName: params.idName,
userIdNo: params.idNo,
userBankNo: params.bankNo,
});
} else if (api.auth_type == 3) {
// 银行卡四要素
let res = await this.bankthreelogSve.bankfour({
appId: "wxsign_" + api.app_id,
userName: params.idName,
userIdNo: params.idNo,
userBankNo: params.bankNo,
userMobile: params.mobile,
});
} else {
// 无需验证
res = system.getResult2({pass: true});
console.log(api, `------doAuth ${api.auth_type} else---------`)
}
return res;
}
async doSign(api, signInfo, params) {
let res;
if (api.app_type == 1) {
// 普票签
// let res = await this.doSign2(api, signInfo, params);
res = await this.dkcontractSve.autoSignNew({
appId: "wxsign_" + api.app_id,
ecid: api.ecid,
userId: signInfo.id,
idName: params.idName,
idNo: params.idNo,
bankno: params.bankNo,
mobile: params.mobile,
});
if (res.code == 0) {
signInfo.contract_id = res.data.contractId;
signInfo.save();
}
} else if (api.app_type == 2) {
// 专票签
await this.doSign3(api, signInfo, params);
} else {
}
// 返回结果
if (api.wx_notify_url) {
// TODO 回调给接入方,时间不够,暂未实现
}
}
// 通过模板id保存用户
async saveEcidUser(q, p, req) {
var etemplate_id = Number(p.etemplate_id);
try {
var template = await this.etemplateSve.findById(etemplate_id);
var wxuser = {
ecompany_id: Number(template.ecompany_id || 0),
etemplate_id: Number(etemplate_id || 0),
openId: this.trim(p.openId),
id_no: this.trim(p.id_no || ""),
id_name: this.trim(p.id_name || ""),
userCode: this.trim(p.userCode || ""),
isSend: false,
};
var rs = await this.service.saveEcidUser(wxuser);
if (rs == -101) {
return system.getErrResult2("公司还未配置签约参数");
}
if (rs == -201) {
return system.getErrResult2("提交失败,您填写的身份证号码已经录入系统");
}
return system.getResult2(rs);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
async companyName(q, p, req) {
var ecompany_id = Number(p.companyId);
try {
var ecompany = await this.ecompanySve.findById(ecompany_id);
if (!ecompany) {
return system.getErrResult2("公司名称未设置");
}
return system.getResult2(ecompany.name);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
async companyByEcid(q, p, req) {
var ecid = Number(p.ecid);
try {
var etemplate = await this.etemplateSve.findById(ecid);
var ecompany = await this.ecompanySve.findById(etemplate.ecompany_id);
if (!ecompany || !etemplate) {
return system.getErrResult2("公司未设置");
}
ecompany.etemplate = etemplate;
return system.getResult2(ecompany);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
// 跟拒ecompany_id验证签名
async validateSign(q, p, req) {
try {
var sign = p.sign || "";
var companyId = p.companyId || 0;
var nonceStr = p.nonceStr || "";
var userCode = p.userCode || "";
var busi = await this.ecompanybusiSve.findOne({ecompany_id: companyId});
if (!busi) {
return system.getErrResult2("企业未做业务开通");
}
var signArr = [];
signArr.push("appId=" + busi.appId);
signArr.push("nonceStr=" + nonceStr);
signArr.push("userCode=" + userCode);
signArr.push("key=" + busi.key);
var calcSign = md5(signArr.join("&")).toUpperCase();
if (sign != calcSign) {
return system.getErrResult2("签名失败,请关闭页面重试。");
}
return system.getResult2(1);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
// 跟拒etemplate_id验证签名
async validateECSign(q, p, req) {
try {
var sign = p.sign || "";
var etemplateId = p.ecid || 0;
var nonceStr = p.nonceStr || "";
var userCode = p.userCode || "";
var busi = await this.ecompanybusiSve.findOne({etemplate_id: etemplateId});
if (!busi) {
return system.getErrResult2("企业未做业务开通");
}
var signArr = [];
signArr.push("appId=" + busi.appId);
signArr.push("nonceStr=" + nonceStr);
signArr.push("userCode=" + userCode);
signArr.push("key=" + busi.key);
var calcSign = md5(signArr.join("&")).toUpperCase();
if (sign != calcSign) {
return system.getErrResult2("签名失败,请关闭页面重试。");
}
return system.getResult2(1);
} catch (e) {
console.log(e);
return system.getErrResult2("您的网络不稳, 请稍后重试");
}
}
}
module.exports = CWxSignApiCtl;
......@@ -50,7 +50,7 @@ class WxCtl extends CtlBase {
console.log(rtn);
var result = rtn.data;
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.getErrResult2("openId获取失败,请重新打开页面");
......
......@@ -4,5 +4,25 @@ class DKcontractDao extends Dao{
constructor(){
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;
......@@ -4,11 +4,11 @@ const uiconfig=system.getUiConfig2(settings.wxconfig.appId);
module.exports = (db, DataTypes) => {
return db.define("cwxsignapi", {
app_id: {
type: DataTypes.BIGINT,
type: DataTypes.STRING,
allowNull: true,
},
app_secret: {
type: DataTypes.BIGINT,
type: DataTypes.STRING,
allowNull: true,
},
app_type: {
......@@ -29,14 +29,10 @@ module.exports = (db, DataTypes) => {
type: DataTypes.BIGINT,
allowNull: true,
},
wx_notify_url:{
notify_url:{
type:DataTypes.STRING,
allowNull: true
},
sign_notify_url:{
type:DataTypes.STRING,
allowNull: true,
},
redirect_url:{
type:DataTypes.STRING,
allowNull: true,
......
......@@ -11,6 +11,10 @@ module.exports = (db, DataTypes) => {
type: DataTypes.STRING,
allowNull: true,
},
userId: {
type: DataTypes.STRING,
allowNull: true,
},
id_name: {
type: DataTypes.STRING,
allowNull: true
......
const system=require("../../system");
const ServiceBase=require("../sve.base");
class BankthreelogService extends ServiceBase{
constructor(){
const system = require("../../system");
const ServiceBase = require("../sve.base");
class BankthreelogService extends ServiceBase {
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 {
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) {
return {
......
......@@ -9,6 +9,13 @@ class DKtemplateService extends ServiceBase{
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) {
var currentPage = Number(params.currentPage || 0);
var pageSize = Number(params.pageSize || 10);
......
......@@ -9,6 +9,14 @@ class EtemplateService extends ServiceBase{
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) {
var currentPage = Number(params.currentPage || 0);
var pageSize = Number(params.pageSize || 10);
......
......@@ -43,7 +43,7 @@ class UtilESignBaoService {
"idType": "01",
"idNum": params.idno,//身份证号,
"mchInfo": "汉唐信通(北京)科技有限公司",
"riskInfo": params.idno,
"riskInfo": params.riskInfo || params.idno,
};
var encryptStr = JSON.stringify(encrypt);
var str = crypto.privateEncrypt(this.lbwConfig.pik, Buffer.from(encryptStr)).toString('base64');
......
const System=require("../system");
const System = require("../system");
const redis = require("redis");
const settings=require("../../config/settings");
const bluebird=require("bluebird");
const settings = require("../../config/settings");
const bluebird = require("bluebird");
bluebird.promisifyAll(redis);
// const logCtl=System.getObject("web.oplogCtl");
class RedisClient{
constructor(){
const redisConfig=settings.redis();
class RedisClient {
constructor() {
const redisConfig = settings.redis();
this.client = redis.createClient({
host:redisConfig.host,
port:redisConfig.port,
password:redisConfig.password,
db:redisConfig.db,
host: redisConfig.host,
port: redisConfig.port,
password: redisConfig.password,
db: redisConfig.db,
retry_strategy: function (options) {
// if (options.error && options.error.code === 'ECONNREFUSED') {
// // End reconnecting on a specific error and flush all commands with
......@@ -45,7 +46,7 @@ class RedisClient{
// clientIp:""
// });
});
this.subclient=this.client.duplicate();
this.subclient = this.client.duplicate();
this.subclient.on("error", function (err) {
console.log("Error " + err);
// //日志记录
......@@ -56,159 +57,187 @@ class RedisClient{
// clientIp:""
// });
});
var self=this;
this.subclient.on("message",async function (channel, message) {
var self = this;
this.subclient.on("message", async function (channel, message) {
console.log(channel, '------------- redis message ------------------- ');
if(self.taskmanager){
if(channel=="task"){
if(message=="newtask"){
(async (that)=>{
var msg2=await that.rpop("tasklist");
if(msg2){
console.log("taskName+++++"+msg2);
var msgs2=msg2.split("_");
var action=msgs2[0];
var taskName=msgs2[1];
var exp=msgs2[2];
await that.taskmanager.addTask(taskName,exp);
if (self.taskmanager) {
if (channel == "task") {
if (message == "newtask") {
(async (that) => {
var msg2 = await that.rpop("tasklist");
if (msg2) {
console.log("taskName+++++" + msg2);
var msgs2 = msg2.split("_");
var action = msgs2[0];
var taskName = msgs2[1];
var exp = msgs2[2];
await that.taskmanager.addTask(taskName, exp);
}
})(self)
}else{
(async (msg,that)=>{
var msgs=msg.split("_");
var action=msgs[0];
if(action=="delete"){
var taskName=msgs[1];
} else {
(async (msg, that) => {
var msgs = msg.split("_");
var action = msgs[0];
if (action == "delete") {
var taskName = msgs[1];
await that.taskmanager.deleteTask(taskName);
}
})(message,self);
})(message, self);
}
}
}
if(self.chatserver){
if(channel!="task"){
if(channel=="brc"){//如果是广播频道,则发送广播到客户端
self.chatserver.server.emit("brc",JSON.parse(message));
}else if(self.chatserver.users[channel]){
if (self.chatserver) {
if (channel != "task") {
if (channel == "brc") {//如果是广播频道,则发送广播到客户端
self.chatserver.server.emit("brc", JSON.parse(message));
} else if (self.chatserver.users[channel]) {
//持久化
self.chatserver.users[channel].client.emit("chatmsg",JSON.parse(message));
self.chatserver.users[channel].client.emit("chatmsg", JSON.parse(message));
}
}
}
});
}
async subscribe(channel,chatserver){
if(!this.chatserver){
this.chatserver=chatserver;
async subscribe(channel, chatserver) {
if (!this.chatserver) {
this.chatserver = chatserver;
}
return this.subclient.subscribeAsync(channel);
}
async unsubscribe(channel){
async unsubscribe(channel) {
//this.chatserver=null;
return this.subclient.unsubscribeAsync(channel);
}
async subscribeTask(channel,taskmanager){
if(!this.taskmanager){
this.taskmanager=taskmanager;
async subscribeTask(channel, taskmanager) {
if (!this.taskmanager) {
this.taskmanager = taskmanager;
}
return this.subclient.subscribeAsync(channel);
}
async publish(channel,msg){
console.log(channel+":"+msg);
return this.client.publishAsync(channel,msg);
async publish(channel, msg) {
console.log(channel + ":" + msg);
return this.client.publishAsync(channel, msg);
}
async rpush(key,val){
return this.client.rpushAsync(key,val);
async rpush(key, val) {
return this.client.rpushAsync(key, val);
}
async llen(key){
async llen(key) {
return this.client.llenAsync(key);
}
async rpushWithEx(key,val,t){
var p = this.rpush(key,val);
this.client.expire(key,t);
async rpushWithEx(key, val, t) {
var p = this.rpush(key, val);
this.client.expire(key, t);
return p;
}
async rpop(key){
async rpop(key) {
return this.client.rpopAsync(key);
}
async lpop(key){
async lpop(key) {
return this.client.lpopAsync(key);
}
async lrem(key,val){
return this.client.lremAsync(key,1,val);
async lrem(key, val) {
return this.client.lremAsync(key, 1, val);
}
async ltrim(key,s,e){
return this.client.ltrimAsync(key,s,e);
async ltrim(key, s, e) {
return this.client.ltrimAsync(key, s, e);
}
async clearlist(key){
await this.client.ltrim(key,-1,-1);
await this.client.ltrim(key,1,-1);
async clearlist(key) {
await this.client.ltrim(key, -1, -1);
await this.client.ltrim(key, 1, -1);
return 0;
}
async flushall(){
async flushall() {
console.log("sss");
return this.client.flushallAsync();
}
async keys(p){
async keys(p) {
return this.client.keysAsync(p);
}
async set(key,val){
if(typeof val=="undefined" || typeof key=="undefined"){
async set(key, val) {
if (typeof val == "undefined" || typeof key == "undefined") {
console.log("......................cache val undefined");
console.log(key);
return null;
}
return this.client.setAsync(key,val);
return this.client.setAsync(key, val);
}
async setWithEx(key,val,t){
var p=this.client.setAsync(key,val);
this.client.expire(key,t);
async setWithEx(key, val, t) {
var p = this.client.setAsync(key, val);
this.client.expire(key, t);
return p;
}
async get(key){
async get(key) {
return this.client.getAsync(key);
}
async delete(key){
async delete(key) {
return this.client.delAsync(key);
}
async hmset(key,jsonObj){
return this.client.hmsetAsync(key,jsonObj);
async hmset(key, jsonObj) {
return this.client.hmsetAsync(key, jsonObj);
}
async hmsetWithEx(key,jsonObj,t){
var p=this.client.hmsetAsync(key,jsonObj);
this.client.expire(key,t);
async hmsetWithEx(key, jsonObj, t) {
var p = this.client.hmsetAsync(key, jsonObj);
this.client.expire(key, t);
return p;
}
async hgetall(key){
async hgetall(key) {
return this.client.hgetallAsync(key);
}
async hincrby (key,f,n){
return this.client.hincrbyAsync(key,f,n);
async hincrby(key, f, n) {
return this.client.hincrbyAsync(key, f, n);
}
async sadd(key,vals){
await this.client.saddAsync(key,...vals);
async sadd(key, vals) {
await this.client.saddAsync(key, ...vals);
return this.scard(key);
}
async scard(key){
async scard(key) {
return this.client.scardAsync(key);
}
async srem(key,val){
return this.client.sremAsync(key,val);
async srem(key, val) {
return this.client.sremAsync(key, val);
}
async sismember(key,val){
return this.client.sismemberAsync(key,val);
async sismember(key, val) {
return this.client.sismemberAsync(key, val);
}
async smembers(key){
async smembers(key) {
return this.client.smembersAsync(key);
}
async exists(key){
async exists(key) {
return this.client.existsAsync(key);
}
async incr(key){
async incr(key) {
return this.client.incrAsync(key);
}
......@@ -220,8 +249,47 @@ class RedisClient{
this.rpush("bpo:contract:download", JSON.stringify(v));
}
async genrateId(tableName) {
// "时间戳 - tableName的hashCode + (1000 - 9999) + 随机8位数"
let time = parseInt(new Date().getTime() / 1000);
let tabcode = this.hashCode(tableName);
let id = await this.client.incrAsync(tableName) % 9999;
if(id < 10) {
id = "000" + id;
} else if(id < 100) {
id = "00" + id;
} else if(id < 1000) {
id = "0" + id;
}
return "1" + Math.abs(time + tabcode) + id + this.getRandomNumber(2);
}
hashCode(str) {
let hash = 0;
if (str.length == 0) return hash;
for (var i = 0; i < str.length; i++) {
let char = str.charCodeAt(i);
hash = ((hash << 5) - hash) + char;
hash = hash & hash;
}
return hash;
}
getRandomNumber(len) {
len = len || 32;
let chars = '0123456789';
let maxPos = chars.length;
let pwd = '';
for (var i = 0; i < len; i++) {
pwd += chars.charAt(Math.floor(Math.random() * maxPos));
}
return pwd;
}
}
module.exports=RedisClient;
module.exports = RedisClient;
// var client=new RedisClient();
// (async ()=>{
// await client.rpush("tasklist","xxx");
......
......@@ -147,6 +147,7 @@ module.exports = function (app) {
req.url.indexOf("ecompanywxuserCtl/companyByEcid") > 0 ||
/dksignCtl\/./.test(req.url) ||
/cwxsignapiCtl\/./.test(req.url) ||
req.url.indexOf("econtractCtl/getPayNotify") > 0 ||
req.url.indexOf("ecompanyCtl/wxsignCompany") > 0 ||
......@@ -308,16 +309,24 @@ module.exports = function (app) {
app.get('/bpostat', function (req, res) {
res.render("bpostat", {});
});
app.get('/wxsign', function (req, res) {
res.render("wxsign", {});
});
app.get('/wxsignaggreement', function (req, res) {
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) {
res.render("wxsign3rd", {});
});
app.get('/bpowxsign', function (req, res) {
res.render("bpowxsign", {});
});
app.get('/errpage', function (req, res) {
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>
<!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>
* {
margin: 10px 0;
padding: 0;
text-indent:1em;
}
</style>
</head>
<body style="overflow: auto;">
<a href="javascript:;" onclick="window.history.back(-1);" style="text-decoration: none;color:black;padding-top: 20px;margin-left: 0px;">返回</a>
<div id="app" style="padding:20px;">
<div style="margin: 0 auto;width: 100%;display: flex;flex-direction: column;">
<h1 style="text-align: center;margin-bottom: 30px;">业务分包服务合作协议(个人)</h1>
<div>欢迎您(以下简称乙方)与
<u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{nameA}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</u>
签署本协议并为
<u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{name}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</u>
提供服务。
</div>
<div style="">
为维护您的自身权益,在您确认同意本协议之前,请认真阅读本协议,务必审慎阅读、充分理解各条款内容,特别是权利义务条款、法律适用和管辖条款。上述条款以粗体及下划线标识,应重点阅读。
</div>
<div style="">
【签约】当您确认同意本协议后,即表示您已充分阅读、理解并接受本协议的全部内容,并与甲方达成一致意见并成为其分包合作人员,此后您不得以未阅读/不理解本协议内容或类似言辞做任何形式的抗辩。
</div>
<div style="">
【合作关系】甲乙双方通过本协议建立业务分包合作关系,适用《合同法》、民法和其他民事法律。双方不构成任何劳动/劳务合同关系或其他类似劳动法律关系。
</div>
<h2>协议条款:</h2>
<div>
根据国家法律有关规定,双方按照平等自愿、诚实信用的原则,就乙方为甲方服务合作单位提供服务工作事宜订立本协议。
</div>
<h2>第一条 服务工作内容</h2>
<div>
1.1 因甲方与合作单位提供服务合作的需要,特选用乙方提供/完成相关服务,该等服务的内容主要为乙方根据甲方与合作单位相关合同的规定提供相关的框架服务。
1.2 乙方应按照合作单位相关制度要求规定的标准来完成服务分包任务。
</div>
<h2>第二条 协议效力</h2>
<div style="font-weight:700;">
2.1乙方承诺并保证乙方所提供的签约信息真实、准确,以免影响乙方和甲方之间的《业务分包服务合作协议》效力。本协议条款自乙方确认同意也即勾选确认本协议或实际为甲方合作单位提供服务(以孰早为准)之日起生效。
</div>
<div>
2.2 本协议有效期限一年。期限届满,双方应另行签署新的协议;若双方未签署新的协议,而以实际行动继续合作的,视为双方同意协议期限顺延直至按照本协议约定终止或解除时为止。
</div>
<div style="">
2.3 本协议在发生下列情形时自然终止:<br />
a、 经合作单位事先同意的情况下,乙方主动退出服务的;<br />
b、 甲方与合作单位终止或变更业务模式而不需要乙方继续履行本协议的;<br />
c、 甲方或合作单位认为乙方不适合继续提供服务的;<br />
d、 甲方和合作单位解除合作的;<br />
e、 其他原因导致本协议不再继续履行的。
</div>
<div style="">
<h2>第三条 甲方的权利和义务</h2>
3.1 乙方应根据甲方的安排和合作单位的要求完成相关的服务,服务期间乙方应遵守相关的服务规则,遵守相关的法律法规政策规定。<br />
3.2 甲方和合作单位将对乙方在分包服务成果进行验收。<br />
3.3 甲方应按约定及时向乙方支付费用。此处乙方应明确:乙方作为甲方的合作人员,在合作单位依约向甲方支付合作款项前提下,乙方的相关费用结算将由甲方及委托相关公司完成支付。
</div>
<div style="">
<h2>第四条 乙方的权利和义务</h2>
4.1 乙方应按时尽责地完成甲方以及合作单位要求的服务内容,并达到规定的质量标准,不得有侵犯他人合法权益。<br>
4.2
协议期内,乙方应在甲方以及合作单位许可范围内使用相关的商业信息;协议期内以及协议终止后,乙方均有义务对双方合作的有关协议及合作过程中知悉的甲方、合作单位相关信息予以保密,未经书面许可,乙方不得以任何方式向其它方泄漏、给予或转让该等保密信息。否则,因此导致甲方及合作单位的损失,由乙方负责赔偿。<br>
4.3 除本协议事项外,乙方不能以甲方及/或合作单位名义开展任何与完成约定的服务无关的业务或活动。<br>
4.4 乙方在确认同意本业务分包协议之前及在本协议约定服务期限内未与合作单位签署任何劳动合同和/或劳务合同等类似劳动法律关系合同。<br>
4.5
协议期内,乙方应在甲方以及合作单位许可范围内提供合规的服务;协议期内以及协议终止后,如乙方产生因此业务造成任何意外包括但不限于如人身意外伤害,伤亡,财产损失等,均应由合作单位为乙方投保的保险公司按照理赔标准赔付,如合作单位没有与乙方预先约定投保任何商业保险的情况,甲方合作单位不额外赔付并负责。当有其他本业务分包以外的特殊人身或财产意外发生时全部由乙方自行负责。
</div>
<div>
<h2>第五条 服务费的支付</h2>
5.1
甲方将根据与合作单位签订的相关服务合同要求,按时向乙方支付服务费/报酬,具体由甲方根据合作单位及甲方相关的业务结算规则确定。该等业务结算规则根据经营需要会有浮动调整,乙方清楚并了解该等浮动调整为正常情况。甲方以人民币形式向乙方支付费用,由乙方委托甲方(及合作机构)按照当地税务政策代为征收(生产经营所得)个人所得税。<br>
5.2 乙方应向甲方提供乙方实名下的银行账户、微信。<br>
5.3 甲方服务费发放以乙方提供的收款帐户为准,因乙方提供的收款帐户不实造成的一切损失由乙方自行承担。如乙方帐号变更或发生不可用等情况时,应及时进行变更操作,否则,由此造成的一切损失由乙方自行负责。
</div>
<div>
<h2>第六条 违约责任</h2>
6.1 双方应按本协议约定履行,如有违反,守约方有权要求对方及时改正;造成对方损失的,守约方有权要求违约方赔偿。<br>
6.2
因不可抗力造成损失的,彼此不负赔偿责任,但发生不可抗力一方应及时将有关情况通知另一方,并尽最大努力进行补救。本协议所称不可抗力是指不能预见、不能克服并不能避免且对一方当事人造成重大影响的客观事件,包括但不限于自然灾害如洪水、地震、火灾和风暴等以及社会事件如战争、动乱、政府行为、黑客事件、大范围电信事故等。
</div>
<div>
<h2>第七条 协议的终止</h2>
7.1 乙方与甲方在协议履行期间有权主动解除本合作协议,但需提前30日告知甲方或甲方的合作单位,以便甲方及时补充合作人员,确保甲方合作单位的业务顺利进行。<br>
7.2 乙方与甲方在协议履行期间,如一方违反协议约定,且违约方在非违约方书面通知后15日内仍未予改正的,非违约方可以书面通知的形式终止本协议。<br>
7.3 乙方与甲方在协议履行期间,如乙方未能达到甲方及合作单位的相关要求,甲方在工作验收时将给予警告;此后如仍发生类似情况的,甲方可提前终止本协议。<br>
7.4 乙方与甲方解除本协议过程中,乙方需配合甲方及甲方的合作单位办理终止本协议的相关手续及服务费结算的事项。若因乙方不配合而造成的损失,由乙方自行承担。<br>
7.5 发生本协议第二条约定的协议终止情行的;<br>
7.6 本协议的提前终止不影响已经产生的权利义务关系。
</div>
<div>
<h2>第八条其他</h2>
8.1 因履行本协议发生的纠纷,双方应友好协商解决,协商不成的,向甲方住所地人民法院诉讼解决。<br>
8.2 本协议其他未尽事宜由双方协商解决或以双方签署的其他文本作为本协议的附件。<br>
8.3 甲方有权根据业务需要修改本协议条款。<br>
8.4 在法律允许范围内,本协议最终解释权归甲方所有。
</div>
<div>
<h2>第九条 甲乙双方权利及义务补充</h2>
<h3> 一、基本义务:</h3>
1、在双方合作期间,乙方需承诺遵守国家的相关法律法规及合作单位或平台的相关安全作业标准。<br>
2、在双方合作期间,乙方应该按甲方及合作单位约定的时间、方式、数量、质量完成交付的工作成果。在工作成果交付时,甲方及合作单位会对工作成果进行检查,如乙方的工作成果未能达到甲方及合作单位的要求,或因乙方的工作成果给甲方及合作单位造成损失的,乙方需要承担相应的赔偿责任(具体赔偿标准以甲方及合作单位的标准执行)。<br>
3、在合作期间的生产要素(车辆、服装、装备等)需要乙方自行准备,如无法自行准备,可向甲方及合作单位租借,相应的押金及租金从服务费用中进行扣除。<br>
4、在双方合作期间为保证业务质量能达到相应的标准,乙方需要接受甲方及合作单位的监督检查,如发现不合规的行为甲方会按照相应标准执行扣款。
<h3> 二、配合辅助工作:</h3>
在双方合作期间为更好的帮助乙方的业务开展,甲方及合作单位有义务对乙方的工作提供相的应辅助工作,包括但不限于指导、交流、培训、分享等,为了不影响乙方的业务开展,该辅助性工作的具体形式和时间以实际执行为准,乙方有义务配合甲方及合作单位开展的辅助工作,如因乙方的不配合导致甲方及合作单位业务受到损失,乙方需承担相应的赔偿责任。
<h3>三、配合服务计划执行:</h3>
在合作期间为保证甲方及合作单位的业务顺利开展,甲方及合作单位在征得乙方同意后会依据实际业务情况制定相应的服务计划,如乙方因个人愿意无法参与服务计划的执行,需要至少提前一天告知甲方或合作单位,以便甲方及合作单位能及时保证当天业务的顺利开展。若因乙方临时不参与服务计划而导致甲方及合作单位受到损失的,乙方需要承担相应的赔偿责任。情节严重的,甲方保留解除协议的权利。
<h3>四、协议解除:</h3>
1、因乙方个人原因需要提前解除合作的,乙方需提前30日告知甲方或合作单位,以便甲方保证业务的正常开展,乙方需配合甲方及合作单位完成协议解除的相关手续及流程并完成服务费的结算,如因乙方的不配合导致的损失,需乙方个人自行承担。<br>
2、当乙方提出解除合作时,乙方需退回通过甲方或合作单位所租借的全部生产资料,若生产资料遗失甲方将按实际金额从押金中扣除相应费用后退回剩余押金;若生产资料磨损程度较大,甲方将依照磨损程度按比例扣除相应装备的折旧费用后退回剩余押金。
</div>
<br>
<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(以下无正文)
<div style="display: flex;box-sizing: border-box;padding:0 70px; width: 100%;justify-content: space-between;">
<div>甲方:_________</div>
<div>乙方:_________</div>
</div>
<div style="text-align: right; color: crimson;box-sizing: border-box;padding-right: 30px; ">勾选确认视为已签字</div>
</div>
</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/bpowxsignaggreement.js"></script>
</html>
\ No newline at end of file
<!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>
* {
margin: 10px 0;
padding: 0;
text-indent:1em;
}
</style>
</head>
<body style="overflow: auto;">
<a href="javascript:;" onclick="window.history.back(-1);" style="text-decoration: none;color:black;padding-top: 20px;margin-left: 0px;">返回</a>
<div id="app" style="padding:5px;">
<p style=";text-align:center">
<strong><span style="font-family: 楷体;font-size: 21px"><span style="font-family:楷体">业务合作协议</span></span></strong>
</p>
<p style=";text-align:center">
<strong><span style="font-family: 楷体;font-size: 21px">&nbsp;</span></strong>
</p>
<p style="text-indent: 19px">
<span style="font-family: 楷体;font-size: 19px"><span style="font-family:楷体">甲方:(公司)</span> </span><span style="text-decoration:underline;"><span style="font-family: 楷体;font-size: 19px">&nbsp;{{params.companyName}}</span></span>
</p>
<p style="text-indent: 19px">
<span style="font-family: 楷体;font-size: 19px"><span style="font-family:楷体">联系地址:</span> </span><span style="text-decoration:underline;"><span style="font-family: 楷体;font-size: 19px">&nbsp;{{params.addr}}</span></span>
</p>
<p style="text-indent: 19px">
<span style="font-family: 楷体;font-size: 19px"><span style="font-family:楷体">电话:</span> </span><span style="text-decoration:underline;"><span style="font-family: 楷体;font-size: 19px">&nbsp;{{params.phone}}</span></span>
</p>
<br/>
<p style="text-indent: 19px">
<span style="font-family: 楷体;font-size: 19px"><span style="font-family:楷体">乙方:(个人)</span> </span><span style="text-decoration:underline;"><span style="font-family: 楷体;font-size: 19px">&nbsp;{{params.idName}}</span></span>
</p>
<p style="text-indent: 19px">
<span style="font-family: 楷体;font-size: 19px"><span style="font-family:楷体">电话:</span> </span><span style="text-decoration:underline;"><span style="font-family: 楷体;font-size: 19px">&nbsp;{{params.mobile}}</span></span>
</p>
<br/>
<p style="margin-top:0">
<span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">鉴于:</span></span>
</p>
<p style="margin: 1px 48px 0 12px;text-indent: 33px;line-height: 105%">
<span style="font-family:&#39;Times New Roman&#39;;letter-spacing:-0;font-size:17px">1.&nbsp;</span><span style=";font-family:楷体;letter-spacing:1px;font-size:19px"><span style="font-family:楷体">甲方系在中国境内设立的法人企业,遵守中国法律,合法经营。</span></span>
</p>
<p style="margin: 0 48px 0 12px;text-indent: 33px;line-height: 105%">
<span style="font-family:&#39;Times New Roman&#39;;letter-spacing:-0;font-size:17px">2.&nbsp;</span><span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">乙方系持有中国有效身份证件的自然人,亦遵守中国法律,依</span></span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">法从事民事活动。</span></span>
</p>
<p style="margin: 0 48px 0 12px;text-indent: 33px;line-height: 105%">
<span style="font-family:&#39;Times New Roman&#39;;letter-spacing:-0;font-size:17px">3.&nbsp;</span><span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">甲方与乙方就建立相应的业务合作和代理服务等事项已经达成</span></span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">一致意见。</span></span>
</p>
<p style="margin-left:0">
<span style=";font-family:楷体;font-size:19px">&nbsp;</span>
</p>
<p style="margin-top:17px;margin-right:48px;text-indent:33px;text-align:justify;text-justify:inter-ideograph;line-height:105%">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">根据《中华人民共和国合同法》及有关法律、法规的规定,</span> <span style="font-family:楷体">甲、乙双方在平等、自愿的基础上,本着诚信互利、共同发展的原则,经友好协商,达成如下一致条款并签订本协议,以资共同遵守。</span></span>
</p>
<p style="margin-left:0">
<span style=";font-family:楷体;font-size:19px">&nbsp;</span>
</p>
<p style="margin-top:0;margin-left:0">
<span style=";font-family:楷体;font-size:13px">&nbsp;</span>
</p>
<p style="margin-right:48px;text-indent:37px;text-align:justify;text-justify:inter-ideograph">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">第一条</span> <span style="font-family:楷体">合作内容、合作时间、双方权利义务、费用支付标准及时间、违约责任、争议解决等见协议附件一。</span></span>
</p>
<p style="margin-top:11px;margin-right:48px;text-indent:37px;text-align:justify;text-justify:inter-ideograph">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">第二条</span> <span style="font-family:楷体">依据本协议约定,甲方应向乙方支付的合作费用,由甲方委托第三方支付,乙方知悉并同意甲方的委托。乙方亦知悉其系与甲方存在业务合作关系,因履行本协议或其他乙方与甲方合作业务相关而产生的任何争议,均与甲方委托的第三方支付主体无任何直接权利义务关系,并不向第三方主张任何权利。</span></span>
</p>
<p style="margin-top:11px;margin-right:48px;text-indent:37px;text-align:justify;text-justify:inter-ideograph">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">第三条</span> <span style="font-family:楷体">甲方委托第三方采取银行转账方式向乙方支付合作费用,乙方预留的个人身份信息及银行卡信息为:</span></span>
</p>
<p style="text-indent: 19px">
<span style="font-family: 楷体;font-size: 19px"><span style="font-family:楷体">户名:</span> </span><span style="text-decoration:underline;"><span style="font-family: 楷体;font-size: 19px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>
</p>
<p style="text-indent: 19px">
<span style="font-family: 楷体;font-size: 19px"><span style="font-family:楷体">账号:</span> </span><span style="text-decoration:underline;"><span style="font-family: 楷体;font-size: 19px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>
</p>
<p style="text-indent: 19px">
<span style="font-family: 楷体;font-size: 19px"><span style="font-family:楷体">手机号码:</span> </span><span style="text-decoration:underline;"><span style="font-family: 楷体;font-size: 19px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>
</p>
<p style="text-indent: 19px">
<span style="font-family: 楷体;font-size: 19px"><span style="font-family:楷体">身份证号:</span> </span><span style="text-decoration:underline;"><span style="font-family: 楷体;font-size: 19px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>
</p>
<p style="margin-top:0;margin-right:48px;text-indent:37px;text-align:justify;text-justify:inter-ideograph">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">如乙方的收款账户或个人身份信息有任何变更,应当于变更前</span></span><span style=";font-family:&#39;Times New Roman&#39;;font-size:19px">3 </span><span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">个工作日书面通知甲方,否则,因此而造成的全部损失由乙方承担。</span></span>
</p>
<p style="margin-top:11px;margin-right:48px;text-indent:37px;text-align:justify;text-justify:inter-ideograph">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">第四条</span> <span style="font-family:楷体">甲乙双方均依法进行合作,乙方应当就履行本协议所得费用依法进行纳税申报并缴纳税款。甲方有义务为乙方取得的履行本协议所得收入代扣代缴相应的税款。。</span></span>
</p>
<p style="margin-top:11px;margin-right:48px;text-indent:37px;text-align:justify;text-justify:inter-ideograph">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">第五条</span> <span style="font-family:楷体">为便于乙方依法进行纳税申报并缴纳税款,甲方指定第三方按照生产经营所得项目为乙方进行增值税应税劳务、个人所得税的纳税申报以及代为缴纳税款服务,并取得完税凭证。乙方知悉并同意甲方的指定,并予以配合。</span></span>
</p>
<p style="margin-top:11px;margin-right:48px;text-indent:37px;text-align:justify;text-justify:inter-ideograph">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">第六条</span> <span style="font-family:楷体">甲方指定的第三方有权以第三方公司或其合作方所在地作为增值税以及个人所得税的申报和缴纳地点代乙方进行个人所得税的纳税申报以及缴纳。乙方知悉并同意。</span></span>
</p>
<p style="margin-top:11px;margin-right:48px;text-indent:37px;text-align:justify;text-justify:inter-ideograph">
<span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">第七条</span> <span style="font-family:楷体">乙方对本协议任何一条有异议的,应当最迟于本协议签</span></span><span style=";font-family:楷体;letter-spacing:1px;font-size:19px"><span style="font-family:楷体">署前提出,否则视为乙方无任何异议,并同意遵守本协议全部约定。</span></span>
</p>
<p style="margin-top:11px;margin-right:48px;text-indent:37px;text-align:justify;text-justify:inter-ideograph;line-height:101%">
<span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">第八条</span> <span style="font-family:楷体">本协议一式两份,甲乙双方各持一份,具有同等法律效力。</span></span>
</p>
<p style="margin-top:10px;margin-right:48px;text-indent:37px;text-align:justify;text-justify:inter-ideograph">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">第九条</span> <span style="font-family:楷体">本协议未尽事宜由双方另行签订补充协议,本协议附件及补充协议为本协议的组成部分,具有同等法律效力。</span></span>
</p>
<p style="margin-top:11px">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">(以下无正文)</span></span>
</p>
<p style="margin-left:0">
<span style=";font-family:楷体;font-size:19px">&nbsp;</span>
</p>
<p style="margin-left:12px;">
<div >
<span style=";font-family:楷体;font-size:19px;float:left" ><span style="font-family:楷体">甲方:</span></span> <span style=";font-family:楷体;font-size:19px"></span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"></span>
<span style=";font-family:楷体;font-size:19px;float:right;margin-right: 80px"><span style="font-family:楷体">乙方:</span></span> <span style=";font-family:楷体;font-size:19px"></span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"></span
</div>
<div style="clear: both"></div>
</p>
<p style="margin-top:1px;margin-left:0">
<span style=";font-family:楷体;font-size:27px">&nbsp;</span>
</p>
<p style="">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">签订日期:</span></span>
</p>
<p>
<span style=";font-family:Calibri;font-weight:bold;font-size:19px"><br/></span>
</p>
<p style="margin-top: 3px;margin-right: 0;margin-left: 12px;text-indent: 0">
<strong><span style="font-family: Calibri;font-size: 19px"><span style="font-family:宋体">附件一</span></span></strong>
</p>
<p style="margin-top:14px">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">第一条</span> <span style="font-family:楷体">合作内容</span></span>
</p>
<p style="margin-top:14px;text-indent:37px;">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">甲乙双方就</span></span><span style="text-decoration:underline;"><span style="font-family: 楷体;font-size: 19px"><span style="font-family:楷体">灵活用工服务</span></span></span> <span style=";font-family:楷体;letter-spacing:-1px;font-size:19px"><span style="font-family:楷体">宜达成一致,共同展开合作</span></span><span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体"></span></span><span style=";font-family:楷体;letter-spacing:-2px;font-size:19px">&nbsp;</span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">乙方</span></span><span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体"></span></span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">尽力配合甲方完成合作事项。</span></span>
</p>
<p style="margin-top:13px">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">第二条</span> <span style="font-family:楷体">合作时间:</span></span>
</p>
<p style="margin-top:14px;">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">甲乙双方本次合作具体合作时间按照服务实际情况为准。</span> </span><span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">第三条合作费用及支付时间:</span></span>
</p>
<p style="text-align:justify;text-justify:inter-ideograph;">
<span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">本合作事项甲方需根据乙方实际提供合作服务情况向乙方支付</span> </span><span style=";font-family:楷体;letter-spacing:-1px;font-size:19px"><span style="font-family:楷体">合作费,每次限定的标准由甲方规定。甲方同乙方支付的合作费用包含了乙方依法应缴纳的税款和委托第三方服务费。</span></span>
</p>
<p style="margin-top:13px">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">第四条</span> <span style="font-family:楷体">甲方的权利和义务</span></span>
</p>
<p style="">
<span style="font-family:&#39;Times New Roman&#39;;letter-spacing:-0;font-size:19px">4.1&nbsp;</span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">有权要求乙方提供服务。</span></span>
</p>
<p style="">
<span style="font-family:&#39;Times New Roman&#39;;letter-spacing:-0;font-size:19px">4.2&nbsp;</span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">有权安排乙方提供服务的具体方式、时间。</span></span>
</p>
<p style="">
<span style="font-family:&#39;Times New Roman&#39;;letter-spacing:-0;font-size:19px">4.3&nbsp;</span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">依协议约定按时向乙方支付合作费用。</span></span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"></span>
</p>
<p style="margin-top:13px">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">第五条</span> <span style="font-family:楷体">乙方的权利和义务</span></span>
</p>
<p style="">
<span style="font-family:&#39;Times New Roman&#39;;letter-spacing:-0;font-size:19px">5.1&nbsp;</span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">按协议的约定提供服务。</span></span>
</p>
<p style="">
<span style="font-family:&#39;Times New Roman&#39;;letter-spacing:-0;font-size:19px">5.2&nbsp;</span><span style=";font-family:楷体;letter-spacing:-1px;font-size:19px"><span style="font-family:楷体">按受甲方安排的方式、时间,提供服务。</span></span>
</p>
<p style="">
<span style="font-family:&#39;Times New Roman&#39;;letter-spacing:-0;font-size:19px">5.3&nbsp;</span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">自行准备提供服务所需要的器材等必备物品,费用由乙方自行承担。</span></span>
</p>
<p style="">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">第六条</span> <span style="font-family:楷体">延期处理:</span></span>
</p>
<p style="">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">因甲方原因造成合作事项延期的,甲方应另行追加支付合作费用;</span></span>
</p>
<p style="">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">因乙方原因造成合作事项延期的,乙方应减少收取合作费用;具体标准,</span> <span style="font-family:楷体">由双方另行协商。</span></span>
</p>
<p style="">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">第七条</span> <span style="font-family:楷体">保密</span></span>
</p>
<p style="">
<span style="font-family:&#39;Times New Roman&#39;;letter-spacing:-0;font-size:19px">7.1&nbsp;</span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">双方同意,任何及一切从本协议产生或与之有关的资料、信</span></span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">息,包括双方之间所进行的讨论本身、任何及一切履行获知的消息、</span></span>
<span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体"></span> &nbsp;</span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">双方之间一切讨论的内容或任何一方提供的尚未为公众所知悉的任何资料为本协议项下之保密资料</span></span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体"></span></span><span style=";font-family:楷体;letter-spacing:-1px;font-size:19px"><span style="font-family:楷体">以下统称</span>“保密资料”</span><span style=";font-family:楷体;letter-spacing:-1px;font-size:19px"><span style="font-family:楷体"></span></span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">。除为本协</span></span><span style=";font-family:楷体;letter-spacing:-1px;font-size:19px"><span style="font-family:楷体">议明确规定的用途外,任何一方不得使用或允许使用保密资料,也不</span></span><span style=";font-family:楷体;letter-spacing:-1px;font-size:19px"><span style="font-family:楷体">得未经另一方书面同意,向除其及其任何关联公司中需要知道保密资料的高级职员、雇员、代理人或代表以外的任何人或任何第三方披露</span></span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">或允许披露保密资料。</span></span>
</p>
<p style="">
<span style="font-family:&#39;Times New Roman&#39;;letter-spacing:-0;font-size:19px">7.2&nbsp;</span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">任何一方因法律规定或政府部门要求而对外提供保密资料的,</span> </span><span style=";font-family:楷体;letter-spacing:-1px;font-size:19px"><span style="font-family:楷体">不构成违反保密条款的行为。任何一方违反保密条款约定的,均应当赔</span></span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">偿给对方造成的相关损失。</span></span>
</p>
<p style="">
<span style="font-family:&#39;Times New Roman&#39;;letter-spacing:-0;font-size:19px">7.3&nbsp;</span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">本保密条款独立于本协议而存在,在本协议终止后</span></span><span style="text-decoration:underline;"><span style="font-family: 楷体;font-size: 19px"><span style="font-family:楷体"></span></span></span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">年内继</span> </span><span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">续有效。</span></span>
</p>
<p style="margin-top:14px">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">第八条</span> <span style="font-family:楷体">廉洁自律</span></span>
</p>
<p style="">
<span style="font-family:&#39;Times New Roman&#39;;letter-spacing:-0;font-size:19px">8.1&nbsp;</span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">乙方承诺并保证,在签订及履行本协议的过程中遵守如下廉</span> </span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">洁自律条款:</span></span>
<span style=";font-family:楷体;letter-spacing:-1px;font-size:19px"><span style="font-family:楷体">坚持诚实信用原则,不得为获取不正当个人利益损害甲方公司利益。不得为获取不正当个人利益向甲方员工进行商业贿赂。</span></span>
</p>
<p style="">
<span style="font-family:&#39;Times New Roman&#39;;letter-spacing:-0;font-size:19px">8.2&nbsp;</span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">乙方不得利用本协议工作为其配偶、子女或其他有利益关系</span> </span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">的人从事营利性经营活动提供便利条件。</span></span>
</p>
<p style="">
<span style="font-family:&#39;Times New Roman&#39;;letter-spacing:-0;font-size:19px">8.3&nbsp;</span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">若乙方违反本条承诺并损害甲方利益的,甲方有权要求赔偿</span> </span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">损失或提前解除本协议。</span></span>
</p>
<p style="margin-top:14px">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">第九条</span> <span style="font-family:楷体">违约责任</span></span>
</p>
<p style="">
<span style="font-family:&#39;Times New Roman&#39;;letter-spacing:-0;font-size:19px">9.1&nbsp;</span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">双方应恪守本协议。如一方违反本协议下的任何条款并给另</span> </span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">一方造成损失的,则违约方应向守约方承担相应的赔偿责任。</span></span>
</p>
<p style="">
<span style="font-family:&#39;Times New Roman&#39;;letter-spacing:-0;font-size:19px">9.2&nbsp;</span><span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">乙方须就其任何违反或怠于履行本协议的任何条款,或乙方</span></span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">之任何行为、疏忽,因而致使甲方卷入诉讼费、被投诉、被申索,从而造成的一切损失、损害、开支及律师费、诉讼费、仲裁费、主张权</span></span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">利而产生的一切合理费用,向甲方做出充分赔偿。</span></span>
</p>
<p style="">
<span style="font-family:&#39;Times New Roman&#39;;letter-spacing:-0;font-size:19px">9.3&nbsp;</span><span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">乙方因故意或重大过失造成合作事项延期或终止的,应赔偿</span></span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">给甲方造成的损失。</span></span>
</p>
<p style="margin-top:13px;margin-left:12px">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">第十条</span> <span style="font-family:楷体">协议的解除</span></span>
</p>
<p style="">
<span style=";font-family:&#39;Times New Roman&#39;;font-size:19px"></span><span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">协议期内,有下列情形之一的,本协议终止,甲乙双方互不</span> </span><span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">承担责任:</span></span>
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">合作事项已经被确定违反法律。合作事项已经确定无完成可能。合作经双方协议一致进行终止。</span></span>
</p>
<p style="margin-left:8px;text-align:justify;text-justify:inter-ideograph;line-height:24px">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">第十一</span> <span style="font-family:楷体">特别约定</span></span>
</p>
<p style="%">
<span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">甲方对乙方一次或多次不履行、违反、不遵守或不履行本协议内</span></span><span style=";font-family:楷体;letter-spacing:-1px;font-size:19px"><span style="font-family:楷体">乙方的责任的宽容、原谅或宽恕并不代表甲方对乙方上述行为或持续或</span></span><span style=";font-family:楷体;letter-spacing:-0;font-size:19px"><span style="font-family:楷体">再次的不履行、违反、不遵守或不履行的认可或被视为甲方放弃与此相关的求偿权及自身的其它权利,也不消除或影响甲方根据本协议因乙方此等持续或其后的不履行或违反而有的权利及补偿。</span></span>
</p>
<p style="margin-top:14px;margin-left:8px">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">第十三条</span> <span style="font-family:楷体">附件及补充协议</span></span>
</p>
<p style="">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">本协议的附件构成本协议不可分割之一部份;本协议未尽事宜,</span> <span style="font-family:楷体">双方应友好协商解决并签订补充协议,补充协议须经双方签字盖章后</span> &nbsp;</span><span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">生效;附件及补充协议与本协议具有同等的法律效力。</span></span>
</p>
<p style="margin-top:14px;margin-left:8px">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">第十四条</span> <span style="font-family:楷体">争议解决</span></span>
</p>
<p style="">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">本协议履行期间,如甲乙双方发生争议,应通过友好协商解决。协商不成任何一方有权向甲方住所地</span> <span style="font-family:楷体">法院提起诉讼。</span></span>
</p>
<p style="margin-top:13px;margin-left:8px">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">第十五条</span> <span style="font-family:楷体">补充约定</span></span>
</p>
<p style="margin-top:14px;">
<span style=";font-family:楷体;font-size:19px"><span style="font-family:楷体">双方补充约定如下:</span><br/><span style="font-family:楷体">无。</span></span>
</p>
<p>
<span style=";font-family:Calibri;font-size:14px">&nbsp;</span>
</p>
<p>
<br/>
</p>
</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/bpowxsignaggreement2.js"></script>
</html>
\ No newline at end of file
<!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>
* {
margin: 10px 0;
padding: 0;
text-indent:1em;
}
</style>
</head>
<body style="overflow: auto;">
<a href="javascript:;" onclick="window.history.back(-1);" style="text-decoration: none;color:black;padding-top: 20px;margin-left: 0px;">返回</a>
<div id="app" style="padding:20px;">
<div style="margin: 0 auto;width: 100%;display: flex;flex-direction: column;">
<h1 style="text-align: center;margin-bottom: 30px;">业务分包服务合作协议(个人)</h1>
<div>欢迎您(以下简称乙方)与
<u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{nameA}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</u>
签署本协议并为
<u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{name}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</u>
提供服务。
</div>
<div style="">
为维护您的自身权益,在您确认同意本协议之前,请认真阅读本协议,务必审慎阅读、充分理解各条款内容,特别是权利义务条款、法律适用和管辖条款。上述条款以粗体及下划线标识,应重点阅读。
</div>
<div style="">
【签约】当您确认同意本协议后,即表示您已充分阅读、理解并接受本协议的全部内容,并与甲方达成一致意见并成为其分包合作人员,此后您不得以未阅读/不理解本协议内容或类似言辞做任何形式的抗辩。
</div>
<div style="">
【合作关系】甲乙双方通过本协议建立业务分包合作关系,适用《合同法》、民法和其他民事法律。双方不构成任何劳动/劳务合同关系或其他类似劳动法律关系。
</div>
<h2>协议条款:</h2>
<div>
根据国家法律有关规定,双方按照平等自愿、诚实信用的原则,就乙方为甲方服务合作单位提供服务工作事宜订立本协议。
</div>
<h2>第一条 服务工作内容</h2>
<div>
1.1 因甲方与合作单位提供服务合作的需要,特选用乙方提供/完成相关服务,该等服务的内容主要为乙方根据甲方与合作单位相关合同的规定提供相关的框架服务。
1.2 乙方应按照合作单位相关制度要求规定的标准来完成服务分包任务。
</div>
<h2>第二条 协议效力</h2>
<div style="font-weight:700;">
2.1乙方承诺并保证乙方所提供的签约信息真实、准确,以免影响乙方和甲方之间的《业务分包服务合作协议》效力。本协议条款自乙方确认同意也即勾选确认本协议或实际为甲方合作单位提供服务(以孰早为准)之日起生效。
</div>
<div>
2.2 本协议有效期限一年。期限届满,双方应另行签署新的协议;若双方未签署新的协议,而以实际行动继续合作的,视为双方同意协议期限顺延直至按照本协议约定终止或解除时为止。
</div>
<div style="">
2.3 本协议在发生下列情形时自然终止:<br />
a、 经合作单位事先同意的情况下,乙方主动退出服务的;<br />
b、 甲方与合作单位终止或变更业务模式而不需要乙方继续履行本协议的;<br />
c、 甲方或合作单位认为乙方不适合继续提供服务的;<br />
d、 甲方和合作单位解除合作的;<br />
e、 其他原因导致本协议不再继续履行的。
</div>
<div style="">
<h2>第三条 甲方的权利和义务</h2>
3.1 乙方应根据甲方的安排和合作单位的要求完成相关的服务,服务期间乙方应遵守相关的服务规则,遵守相关的法律法规政策规定。<br />
3.2 甲方和合作单位将对乙方在分包服务成果进行验收。<br />
3.3 甲方应按约定及时向乙方支付费用。此处乙方应明确:乙方作为甲方的合作人员,在合作单位依约向甲方支付合作款项前提下,乙方的相关费用结算将由甲方及委托相关公司完成支付。
</div>
<div style="">
<h2>第四条 乙方的权利和义务</h2>
4.1 乙方应按时尽责地完成甲方以及合作单位要求的服务内容,并达到规定的质量标准,不得有侵犯他人合法权益。<br>
4.2
协议期内,乙方应在甲方以及合作单位许可范围内使用相关的商业信息;协议期内以及协议终止后,乙方均有义务对双方合作的有关协议及合作过程中知悉的甲方、合作单位相关信息予以保密,未经书面许可,乙方不得以任何方式向其它方泄漏、给予或转让该等保密信息。否则,因此导致甲方及合作单位的损失,由乙方负责赔偿。<br>
4.3 除本协议事项外,乙方不能以甲方及/或合作单位名义开展任何与完成约定的服务无关的业务或活动。<br>
4.4 乙方在确认同意本业务分包协议之前及在本协议约定服务期限内未与合作单位签署任何劳动合同和/或劳务合同等类似劳动法律关系合同。<br>
4.5
协议期内,乙方应在甲方以及合作单位许可范围内提供合规的服务;协议期内以及协议终止后,如乙方产生因此业务造成任何意外包括但不限于如人身意外伤害,伤亡,财产损失等,均应由合作单位为乙方投保的保险公司按照理赔标准赔付,如合作单位没有与乙方预先约定投保任何商业保险的情况,甲方合作单位不额外赔付并负责。当有其他本业务分包以外的特殊人身或财产意外发生时全部由乙方自行负责。
</div>
<div>
<h2>第五条 服务费的支付</h2>
5.1
甲方将根据与合作单位签订的相关服务合同要求,按时向乙方支付服务费/报酬,具体由甲方根据合作单位及甲方相关的业务结算规则确定。该等业务结算规则根据经营需要会有浮动调整,乙方清楚并了解该等浮动调整为正常情况。甲方以人民币形式向乙方支付费用,由乙方委托甲方(及合作机构)按照当地税务政策代为征收(生产经营所得)个人所得税。<br>
5.2 乙方应向甲方提供乙方实名下的银行账户、微信。<br>
5.3 甲方服务费发放以乙方提供的收款帐户为准,因乙方提供的收款帐户不实造成的一切损失由乙方自行承担。如乙方帐号变更或发生不可用等情况时,应及时进行变更操作,否则,由此造成的一切损失由乙方自行负责。
</div>
<div>
<h2>第六条 违约责任</h2>
6.1 双方应按本协议约定履行,如有违反,守约方有权要求对方及时改正;造成对方损失的,守约方有权要求违约方赔偿。<br>
6.2
因不可抗力造成损失的,彼此不负赔偿责任,但发生不可抗力一方应及时将有关情况通知另一方,并尽最大努力进行补救。本协议所称不可抗力是指不能预见、不能克服并不能避免且对一方当事人造成重大影响的客观事件,包括但不限于自然灾害如洪水、地震、火灾和风暴等以及社会事件如战争、动乱、政府行为、黑客事件、大范围电信事故等。
</div>
<div>
<h2>第七条 协议的终止</h2>
7.1 乙方与甲方在协议履行期间有权主动解除本合作协议,但需提前30日告知甲方或甲方的合作单位,以便甲方及时补充合作人员,确保甲方合作单位的业务顺利进行。<br>
7.2 乙方与甲方在协议履行期间,如一方违反协议约定,且违约方在非违约方书面通知后15日内仍未予改正的,非违约方可以书面通知的形式终止本协议。<br>
7.3 乙方与甲方在协议履行期间,如乙方未能达到甲方及合作单位的相关要求,甲方在工作验收时将给予警告;此后如仍发生类似情况的,甲方可提前终止本协议。<br>
7.4 乙方与甲方解除本协议过程中,乙方需配合甲方及甲方的合作单位办理终止本协议的相关手续及服务费结算的事项。若因乙方不配合而造成的损失,由乙方自行承担。<br>
7.5 发生本协议第二条约定的协议终止情行的;<br>
7.6 本协议的提前终止不影响已经产生的权利义务关系。
</div>
<div>
<h2>第八条其他</h2>
8.1 因履行本协议发生的纠纷,双方应友好协商解决,协商不成的,向甲方住所地人民法院诉讼解决。<br>
8.2 本协议其他未尽事宜由双方协商解决或以双方签署的其他文本作为本协议的附件。<br>
8.3 甲方有权根据业务需要修改本协议条款。<br>
8.4 在法律允许范围内,本协议最终解释权归甲方所有。
</div>
<div>
<h2>第九条 甲乙双方权利及义务补充</h2>
<h3> 一、基本义务:</h3>
1、在双方合作期间,乙方需承诺遵守国家的相关法律法规及合作单位或平台的相关安全作业标准。<br>
2、在双方合作期间,乙方应该按甲方及合作单位约定的时间、方式、数量、质量完成交付的工作成果。在工作成果交付时,甲方及合作单位会对工作成果进行检查,如乙方的工作成果未能达到甲方及合作单位的要求,或因乙方的工作成果给甲方及合作单位造成损失的,乙方需要承担相应的赔偿责任(具体赔偿标准以甲方及合作单位的标准执行)。<br>
3、在合作期间的生产要素(车辆、服装、装备等)需要乙方自行准备,如无法自行准备,可向甲方及合作单位租借,相应的押金及租金从服务费用中进行扣除。<br>
4、在双方合作期间为保证业务质量能达到相应的标准,乙方需要接受甲方及合作单位的监督检查,如发现不合规的行为甲方会按照相应标准执行扣款。
<h3> 二、配合辅助工作:</h3>
在双方合作期间为更好的帮助乙方的业务开展,甲方及合作单位有义务对乙方的工作提供相的应辅助工作,包括但不限于指导、交流、培训、分享等,为了不影响乙方的业务开展,该辅助性工作的具体形式和时间以实际执行为准,乙方有义务配合甲方及合作单位开展的辅助工作,如因乙方的不配合导致甲方及合作单位业务受到损失,乙方需承担相应的赔偿责任。
<h3>三、配合服务计划执行:</h3>
在合作期间为保证甲方及合作单位的业务顺利开展,甲方及合作单位在征得乙方同意后会依据实际业务情况制定相应的服务计划,如乙方因个人愿意无法参与服务计划的执行,需要至少提前一天告知甲方或合作单位,以便甲方及合作单位能及时保证当天业务的顺利开展。若因乙方临时不参与服务计划而导致甲方及合作单位受到损失的,乙方需要承担相应的赔偿责任。情节严重的,甲方保留解除协议的权利。
<h3>四、协议解除:</h3>
1、因乙方个人原因需要提前解除合作的,乙方需提前30日告知甲方或合作单位,以便甲方保证业务的正常开展,乙方需配合甲方及合作单位完成协议解除的相关手续及流程并完成服务费的结算,如因乙方的不配合导致的损失,需乙方个人自行承担。<br>
2、当乙方提出解除合作时,乙方需退回通过甲方或合作单位所租借的全部生产资料,若生产资料遗失甲方将按实际金额从押金中扣除相应费用后退回剩余押金;若生产资料磨损程度较大,甲方将依照磨损程度按比例扣除相应装备的折旧费用后退回剩余押金。
</div>
<br>
<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(以下无正文)
<div style="display: flex;box-sizing: border-box;padding:0 70px; width: 100%;justify-content: space-between;">
<div>甲方:_________</div>
<div>乙方:_________</div>
</div>
<div style="text-align: right; color: crimson;box-sizing: border-box;padding-right: 30px; ">勾选确认视为已签字</div>
</div>
</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/bpowxsignaggreement3.js"></script>
</html>
\ No newline at end of file
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