Commit 22fae659 by v_vjyjiang

d

parent 2366bad9
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
"type": "node", "type": "node",
"request": "launch", "request": "launch",
"name": "Launch Program", "name": "Launch Program",
"program": "${workspaceFolder}/icp-deliver/main.js" "program": "${workspaceFolder}/tx-fi-tax/main.js"
} }
] ]
} }
\ No newline at end of file
var settings = {
redis: {
host: "192.168.4.119",
port: 6379,
password: "Gongsibao2018",
db: 9,
},
database: {
dbname: "center-manage",
user: "write",
password: "write",
config: {
host: '43.247.184.35',
port: 8899,
dialect: 'mysql',
operatorsAliases: false,
pool: {
max: 5,
min: 0,
acquire: 90000000,
idle: 1000000
},
debug: false,
dialectOptions: {
requestTimeout: 999999,
// instanceName:'DEV'
} //设置MSSQL超时时间
}
},
kongurl: 'http://192.168.4.119:8001/',
};
module.exports = settings;
node_modules/
app/config/localsettings.js
icp_build.sh
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceFolder}/main.js"
}
]
}
\ No newline at end of file
const system = require("../system");
const uuidv4 = require('uuid/v4');
const settings = require("../../config/settings");
class APIBase {
constructor() {
this.cacheManager = system.getObject("db.common.cacheManager");
this.logClient = system.getObject("util.logClient");
}
async setContextParams(pobj, qobj, req) {
let custtags = req.headers["x-consumetag"] ? req.headers["x-consumetag"].split("|") : null;
//当自由用户注册时,需要根据前端传来的companykey,查询出公司,给companyid赋值
req.xctx = {
appkey: req.headers["xappkey"],//用于系统管理区分应用,比如角色
companyid: custtags ? custtags[0].split("_")[1] : null,
password: custtags ? custtags[1].split("_")[1] : null,
username: req.headers["x-consumer-username"],
credid: req.headers["x-credential-identifier"],
companykey: req.headers["x-company-key"],//专用于自由用户注册,自由用户用于一定属于某个存在的公司
}
if (!req.xctx.appkey) {
return [-200, "请求头缺少应用x-app-key"]
} else {
// let app = await this.cacheManager["AppCache"].cache(req.xctx.appkey);
// req.xctx.appid = app.id;
// pobj.app_id = app.id;//传递参数对象里注入app_id
}
//平台注册时,companyid,companykey都为空
//自由注册时,companykey不能为空
// if(!req.xctx.companyid && !req.xctx.companykey){
// return [-200,"请求头缺少应用x-app-key"]
// }
if (req.xctx.companyid) {//在请求传递数据对象注入公司id
pobj.company_id = req.xctx.companyid;
}
}
async doexec(gname, methodname, pobj, query, req) {
try {
let xarg = await this.setContextParams(pobj, query, req);
if (xarg && xarg[0] < 0) {
return system.getResultFail(...xarg);
}
var rtn = await this[methodname](pobj, query, req);
this.logClient.log(pobj, req, rtn)
return rtn;
} catch (e) {
this.logClient.log(pobj, req, null, e.stack);
console.log(e.stack, "api调用异常--error...................");
var rtnerror = system.getResultFail(-200, "出现异常,请联系管理员");
return rtnerror;
}
}
}
module.exports = APIBase;
const system = require("../system");
const uuidv4 = require('uuid/v4');
class DocBase {
constructor() {
this.apiDoc = {
group: "逻辑分组",
groupDesc: "",
name: "",
desc: "请对当前类进行描述",
exam: "概要示例",
methods: []
};
this.initClassDoc();
}
initClassDoc() {
this.descClass();
this.descMethods();
}
descClass() {
var classDesc = this.classDesc();
this.apiDoc.group = classDesc.groupName;
this.apiDoc.groupDesc = this.examDescHtml(classDesc.groupDesc);
this.apiDoc.name = classDesc.name;
this.apiDoc.desc = this.examDescHtml(classDesc.desc);
this.apiDoc.exam = this.examHtml();
}
examDescHtml(desc) {
// var tmpDesc = desc.replace(/\\/g, "<br/>");
return desc;
}
examHtml() {
var exam = this.exam();
exam = exam.replace(/\\/g, "<br/>");
return exam;
}
exam() {
throw new Error("请在子类中定义类操作示例");
}
classDesc() {
throw new Error(`
请重写classDesc对当前的类进行描述,返回如下数据结构
{
groupName:"auth",
groupDesc:"认证相关的包"
desc:"关于认证的类",
exam:"",
}
`);
}
descMethods() {
var methoddescs = this.methodDescs();
for (var methoddesc of methoddescs) {
for (var paramdesc of methoddesc.paramdescs) {
this.descMethod(methoddesc.methodDesc, methoddesc.methodName
, paramdesc.paramDesc, paramdesc.paramName, paramdesc.paramType,
paramdesc.defaultValue, methoddesc.rtnTypeDesc, methoddesc.rtnType);
}
}
}
methodDescs() {
throw new Error(`
请重写methodDescs对当前的类的所有方法进行描述,返回如下数据结构
[
{
methodDesc:"生成访问token",
methodName:"getAccessKey",
paramdescs:[
{
paramDesc:"访问appkey",
paramName:"appkey",
paramType:"string",
defaultValue:"x",
},
{
paramDesc:"访问secret",
paramName:"secret",
paramType:"string",
defaultValue:null,
}
],
rtnTypeDesc:"xxxx",
rtnType:"xxx"
}
]
`);
}
descMethod(methodDesc, methodName, paramDesc, paramName, paramType, defaultValue, rtnTypeDesc, rtnType) {
var mobj = this.apiDoc.methods.filter((m) => {
if (m.name == methodName) {
return true;
} else {
return false;
}
})[0];
var param = {
pname: paramName,
ptype: paramType,
pdesc: paramDesc,
pdefaultValue: defaultValue,
};
if (mobj != null) {
mobj.params.push(param);
} else {
this.apiDoc.methods.push(
{
methodDesc: methodDesc ? methodDesc : "",
name: methodName,
params: [param],
rtnTypeDesc: rtnTypeDesc,
rtnType: rtnType
}
);
}
}
}
module.exports = DocBase;
var APIBase = require("../../api.base");
var system = require("../../../system");
var settings = require("../../../../config/settings");
class AccessAuthAPI extends APIBase {
constructor() {
super();
this.appS = system.getObject("service.common.appSve");
this.apitradeSvr = system.getObject("service.common.apitradeSve");
this.authUtils = system.getObject("util.businessManager.authUtils");
this.userSve = system.getObject("service.auth.userSve");
}
//不从平台应用列表入口登录时
//先要调用平台登录接口
//返回token,利用这个token再去登录某个具体APP
//会话存储具体APP的用户信息
//每个前端应用打开时,先检查是否存在token
//如果存在,就去访问获取用户信息,---调用本接口--即刻
//进入或登录某个具体应用
//前提是已经具备了统一管理的账号,并且已经在统一管理账号登录,客户端具备了token
//进入某个具体应用时,需要指定 x-appkey请求头
//
async loginToApp(p,q,req){
let appkey=req.xctx.appkey;
}
classDesc() {
return {
groupName: "auth",
groupDesc: "认证相关的包",
name: "AccessAuthAPI",
desc: "关于认证的类",
exam: `
post http://p.apps.com/api/auth/accessAuth/getAccessKey
{
appKey:xxxxx,
secret:yyyyyy
}
`,
};
}
methodDescs() {
return [
{
methodDesc: "生成访问token,访问地址:http://......../api/auth/accessAuth/getAccessKey,访问token需要放置到后续API方法调用的请求头中",
methodName: "getAccessKey",
paramdescs: [
{
paramDesc: "访问appkey",
paramName: "appkey",
paramType: "string",
defaultValue: "",
},
{
paramDesc: "访问secret",
paramName: "secret",
paramType: "string",
defaultValue: "",
}
],
rtnTypeDesc: "返回JSON对象字符串",
rtnType: "json object {accessKey: xxxxxx, app: {xxx:xxx}},注意app,是当前app信息,详细见后面示例"
},
];
}
exam() {
return ``
}
}
module.exports = AccessAuthAPI;
var APIBase = require("../../api.base");
var system = require("../../../system");
var settings = require("../../../../config/settings");
class RoleAuthAPI extends APIBase {
constructor() {
super();
this.authS=system.getObject("service.auth.authSve");
}
async findAuthsByRole(p,q,req){
var tmpRoles=p.roles;
var appid=p.appid;
var comid=p.companyid;
var auths=await this.authS.findAuthsByRole(tmpRoles,appid,comid);
return system.getResult(auths);
}
exam(){
return `
xxxxxxxxx
yyyyyyyyy
zzzzzzzzz
ooooooo
`;
}
classDesc() {
return {
groupName: "auth",
groupDesc: "角色授权相关的API",
name: "RoleAuthAPI",
desc: "角色授权相关的API",
exam: "",
};
}
methodDescs() {
return [
{
methodDesc: "按照角色获取权限,访问地址:/api/auth/roleAuth/findAuthsByRole",
methodName: "findAuthsByRole",
paramdescs: [
{
paramDesc: "应用的ID",
paramName: "appid",
paramType: "int",
defaultValue: "x",
},
{
paramDesc: "角色列表",
paramName: "roles",
paramType: "array",
defaultValue: null,
}
],
rtnTypeDesc: "逗号分隔的",
rtnType: "string"
}
];
}
}
module.exports = RoleAuthAPI;
\ No newline at end of file
var APIBase = require("../../api.base");
var system = require("../../../system");
var settings = require("../../../../config/settings");
class AppAPI extends APIBase {
constructor() {
super();
this.appS = system.getObject("service.common.appSve");
}
async create(pobj,q,req){
// console.log("oooooooooooooooooooooooooooooooooooooooooooooooo")
// console.log(req.xctx)
let rtn=this.appS.create(pobj,q,req);
return system.getResult(rtn);
}
async del(pobj,q,req){
let rtn=this.appS.delete(pobj,q,req);
return system.getResult(rtn);
}
classDesc() {
return {
groupName: "auth",
groupDesc: "认证相关的包",
name: "AccessAuthAPI",
desc: "关于认证的类",
exam: `
post http://p.apps.com/api/auth/accessAuth/getAccessKey
{
appKey:xxxxx,
secret:yyyyyy
}
`,
};
}
methodDescs() {
return [
];
}
exam() {
return ``
}
}
module.exports = AppAPI;
var APIBase = require("../../api.base");
var system = require("../../../system");
var settings = require("../../../../config/settings");
const crypto = require('crypto');
var fs=require("fs");
var accesskey='3KV9nIwW8qkTGlrPmAe3HnR3fzM6r5';
var accessKeyId='LTAI4GC5tSKvqsH2hMqj6pvd';
var url="https://gsb-zc.oss-cn-beijing.aliyuncs.com";
class OSSAPI extends APIBase{
constructor(){
super()
}
async getOssConfig(){
var policyText = {
"expiration":"2119-12-31T16:00:00.000Z",
"conditions":[
["content-length-range",0,1048576000],
["starts-with","$key","zc"]
]
};
var b = new Buffer(JSON.stringify(policyText));
var policyBase64 = b.toString('base64');
var signature= crypto.createHmac('sha1',accesskey).update(policyBase64).digest().toString('base64'); //base64
var data={
OSSAccessKeyId:accessKeyId,
policy:policyBase64,
Signature:signature,
Bucket:'gsb-zc',
success_action_status:201,
url:url
};
return system.getResult(data);
};
async upfile(srckey,dest){
var oss=System.getObject("util.ossClient");
var result=await oss.upfile(srckey,"/tmp/"+dest);
return result;
};
async downfile(srckey){
var oss=System.getObject("util.ossClient");
var downfile=await oss.downfile(srckey).then(function(){
downfile="/tmp/"+srckey;
return downfile;
});
return downfile;
};
}
module.exports=OSSAPI;
const system = require("../system");
const settings = require("../../config/settings");
const uuidv4 = require('uuid/v4');
class CtlBase {
constructor(gname, sname) {
this.serviceName = sname;
this.service = system.getObject("service." + gname + "." + sname);
this.cacheManager = system.getObject("db.common.cacheManager");
this.logClient = system.getObject("util.logClient");
}
static getServiceName(ClassObj) {
return ClassObj["name"].substring(0, ClassObj["name"].lastIndexOf("Ctl")).toLowerCase() + "Sve";
}
async update(pobj, qobj, req) {
const up = await this.service.update(pobj);
return system.getResult(up);
}
async create(pobj, qobj, req) {
const up = await this.service.create(pobj);
return system.getResult(up);
}
async delete(pobj, qobj, req) {
const up = await this.service.delete(pobj);
return system.getResult(up);
}
async findAndCountAll(pobj, qobj, req) {
//设置查询条件
console.log(pobj)
const rs = await this.service.findAndCountAll(pobj);
return system.getResult(rs);
}
async refQuery(pobj, qobj, req) {
pobj.refwhere.app_id = pobj.app_id;
pobj.refwhere.company_id = pobj.company_id;
let rtn = await this.service.refQuery(pobj);
return rtn
}
async setContextParams(pobj, qobj, req) {
let custtags = req.headers["x-consumetag"] ? req.headers["x-consumetag"].split("|") : null;
let lastindex = custtags ? custtags.length - 1 : 0;
//当自由用户注册时,需要根据前端传来的companykey,查询出公司,给companyid赋值
req.xctx = {
appkey: req.headers["xappkey"],//用于系统管理区分应用,比如角色
fromappkey: req.headers["xfromappkey"],//来源APP,如果没有来源与appkey相同
companyid: custtags ? custtags[0].split("_")[1] : null,
fromcompanykey: req.headers["xfromcompanykey"],//专用于自由用户注册,自由用户用于一定属于某个存在的公司
password: custtags ? custtags[lastindex].split("_")[1] : null,
username: req.headers["x-consumer-username"],
userid: req.headers["x-consumer-custom-id"],
username: req.headers["x-consumer-username"],
credid: req.headers["x-credential-identifier"],
regrole: req.headers["xregrole"],
bizpath: req.headers["xbizpath"],
opath: req.headers['xopath'],
ptags: req.headers['xptags'],
codename: req.headers["xcodename"],
codetitle: req.headers["xcodetitle"] ? decodeURI(req.headers["xcodetitle"]) : '',
}
if (req.xctx.ptags && req.xctx.ptags != "") {
pobj.opath = req.xctx.ptags
} else {
pobj.opath = req.xctx.opath
}
if (!req.xctx.appkey) {
return [-200, "请求头缺少应用x-app-key"]
} else {
// let app=await this.cacheManager["AppCache"].cache(req.xctx.fromappkey);
// req.xctx.appid=app.id;
// if(!pobj.app_id){
// pobj.app_id=app.id;//传递参数对象里注入app_id
// }
}
//平台注册时,companyid,companykey都为空
//自由注册时,companykey不能为空
// if(!req.xctx.companyid && !req.xctx.companykey){
// return [-200,"请求头缺少应用x-app-key"]
// }
if (!req.xctx.companyid && req.xctx.fromcompanykey && req.xctx.fromcompanykey != "null" && req.xctx.fromcompanykey != "undefined") {
let comptmp = await this.cacheManager["CompanyCache"].cache(req.xctx.fromcompanykey);
req.xctx.companyid = comptmp.id;
}
if (req.xctx.companyid) {//在请求传递数据对象注入公司id
pobj.company_id = req.xctx.companyid;
}
if (req.xctx.userid) {//在请求传递数据对象注入公司id
pobj.userid = req.xctx.userid;
}
if (req.xctx.username) {//在请求传递数据对象注入公司名称
pobj.username = req.xctx.username;
}
pobj.bizpath = req.xctx.bizpath;
}
async doexec(methodname, pobj, query, req) {
try {
let xarg = await this.setContextParams(pobj, query, req);
if (xarg && xarg[0] < 0) {
return system.getResultFail(...xarg);
}
//从请求头里面取appkey_consumename
// var consumeName=req.headers[""]
// var appkey=
// if( this.session["appkey_consumename"]) {
// }else{
// //从头里取,从redis中取出缓存对象赋值到控制基类的session属性
// //appkey_consumename
// this.session={};
// }
//req.session=redis缓存的上下文对象
var rtn = await this[methodname](pobj, query, req);
this.logClient.log(pobj, req, rtn)
return rtn;
} catch (e) {
this.logClient.log(pobj, req, null, e.stack);
console.log(e.stack, "出现异常,请联系管理员.......");
return system.getResultFail(-200, "出现异常,请联系管理员");
}
}
}
module.exports = CtlBase;
var system = require("../../../system")
const http = require("http")
const querystring = require('querystring');
var settings=require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
class AuthCtl extends CtlBase{
constructor(){
super("auth",CtlBase.getServiceName(AuthCtl));
}
async saveAuths(pobj,query,req){
var auths=pobj.auths;
var xrtn=await this.service.saveAuths(auths,pobj.app_id,pobj.company_id);
return system.getResult(xrtn);
}
async findAuthsByRoles(pobj,query,req){
var roleids=pobj.roleids;
var xrtn=await this.service.findAuthsByRole(roleids,pobj.app_id,pobj.company_id);
return system.getResult(xrtn);
}
}
module.exports=AuthCtl;
var system = require("../../../system")
const http = require("http")
const querystring = require('querystring');
var settings=require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
const logCtl = system.getObject("web.common.oplogCtl");
class DataauthCtl extends CtlBase{
constructor(){
super("auth",CtlBase.getServiceName(DataauthCtl));
}
async saveauth(qobj,querybij,req){
var arys=qobj.arys;
var uid=qobj.uid;
var refmodel=qobj.modelname;
var u=await this.service.saveauth({
user_id:uid,
modelname:refmodel,
auths:arys.join(","),
app_id:req.appid,
});
return system.getResult(u);
}
async fetchInitAuth(qobj,querybij,req){
var uid=qobj.uid;
var refmodel=qobj.modelname;
var authtmp=await this.service.findOne({user_id:uid,modelname:refmodel,app_id:req.appid});
if(authtmp){
var auths= authtmp.auths;
var arys=auths.split(",");
return system.getResult(arys);
}else{
return system.getResultSuccess([]);
}
}
}
module.exports=DataauthCtl;
var system = require("../../../system")
const http = require("http")
const querystring = require('querystring');
var settings=require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
const logCtl = system.getObject("web.common.oplogCtl");
class OrgCtl extends CtlBase{
constructor(){
super("auth",CtlBase.getServiceName(OrgCtl));
// this.compSvr=system.getObject("service.common.companySve");
}
//检查是否已经存在主要岗位
async checkMainPosition(p,q,req){
return this.service.checkMainPosition(p,q,req);
}
async changePos(p,q,req){
var toorgid=p.orgid;
var uid=p.uid;
var rtn= await this.service.changePos(toorgid,uid);
return system.getResult(rtn);
}
async create(p,q,req){
return super.create(p,q,req);
}
async delete(p,q,req){
return super.delete(p,q,req);
}
async update(p,q,req){
return super.update(p,q,req);
}
async initOrgs(p,q,req){
var tocompany=req.session.tocompany;
var cmkey=p.comkey;
if(cmkey){
tocompany =await this.compSvr.findOne({companykey:cmkey});
}
//按照公司名称查询,是否存在节点,不存在,就创建根节点
//如果存在就按照名称查询出当前和她的字节点
var rtn=await this.service.initOrgs(tocompany,req.appid);
return system.getResult(rtn);
}
async findOrgById(p,q,req){
var rtn=await this.service.findOrgById(p.id);
return system.getResult(rtn);
}
}
module.exports=OrgCtl;
var system = require("../../../system")
const http = require("http")
const querystring = require('querystring');
var settings=require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
const logCtl = system.getObject("web.common.oplogCtl");
var cacheBaseComp = null;
class RoleCtl extends CtlBase {
constructor() {
super("auth",CtlBase.getServiceName(RoleCtl));
this.redisClient=system.getObject("util.redisClient");
}
async initNewInstance(pobj,queryobj, req) {
var rtn = {};
rtn.roles = [];
return system.getResultSuccess(rtn);
}
async create(pobj,queryobj, req) {
let r=await super.create(pobj,queryobj, req)
return system.getResult(r);
}
}
module.exports = RoleCtl;
var system = require("../../../system")
const http = require("http")
const querystring = require('querystring');
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
class UserCtl extends CtlBase {
constructor() {
super("auth", CtlBase.getServiceName(UserCtl));
}
async resetPassword(pobj, qobj, req){
await this.service.resetPassword(req.xctx.username,pobj.onepassword)
return system.getResult({});
}
async allowOrNot(pobj, qobj, req){
await this.service.updateByWhere({isEnabled:!pobj.isEnabled},{company_id:pobj.company_id})
return system.getResult({});
}
async initNewInstance(queryobj, req) {
var rtn = {};
rtn.roles = [];
return system.getResultSuccess(rtn);
}
//获取验证码,发送给指定手机
// async sendVCode(pobj, qobj, req) {
// var mobile = pobj.mobile;
// let v = await this.smsS.sendVCode(mobile);
// return system.getResult({ vcodestr: v });
// }
async exit(pobj, qobj, req) {
}
//应用的自由用户注册,无需验证,需要前端头设置公司KEY
async pmregisterByFreeUser(p, q, req) {
//检查是否有用户名和密码
if (!pobj.userName || !pobj.password) {
return system.getResult(null, "请检查用户名和密码是否存在")
}
//p.company_id = req.xctx.companyid;//控制基类里已经添加
if (!p.company_id) {
return system.getResultFail(-201, "自有用户创建需要提供公司KEY");
}
let rtn = await this.service.pmregisterByFreeUser(p, q);
return rtn;
}
async create(p, q, req){
//检查是否有用户名和密码
if (!p.userName) {
return system.getResult(null, "请检查用户名和密码是否存在")
}
let rtn = await this.service.registerByTantent(p, q);
return system.getResult(rtn);
}
//登录后的租户创建属于租户的用户
//需要在控制器里取出公司ID
//和租户绑定同一家公司
//按照用户名和密码进行注册
//控制器端检查用户名和密码非空
async registerByTantent(p, q, req) {
//检查是否有用户名和密码
if (!pobj.userName) {
return system.getResult(null, "请检查用户名和密码是否存在")
}
let rtn = await this.service.registerByTantent(p, q);
return rtn;
}
//租户用户名和密码的租户注册
async pmregister(pobj, qobj, req) {
//平台注册设置平台的应用ID
pobj.app_id = settings.pmappid;
//检查是否有用户名和密码
if (!pobj.userName || !pobj.password) {
return system.getResult(null, "请检查用户名和密码是否存在")
}
var rtn = await this.service.pmregister(pobj);
return system.getResult(rtn);
}
async pmlogin(pobj, qobj, req) {
//平台注册设置平台的应用ID
let rtn = await this.service.pmlogin(pobj, qobj, req);
return system.getResult(rtn);
}
async getUserInfo(pobj, qobj, req) {
let uname = req.xctx.username;
let rtn = await this.service.getUserInfo(uname);
return system.getResult(rtn);
}
//按照电话创建自由用户
async pmloginByVCodeForFreeUser(p, q, req) {
if (!pobj.mobile || !pobj.vcode) {
return system.getResult(null, "请检查手机号和验证码是否存在")
}
p.companykey = req.xctx.companykey;
if (!p.companykey) {
return system.getResult(null, "自有用户创建需要提供公司KEY");
}
let rtn = await this.service.pmloginByVCodeForFreeUser(p, q);
return rtn;
}
async pmloginByVCode(pobj, qobj, req) {
let rtn = await this.service.pmloginByVCode(pobj, qobj);
return system.getResult(rtn);
}
async pmSendVCode(pobj, qobj, req) {
let rtn = await this.service.sendVCode(pobj, qobj);
return system.getResult(rtn);
}
}
module.exports = UserCtl;
var system = require("../../../system");
const http = require("http");
const querystring = require('querystring');
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
const moment = require("moment");
class BizOptCtl extends CtlBase {
constructor() {
super("bizchance", CtlBase.getServiceName(BizOptCtl));
}
async findAndCountAll(pobj, qobj, req) {
//设置查询条件
const rs = await this.service.findAndCountAll(pobj);
if (rs.results && rs.results.rows) {
let result = [];
for (let val of rs.results.rows) {
val.company_name = val.business_info.company;
val.customer_number = val.business_info.contactsPhone;
val.customer_name = val.business_info.contactsName;
val.updated_at = moment(val.updated_at).format('YYYY-MM-DD HH:mm:ss');
val.created_at = moment(val.created_at).format('YYYY-MM-DD HH:mm:ss');
val.schemeStatus = val["scheme.scheme_status"];
val.source_name = system.SOURCENAME[val.source_name] ? system.SOURCENAME[val.source_name] : val.source_name;
result.push(val);
}
rs.results.rows = result;
}
return system.getResult(rs);
}
async findBizAndSheme(pobj, qobj, req) {
if (!pobj.id) {
return system.getResult(null, "id can not be empty,100290");
}
const rs = await this.service.findBizAndSheme(pobj);
return system.getResult(rs);
}
async closeBiz(pobj, qobj, req) {
if (!pobj.bizId) {
return system.getResult(null, "bizId can not be empty,100290");
}
if (!pobj.close_reason) {
return system.getResult(null, "close_reason can not be empty,100290");
}
try {
await this.service.closeBiz(pobj);
return system.getResultSuccess();
} catch (err) {
return system.getResult(null, err.message);
}
}
}
module.exports = BizOptCtl;
var system = require("../../../system");
const http = require("http");
const querystring = require('querystring');
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
const moment = require("moment");
class SchemeCtl extends CtlBase {
constructor() {
super("bizchance", CtlBase.getServiceName(SchemeCtl));
}
async create(pobj, qobj, req) {
if (!pobj.bizopt_id) {
return system.getResult(null, "bizopt_id can not be empty,100290");
}
try {
let data = await this.service.create(pobj);
return system.getResult(data);
} catch (err) {
return system.getResult(null, err.message)
}
}
async findOne(pobj, qobj, req) {
if (!pobj.bizopt_id) {
return system.getResult(null, "bizopt_id can not be empty,100290");
}
const rs = await this.service.findOne({ bizopt_id: pobj.bizopt_id });
return system.getResult(rs);
}
}
module.exports = SchemeCtl;
var system = require("../../../system")
const http = require("http")
const querystring = require('querystring');
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
var cacheBaseComp = null;
class AppCtl extends CtlBase {
constructor() {
super("common", CtlBase.getServiceName(AppCtl));
this.userCtl = system.getObject("service.auth.userSve");
}
async findAllApps(p, q, req) {
var rtns = await this.service.findAllApps(p.userid);
return system.getResult(rtns);
}
async getApp(p,q,req) {
let app= await this.cacheManager["AppCache"].cache(p.appkey, null);
return system.getResult({funcJson:JSON.parse(app.functionJSON)});
}
async translateToRouter(funarray,results,parent){
funarray.forEach(item=>{
let result={}
result.path=item.code
result.name=item.code
result.meta={
hideInMenu: false,
hideInBread:false,
notCache: true,
title:item.title,
icon:'replaceIconName'
}
result.component="replaceRightPath"
if(parent){
parent.children.push(result)
}else{
results.push(result)
}
if(item.children && item.children.length>0){
result.children=[]
this.translateToRouter(item.children,results,result)
}
})
}
async buildFrontRouter(p,q,req){
let appkey=p.appkey
let app= await this.cacheManager["AppCache"].cache(appkey, null);
let funobj=JSON.parse(app.functionJSON)
let results=[]
await this.translateToRouter(funobj,results,null)
let rtns=await this.service.upFrontRoute(results,app.id)
await this.cacheManager["AppCache"].invalidate(appkey, null);
return system.getResult({url:rtns.url})
}
async getFuncs(p,q,req){
let appkey=p.appkey
let app= await this.cacheManager["AppCache"].cache(appkey, null);
return system.getResult({funcJson:JSON.parse(app.functionJSON)})
//return system.getResult({funcJson:[]})
}
async saveFuncTree(p,q,req){
let rtn=await this.service.saveFuncTree(p)
return system.getResult(rtn)
}
async create(pobj, queryobj, req) {
pobj.creator_id = pobj.userid;//设置创建者
return super.create(pobj, queryobj, req)
}
async update(pobj, queryobj, req) {
return super.update(pobj, queryobj, req);
}
async initNewInstance(pobj, queryobj, req) {
var rtn = {};
rtn.appkey = this.getUUID();
rtn.secret = this.getUUID();
return system.getResult(rtn);
}
async resetPass(pobj, queryobj, req) {
pobj.password = await super.encryptPasswd(settings.defaultpwd);
var rtn = this.service.resetPass(pobj);
return system.getResult(rtn);
}
async createAdminUser(pobj, queryobj, req) {
pobj.password = settings.defaultpwd;
var rtn = this.service.createAdminUser(pobj);
return system.getResult(rtn);
}
async create(pobj, queryobj, req) {
//设置创建者,需要同时创建app管理员、默认密码、电话
pobj.creator_id = pobj.userid;
// pobj.password=super.encryptPasswd(settings.defaultpwd);
//构造默认的应用相关的URL
pobj.authUrl = settings.protocalPrefix + pobj.domainName + "/auth";
pobj.docUrl = settings.protocalPrefix + pobj.domainName + "/web/common/metaCtl/getApiDoc";
pobj.uiconfigUrl = settings.protocalPrefix + pobj.domainName + "/api/meta/config/fetchAppConfig";
pobj.opCacheUrl = settings.protocalPrefix + pobj.domainName + "/api/meta/opCache/opCacheData";
pobj.notifyCacheCountUrl = settings.protocalPrefix + pobj.domainName + "/api/meta/opCache/recvNotificationForCacheCount";
var app = await super.create(pobj, queryobj, req);
return system.getResult(app);
}
async fetchApiCallData(pobj, queryobj, req) {
var curappkey = pobj.curappkey;
//检索出作为访问时的app呼出调用数据
var rtn = await this.service.fetchApiCallData(curappkey);
return system.getResultSuccess(rtn);
}
//接受缓存计数通知接口
async recvNotificationForCacheCount(p, q, req) {
return this.service.recvNotificationForCacheCount(p);
}
}
module.exports = AppCtl;
var p={"appkey":"08cb8300-ef1e-4e35-ba49-3de36ba497d2"}
let acl=new AppCtl()
acl.buildFrontRouter(p).then(res=>{
console.log(res.data)
})
\ No newline at end of file
var system = require("../../../system")
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
const uuidv4 = require('uuid/v4');
class CachSearchesCtl extends CtlBase {
constructor() {
super("common", CtlBase.getServiceName(CachSearchesCtl));
}
async initNewInstance(queryobj, qobj) {
return system.getResultSuccess({});
}
async findAndCountAll(pobj, gobj, req) {
pobj.opCacheUrl = req.session.app.opCacheUrl;
pobj.appid = req.appid;
return await this.service.findAndCountAllCache(pobj);
}
async delCache(queryobj, qobj, req) {
var param = { key: queryobj.key, appid: req.appid, opCacheUrl: req.session.app.opCacheUrl };
return await this.service.delCache(param);
}
async clearAllCache(queryobj, qobj, req) {
var param = { appid: req.appid, opCacheUrl: req.session.app.opCacheUrl };
return await this.service.clearAllCache(param);
}
}
module.exports = CachSearchesCtl;
var system = require("../../../system")
const http = require("http")
const querystring = require('querystring');
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
class CompanyCtl extends CtlBase {
constructor() {
super("common", CtlBase.getServiceName(CompanyCtl));
}
async update(p,q,req){
let u= await super.update(p,q,req)
//缓存失效
await this.cacheManager["CompanyCache"].invalidate(p.companykey)
let company=await this.cacheManager["CompanyCache"].cache(p.companykey)
return system.getResult(company)
}
async setOrgs(p,q,req){
let orgs=await this.service.setOrgs(p,req.xctx.fromcompanykey)
return system.getResult(orgs)
}
async getOrgs(p,q,req){
let companynew=await this.cacheManager["CompanyCache"].cache(req.xctx.fromcompanykey)
return system.getResult({orgJson:JSON.parse(companynew.orgJson)})
}
}
module.exports = CompanyCtl;
var system = require("../../../system")
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
var cacheBaseComp = null;
class MetaCtl extends CtlBase {
constructor() {
super("common", CtlBase.getServiceName(MetaCtl));
}
}
module.exports = MetaCtl;
var system = require("../../../system")
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
const uuidv4 = require('uuid/v4');
var moment = require("moment");
class OplogCtl extends CtlBase {
constructor() {
super("common",CtlBase.getServiceName(OplogCtl));
//this.appS=system.getObject("service.appSve");
}
async initNewInstance(qobj) {
var u = uuidv4();
var aid = u.replace(/\-/g, "");
var rd = { name: "", appid: aid }
return system.getResult(rd);
}
async debug(obj) {
obj.logLevel = "debug";
return this.create(obj);
}
async info(obj) {
obj.logLevel = "info";
return this.create(obj);
}
async warn(obj) {
obj.logLevel = "warn";
return this.create(obj);
}
async error(obj) {
obj.logLevel = "error";
return this.create(obj);
}
async fatal(obj) {
obj.logLevel = "fatal";
return this.create(obj);
}
/*
返回20位业务订单号
prefix:业务前缀
*/
async getBusUid_Ctl(prefix) {
prefix = (prefix || "");
if (prefix) {
prefix = prefix.toUpperCase();
}
var prefixlength = prefix.length;
var subLen = 8 - prefixlength;
var uidStr = "";
if (subLen > 0) {
uidStr = await this.getUidInfo_Ctl(subLen, 60);
}
var timStr = moment().format("YYYYMMDDHHmm");
return prefix + timStr + uidStr;
}
/*
len:返回长度
radix:参与计算的长度,最大为62
*/
async getUidInfo_Ctl(len, radix) {
var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');//长度62,到yz长度为长36
var uuid = [], i;
radix = radix || chars.length;
if (len) {
for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
} else {
var r;
uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
uuid[14] = '4';
for (i = 0; i < 36; i++) {
if (!uuid[i]) {
r = 0 | Math.random() * 16;
uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
}
}
}
return uuid.join('');
}
}
module.exports = OplogCtl;
var system = require("../../../system")
const http = require("http")
const querystring = require('querystring');
var settings=require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
var cacheBaseComp = null;
class PConfigCtl extends CtlBase {
constructor() {
super("common",CtlBase.getServiceName(PConfigCtl));
this.userCtl = system.getObject("service.auth.userSve");
}
async initNewInstance(pobj,queryobj, req) {
var rtn = {};
return system.getResult(rtn);
}
async create(pobj,queryobj, req) {
pobj.app_id=req.appid;
pobj.appkey=req.appkey;
var rtn=await super.create(pobj,queryobj, req);
return system.getResult(rtn);
}
async update(pobj,queryobj, req) {
pobj.app_id=req.appid;
pobj.appkey=req.appkey;
var rtn=await super.update(pobj);
return system.getResult(rtn);
}
}
module.exports = PConfigCtl;
var system = require("../../../system")
const http = require("http")
const querystring = require('querystring');
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
var cacheBaseComp = null;
class RouteCtl extends CtlBase {
constructor() {
super("common", CtlBase.getServiceName(RouteCtl));
this.appS=system.getObject("service.common.appSve")
}
async create(p,q,req){
let appid=p.app_id;
let apptmp= await this.appS.findById(appid)
let routedata={
name:p.name,
hosts:p.shosts.split(","),
paths:p.spaths.split(","),
isstrip:false,
app_id:appid,
shosts:p.shosts,
spaths:p.spaths
}
let rtn= await this.service.create(apptmp.name, routedata, req);
return system.getResult(rtn)
}
}
module.exports = RouteCtl;
var system = require("../../../system")
var settings = require("../../../../config/settings");
class SocketNotifyCtl{
constructor(){
}
setSocketServer(s){
this.socketServer=s;
}
//异步推送消息到客户端
notifyClientMsg(user,msg){
var uk= this.buildPrivateChannel(user);
var msgHandler=this.socketServer.users[uk];
msgHandler.notifyClient(uk,msg);
}
buildPrivateChannel(user){
var ukchannel= user.app_id+"¥"+user.id;
return ukchannel;
}
buildMsgTarget(user){
var ukchannel= user.app_id+"¥"+user.id;
var nickName=user.nickName;
var imgUrl=user.imgUrl;
var rtn=ukchannel+"¥"+nickName+"¥"+imgUrl;
return rtn;
}
}
module.exports=SocketNotifyCtl;
var system=require("../../../system")
const CtlBase = require("../../ctl.base");
const crypto = require('crypto');
var fs=require("fs");
var accesskey='3KV9nIwW8qkTGlrPmAe3HnR3fzM6r5';
var accessKeyId='LTAI4GC5tSKvqsH2hMqj6pvd';
var url="https://gsb-zc.oss-cn-beijing.aliyuncs.com";
class UploadCtl extends CtlBase{
constructor(){
super("common",CtlBase.getServiceName(UploadCtl));
this.cmdPdf2HtmlPattern = "docker run -i --rm -v /tmp/:/pdf 0c pdf2htmlEX --zoom 1.3 '{fileName}'";
this.restS=system.getObject("util.execClient");
this.cmdInsertToFilePattern = "sed -i 's/id=\"page-container\"/id=\"page-container\" contenteditable=\"true\"/'";
//sed -i 's/1111/&BBB/' /tmp/input.txt
//sed 's/{position}/{content}/g' {path}
}
async getOssConfig(){
var policyText = {
"expiration":"2119-12-31T16:00:00.000Z",
"conditions":[
["content-length-range",0,1048576000],
["starts-with","$key","zc"]
]
};
var b = new Buffer(JSON.stringify(policyText));
var policyBase64 = b.toString('base64');
var signature= crypto.createHmac('sha1',accesskey).update(policyBase64).digest().toString('base64'); //base64
var data={
OSSAccessKeyId:accessKeyId,
policy:policyBase64,
Signature:signature,
Bucket:'gsb-zc',
success_action_status:201,
url:url
};
return data;
};
async upfile(srckey,dest){
var oss=system.getObject("util.ossClient");
var result=await oss.upfile(srckey,"/tmp/"+dest);
return result;
};
async downfile(srckey){
var oss=system.getObject("util.ossClient");
var downfile=await oss.downfile(srckey).then(function(){
downfile="/tmp/"+srckey;
return downfile;
});
return downfile;
};
async pdf2html(obj){
var srckey=obj.key;
var downfile=await this.downfile(srckey);
var cmd=this.cmdPdf2HtmlPattern.replace(/\{fileName\}/g, srckey);
var rtn=await this.restS.exec(cmd);
var path="/tmp/"+srckey.split(".pdf")[0]+".html";
var a=await this.insertToFile(path);
fs.unlink("/tmp/"+srckey);
var result=await this.upfile(srckey.split(".pdf")[0]+".html",srckey.split(".pdf")[0]+".html");
return result.url;
};
async insertToFile(path){
var cmd=this.cmdInsertToFilePattern+" "+path;
return await this.restS.exec(cmd);
};
}
module.exports=UploadCtl;
var system = require("../../../system");
const http = require("http");
const querystring = require('querystring');
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
const moment = require("moment");
class DeliverCtl extends CtlBase {
constructor() {
super("delivery", CtlBase.getServiceName(DeliverCtl));
}
async findAndCountAll(pobj, qobj, req) {
//设置查询条件
const rs = await this.service.findAndCountAll(pobj);
let result = [];
for (let val of rs.results.rows) {
val.company_name = val.delivery_info.companyName;
val.customer_number = val.delivery_info.contactsPhone;
val.customer_name = val.delivery_info.contactsName;
val.service_address = val.delivery_info.serviceName;
val.updated_at = moment(val.updated_at).format('YYYY-MM-DD HH:mm:ss');
val.created_at = moment(val.created_at).format('YYYY-MM-DD HH:mm:ss');
if (val.delivery_status === system.ANNUALREPORT.TAKEEFFECT) {
val.delivery_status = val['annualreports.status'] || system.ANNUALREPORT.WAITDECLARE;
}
result.push(val);
}
rs.results.rows = result;
return system.getResult(rs);
}
// 查询 详情
async findInfo(pobj, qobj, req) {
if (!pobj.id) {
return system.getResult(null, "id can not be empty,100290");
}
try {
const rs = await this.service.findInfo(pobj);
return system.getResult(rs);
} catch (err) {
return system.getResult(null, err.message)
}
}
async temporarySave(pobj, qobj, req) {
if (!pobj.deliver_id) {
return system.getResult(null, "deliver_id can not be empty,100290");
}
try {
let rs = await this.service.temporarySave(pobj);
return system.getResult(rs);
} catch (err) {
return system.getResult(null, err.message)
}
}
async findTemporary(pobj, qobj, req) {
if (!pobj.deliver_id) {
return system.getResult(null, "deliver_id can not be empty,100290");
}
const rs = await this.service.findTemporary(pobj);
return system.getResultSuccess(rs);
}
// 提交材料
async submitMaterials(pobj, qobj, req) {
//TODO:各种参数校验
if (!pobj.deliver_id) {
return system.getResult(null, "deliver_id can not be empty,100290");
}
try {
let rs = await this.service.submitMaterials(pobj);
return system.getResult(rs);
} catch (err) {
return system.getResult(null, err.message)
}
}
async changeDeliveryStatus(pobj, qobj, req) {
if (!pobj.id) {
return system.getResult(null, "deliver_id can not be empty,100290");
}
try {
let rs = await this.service.changeDeliveryStatus(pobj);
return system.getResult(rs);
} catch (err) {
return system.getResult(null, err.message)
}
}
async addQualification(pobj, qobj, req) {
if (!pobj.deliver_id) {
return system.getResult(null, "deliver_id can not be empty,100290");
}
try {
let rs = await this.service.addQualification(pobj);
return system.getResult(rs);
} catch (err) {
return system.getResult(null, err.message)
}
}
async closeDeliver(pobj) {
if (!pobj.id) {
return system.getResult(null, "id can not be empty,100290");
}
try {
let rs = await this.service.closeDeliver(pobj);
return system.getResult(rs);
} catch (err) {
return system.getResult(null, err.message)
}
}
async addMail(pobj) {
if (!pobj.id) {
return system.getResult(null, "id can not be empty,100290");
}
try {
let rs = await this.service.addMail(pobj);
return system.getResult(rs);
} catch (err) {
return system.getResult(null, err.message)
}
}
async findAnnualReportInfo(pobj) {
if (!pobj.id) {
return system.getResult(null, "id can not be empty,100290");
}
try {
const rs = await this.service.findAnnualReportInfo(pobj);
return system.getResult(rs);
} catch (err) {
return system.getResult(null, err.message)
}
}
async declareReport(pobj) {
if (!pobj.id) {
return system.getResult(null, "id can not be empty,100290");
}
if (!pobj.file || !pobj.file.url) {
return system.getResult(null, "file can not be empty,100290");
}
try {
const rs = await this.service.declareReport(pobj);
return system.getResult(rs);
} catch (err) {
return system.getResult(null, err.message)
}
}
async toCollecting(pobj) {
if (!pobj.id) {
return system.getResult(null, "deliver_id can not be empty,100290");
}
try {
let rs = await this.service.toCollecting(pobj);
return system.getResult(rs);
} catch (err) {
return system.getResult(null, err.message)
}
}
}
module.exports = DeliverCtl;
var system = require("../../../system");
const http = require("http");
const querystring = require('querystring');
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
const moment = require("moment");
class MaterialCtl extends CtlBase {
constructor() {
super("delivery", CtlBase.getServiceName(MaterialCtl));
this.db = system.getObject("db.common.connection").getCon();
}
// 获取 组装 excl 文件 数据
async waitGenerate(pobj, qobj, req) {
const rs = await this.service.findAll({
ifDownload: false
}, [
{
model: this.db.models.deliver,
attributes: ["product_code"],
}
]);
// 组装数据
return system.getResult(rs.map(item => {
const type = item.deliver.product_code;
const { proposerInfo, otherMaterialsInfo, implementationPlanInfo, safetyInfo, shareholderData } = item;
const { businessLicense, businessInformation, principalInfo, contactInfo } = proposerInfo;
const { webApp, targetUser, profitableWay, specialApproval, serviceProjectEdi, serviceProjectIcp } = implementationPlanInfo;
// 1. id ,type
// 2.注册认证
let registeredAddressData = {
authentication: {},
files: []
};
let legalRepresentative = principalInfo.filter(item => {
return item.title === "法定代表人"
});
legalRepresentative = legalRepresentative.length > 0 ? legalRepresentative[0] : {};
registeredAddressData.authentication = {
personType: "法人",
companyType: businessLicense.type,
enterpriseCode: businessLicense.enterpriseCode,
name: businessLicense.name,
legalTypes: businessInformation.legalTypes,
legalName: legalRepresentative.name,
legalCertificateId: legalRepresentative.certificateId,
legalCertificateType: legalRepresentative.certificateType,
contactAddress: contactInfo.address
};
registeredAddressData.files.push(
...(Array.isArray(otherMaterialsInfo) ? otherMaterialsInfo.filter(item => {
return item.title === "营业执照";
}) : [])
, {
title: "法定代表人身份证件",
file: legalRepresentative.file
});
// 3. 发展和实施计划
let implementationPlanData = {
// ICP
// EDI
webApp: webApp,
files: []
};
let serviceProject = {};
if (type === "ICP") {
serviceProject = {
releaseAndDelivery: "",
community: "",
protectiveProcessing: "",
interactive: "",
search: ""
}
serviceProjectIcp.map(item => {
switch (item.title) {
case "信息发布平台和递送服务":
serviceProject["releaseAndDelivery"] = item.value.join().replace(/其他/, item.otherValue);
break
case "信息搜索查询服务":
serviceProject["search"] = item.value.join().replace(/其他/, item.otherValue);
break
case "信息社区服务":
serviceProject["community"] = item.value.join().replace(/其他/, item.otherValue);
break
case "信息保护加工处理服务":
serviceProject["protectiveProcessing"] = item.value.join().replace(/其他/, item.otherValue);
break
case "信息及时交互服务":
serviceProject["interactive"] = item.value.join().replace(/其他/, item.otherValue);
break
}
})
} else if (type === 'EDI') {
serviceProject = {
electronicExchange: "",
transactionProcessing: "",
dataProcessing: ""
}
serviceProjectEdi.map(item => {
switch (item.title) {
case "电子交换业务":
serviceProject["electronicExchange"] = item.value.join();
break
case "交易处理业务":
serviceProject["transactionProcessing"] = item.value.join();
break
case "网络/电子设备数据处理业务":
serviceProject["dataProcessing"] = item.value.join();
break
}
})
}
implementationPlanData[type] = {
...serviceProject,
targetUser: targetUser.join(),
profitableWay: profitableWay.join()
};
// 专项审批项目 ICP
if (type === "ICP") {
implementationPlanData.files.push(...specialApproval.filter(item => {
return item.file && item.file.url ? true : false
}).map(item => {
return {
file: item.file,
title: `专项审批项-${item.title}`
}
}));
}
implementationPlanData.files.push(...otherMaterialsInfo.filter(item => {
return item.title === "域名证书"
}));
if (type === "EDI") {
implementationPlanData.files.push(...serviceProjectEdi.filter(item => {
return item.file && item.file.url ? true : false
}).map(item => {
return {
title: item.title,
file: item.file
}
}));
}
// 4. 增值电信申请表
let licenceData = {
licence: {
companyName: businessLicense.name,
enterpriseCode: businessLicense.enterpriseCode,
registeredCapital: businessLicense.registeredCapital,
registerAddress: businessLicense.address,
fixedTelephone: businessInformation.fixedTelephone,
workAddress: businessInformation.address,
zipCode: businessInformation.zipCode,
comapnyNature: businessInformation.comapnyNature,
ifListed: businessInformation.ifListed ? "是" : "否"
},
files: [
...(Array.isArray(otherMaterialsInfo) ? otherMaterialsInfo.filter(item => {
return item.title === "营业执照";
}) : [])
]
}
// 5. 公司及人员情况
let companyPersonnelData = {
personnelInfo: principalInfo,
companyInfo: {
bussinessDirection: businessInformation.bussinessDirection,
staffSize: businessInformation.staffSize,
businessScale: businessInformation.businessScale
},
files: []
}
companyPersonnelData.files.push(...principalInfo.filter(item => {
return item.file && item.file.url ? true : false
}).map(item => {
return {
"title": `${item.title}身份证`,
file: item.file
}
}), ...(Array.isArray(otherMaterialsInfo) ? otherMaterialsInfo.filter(item => {
return item.title === "社保证明文件";
}) : []))
// 6. 网络与信息安全
let safetyData = {
safety: {
qualification: safetyInfo.qualification,
responsibility: safetyInfo.responsibility
},
files: []
}
// 7. 股东信息
let shareholdersData = {
shareholdes: shareholderData,
files: []
}
shareholdersData.files.push(...(Array.isArray(otherMaterialsInfo) ? otherMaterialsInfo.filter(item => {
return ["股东追溯承诺书", "申请者国家企业信用信息公示系统截图"].includes(item.title);
}) : []))
shareholdersData.files.push(...shareholderData.filter(item => {
return item.file && item.file.url ? true : false
}).map(item => {
return {
file: item.file,
title: `${item.name}身份证`
}
}));
// 8. 电信业务承诺书
let telecommunicationServiceData = {
files: [...(Array.isArray(otherMaterialsInfo) ? otherMaterialsInfo.filter(item => {
return ["依法经营电信业务承诺书"].includes(item.title);
}) : [])]
}
// 9. 其他材料
let otherMaterialsData = {
files: [...(Array.isArray(otherMaterialsInfo) ? otherMaterialsInfo.filter(item => {
return ["收费方案", "服务器托管协议", "服务器托管商IDC许可证"].includes(item.title) || item.fixed === false;
}) : [])]
}
return {
id: item.id,
type,
registeredAddressData,
implementationPlanData,
licenceData,
companyPersonnelData,
safetyData,
shareholdersData,
telecommunicationServiceData,
otherMaterialsData
}
}));
}
// 更新 下载 url
async updateUrl(pobj) {
if (!pobj.id) {
return system.getResult(null, "id can not be empty,100290");
}
if (!pobj.url) {
return system.getResult(null, "url can not be empty,100290");
}
await this.service.updateByWhere({
ifDownload: true,
downloadUrl: pobj.url
}, {
id: pobj.id,
});
return system.getResultSuccess();
}
// 返回 下载url
async getUrl(pobj) {
if (!pobj.deliver_id) {
return system.getResult(null, "id can not be empty,100290");
}
const rs = await this.service.findOne({ deliver_id: pobj.deliver_id }, ["downloadUrl", "ifDownload"]);
if (!rs) {
return system.getResult(null, "查不到数据");
}
return system.getResult(rs);
}
}
module.exports = MaterialCtl;
const system = require("../../../system");
const settings = require("../../../../config/settings");
function exp(db, DataTypes) {
var base = {
code: {
type: DataTypes.STRING(50),
unique: true
},
name: DataTypes.STRING(1000),
};
return base;
}
module.exports = exp;
const system = require("../../system");
const settings = require("../../../config/settings");
const appconfig = system.getSysConfig();
function exp(db, DataTypes) {
var base = {
//继承的表引用用户信息user_id
code: DataTypes.STRING(100),
name: DataTypes.STRING(500),
creator: DataTypes.STRING(100),//创建者
updator: DataTypes.STRING(100),//更新者
auditor: DataTypes.STRING(100),//审核者
opNotes: DataTypes.STRING(500),//操作备注
auditStatusName: {
type:DataTypes.STRING(50),
defaultValue:"待审核",
},
auditStatus: {//审核状态"dsh": "待审核", "btg": "不通过", "tg": "通过"
type: DataTypes.ENUM,
values: Object.keys(appconfig.pdict.audit_status),
set: function (val) {
this.setDataValue("auditStatus", val);
this.setDataValue("auditStatusName", appconfig.pdict.audit_status[val]);
},
defaultValue:"dsh",
},
sourceTypeName: DataTypes.STRING(50),
sourceType: {//来源类型 "order": "订单","expensevoucher": "费用单","receiptvoucher": "收款单", "trademark": "商标单"
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.source_type),
set: function (val) {
this.setDataValue("sourceType", val);
this.setDataValue("sourceTypeName", appconfig.pdict.source_type[val]);
}
},
sourceOrderNo: DataTypes.STRING(100),//来源单号
};
return base;
}
module.exports = exp;
const system = require("../system")
const settings = require("../../config/settings.js");
class CacheBase {
constructor() {
this.db = system.getObject("db.common.connection").getCon();
this.redisClient = system.getObject("util.redisClient");
this.desc = this.desc();
this.prefix = this.prefix();
this.cacheCacheKeyPrefix = "sadd_base:cachekey";
this.isdebug = this.isdebug();
}
isdebug() {
return false;
}
desc() {
throw new Error("子类需要定义desc方法,返回缓存描述");
}
prefix() {
throw new Error("子类需要定义prefix方法,返回本缓存的前缀");
}
async cache(inputkey, val, ex, ...items) {
const cachekey = this.prefix + inputkey;
var cacheValue = await this.redisClient.get(cachekey);
if (!cacheValue || cacheValue == "undefined" || cacheValue == "null" || this.isdebug) {
var objvalstr = await this.buildCacheVal(cachekey, inputkey, val, ex, ...items);
if (!objvalstr) {
return null;
}
if (ex) {
await this.redisClient.setWithEx(cachekey, objvalstr, ex);
} else {
await this.redisClient.set(cachekey, objvalstr);
}
//缓存当前应用所有的缓存key及其描述
this.redisClient.sadd(this.cacheCacheKeyPrefix, [cachekey + "|" + this.desc]);
return JSON.parse(objvalstr);
} else {
// this.redisClient.setWithEx(cachekey, cacheValue, ex);
return JSON.parse(cacheValue);
}
}
async getCache(inputkey, ex) {
const cachekey = this.prefix + inputkey;
var cacheValue = await this.redisClient.get(cachekey);
if (!cacheValue || cacheValue == "undefined" || cacheValue == "null") {
return null;
} else {
if (ex) {
this.redisClient.set(cachekey, cacheValue, ex);
}
return JSON.parse(cacheValue);
}
}
async invalidate(inputkey) {
const cachekey = this.prefix + inputkey;
this.redisClient.delete(cachekey);
return 0;
}
async buildCacheVal(cachekey, inputkey, val, ex, ...items) {
throw new Error("子类中实现构建缓存值的方法,返回字符串");
}
}
module.exports = CacheBase;
const CacheBase=require("../cache.base");
const system=require("../../system");
//缓存首次登录的赠送的宝币数量
class CacheLocker extends CacheBase{
constructor(){
super();
this.prefix="locker_";
}
desc(){
}
prefix(){
}
async init(tradekey){
const key=this.prefix+tradekey;
return this.redisClient.rpushWithEx(key,"1",1800);
}
async enter(tradekey){
const key=this.prefix+tradekey;
return this.redisClient.rpop(key);
}
async release(tradekey){
const key=this.prefix+tradekey;
return this.redisClient.rpushWithEx(key,"1",1800);
}
}
module.exports=CacheLocker;
const CacheBase = require("../cache.base");
const system = require("../../system");
const settings = require("../../../config/settings");
class AppCache extends CacheBase{
constructor(){
super();
this.prefix="g_centerappkey:";
this.appDao=system.getObject("db.common.appDao");
}
isdebug(){
return settings.env=="dev";
}
desc(){
return "缓存本地应用对象";
}
prefix(){
return "g_applocal_"
}
async buildCacheVal(cachekey,inputkey, val, ex, ...items) {
const configValue=await this.appDao.findOne({appkey:inputkey});
if (configValue) {
return JSON.stringify(configValue);
}
return null;
}
}
module.exports=AppCache;
\ No newline at end of file
const CacheBase = require("../cache.base");
const system = require("../../system");
const settings = require("../../../config/settings");
class CompanyCache extends CacheBase{
constructor(){
super();
this.prefix="g_centercompanykey:";
this.companyDao=system.getObject("db.common.companyDao");
}
isdebug(){
return settings.env=="dev";
}
desc(){
return "缓存统一公司对象";
}
prefix(){
return "gc_companylocal_"
}
async buildCacheVal(cachekey,inputkey, val, ex, ...items) {
const configValue=await this.companyDao.findOne({companykey:inputkey});
if (configValue) {
return JSON.stringify(configValue);
}
return null;
}
}
module.exports=CompanyCache;
\ No newline at end of file
const CacheBase = require("../cache.base");
const system = require("../../system");
class MagCache extends CacheBase {
constructor() {
super();
this.prefix = "magCache";
}
desc() {
return "管理当前缓存的key";
}
prefix() {
return "g_magcache:";
}
async getCacheSmembersByKey(key) {
return this.redisClient.smembers(key);
}
async delCacheBySrem(key, value) {
return this.redisClient.srem(key, value)
}
async keys(p) {
return this.redisClient.keys(p);
}
async get(k) {
return this.redisClient.get(k);
}
async del(k) {
return this.redisClient.delete(k);
}
async clearAll() {
console.log("xxxxxxxxxxxxxxxxxxxclearAll............");
return this.redisClient.flushall();
}
}
module.exports = MagCache;
const CacheBase = require("../cache.base");
const system = require("../../system");
const settings = require("../../../config/settings");
class UserCache extends CacheBase{
constructor(){
super();
this.userDao=system.getObject("db.auth.userDao");
}
isdebug(){
return settings.env=="dev";
}
desc(){
return "缓存本地应用对象";
}
prefix(){
return "g_userlocal_"
}
async buildCacheVal(cachekey,inputkey, val, ex, ...items) {
const configValue = await this.userDao.model.findAll({
where: { userName: inputkey, app_id: settings.pmappid },
attributes: ['id','userName', 'nickName','headUrl','jwtkey','jwtsecret','created_at','isSuper','isAdmin','mail'],
include: [
{ model: this.db.models.company,raw:true},
{model:this.db.models.role,as:"Roles",attributes:["id","code"],}
],
});
if (configValue && configValue[0]) {
return JSON.stringify(configValue[0]);
}
return null;
}
}
module.exports=UserCache;
\ No newline at end of file
const CacheBase = require("../cache.base");
const system = require("../../system");
const settings = require("../../../config/settings");
//缓存首次登录的赠送的宝币数量
class VCodeCache extends CacheBase {
constructor() {
super();
this.smsUtil = system.getObject("util.smsClient");
}
// isdebug() {
// return settings.env == "dev";
// }
desc() {
return "缓存给手机发送的验证码60妙";
}
prefix() {
return "g_vcode_"
}
async buildCacheVal(cachekey, inputkey, val, ex, ...items) {
//inputkey采用appkey_mobile的形式
var mobile = inputkey;
var tmplCode = val;
var signName = items ? items[0] : "";
var vcode = await this.smsUtil.getUidStr(6, 10);
if (!tmplCode && !signName) {
this.smsUtil.sendMsg(mobile, vcode);
} //tmplCode为发送短信编码,需在阿里开通,signName为短信头描述信息,二者没有传递则用默认的发送验证码
else {
this.smsUtil.aliSendMsg(mobile, tmplCode, signName, JSON.stringify({ code: vcode }));
}
return JSON.stringify({ vcode: vcode });
}
}
module.exports = VCodeCache;
const system = require("../system");
class Dao {
constructor(modelName) {
this.modelName = modelName;
var db = system.getObject("db.common.connection").getCon();
this.db = db;
console.log("........set dao model..........");
console.log(this.modelName)
this.model = db.models[this.modelName];
console.log(this.modelName);
}
preCreate(u) {
return u;
}
async create(u, t) {
var u2 = this.preCreate(u);
if (t) {
return this.model.create(u2, { transaction: t }).then(u => {
return u;
});
} else {
return this.model.create(u2).then(u => {
return u;
});
}
}
static getModelName(ClassObj) {
return ClassObj["name"].substring(0, ClassObj["name"].lastIndexOf("Dao")).toLowerCase()
}
async refQuery(qobj) {
var w = qobj.refwhere ? qobj.refwhere : {};
if (qobj.levelinfo) {
w[qobj.levelinfo.levelfield] = qobj.levelinfo.level;
}
if (qobj.parentinfo) {
w[qobj.parentinfo.parentfield] = qobj.parentinfo.parentcode;
}
//如果需要控制数据权限
if (qobj.datapriv) {
w["id"] = { [this.db.Op.in]: qobj.datapriv };
}
if (qobj.likestr) {
w[qobj.fields[0]] = { [this.db.Op.like]: "%" + qobj.likestr + "%" };
return this.model.findAll({ where: w, attributes: qobj.fields });
} else {
return this.model.findAll({ where: w, attributes: qobj.fields });
}
}
async bulkDelete(ids) {
var en = await this.model.destroy({ where: { id: { [this.db.Op.in]: ids } } });
return en;
}
async bulkDeleteByWhere(whereParam, t) {
var en = null;
if (t != null && t != 'undefined') {
whereParam.transaction = t;
return await this.model.destroy(whereParam);
} else {
return await this.model.destroy(whereParam);
}
}
async delete(qobj, t) {
var en = null
if (t != null && t != 'undefined') {
en = await this.model.findOne({ where: { id: qobj.id }, transaction: t });
if (en != null) {
await en.destroy({ transaction: t });
return en
}
} else {
en = await this.model.findOne({ where: { id: qobj.id } });
if (en != null) {
return en.destroy();
}
}
return null;
}
extraModelFilter(pobj) {
//return {"key":"include","value":{model:this.db.models.app}};
return null;
}
extraWhere(obj, where) {
return where;
}
orderBy() {
//return {"key":"include","value":{model:this.db.models.app}};
return [["created_at", "DESC"]];
}
buildQuery(qobj) {
var linkAttrs = [];
const pageNo = qobj.pageInfo.pageNo;
const pageSize = qobj.pageInfo.pageSize;
const search = qobj.search;
var qc = {};
//设置分页查询条件
qc.limit = pageSize;
qc.offset = (pageNo - 1) * pageSize;
//默认的查询排序
qc.order = this.orderBy();
//构造where条件
qc.where = {};
if (search) {
Object.keys(search).forEach(k => {
// console.log(search[k], ":search[k]search[k]search[k]");
if (search[k] && search[k] != 'undefined' && search[k] != "") {
if ((k.indexOf("Date") >= 0 || k.indexOf("_at") >= 0)) {
if (search[k] != "" && search[k]) {
var stdate = new Date(search[k][0]);
var enddate = new Date(search[k][1]);
qc.where[k] = { [this.db.Op.between]: [stdate, enddate] };
}
}
else if (k.indexOf("id") >= 0) {
qc.where[k] = search[k];
}
else if (k.indexOf("channelCode") >= 0) {
qc.where[k] = search[k];
}
else if (k.indexOf("Type") >= 0) {
qc.where[k] = search[k];
}
else if (k.indexOf("Status") >= 0) {
qc.where[k] = search[k];
}
else if (k.indexOf("status") >= 0) {
qc.where[k] = search[k];
}
else {
if (k.indexOf("~") >= 0) {
linkAttrs.push(k);
} else {
qc.where[k] = { [this.db.Op.like]: "%" + search[k] + "%" };
}
}
}
});
}
this.extraWhere(qobj, qc.where, qc, linkAttrs);
var extraFilter = this.extraModelFilter(qobj);
if (extraFilter) {
qc[extraFilter.key] = extraFilter.value;
}
console.log(" ------------ 传入 的 查询 条件 ------------- ");
console.log(qc);
return qc;
}
buildaggs(qobj) {
var aggsinfos = [];
if (qobj.aggsinfo) {
qobj.aggsinfo.sum.forEach(aggitem => {
var t1 = [this.db.fn('SUM', this.db.col(aggitem.field)), aggitem.field + "_" + "sum"];
aggsinfos.push(t1);
});
qobj.aggsinfo.avg.forEach(aggitem => {
var t2 = [this.db.fn('AVG', this.db.col(aggitem.field)), aggitem.field + "_" + "avg"];
aggsinfos.push(t2);
});
}
return aggsinfos;
}
async findAggs(qobj, qcwhere) {
var aggArray = this.buildaggs(qobj);
if (aggArray.length != 0) {
qcwhere["attributes"] = {};
qcwhere["attributes"] = aggArray;
qcwhere["raw"] = true;
var aggResult = await this.model.findOne(qcwhere);
return aggResult;
} else {
return {};
}
}
async findAndCountAll(qobj, t) {
var qc = this.buildQuery(qobj);
var apps = await this.model.findAndCountAll(qc);
var aggresult = await this.findAggs(qobj, qc);
var rtn = {};
rtn.results = apps;
rtn.aggresult = aggresult;
return rtn;
}
preUpdate(obj) {
return obj;
}
async update(obj, tm) {
var obj2 = this.preUpdate(obj);
if (tm != null && tm != 'undefined') {
return this.model.update(obj2, { where: { id: obj2.id }, transaction: tm });
} else {
return this.model.update(obj2, { where: { id: obj2.id } });
}
}
async bulkCreate(ids, t) {
if (t != null && t != 'undefined') {
return await this.model.bulkCreate(ids, { transaction: t });
} else {
return await this.model.bulkCreate(ids);
}
}
async updateByWhere(setObj, whereObj, t) {
let inWhereObj = {}
if (t && t != 'undefined') {
if (whereObj && whereObj != 'undefined') {
inWhereObj["where"] = whereObj;
inWhereObj["transaction"] = t;
} else {
inWhereObj["transaction"] = t;
}
} else {
inWhereObj["where"] = whereObj;
}
return this.model.update(setObj, inWhereObj);
}
async customExecAddOrPutSql(sql, paras = null) {
return this.db.query(sql, paras);
}
async customQuery(sql, paras, t) {
var tmpParas = null;//||paras=='undefined'?{type: this.db.QueryTypes.SELECT }:{ replacements: paras, type: this.db.QueryTypes.SELECT };
if (t && t != 'undefined') {
if (paras == null || paras == 'undefined') {
tmpParas = { type: this.db.QueryTypes.SELECT };
tmpParas.transaction = t;
} else {
tmpParas = { replacements: paras, type: this.db.QueryTypes.SELECT };
tmpParas.transaction = t;
}
} else {
tmpParas = paras == null || paras == 'undefined' ? { type: this.db.QueryTypes.SELECT } : { replacements: paras, type: this.db.QueryTypes.SELECT };
}
return this.db.query(sql, tmpParas);
}
async findCount(whereObj = null) {
return this.model.count(whereObj, { logging: false }).then(c => {
return c;
});
}
async findSum(fieldName, whereObj = null) {
return this.model.sum(fieldName, whereObj);
}
async getPageList(pageIndex, pageSize, whereObj = null, orderObj = null, attributesObj = null, includeObj = null) {
var tmpWhere = {};
tmpWhere.limit = pageSize;
tmpWhere.offset = (pageIndex - 1) * pageSize;
if (whereObj != null) {
tmpWhere.where = whereObj;
}
if (orderObj != null && orderObj.length > 0) {
tmpWhere.order = orderObj;
}
if (attributesObj != null && attributesObj.length > 0) {
tmpWhere.attributes = attributesObj;
}
if (includeObj != null && includeObj.length > 0) {
tmpWhere.include = includeObj;
tmpWhere.distinct = true;
} else {
tmpWhere.raw = true;
}
return await this.model.findAndCountAll(tmpWhere);
}
async findOne(obj, attributes = []) {
if (attributes.length > 0) {
return this.model.findOne({ "where": obj, attributes, row: true });
} else {
return this.model.findOne({ "where": obj, row: true });
}
}
async findById(oid) {
return this.model.findById(oid);
}
async findAll(obj, include = []) {
return this.model.findAll({ "where": obj, include, row: true });
}
}
module.exports = Dao;
const system=require("../../../system");
const Dao=require("../../dao.base");
class AuthDao extends Dao{
constructor(){
super(Dao.getModelName(AuthDao));
}
extraWhere(qobj,qw,qc){
qc.raw=true;
return qw;
}
}
module.exports=AuthDao;
const system=require("../../../system");
const Dao=require("../../dao.base");
class DataauthDao extends Dao{
constructor(){
super(Dao.getModelName(DataauthDao));
}
extraWhere(qobj,qw,qc){
qc.raw=true;
return qw;
}
}
module.exports=DataauthDao;
const system=require("../../../system");
const Dao=require("../../dao.base");
class OrgDao extends Dao{
constructor(){
super(Dao.getModelName(OrgDao));
}
extraWhere(qobj,qw,qc){
qc.raw=true;
return qw;
}
}
module.exports=OrgDao;
const system=require("../../../system");
const Dao=require("../../dao.base");
class RoleDao extends Dao{
constructor(){
super(Dao.getModelName(RoleDao));
}
async findOne(paramappid,t){
var app= await this.model.findOne({where:{appid:paramappid}},{transaction:t});
return app;
}
extraWhere(obj,w,qc,linkAttrs){
// if(obj.codepath && obj.codepath!=""){
// // if(obj.codepath.indexOf("userarch")>0){//说明是应用管理员的查询
// // console.log(obj);
// // w["app_id"]=obj.appid;
// // }
// }
w["app_id"]=obj.app_id;
w["company_id"]=obj.company_id;
return w;
}
extraModelFilter(){
return {"key":"include","value":[{model:this.db.models.app,}]};
}
async preUpdate(u){
return u;
}
async update(obj){
var obj2=await this.preUpdate(obj);
await this.model.update(obj2,{where:{id:obj2.id}});
var role=await this.model.findOne({where:{id:obj2.id}});
return role;
}
async preCreate(u){
return u;
}
async create(u,t){
var self=this;
var u2= await this.preCreate(u);
if(t){
var role= await this.model.create(u2,{transaction: t});
return role;
}else{
var role= await this.model.create(u2);
return role;
}
}
}
module.exports=RoleDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
class UserDao extends Dao {
constructor() {
super(Dao.getModelName(UserDao));
}
async getAuths(userid) {
var self = this;
return this.model.findOne({
where: { id: userid },
include: [{ model: self.db.models.account, attributes: ["id", "isSuper", "referrerOnlyCode"] },
{
model: self.db.models.role, as: "Roles", attributes: ["id", "code"], include: [
{ model: self.db.models.product, as: "Products", attributes: ["id", "code"] }
]
},
],
});
}
async getUserByUsername(username, appkey, t) {
var app = await this.appDao.findOne(appkey);
var tUser = await this.model.findOne({
where: { userName: username, app_id: app.id },
include: [{ model: this.db.models.app, raw: true },
// {model:this.db.models.partnerinfo,attributes:["id","user_id","app_id","userName","applyType","applyName","workPic","tagInfo","mobile","tel","applyProvince","applyCity",
// "applyArea","applyAddr","identityCardPic","identityCard","businessLicensePic","businessLicenseNum","entName","cardNo","realName"]},
{ model: this.db.models.account, attributes: ["id", "isSuper", "referrerOnlyCode"], raw: true },
{
model: this.db.models.role, as: "Roles", attributes: ["id", "code"], include: [
{ model: this.db.models.product, as: "Products", attributes: ["id", "code"], raw: true }
]
},
]
}, { transaction: t });
// if(tUser!=null){
// tUser=tUser.get({plain:true});
// tUser.partnerinfo=await this.partnerinfoDao.model.findOne({where:{onlyCode:tUser.onlyCode},raw:true});
// }
return tUser;
}
async getUserByOpenId(popenid, appkey, t) {
var app = await this.appDao.findOne(appkey);
var tUser = await this.model.findOne({
where: { openId: popenid },
include: [{ model: this.db.models.app, raw: true },
// {model:this.db.models.partnerinfo,attributes:["id","user_id","app_id","userName","applyType","applyName","workPic","tagInfo","mobile","tel","applyProvince","applyCity",
// "applyArea","applyAddr","identityCardPic","identityCard","businessLicensePic","businessLicenseNum","entName","cardNo","realName"]},
{ model: this.db.models.account, attributes: ["id", "isSuper", "referrerOnlyCode"], raw: true },
{
model: this.db.models.role, as: "Roles", attributes: ["id", "code"], include: [
{ model: this.db.models.product, as: "Products", attributes: ["id", "code"], raw: true }
]
},
]
}, { transaction: t });
if (tUser != null) {
tUser = tUser.get({ plain: true });
tUser.partnerinfo = await this.partnerinfoDao.model.findOne({ where: { onlyCode: tUser.onlyCode }, raw: true });
}
// console.log("tUser.partnerinfo...................................>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>999sy");
// console.log(tUser);
return tUser;
}
async setAccount(user, account, t) {
var user = await user.setAccount(account, { transaction: t });
return user;
}
async setApp(user, app, t) {
//按照APPId,获取app对象
var user = await user.setApp(app, { transaction: t });
return user;
}
extraModelFilter() {
//return {"key":"include","value":[{model:this.db.models.app,},{model:this.db.models.role,as:"Roles",attributes:["id","name"],joinTableAttributes:['created_at']}]};
return { "key": "include", "value": [{ model: this.db.models.app, }, { model: this.db.models.role, as: "Roles", attributes: ["id", "name"] }] };
}
extraWhere(obj, w, qc, linkAttrs) {
if (obj.bizpath && obj.bizpath != "") {
if (obj.bizpath.indexOf("tanents_info") > 0) {//说明是超级管理员的查询
w["isAdmin"] = true;
} else {
w["isAdmin"] = false;
w["company_id"] = obj.company_id;
}
}
if (linkAttrs.length > 0) {
var search = obj.search;
var lnkKey = linkAttrs[0];
var strq = "$" + lnkKey.replace("~", ".") + "$";
w[strq] = { [this.db.Op.like]: "%" + search[lnkKey] + "%" };
}
return w;
}
async preUpdate(u) {
if (u.roles && u.roles.length >= 0) {
var roles = await this.db.models.role.findAll({ where: { id: { [this.db.Op.in]: u.roles } } });
u.roles = roles
}
return u;
}
async update(obj) {
var obj2 = await this.preUpdate(obj);
await this.model.update(obj2, { where: { id: obj2.id } });
var user = await this.model.findOne({ where: { id: obj2.id } });
if (obj2.roles) {
user.setRoles(obj2.roles);
}
return user;
}
async findAndCountAll(qobj, t) {
var users = await super.findAndCountAll(qobj, t);
return users;
}
async preCreate(u) {
// var roles=await this.db.models.role.findAll({where:{id:{[this.db.Op.like]:u.roles}}});
// console.log("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
// console.log(roles);
// console.log("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
// u.roles=roles
return u;
}
async create(u, t) {
var self = this;
var u2 = await this.preCreate(u);
if (t) {
return this.model.create(u2, { transaction: t }).then(user => {
return user;
});
} else {
return this.model.create(u2).then(user => {
return user;
});
}
}
//修改用户(user表)公司的唯一码
async putUserCompanyOnlyCode(userId, company_only_code, result) {
var customerObj = { companyOnlyCode: company_only_code };
var putSqlWhere = { where: { id: userId } };
this.updateByWhere(customerObj, putSqlWhere);
return result;
}
}
module.exports = UserDao;
// var u=new UserDao();
// var roledao=system.getObject("db.roleDao");
// (async ()=>{
// var users=await u.model.findAll({where:{app_id:1}});
// var role=await roledao.model.findOne({where:{code:"guest"}});
// console.log(role);
// for(var i=0;i<users.length;i++){
// await users[i].setRoles([role]);
// console.log(i);
// }
//
// })();
const system = require("../../../system");
const Sequelize = require('sequelize');
const Dao = require("../../dao.base");
const url = require("url");
class BizoptDao extends Dao {
constructor() {
super(Dao.getModelName(BizoptDao));
}
orderBy() {
return [["updated_at", "DESC"]];
}
extraWhere(qobj, qw, qc) {
// 权限添加
//需要添加公司查询条件
qc.where["facilitator_id"] = Number(qobj.company_id || -1);
// 组织结构
if (qobj.opath && qobj.opath != "") {
qc.where["salesman_opcode"] = { [this.db.Op.like]: `%${qobj.opath}%` }
}
qc.raw = true;
qc.where.business_type = qc.where.business_type ? qc.where.business_type : {
$in: [system.SERVICECODE.EDI, system.SERVICECODE.ICP]
}
switch (qobj.bizpath) {
case "/businessManagement/wailt":
qc.where.business_status = qc.where.business_status || {
$in: [system.BUSSTATUS.WAITINGSCHEME, system.BUSSTATUS.WAITINGCONFIRM]
}
break
case "/businessManagement/all":
break
}
// ---- JSON 查询 start-----
qc.where["$and"] = []
if (qc.where.linkman) {
qc.where["$and"].push(Sequelize.where(
Sequelize.literal('business_info->"$.contactsName"'),
qc.where.linkman));
delete qc.where.linkman;
}
if (qc.where.phone_number) {
qc.where["$and"].push(Sequelize.where(
Sequelize.literal('business_info->"$.contactsPhone"'),
qc.where.phone_number));
delete qc.where.phone_number;
}
// ---- JSON 查询 end-----
qc.include = [
{
model: this.db.models.scheme,
attributes: ["scheme_status"]
}
]
return qw;
}
async findBizAndSheme(id) {
const result = await this.model.findOne({
where: {
id
},
include: [
{
model: this.db.models.scheme,
raw: false
}
],
raw: false
});
return result;
}
}
module.exports = BizoptDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
class SchemeDao extends Dao {
constructor() {
super(Dao.getModelName(SchemeDao));
}
}
module.exports = SchemeDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
class StatuslogDao extends Dao {
constructor() {
super(Dao.getModelName(StatuslogDao));
}
}
module.exports = StatuslogDao;
const system=require("../../../system");
const Dao=require("../../dao.base");
class AppDao extends Dao{
constructor(){
super(Dao.getModelName(AppDao));
}
extraWhere(obj,w,qc,linkAttrs){
if(obj.bizpath && obj.bizpath!=""){
if(obj.bizpath.indexOf("my_app")>0){//说明是租户查询自己创建的应用
w["creator_id"]=obj.userid;
}
}
if(linkAttrs.length>0){
var search=obj.search;
var lnkKey=linkAttrs[0];
var strq="$"+lnkKey.replace("~",".")+"$";
w[strq]= {[this.db.Op.like]:"%"+search[lnkKey]+"%"};
}
return w;
}
}
module.exports=AppDao;
// var u=new UserDao();
// var roledao=system.getObject("db.roleDao");
// (async ()=>{
// var users=await u.model.findAll({where:{app_id:1}});
// var role=await roledao.model.findOne({where:{code:"guest"}});
// console.log(role);
// for(var i=0;i<users.length;i++){
// await users[i].setRoles([role]);
// console.log(i);
// }
//
// })();
const fs=require("fs");
const settings=require("../../../../config/settings");
class CacheManager{
constructor(){
//await this.buildCacheMap();
this.buildCacheMap();
}
buildCacheMap(){
var self=this;
self.doc={};
var cachePath=settings.basepath+"/app/base/db/cache/";
const files=fs.readdirSync(cachePath);
if(files){
files.forEach(function(r){
var classObj=require(cachePath+"/"+r);
self[classObj.name]=new classObj();
var refTmp=self[classObj.name];
if(refTmp.prefix){
self.doc[refTmp.prefix]=refTmp.desc;
}
else{
console.log("请在"+classObj.name+"缓存中定义prefix");
}
});
}
}
}
module.exports=CacheManager;
// var cm= new CacheManager();
// cm["InitGiftCache"].cacheGlobalVal("hello").then(function(){
// cm["InitGiftCache"].cacheGlobalVal().then(x=>{
// console.log(x);
// });
// });
const Sequelize = require('sequelize');
const settings = require("../../../../config/settings")
const Op = Sequelize.Op
const fs = require("fs")
const path = require("path");
var glob = require("glob");
class DbFactory {
constructor() {
const dbConfig = settings.database();
this.db = new Sequelize(dbConfig.dbname,
dbConfig.user,
dbConfig.password,
{
...dbConfig.config,
operatorsAliases: {
$eq: Op.eq,
$ne: Op.ne,
$gte: Op.gte,
$gt: Op.gt,
$lte: Op.lte,
$lt: Op.lt,
$not: Op.not,
$in: Op.in,
$notIn: Op.notIn,
$is: Op.is,
$like: Op.like,
$notLike: Op.notLike,
$iLike: Op.iLike,
$notILike: Op.notILike,
$regexp: Op.regexp,
$notRegexp: Op.notRegexp,
$iRegexp: Op.iRegexp,
$notIRegexp: Op.notIRegexp,
$between: Op.between,
$notBetween: Op.notBetween,
$overlap: Op.overlap,
$contains: Op.contains,
$contained: Op.contained,
$adjacent: Op.adjacent,
$strictLeft: Op.strictLeft,
$strictRight: Op.strictRight,
$noExtendRight: Op.noExtendRight,
$noExtendLeft: Op.noExtendLeft,
$and: Op.and,
$or: Op.or,
$any: Op.any,
$all: Op.all,
$values: Op.values,
$col: Op.col
}
});
this.db.Sequelize = Sequelize;
this.db.Op = Op;
this.initModels();
this.initRelations();
}
async initModels() {
var self = this;
var modelpath = path.normalize(path.join(__dirname, '../..')) + "/models/";
var models = glob.sync(modelpath + "/**/*.js");
console.log(models.length);
models.forEach(function (m) {
console.log(m);
self.db.import(m);
});
console.log("init models....");
}
async initRelations() {
// this.db.models.dataauth.belongsTo(this.db.models.user, { constraints: false, });
// /*建立用户和角色之间的关系*/
// this.db.models.user.belongsToMany(this.db.models.role, { as: "Roles", through: 'p_userrole', constraints: false, });
// this.db.models.role.belongsToMany(this.db.models.user, { as: "Users", through: 'p_userrole', constraints: false, });
/*组织机构自引用*/
//this.db.models.org.belongsTo(this.db.models.org,{constraints: false,});
//this.db.models.org.hasMany(this.db.models.org,{constraints: false,});
//组织机构和角色是多对多关系,建立兼职岗位,给岗位赋予多个角色,从而同步修改用户的角色
//通过岗位接口去修改用户的角色
//this.db.models.role.belongsToMany(this.db.models.org,{through: this.db.models.orgrole,constraints: false,});
//this.db.models.org.belongsToMany(this.db.models.role,{through: this.db.models.orgrole,constraints: false,});
//组织机构和用户是1对多,
// this.db.models.user.belongsTo(this.db.models.org,{constraints: false,});
// this.db.models.org.hasMany(this.db.models.user,{constraints: false,});
// this.db.models.user.belongsTo(this.db.models.app, { constraints: false, });
// this.db.models.role.belongsTo(this.db.models.app, { constraints: false, });
// this.db.models.auth.belongsTo(this.db.models.app, { constraints: false, });
// this.db.models.auth.belongsTo(this.db.models.company, { constraints: false, });
// this.db.models.auth.belongsTo(this.db.models.role, { constraints: false, });
// this.db.models.app.belongsTo(this.db.models.user, { as: "creator", constraints: false, });
// this.db.models.user.belongsTo(this.db.models.company, { constraints: false, });
// this.db.models.role.belongsTo(this.db.models.company, { constraints: false, });
// this.db.models.org.belongsTo(this.db.models.company,{constraints: false,});
// this.db.models.route.belongsTo(this.db.models.app, { constraints: false, });
// this.db.models.plugin.belongsTo(this.db.models.app, { constraints: false, });
// 商机表 1:1 方案表
this.db.models.scheme.belongsTo(this.db.models.bizopt, { constraints: false, });
this.db.models.bizopt.hasOne(this.db.models.scheme, { constraints: false, });
// 交付单表 1:1 临时材料表
this.db.models.cacheinfo.belongsTo(this.db.models.deliver, { constraints: false, });
this.db.models.deliver.hasOne(this.db.models.cacheinfo, { constraints: false, });
// 交付表 1:1 材料表
this.db.models.material.belongsTo(this.db.models.deliver, { constraints: false, });
this.db.models.deliver.hasOne(this.db.models.material, { constraints: false, });
// 交付表 1:1 资质信息表
this.db.models.qualification.belongsTo(this.db.models.deliver, { constraints: false, });
this.db.models.deliver.hasOne(this.db.models.qualification, { constraints: false, });
// 交付单表 1:n 年报信息表
this.db.models.deliver.hasMany(this.db.models.annualreport, { constraints: false })
}
//async getCon(){,用于使用替换table模型内字段数据使用
getCon() {
var that = this;
// await this.db.authenticate().then(()=>{
// console.log('Connection has been established successfully.');
// }).catch(err => {
// console.error('Unable to connect to the database:', err);
// throw err;
// });
//同步模型
if (settings.env == "dev") {
//console.log(pa);
// pconfigObjs.forEach(p=>{
// console.log(p.get({plain:true}));
// });
// await this.db.models.user.create({nickName:"dev","description":"test user",openId:"testopenid",unionId:"testunionid"})
// .then(function(user){
// var acc=that.db.models.account.build({unionId:"testunionid",nickName:"dev"});
// acc.save().then(a=>{
// user.setAccount(a);
// });
// });
}
return this.db;
}
}
module.exports = DbFactory;
// const dbf=new DbFactory();
// dbf.getCon().then((db)=>{
// //console.log(db);
// // db.models.user.create({nickName:"jy","description":"cccc",openId:"xxyy",unionId:"zz"})
// // .then(function(user){
// // var acc=db.models.account.build({unionId:"zz",nickName:"jy"});
// // acc.save().then(a=>{
// // user.setAccount(a);
// // });
// // console.log(user);
// // });
// // db.models.user.findAll().then(function(rs){
// // console.log("xxxxyyyyyyyyyyyyyyyyy");
// // console.log(rs);
// // })
// });
// const User = db.define('user', {
// firstName: {
// type: Sequelize.STRING
// },
// lastName: {
// type: Sequelize.STRING
// }
// });
// db
// .authenticate()
// .then(() => {
// console.log('Co+nnection has been established successfully.');
//
// User.sync(/*{force: true}*/).then(() => {
// // Table created
// return User.create({
// firstName: 'John',
// lastName: 'Hancock'
// });
// });
//
// })
// .catch(err => {
// console.error('Unable to connect to the database:', err);
// });
//
// User.findAll().then((rows)=>{
// console.log(rows[0].firstName);
// });
const system = require("../../../system");
const Dao = require("../../dao.base");
const url = require("url");
class AnnualreportDao extends Dao {
constructor() {
super(Dao.getModelName(AnnualreportDao));
}
}
module.exports = AnnualreportDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
const url = require("url");
class CacheinfoDao extends Dao {
constructor() {
super(Dao.getModelName(CacheinfoDao));
}
async createOrUpdate(pobj, t) {
const cacheinf = await this.findOne({
deliver_id: pobj.deliver_id
});
let result = {};
if (cacheinf) {
//更新
await this.updateByWhere({
cache_info: pobj.cache_info
}, {
deliver_id: pobj.deliver_id
}, t);
result = { id: cacheinf.id }
} else {
// 创建
let data = await this.create(pobj, t);
result = { id: data.id };
}
return result
}
}
module.exports = CacheinfoDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
const url = require("url");
class CompanyDao extends Dao {
constructor() {
super(Dao.getModelName(CompanyDao));
}
async createOrUpdate(pobj, t) {
const companyData = await this.findOne({
enterpriseCode: pobj.enterpriseCode
});
let result = {};
if (companyData) {
//更新
delete pobj.firstBuyTime
await this.updateByWhere(pobj, {
enterpriseCode: pobj.enterpriseCode
}, t);
result = { id: companyData.id }
} else {
// 创建
let data = await this.create(pobj, t);
result = { id: data.id };
}
return result
}
}
module.exports = CompanyDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
const url = require("url");
class DeliverDao extends Dao {
constructor() {
super(Dao.getModelName(DeliverDao));
}
orderBy() {
return [["updated_at", "DESC"]];
}
extraWhere(qobj, qw, qc) {
// 权限添加
//需要添加公司查询条件
qc.where["facilitator_id"] = Number(qobj.company_id || -1);
// 组织结构
if (qobj.opath && qobj.opath != "") {
qc.where["delivery_man_opcode"] = { [this.db.Op.like]: `%${qobj.opath}%` }
}
qc.raw = true;
let type = qobj.bizpath.split('/')[1];
if (type === 'deliveryManagement') {
qc.where.product_code = qc.where.product_code && [system.SERVICECODE.EDI, system.SERVICECODE.ICP].includes(qc.where.product_code) ? qc.where.product_code : {
$in: [system.SERVICECODE.EDI, system.SERVICECODE.ICP]
}
switch (qobj.bizpath) {
case "/deliveryManagement/wait":
qc.where.delivery_status = qc.where.delivery_status || {
$in: [system.SERVERSESTATUS.RECEIVED, system.SERVERSESTATUS.COLLECTING,
system.SERVERSESTATUS.SUBMITING, system.SERVERSESTATUS.DISPOSEING, system.SERVERSESTATUS.POSTING
]
}
break
case "/deliveryManagement/all":
break
}
} else if (type === "annualReport") {
qc.where.product_code = qc.where.product_code && [system.SERVICECODE.ICPANNUALREPORT, system.SERVICECODE.EDIANNUALREPORT].includes(qc.where.product_code) ? qc.where.product_code : {
$in: [system.SERVICECODE.EDIANNUALREPORT, system.SERVICECODE.ICPANNUALREPORT]
}
// ---- 兼容 年报 状态 未申报、已申报 start
let status;
if ([system.ANNUALREPORT.WAITDECLARE, system.ANNUALREPORT.DECLARESUCCESS].includes(qc.where.delivery_status)) {
status = qc.where.delivery_status;
delete qc.where.delivery_status;
qobj.bizpath = "/annualReport/wait";
}
let include = {
model: this.db.models.annualreport,
attributes: ['status', "year"],
where: {
year: {
$or: [
new Date().getFullYear(),
null
]
},
},
required: false
}
if (status) {
include.where.status = status;
delete include.required;
}
qc.include = [
include
]
// ---- 兼容 年报 状态 未申报、已申报 end
switch (qobj.bizpath) {
case "/annualReport/wait":
qc.where.delivery_status = qc.where.delivery_status || {
$in: [system.ANNUALREPORT.TAKEEFFECT]
}
break
case "/annualReport/all":
qc.where.delivery_status = qc.where.delivery_status || {
$in: [system.ANNUALREPORT.TAKEEFFECT, system.ANNUALREPORT.SUCCESS]
}
break
}
}
return qw;
}
async findInfo(pobj) {
const result = await this.model.findOne({
where: {
id: pobj.id
},
include: [
{
model: this.db.models.qualification,
// attributes: ['id', 'certificateNumber', 'businessTypes', 'businessScope', 'serviceProject', 'startAt', 'endAt', 'file'],
raw: false
}, {
model: this.db.models.material,
raw: false
}
],
raw: false
});
return result;
}
async findAnnualReportInfo(pobj) {
const result = await this.model.findOne({
where: {
id: pobj.id
},
include: [
{
model: this.db.models.annualreport,
// attributes: ['id', 'certificateNumber', 'businessTypes', 'businessScope', 'serviceProject', 'startAt', 'endAt', 'file'],
}
],
raw: false
});
return result;
}
}
module.exports = DeliverDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
const url = require("url");
class MaterialDao extends Dao {
constructor() {
super(Dao.getModelName(MaterialDao));
}
async createOrUpdate(pobj, t) {
const materialData = await this.findOne({
deliver_id: pobj.deliver_id
});
let result = {};
let dataInfo = {
proposerInfo: pobj.cache_info.proposerInfo,
shareholderData: pobj.cache_info.shareholderData,
implementationPlanInfo: pobj.cache_info.implementationPlanInfo,
safetyInfo: pobj.cache_info.safetyInfo,
otherMaterialsInfo: pobj.cache_info.otherMaterialsInfo,
deliver_id: pobj.deliver_id,
ifDownload: false
}
dataInfo.proposerInfo.businessInformation.ifListed = dataInfo.proposerInfo.businessInformation.ifListed === "true"
if (materialData) {
//更新
await this.updateByWhere(dataInfo, {
deliver_id: pobj.deliver_id
}, t);
result = { id: materialData.id }
} else {
// 创建
let data = await this.create(dataInfo, t);
result = { id: data.id };
}
return result
}
}
module.exports = MaterialDao;
const system = require("../../../system");
const Dao = require("../../dao.base");
const url = require("url");
class QualificationDao extends Dao {
constructor() {
super(Dao.getModelName(QualificationDao));
}
async createOrUpdate(pobj, t) {
const qualificationData = await this.findOne({
deliver_id: pobj.deliver_id
});
let result = {};
let info = {
businessScope: pobj.businessScope,
businessTypes: pobj.businessTypes,
certificateNumber: pobj.certificateNumber,
endAt: pobj.endAt,
file: pobj.file,
serviceProject: pobj.serviceProject,
startAt: pobj.startAt,
deliver_id: pobj.deliver_id
}
if (qualificationData) {
//更新
await this.updateByWhere(info, {
deliver_id: pobj.deliver_id
}, t);
result = { id: qualificationData.id }
} else {
// 创建
let data = await this.create(info, t);
result = { id: data.id };
}
return result
}
}
module.exports = QualificationDao;
const system=require("../../../system");
const Dao=require("../../dao.base");
class MsgHistoryDao extends Dao{
constructor(){
super(Dao.getModelName(MsgHistoryDao));
}
extraWhere(obj,w){
if(obj.ukstr && obj.ukstr!=""){
// w={[this.db.Op.or]:[
// {[this.db.Op.and]:[{sender:obj.ukstr},{target:obj.extra}]},
// {[this.db.Op.and]:[{sender:obj.extra},{target:obj.ukstr}]},
// ]
// };
w[this.db.Op.or]=[
{[this.db.Op.and]:[{sender:obj.ukstr},{target:obj.extra}]},
{[this.db.Op.and]:[{sender:obj.extra},{target:obj.ukstr}]},
];
}
return w;
}
orderBy(){
//return {"key":"include","value":{model:this.db.models.app}};
return [["id","DESC"]];
}
}
module.exports=MsgHistoryDao;
const system=require("../../../system");
const Dao=require("../../dao.base");
class MsgNoticeDao extends Dao{
constructor(){
super(Dao.getModelName(MsgNoticeDao));
}
async saveNotice(msg, t) {
var noticeFrom = await super.findOne({fromId : msg.senderId, toId : msg.targetId});
if(noticeFrom) {
var set = {lastMsgId:msg.id};
if(msg.businessLicense_id) {
set.businessLicense_id = msg.businessLicense_id;
}
await super.updateByWhere(set, {where:{id:noticeFrom.id}}, t);
} else {
noticeFrom = {
fromuser: msg.sender,
fromId:msg.senderId,
touser: msg.target,
toId:msg.targetId,
isAccepted:true,
lastMsgId:msg.id,
businessLicense_id : msg.businessLicense_id || 0
};
await super.create(noticeFrom, t);
}
var noticeTo = await super.findOne({fromId : msg.targetId, toId : msg.senderId});
if(noticeTo) {
var set = {lastMsgId:msg.id};
if(msg.businessLicense_id) {
set.businessLicense_id = msg.businessLicense_id;
}
await super.updateByWhere(set, {where:{id:noticeTo.id}}, t);
} else {
noticeTo = {
fromuser: msg.target,
fromId:msg.targetId,
touser: msg.sender,
toId:msg.senderId,
isAccepted:true,
lastMsgId:msg.id,
businessLicense_id : msg.businessLicense_id || 0
};
await super.create(noticeTo, t);
}
}
orderBy(){
//return {"key":"include","value":{model:this.db.models.app}};
return [["id","DESC"]];
}
}
module.exports=MsgNoticeDao;
const system = require("../system");
const settings = require("../../config/settings.js");
const reclient = system.getObject("util.redisClient");
const md5 = require("MD5");
var dbf = system.getObject("db.common.connection");
var db = dbf.getCon();
db.sync({ force: true }).then(async () => {
console.log("init 完毕");
});
module.exports = {
"config": {
"pdict": {
"app_type": { "api": "API服务","web": "PCWEB","app":"移动APP","xcx":"小程序","access":"接入"},
"data_priv": { "auth.role": "角色", "auth.user": "用户" },
"noticeType": {"sms": "短信", "email": "邮件","wechat":"微信"},
"authType": {"add": "新增", "edit": "编辑","delete":"删除","export":"导出","show":"查看"},
"mediaType": {"vd": "视频", "ad": "音频","qt":"其它"},
"usageType": {"kt": "课堂","taxkt":"财税课堂", "qt": "其它"},
"opstatus": {"0": "失败", "1": "成功"},
"sex": {"male": "男", "female": "女"},
"logLevel": {"debug": 0, "info": 1, "warn": 2, "error": 3, "fatal": 4},
"msgType": { "sys": "系统", "single": "单点", "multi": "群发"},
"node_type":{"org":"组织","arc":"文档"}
}
}
}
const fs=require("fs");
const path=require("path");
const appPath=path.normalize(__dirname+"/app");
const bizsPath=path.normalize(__dirname+"/bizs");
var appJsons={
config:require(appPath+"/"+"platform.js").config
}
module.exports=appJsons;
module.exports = (db, DataTypes) => {
return db.define("auth", {
rolecode: DataTypes.STRING,
bizcode: DataTypes.STRING,
codepath: DataTypes.STRING,
authstrs: DataTypes.STRING
},{
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'p_auths',
validate: {
}
});
}
module.exports = (db, DataTypes) => {
return db.define("dataauth", {
modelname: DataTypes.STRING,
auths: DataTypes.STRING,
},{
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'p_dataauths',
validate: {
}
});
}
const system=require("../../../system");
const settings=require("../../../../config/settings");
const appconfig=system.getSysConfig();
module.exports = (db, DataTypes) => {
return db.define("org", {
code: {
type:DataTypes.STRING(64),
allowNull: false,
},
name: {
type:DataTypes.STRING(64),
allowNull: false,
},
isLeaf:{
type:DataTypes.BOOLEAN,
defaultValue: true
},
orgpath: {
type:DataTypes.STRING,
allowNull: false,
},
nodeType: {//默认为组织
type:DataTypes.ENUM,
allowNull: false,
values: Object.keys(appconfig.pdict.node_type),
defaultValue:'org'
},
isPosition:{//是否是岗位
type:DataTypes.BOOLEAN,
defaultValue: false
},
isMain:{//是否是主岗
type:DataTypes.BOOLEAN,
defaultValue: false
},
},{
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'p_org',
validate: {
}
});
}
\ No newline at end of file
module.exports = (db, DataTypes) => {
return db.define("orgrole", {
},{
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
tableName: 'p_orgrole',
validate: {
},
});
}
\ No newline at end of file
module.exports = (db, DataTypes) => {
return db.define("role", {
name: DataTypes.STRING,
code: DataTypes.STRING,
description: DataTypes.STRING,
isSystem: {//是否系统数据,0否,1是
type: DataTypes.BOOLEAN,
defaultValue: false,
},
},{
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'p_role',
validate: {
}
});
}
const system=require("../../../system");
const settings=require("../../../../config/settings");
const appconfig=system.getSysConfig();
module.exports = (db, DataTypes) => {
return db.define("user", {
userName: {
type:DataTypes.STRING,
allowNull: false,
},
password: {
type:DataTypes.STRING,
allowNull: false,
},
nickName: {
type:DataTypes.STRING,
allowNull: true,
},
sex: {
type:DataTypes.ENUM,
allowNull: true,
values: Object.keys(appconfig.pdict.sex),
},
mobile:DataTypes.STRING,
mail: {
type:DataTypes.STRING,
allowNull: true,
},
headUrl: DataTypes.STRING,
isAdmin:{
type:DataTypes.BOOLEAN,
defaultValue: false
},
isSuper:{
type:DataTypes.BOOLEAN,
defaultValue: false
},
isSystem:{
type:DataTypes.BOOLEAN,
defaultValue: false
},
center_id:DataTypes.STRING,
jwtkey:DataTypes.STRING,
jwtsecret:DataTypes.STRING,
isEnabled:{
type:DataTypes.BOOLEAN,
defaultValue: true
},
opath:DataTypes.STRING,//作业务时,需要在业务表冗余当前处理人的opath
ptags:DataTypes.STRING,//权限标签,逗号分隔,可以按照标签查看opath中含有标签的数据
},{
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'p_user',
validate: {
},
indexes:[
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const appconfig=system.getSysConfig();
module.exports = (db, DataTypes) => {
return db.define("app", {
appkey:{
type: DataTypes.STRING,
allowNull: true,
},
name: {
type: DataTypes.STRING,
allowNull: false,
},//和user的from相同,在注册user时,去创建
domainName: DataTypes.STRING,//域名
backend:DataTypes.STRING,//域名
homePage: DataTypes.STRING,//首页
functionJSON: DataTypes.TEXT,//功能清单地址--前端通过loadJson下载数据
docUrl: DataTypes.STRING,//前端路由配置文件
configUrl: DataTypes.STRING,//基础信息配置信息地址
logoUrl: DataTypes.STRING,//应用Logo
bkimageUrl: DataTypes.STRING,//应用背景图
showimgUrl: DataTypes.STRING,//应用显示图标
detailimgUrl: DataTypes.STRING,//应用详情介绍地址
opCacheUrl: DataTypes.STRING,//操作缓存地址
description: DataTypes.STRING,//应用描述
isSystem: {
type: DataTypes.BOOLEAN,
defaultValue: false
},//是否启用
isEnabled: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false
},//是否启用
isPublish: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false
},//是否对外
appType: {
type: DataTypes.ENUM,
allowNull: true,
values: Object.keys(appconfig.pdict.app_type),
},
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'p_app',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const appconfig = system.getSysConfig();
module.exports = (db, DataTypes) => {
return db.define("company", {
name: {
type: DataTypes.STRING,
allowNull: false,
},//和user的from相同,在注册user时,去创建
companykey: {
type: DataTypes.STRING,
allowNull: false,
},//和user的from
address: {
type: DataTypes.STRING,
allowNull: true,
},//和user的from
mail: {
type: DataTypes.STRING,
allowNull: true,
},//和user的from
phone: {
type: DataTypes.STRING,
allowNull: true,
},
licenseUrl: {
type: DataTypes.STRING,
allowNull: true,
},
orgJson: DataTypes.TEXT,//功能清
}, {
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'p_company',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const appconfig=system.getSysConfig();
module.exports = (db, DataTypes) => {
return db.define("plugin", {
name: {
type: DataTypes.STRING,
allowNull: false,
},//和user的from相同,在注册user时,去创建
}, {
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'p_plugin',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const appconfig=system.getSysConfig();
module.exports = (db, DataTypes) => {
return db.define("route", {
name: {
type: DataTypes.STRING,
allowNull: false,
},//和user的from相同,在注册user时,去创建
center_id: {
type: DataTypes.STRING,
allowNull: false,
},//和user的from相同,在注册user时,去创建
shosts:{
type: DataTypes.STRING,
allowNull: false,
},
spaths:{
type: DataTypes.STRING,
allowNull: false,
}
}, {
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'p_route',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const appconfig = system.getSysConfig();
/**
* 年报信息表
*/
module.exports = (db, DataTypes) => {
return db.define("annualreport", {
year: {
allowNull: false,
type: DataTypes.INTEGER
},
status: {
allowNull: false,
type: DataTypes.STRING
},
file: {
allowNull: true,
type: DataTypes.JSON
}
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'annual_report',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const appconfig = system.getSysConfig();
/**
* 商机表
*/
module.exports = (db, DataTypes) => {
return db.define("bizopt", {
demand_code: { // 需求编码
allowNull: false,
type: DataTypes.STRING
},
business_type: { // 商机类型
allowNull: false,
type: DataTypes.STRING
},
business_status: { // 商机状态
allowNull: false,
type: DataTypes.STRING
},
business_info: { // 商机详情
allowNull: false,
type: DataTypes.JSON
},
source_number: { // 来源单号 (下单时产生的编号)
allowNull: true,
type: DataTypes.STRING
},
source_name: { //渠道来源
allowNull: true,
type: DataTypes.STRING
},
service_address: { // 区域地址
allowNull: false,
type: DataTypes.STRING
},
close_reason: { // 关闭理由
allowNull: true,
type: DataTypes.STRING
},
facilitator_id: { // 服务商id
allowNull: true,
type: DataTypes.STRING
},
facilitator_name: { // 服务商名称
allowNull: true,
type: DataTypes.STRING
},
salesman_opcode: { // 组织架构路径
allowNull: true,
type: DataTypes.STRING
},
salesman_id: {// 业务员id
allowNull: true,
type: DataTypes.STRING
},
salesman_name: { // 业务员姓名
allowNull: true,
type: DataTypes.STRING
},
salesman_phone: { // 业务员联系方式
allowNull: true,
type: DataTypes.STRING
}
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'bussiness_opportunity',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const appconfig = system.getSysConfig();
/**
* 材料缓存表
*/
module.exports = (db, DataTypes) => {
return db.define("cacheinfo", {
cache_info: {
allowNull: false,
type: DataTypes.JSON
},
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'cache_information',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const appconfig = system.getSysConfig();
/**
* 公司主体表
*/
module.exports = (db, DataTypes) => {
//TODO:
return db.define("company1", {
name: {
allowNull: false,
type: DataTypes.STRING
},
enterpriseCode: {
allowNull: false,
type: DataTypes.STRING
},
type: {
allowNull: false,
type: DataTypes.STRING
},
createdAt: {
allowNull: false,
type: DataTypes.DATE
},
legalRepresentative: {
allowNull: false,
type: DataTypes.STRING
},
businessTerm: {
allowNull: false,
type: DataTypes.STRING
},
registeredCapital: {
allowNull: false,
type: DataTypes.STRING
},
address: {
allowNull: false,
type: DataTypes.STRING
},
lastContactInfo: {
allowNull: false,
type: DataTypes.JSON
},
firstBuyTime: {
allowNull: false,
type: DataTypes.DATE
}
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'company',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const appconfig = system.getSysConfig();
/**
* 交付单表
*/
module.exports = (db, DataTypes) => {
return db.define("deliver", {
delivery_code: { //交付单编号
allowNull: true,
type: DataTypes.STRING
},
source_number: { // 来源单号
allowNull: true,
type: DataTypes.STRING
},
source_name: { // 渠道名称
allowNull: true,
type: DataTypes.STRING
},
demand_code: {// 商机编号
allowNull: true,
type: DataTypes.STRING
},
scheme_number: {// 方案编号
allowNull: true,
type: DataTypes.STRING
},
product_code: { // 产品编码
allowNull: false,
type: DataTypes.STRING
},
product_name: { // 产品名称
allowNull: false,
type: DataTypes.STRING
},
service_address: { // 区域地址
allowNull: false,
type: DataTypes.STRING
},
delivery_info: { //服务概况
allowNull: false,
type: DataTypes.JSON
},
delivery_status: {// 服务单流转状态
allowNull: false,
type: DataTypes.STRING
},
selling_price: {//售价
allowNull: false,
type: DataTypes.INTEGER
},
cost_price: {//成本价
allowNull: true,
type: DataTypes.INTEGER
},
close_reason: {//关闭理由
allowNull: true,
type: DataTypes.STRING
},
facilitator_id: { // 服务商id
allowNull: true,
type: DataTypes.STRING
},
facilitator_name: { // 服务商名称
allowNull: true,
type: DataTypes.STRING
},
salesman_opcode: { // 组织架构路径
allowNull: true,
type: DataTypes.STRING
},
salesman_id: {// 业务员id
allowNull: true,
type: DataTypes.STRING
},
salesman_name: { // 业务员姓名
allowNull: true,
type: DataTypes.STRING
},
salesman_phone: { // 业务员联系方式
allowNull: true,
type: DataTypes.STRING
},
sku_code: {
allowNull: true,
type: DataTypes.STRING
},
master_source_number: { //业务主订单号
allowNull: true,
type: DataTypes.STRING
},
delivery_man_id: {// 交付员id
allowNull: true,
type: DataTypes.STRING
},
delivery_man_name: {// 交付员姓名
allowNull: true,
type: DataTypes.STRING
},
delivery_man_opcode: {// 交付员opcode
allowNull: true,
type: DataTypes.STRING
},
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'delivery_bill',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const appconfig = system.getSysConfig();
/**
* 材料表
*/
module.exports = (db, DataTypes) => {
return db.define("material", {
proposerInfo: {
allowNull: false,
type: DataTypes.JSON
},
shareholderData: {
allowNull: false,
type: DataTypes.JSON
},
implementationPlanInfo: {
allowNull: false,
type: DataTypes.JSON
},
safetyInfo: {
allowNull: false,
type: DataTypes.JSON
},
otherMaterialsInfo: {
allowNull: false,
type: DataTypes.JSON
},
ifDownload: {//是否生成下载文件
type: DataTypes.BOOLEAN,
defaultValue: false
},
downloadUrl: {
allowNull: true,
type: DataTypes.STRING
}
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'materials_info',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const appconfig = system.getSysConfig();
/**
* 资质信息表
*/
module.exports = (db, DataTypes) => {
return db.define("qualification", {
certificateNumber: {
allowNull: false,
type: DataTypes.STRING
},
businessTypes: {
allowNull: false,
type: DataTypes.STRING
},
businessScope: {
allowNull: false,
type: DataTypes.TEXT
},
serviceProject: {
allowNull: false,
type: DataTypes.STRING
},
startAt: {
allowNull: false,
type: DataTypes.DATE
},
endAt: {
allowNull: false,
type: DataTypes.DATE
},
file: {
allowNull: false,
type: DataTypes.JSON
}
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'qualification_info',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const moment = require('moment');
const settings = require("../../../../config/settings");
const appconfig = system.getSysConfig();
/**
* 方案表
*/
module.exports = (db, DataTypes) => {
return db.define("scheme", {
demand_code: { // 需求编码
allowNull: false,
type: DataTypes.STRING
},
scheme_number: { //方案编号
allowNull: true,
type: DataTypes.STRING
},
scheme_info: {//方案详情
allowNull: false,
type: DataTypes.JSON
},
scheme_status: { //方案状态
allowNull: false,
type: DataTypes.STRING
},
reject_reason: {//驳回理由
allowNull: true,
type: DataTypes.STRING
},
remark_info: { //备注
allowNull: true,
type: DataTypes.STRING
},
bizopt_id: { //商机id
allowNull: false,
type: DataTypes.STRING
},
facilitator_id: { //服务商id
allowNull: true,
type: DataTypes.STRING
},
facilitator_name: { //服务商名称
allowNull: true,
type: DataTypes.STRING
},
salesman_opcode: { //组织架构路径
allowNull: true,
type: DataTypes.STRING
},
salesman_id: { //业务员id
allowNull: true,
type: DataTypes.STRING
},
salesman_name: { //业务员名称
allowNull: true,
type: DataTypes.STRING
},
salesman_phone: { //业务员联系方式
allowNull: true,
type: DataTypes.STRING
}
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'scheme_information',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const appconfig = system.getSysConfig();
/**
* 状态流转记录表
*/
module.exports = (db, DataTypes) => {
return db.define("statuslog", {
flow_type: { // 流程类型 (商机、方案、交付单)
allowNull: false,
type: DataTypes.STRING
},
flow_id: { // 流程对应id
allowNull: false,
type: DataTypes.STRING
},
status_reason: { // 状态日期
allowNull: true,
type: DataTypes.STRING
},
status_code: { // 流转状态
allowNull: false,
type: DataTypes.STRING
},
salesman_id: {
allowNull: true,
type: DataTypes.STRING
},
salesman_name: {
allowNull: true,
type: DataTypes.STRING
}
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'status_log',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const appconfig=system.getSysConfig();
module.exports = (db, DataTypes) => {
return db.define("msghistory", {
msgType:{
type:DataTypes.ENUM,
allowNull: false,
values: Object.keys(appconfig.pdict.msgType),
},
app_id:DataTypes.INTEGER,
company_id:DataTypes.INTEGER,
sender:DataTypes.STRING,
senderId:DataTypes.INTEGER,
target:DataTypes.STRING,
targetId:DataTypes.INTEGER,
content: {
type: DataTypes.TEXT('long'),
allowNull: false,
},//需要在后台补充
isRead:{
type:DataTypes.BOOLEAN,
defaultValue: false,
}
},{
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'msghistory',
validate: {
},
indexes:[
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
module.exports = (db, DataTypes) => {
return db.define("msgnotice", {
fromuser: DataTypes.STRING,//需要在后台补充
fromId:DataTypes.INTEGER,
touser: DataTypes.STRING,//需要在后台补充
toId:DataTypes.INTEGER,
isAccepted:DataTypes.BOOLEAN,
lastMsgId:DataTypes.INTEGER
},{
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'msgnotice',
validate: {
},
indexes:[
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system=require("../../../system");
const ServiceBase=require("../../sve.base");
class AccountService extends ServiceBase{
constructor(){
super("auth",ServiceBase.getDaoName(AccountService));
//this.appDao=system.getObject("db.appDao");
}
}
module.exports=AccountService;
const system=require("../../../system");
const ServiceBase=require("../../sve.base");
class AuthService extends ServiceBase{
constructor(){
super("auth",ServiceBase.getDaoName(AuthService));
}
//字符串数组参数
//前端角色查询,按照来源应用和来源公司查询
async findAuthsByRole(roleids,appid,comid){
//{where:{id:{[this.db.Op.in]:ids}}}
//var newattrs=rolecodestr.split(",");
var aths=await this.dao.model.findAll({
attributes:["bizcode","authstrs","codepath"],
where:{role_id:{[this.db.Op.in]:roleids},app_id:appid,company_id:comid}});
return aths;
}
async saveAuths(auths,appid,cmid){
//先按照code 和 bizcode查询
var self=this;
console.log("yyyyyyyyyvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv");
console.log(auths);
return self.db.transaction(async function (t){
for(var i=0;i<auths.length;i++){
var tmpAuth=auths[i];
tmpAuth.app_id=appid;
tmpAuth.company_id=cmid;
var objrtn=await self.dao.model.findOrCreate({
defaults:tmpAuth,
where:{role_id:tmpAuth.role_id,bizcode:tmpAuth.bizcode},//注意这里bizcode存储的是节点的code值
transaction:t,
});
console.log("vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv");
console.log(objrtn);
if(!objrtn[1].created){
//就执行更新操作
await objrtn[0].update(tmpAuth,{where:{role_id:tmpAuth.role_id,bizcode:tmpAuth.bizcode},transaction:t})
}
}
var aths=await self.dao.model.findAll({where:{role_id:tmpAuth.role_id,app_id:tmpAuth.app_id},transaction:t});
return aths;
});
}
}
module.exports=AuthService;
const system=require("../../../system");
const ServiceBase=require("../../sve.base")
const settings=require("../../../../config/settings")
class DataauthService extends ServiceBase{
constructor(){
super("auth",ServiceBase.getDaoName(DataauthService));
}
async saveauth(obj){
//先按照uid,modelname,检查是否存在,不存在创建,存在更新
var oldauth= await this.dao.findOne({user_id:obj.user_id,modelname:obj.modelname,app_id:obj.add_id});
if(!oldauth){
return this.dao.create(obj);
}else{
obj.id=oldauth.id;
return this.dao.update(obj);
}
}
}
module.exports=DataauthService;
const system=require("../../../system");
const ServiceBase=require("../../sve.base");
class OrgService extends ServiceBase{
constructor(){
super("auth",ServiceBase.getDaoName(OrgService));
}
async delete(p,q,req){
var self=this;
var orgid=p.id;
var uone=await this.db.models.user.findOne({where:{org_id:orgid}});
if(!uone){
//先检查是否组织下有人员存在
return this.db.transaction(async function (t) {
var inst=await self.dao.model.findById(orgid);
var parentid=inst.org_id;
await inst.destroy({force:true,transaction:t});
//删除组织对应的角色
self.db.models.orgrole.destroy({where:{org_id:orgid},force:true,transaction:t});
//查询出父元素
var orgparent=await self.dao.model.findOne({
order:[["code","ASC"]],
where:{id:parentid},transaction:t,
include:[
{model:self.db.models.org,as:"orgs",order:[["code","ASC"]],include:[
{model:self.db.models.org,as:"orgs",order:[["code","ASC"]]}
]}
]});
return orgparent.orgs;
});
}else{
return null;
}
}
async update(p,q,req){
var self=this;
var cmkey=p.comkey;//如果是来自租户界面的修改
return this.db.transaction(async function (t) {
p.isLeaf=p.isPosition;
var orgupdate=await self.dao.model.findOne({where:{id:p.id},transaction:t});
await self.dao.model.update(p,{where:{id:p.id},transaction:t});
var usersupdate=await self.db.models.user.findAll({where:{org_id:orgupdate.id}});
//如果节点名称或岗位性质发生变化
//if(p.name!=orgupdate.name || p.isMain!=orgupdate.isMain){
for(var ud of usersupdate){
ud.opath=p.orgpath;
var n=p.orgpath.lastIndexOf("/");
ud.ppath=p.isMain?p.orgpath.substring(0,n):p.orgpath;
await ud.save({transaction:t});
}
//}
if(p.Roles && !cmkey){//如果不是来自租户界面的修改
var roles=await self.db.models.role.findAll({where:{id:{[self.db.Op.in]:p.Roles}}});
await orgupdate.setRoles(roles,{transaction:t});
//同时要给这个岗位下的user,更新角色 todo
for(var ud of usersupdate){
await ud.setRoles(roles,{transaction:t});
}
}
var orgparent=await self.dao.model.findOne({
order:[["code","ASC"]],
where:{id:orgupdate.org_id},transaction:t,
include:[
{model:self.db.models.org,as:"orgs",order:[["code","ASC"]],include:[
{model:self.db.models.org,as:"orgs",order:[["code","ASC"]],include:[
{model:self.db.models.role,as:"roles",attributes:['id','code','name']},
]},
{model:self.db.models.role,as:"roles",attributes:['id','code','name']},
]},
{model:self.db.models.role,as:"roles",attributes:['id','code','name']},
]});
return orgparent.orgs;
});
}
async checkMainPosition(p,q,req){
var orgmain=await this.dao.model.findOne({where:{org_id:p.org_id,isMain:true}});
if(orgmain){
return {"isHave":true};
}else{
return null;
}
}
async changePos(toorgid,uid){
//查询出当前用户,设置当前用户的orgid为修改目标
var self=this;
return this.db.transaction(async function (t) {
var ufind=await self.db.models.user.findById(uid);
var org=await self.dao.model.findOne({
where:{id:toorgid},
include:[
{model:self.db.models.role,as:"roles"},
]});
ufind.org_id=toorgid;
ufind.opath=org.orgpath;
if(org.isMain){//如果是主岗
var n=org.orgpath.lastIndexOf("/");
ufind.ppath=org.orgpath.substring(0,n);
}else{
ufind.ppath= org.orgpath;
}
await ufind.save({transaction:t});
await ufind.setRoles(org.roles,{transaction:t});
return ufind;
});
//查询出目标org,关联查询出角色
//设置当前用户的角色
}
async create(p,q,req){
var self=this;
var cmkey=p.comkey;
return this.db.transaction(async function (t) {
if(cmkey){
var tmpcompany =await self.db.models.company.findOne({where:{companykey:cmkey},transaction:t});
p.company_id=tmpcompany.id;
}
var roles=await self.db.models.role.findAll({where:{id:{[self.db.Op.in]:p.Roles}}});
p.isLeaf=p.isPosition;
p.app_id=null;
var orgnew=await self.dao.model.create(p,{transaction:t});
if(roles && roles.length>0){
await orgnew.setRoles(roles,{transaction:t});
}
var orgparent=await self.dao.model.findOne({
order:[["code","ASC"]],
where:{id:orgnew.org_id},transaction:t,
include:[
{model:self.db.models.org,as:"orgs",order:[["code","ASC"]],include:[
{model:self.db.models.org,as:"orgs",order:[["code","ASC"]],include:[
{model:self.db.models.role,as:"roles",attributes:['id','code','name']},
]},
{model:self.db.models.role,as:"roles",attributes:['id','code','name']},
]},
{model:self.db.models.role,as:"roles",attributes:['id','code','name']},
]});
return orgparent.orgs;
});
}
async findOrgById(id){
var org=await this.dao.model.findOne({
order:[["code","ASC"]],
where:{id:id},
include:[
{model:this.db.models.org,as:"orgs",order:[["code","ASC"]],include:[
{model:this.db.models.org,as:"orgs",order:[["code","ASC"]],include:[
{model:this.db.models.role,as:"roles",attributes:['id','code','name']},
]},
{model:this.db.models.role,as:"roles",attributes:['id','code','name']},
]},
{model:this.db.models.role,as:"roles",attributes:['id','code','name']},
]});
return org.orgs;
}
async initOrgs(company,appid){
var self=this;
return this.db.transaction(async function (t) {
var org=await self.dao.model.findOne({
order:[["code","ASC"]],
//where:{name:company.name,company_id:company.id,app_id:appid},transaction:t,
where:{name:company.name,company_id:company.id},transaction:t,
include:[
{model:self.db.models.org,as:"orgs", order:[["code","ASC"]],include:[
{model:self.db.models.org,as:"orgs",order:[["code","ASC"]],include:[
{model:self.db.models.role,as:"roles",attributes:['id','code','name']},
]},
{model:self.db.models.role,as:"roles",attributes:['id','code','name']},
]},
{model:self.db.models.role,as:"roles",attributes:['id','code','name']},
]});
if(org!=null){
return org;
}else{
var root= await self.dao.model.create({
code:"root"+company.id,
name:company.name,
isLeaf:false,
isPostion:false,
isMain:false,
orgpath:"/",
company_id:company.id,
app_id:null,
},{transaction:t});
return root;
}
});
}
}
module.exports=OrgService;
const system=require("../../../system");
const ServiceBase=require("../../sve.base");
class RoleService extends ServiceBase{
constructor(){
super("auth",ServiceBase.getDaoName(RoleService));
//this.appDao=system.getObject("db.appDao");
}
async findOneByCode(code){
return this.dao.model.findOne({where:{code:code}});
}
}
module.exports=RoleService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base")
const settings = require("../../../../config/settings")
const jwt = require('jsonwebtoken');
class UserService extends ServiceBase {
constructor() {
super("auth", ServiceBase.getDaoName(UserService));
this.companyDao = system.getObject("db.common.companyDao");
this.roleDao = system.getObject("db.auth.roleDao");
this.authS=system.getObject("service.auth.authSve");
}
//登录后的租户创建属于租户的用户
//需要在控制器里取出公司ID
//和租户绑定同一家公司
//按照用户名和密码进行注册
//控制器端检查用户名和密码非空
async registerByTantent(p, q) {
p.rolecodes = (p.roles && p.roles.length > 0) ? p.roles : [settings.pmroleid["pr"]];
let rtn = await this.pmregister(p, q)
return rtn;
}
//应用的自由用户注册,无需验证,需要前端头设置公司KEY
async pmregisterByFreeUser(p, q) {
p.rolecodes = [settings.pmroleid["pr"]];
let rtn = await this.pmregister(p, q)
return rtn;
}
//平台租户注册接口方法
//控制器端检查用户名和密码非空
async pmregister(p, q) {
var self = this;
let tmppwd = p.password;
if (!tmppwd) {
tmppwd = settings.defaultpwd;
}
p.password = this.getEncryptStr(tmppwd);
if (!p.nickName) {
p.nickName = p.userName;
}
return this.db.transaction(async function (t) {
//对于租户类型注册,创建一个默认公司,公司名称xxxx的公司
//如果非租户类型,需要按照传递进来的公司companykey,来查询公司,按照companykey缓存到redis
let cmpkey = self.getUUID();
let rolecodes = p.rolecodes ? p.rolecodes : [settings.pmroleid["ta"]];
if (rolecodes[0] == settings.pmroleid["ta"]) {//如果注册时,角色是租户,那么需要创建默认公司
p.isAdmin = true;//租户默认就是管理员的权限
let cmp = await self.companyDao.create({ name: p.userName + "的公司", companykey: cmpkey }, t);
p.company_id = cmp.id;
}
//如果是用户注册,平台用户应该只属于平台应用
let roleappid = p.app_id;//先取出当前应用的id,给后续的取角色用,角色是按照应用和公司区分
p.app_id = settings.pmappid
let u = await self.dao.create(p, t)
//设置默认角色,租户
//设置默认普通角色,由于有了租户概念,所以注册时,需要知道当前租户和应用的id 才可以设置默认角色 todo
//如果是非租户,那么按照当前应用ID是找不到指定的角色,所以是空的
var roles = await self.roleDao.model.findAll({ where: { id: { [self.db.Op.in]: rolecodes }, app_id: roleappid, company_id: p.company_id }, transaction: t });
if (roles && roles.length > 0) {
await u.setRoles(roles, { transaction: t });
}
//创建统一账号 to add extra fields
let cred = await self.cregister(u.userName, p.company_id, p.password, u.id + "")
console.log("......................................");
console.log(cred.consumer.id);
if (cred) {
u.center_id = cred.consumer.id;
u.jwtkey = cred.key;
u.jwtsecret = cred.secret;
try {
await u.save({ transaction: t });
} catch (e) {
console.log(e);
await self.cunregister(p.userName);
throw new Error("保存用户失败");
}
return { user: u, companykey: cmpkey };
} else {
throw new Error("创建统一账号失败");
}
});
}
//平台登录
//登录接口封装kong-url
//登录路由放行
//p里面含有appkey,company_id,userName,password
async pmlogin(p, q, req) {
var self = this;
//先要按照用户名,在统一账户中查找存在性
//如果不存在
let consumer = await this.cget(UserService.consumerUrl(p.userName));
if (!consumer.data) {
return null;
} else {
let password = consumer.data.tags[1].split("_")[1];
let inpassword = this.getEncryptStr(p.password);
if (password != inpassword) {
return null;
}
}
var rtn = {}
return this.db.transaction(async function (t) {
//从缓存中取得
// let userfind = await self.dao.model.findOne({
// where: { userName: p.userName, app_id: settings.pmappid },
// attributes: ['userName', 'nickName','headUrl','jwtkey','jwtsecret','created_at','isSuper','isAdmin'],
// include: [{ model: self.db.models.company, raw: true, attributes: ["companykey"] }]
// });
let userfind = await self.cacheManager["UserCache"].cache(p.userName)
if (userfind) {
let token = await self.cmakejwt(userfind.jwtkey, userfind.jwtsecret, null);
rtn.token = token;
let roleids=userfind.Roles.map(item=>{
return item.id
})
let auths= await self.authS.findAuthsByRole(roleids)
userfind["access"]=auths
delete userfind["jwtkey"]
delete userfind["jwtsecret"]
rtn.user = userfind;
return rtn;
} else {
return null;
}
})
}
async getUserInfo(uname) {
// let userfind = await this.dao.model.findOne({
// where: { userName: uname, app_id: settings.pmappid },
// attributes: ['userName', 'nickName',"headUrl",'isSuper','isAdmin'],
// include: [{ model: this.db.models.company, raw: true, attributes: ["companykey"] }]
// });
let userfind = await this.cacheManager["UserCache"].cache(uname)
//添加当前用户的权限信息
let roleids=userfind.Roles.map(item=>{
return item.id
})
let auths= await this.authS.findAuthsByRole(roleids)
userfind["access"]=auths
delete userfind["jwtkey"]
delete userfind["jwtsecret"]
return userfind;
}
//自由用户的电话登录和注册
//需要存在公司KEY
async pmloginByVCodeForFreeUser(p, q) {
p.rolecodes = [settings.pmroleid["pr"]];
let rtn = await this.pmloginByVCode(p, q, req)
return system.getResult(rtn);
}
//平台租户注册与登录
//用户验证码登录
//
async pmloginByVCode(p, q, req) {
var rtn = {}
//检查传递过来的手机验证码是否与缓存的一致
let mobile = p.mobile;
let vcode = p.vcode;
let cachevcode = await this.cacheManager["VCodeCache"].getCache(mobile, 60)
if (vcode != cachevcode.vcode) {
return null;
} else {
//检查是否在库里存在
//appkey--company_id---需要控制器基类里设置到p对象里
let user = await this.cacheManager["UserCache"].cache(mobile)
if (user) {
let roleids=user.Roles.map(item=>{
return item.id
})
let auths= await this.authS.findAuthsByRole(roleids)
user["access"]=auths
//生成token
let token = await this.cmakejwt(user.jwtkey, user.jwtsecret, null);
rtn.token = token;
rtn.user = user;
return rtn;
} else {
//先按照用户名查续身份信息,获取key,secret,
let regrtn = await this.pmregister({ userName: mobile, nickName: mobile, rolecodes: p.rolecodes, company_id: p.company_id, app_id: p.app_id });
let token = await this.cmakejwt(regrtn.user.jwtkey, regrtn.user.jwtsecret, null);
// rtn.token = token;
// rtn.user = u;
let userfind= await this.cacheManager["UserCache"].cache(mobile)
let roleids=userfind.Roles.map(item=>{
return item.id
})
let auths= await this.authS.findAuthsByRole(roleids)
userfind["access"]=auths
regrtn.user=userfind
regrtn.token = token
return regrtn;
}
}
//不一致那么就
}
//发送手机验证码并缓存
async sendVCode(p, q, req) {
let mobile = p.mobile;
let vcodeobj = await this.cacheManager["VCodeCache"].cache(mobile, null, 60);
return vcodeobj.vcode;
}
async reSendVCode(p, q, req) {
let mobile = p.mobile;
await this.cacheManager["VCodeCache"].invalidate(mobile);
let vcodeobj = await this.cacheManager["VCodeCache"].cache(mobile, null, 60);
return vcodeobj.vcode;
}
//修改中心密码
async cmodifypwd(uname, newpwd, cmpid) {
try {
let rtn = await system.postJsonTypeReq(UserService.consumerUrl(uname), { tags: ["cmp_" + cmpid, "pass_" + newpwd] }, "PATCH")
console.log(rtn)
if (rtn.statusCode == 200) {
return rtn.data;
}
return null;
} catch (e) {
console.log(e);
return null;
}
}
//创建统一账号及jwt身份
async cregister(uname, cmpid, pass, uid) {
try {
var rtn2 = null;
let rtn = await system.postJsonTypeReq(UserService.newConsumerUrl(), { username: uname, custom_id: uid, tags: ["cmp_" + cmpid, "pass_" + pass] })
console.log(rtn)
if (rtn.statusCode == 409) {
throw new Error("已经存在相同的统一账号名称!");
} else {
//创建身份
rtn2 = await system.post3wFormTypeReq(UserService.newJwtCredUrl(uname))
}
if (rtn.statusCode == 201 && rtn2.statusCode == 201) {
return rtn2.data;
}
return null;
} catch (e) {
console.log(e);
return null;
}
}
async jwtsign(plkey, secretstr, opts) {
let promise = new Promise(function (resv, rej) {
jwt.sign({ iss: plkey }, secretstr, opts, function (err, rtn) {
if (err) {
rej(err);
} else {
resv(rtn);
}
});
});
return promise;
}
//只要登录 生成新的访问jwttoken
async cmakejwt(key, secret, opts) {
var token = await this.jwtsign(key, secret, opts);
return token;
}
//删除统一账号
async cunregister(uname) {
try {
let rtn = await system.delReq(UserService.consumerUrl(uname))
if (rtn.statusCode == 204) {
return {};
}
return null;
} catch (e) {
return null;
}
}
//登录统一账号
async clogin(uname) {
//检查是否存在重名
}
//按用户名查询统一用户
async findCUser(uname) {
}
async resetPassword(uname, pwd) {
let inpassword = this.getEncryptStr(pwd);
var self = this;
return this.db.transaction(async function (t) {
let up = await self.dao.updateByWhere({ password: inpassword }, { userName: uname }, t);
//令缓存失效
await self.cacheManager["UserCache"].invalidate(uname);
let cacheUser = await self.cacheManager["UserCache"].cache(uname);
//修改认证中心的tag密码
let modi = await self.cmodifypwd(uname, inpassword, cacheUser.company.id)
if (!modi) {
throw new Error("修改中心密码出错")
}
return cacheUser;
});
}
//修改
async update(qobj, tm = null) {
var self = this;
return this.db.transaction(async function (t) {
let up = await self.dao.update(qobj, t);
//令缓存失效
await self.cacheManager["UserCache"].invalidate(qobj.userName);
let cacheUser = await self.cacheManager["UserCache"].cache(qobj.userName);
return cacheUser;
});
}
}
module.exports = UserService;
// // (async ()=>{
// let u=new UserService();
// // // let x=await u.cregister("jiangong")
// // // console.log(x)
// // // let x=await u.cunregister("jiangong")
// // // console.log(x)
// // // let t=await u.cmakejwt()
// // // console.log(t)
// let ux=u.register({userName:"jiangyong3",password:"123"})
// console.log(ux);
// // })()
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
const moment = require("moment");
const pushTx = require("../../../utils/totxClient")
class BizoptService extends ServiceBase {
constructor() {
super("bizchance", ServiceBase.getDaoName(BizoptService));
this.schemeDao = system.getObject("db.bizchance.schemeDao");
this.statuslogDao = system.getObject("db.bizchance.statuslogDao");
}
async findBizAndSheme(pobj) {
let data = await this.dao.findBizAndSheme(pobj.id);
if (data) {
data = JSON.parse(JSON.stringify(data));
let bussinessData = {
id: data.id,
demand_code: data.demand_code,
business_type: data.business_type,
company_name: data.business_info.companyName,
customer_name: data.business_info.contactsName,
customer_number: data.business_info.contactsPhone,
annual_report: data.business_info.annual_report || false,
content: data.business_info.memoInfo,
service_address: data.business_info.serviceName,
source_name: data.source_name,
business_status: data.business_status,
source_number: data.source_number,
updated_at: moment(data.updated_at).format('YYYY-MM-DD HH:mm:ss'),
created_at: moment(data.created_at).format('YYYY-MM-DD HH:mm:ss'),
close_reason: data.close_reason
};
let schemeData = null;
if (data.scheme) {
schemeData = {
id: data.scheme.id,
scheme_number: data.scheme.scheme_number,
scheme_status: data.scheme.scheme_status,
reject_reason: data.scheme.reject_reason,
company_name: data.scheme.scheme_info.companyName,
address: data.scheme.scheme_info.address,
annual_report: data.scheme.scheme_info.annual_report || false,
remark_info: data.scheme.remark_info,
updated_at: moment(data.scheme.updated_at).format('YYYY-MM-DD HH:mm:ss'),
created_at: moment(data.scheme.created_at).format('YYYY-MM-DD HH:mm:ss'),
}
}
return {
bussinessData,
schemeData
}
}
return data
}
async closeBiz(pobj) {
/**
* 1. 回传给腾讯
* 2. 判断是否可以关闭
* 3. 更改 商机、方案状态
* 4. 插入更改记录
* 5. 查询 是否有权限
*/
const bizResult = await this.dao.findOne({
id: pobj.bizId
});
if (!bizResult) {
throw new Error("查不到该商机");
}
if ([system.BUSSTATUS.CLOSED, system.BUSSTATUS.SUCCESS].includes(bizResult.business_status)) {
throw new Error("此商机状态下不可操作");
}
const schemeResult = await this.schemeDao.findOne({
bizopt_id: pobj.bizId
});
await pushTx.pushCloseNeed(bizResult, pobj.close_reason);
return this.db.transaction(async (t) => {
await this.dao.updateByWhere({
business_status: system.BUSSTATUS.CLOSED,
close_reason: pobj.close_reason
}, {
id: pobj.bizId
}, t);
this.statuslogDao.create({
flow_type: system.FLOWCODE.BIZ,
flow_id: pobj.bizId,
status_code: system.BUSSTATUS.CLOSED,
salesman_id: pobj.userid,
salesman_name: pobj.username
});
if (schemeResult) {
await this.schemeDao.updateByWhere({
scheme_status: system.SCHEMESTATUS.CLOSED
}, {
id: schemeResult.id
}, t);
this.statuslogDao.create({
flow_type: system.FLOWCODE.SCHEME,
flow_id: schemeResult.id,
status_code: system.SCHEMESTATUS.CLOSED,
salesman_id: pobj.userid,
salesman_name: pobj.username
});
}
return "success"
})
}
}
module.exports = BizoptService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
const moment = require("moment");
const pushTx = require("../../../utils/totxClient")
class SchemeService extends ServiceBase {
constructor() {
super("bizchance", ServiceBase.getDaoName(SchemeService));
this.bizoptDao = system.getObject("db.bizchance.bizoptDao");
this.statuslogDao = system.getObject("db.bizchance.statuslogDao");
}
async create(data) {
// TODO: 权限判断
let bizData = await this.bizoptDao.findOne({
id: data.bizopt_id
});
if (!bizData) {
throw new Error("查不到该商机");
}
if ([system.BUSSTATUS.CLOSED, system.BUSSTATUS.SUCCESS, system.BUSSTATUS.WAITINGCONFIRM].includes(bizData.business_status)) {
throw new Error("此商机状态下不可操作");
}
let schemeData = await this.dao.findOne({
bizopt_id: data.bizopt_id
})
if (schemeData && [system.SCHEMESTATUS.WAITINGCONFIRM, system.SCHEMESTATUS.CLOSED].includes(schemeData.scheme_status)) {
throw new Error("此方案状态下不可操作");
}
// scheme_number 提交到腾讯 获取更新 方案编号
data.scheme_number = await pushTx.pushScheme(bizData, schemeData ? { ...data, scheme_number: schemeData.scheme_number } : data);
return this.db.transaction(async (t) => {
/**
* 1. 更改 商机状态
* 2. 查询 是否有方案及方案状态
* 3. 新增 或更改 方案
* 4. 添加 状态记录更改
*/
try {
await this.bizoptDao.updateByWhere({
business_status: system.BUSSTATUS.WAITINGCONFIRM
}, {
id: data.bizopt_id
}, t);
this.statuslogDao.create({
flow_type: system.FLOWCODE.BIZ,
flow_id: data.bizopt_id,
status_code: system.BUSSTATUS.WAITINGCONFIRM,
salesman_id: data.userid,
salesman_name: data.username
});
let scheme_id = null;
if (schemeData) {
await this.dao.updateByWhere({
...data,
demand_code: bizData.demand_code,
scheme_status: system.SCHEMESTATUS.WAITINGCONFIRM
}, {
id: schemeData.id
}, t);
scheme_id = schemeData.id
} else {
let schemeResult = await this.dao.create({
...data,
demand_code: bizData.demand_code,
scheme_status: system.SCHEMESTATUS.WAITINGCONFIRM,
bizopt_id: data.bizopt_id
}, t);
scheme_id = schemeResult.id;
}
this.statuslogDao.create({
flow_type: system.FLOWCODE.SCHEME,
flow_id: scheme_id,
status_code: system.SCHEMESTATUS.WAITINGCONFIRM,
salesman_id: data.userid,
salesman_name: data.username
});
return { bizId: data.bizopt_id };
} catch (err) {
console.log(err)
}
});
}
}
module.exports = SchemeService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
class ArticleService extends ServiceBase {
constructor() {
super(ServiceBase.getDaoName(ArticleService));
this.newschannelDao = system.getObject("db.newschannelDao");
}
//获取频道列表
async findChannel(obj) {
// const apps=await super.findAndCountAll(obj);
var usageType = obj.usageType;
if (usageType == null || usageType == "" || usageType == "undefined") {
return { code: -101, msg: "参数有误", data: null };
}
try {
var sqlwhere = {
where: { usageType: usageType },
attributes: ["id", "code", "title", "bgimg", "isPubed", "usageType", "app_id"],
order: [["orderNo", 'ASC']],
raw: true
};
var list = await this.newschannelDao.model.findAll(sqlwhere);
if (list == null || list.length == 0) {
return { code: 0, msg: "没有信息", data: null };
} else {
return { code: 1, msg: "操作成功", data: list };
}
} catch (e) {
return { code: -1, msg: "操作失败", data: null };
}
}
//获取该频道所有列表
async findAndCountAll2(obj) {
// const apps=await super.findAndCountAll(obj);
var newschannel = obj.newschannel_id;
var pageSize = obj.page_size;
var currentPage = obj.current_page;
if (newschannel == null || newschannel == "" || newschannel == "undefined") {
return { code: -101, msg: "参数有误", data: null };
}
if (pageSize == null || pageSize == "" || pageSize == "undefined") {
pageSize = "";
}
if (currentPage == null || currentPage == "" || currentPage == "undefined") {
currentPage = "";
}
try {
var sqlwhere = {
where: { newschannel_id: newschannel },
attributes: ["id", "code", "title", "listimg", "videourl", "desc", "mediaType", "usageType",
"test", "newschannel_id", "app_id"],
order: [["orderNo", 'ASC']],
raw: true
};
if (pageSize != "" && currentPage != "") {
var tPageSize = Number(pageSize);
var tCurrentPage = Number(currentPage);
if (tCurrentPage < 1) {
tCurrentPage = 1;
}
if (tPageSize > 50) {
tPageSize = 50;
}
if (tPageSize < 1) {
tPageSize = 1;
}
sqlwhere.limit = tPageSize;
sqlwhere.offset = (tCurrentPage - 1) * tPageSize;
}
var list = await this.dao.model.findAll(sqlwhere);
if (list == null || list.length == 0) {
return { code: 0, msg: "没有信息", data: null };
} else {
return { code: 1, msg: "操作成功", data: list };
}
} catch (e) {
return { code: -1, msg: "操作失败", data: null };
}
// apps.forEach(a=>{
// if(a.content && a.content!=""){
// a.content=decodeURIComponent(a.content);
// }
// });
// console.log("xxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxx");
// for(var arch of apps.rows){
// var c=arch.content.toString("utf-8") ;
// console.log("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
// console.log(c);
// if(c && c!=""){
// arch.content=c;
// }
// }
// return apps;
}
//获取详细信息
async findArticle(obj) {
// const apps=await super.findAndCountAll(obj);
var id = obj.id;
if (id == null || id == "" || id == "undefined") {
return { code: -101, msg: "参数有误", data: null };
}
try {
var sqlwhere = {
where: { id: id },
attributes: ["id", "code", "title", "listimg", "videourl", "desc", "content", "mediaType", "usageType",
"test", "app_id"],
order: [["created_at", 'desc']],
raw: true
};
var list = await this.dao.model.findOne(sqlwhere);
if (list == null || list.length == 0) {
return { code: 0, msg: "没有信息", data: null };
} else {
return { code: 1, msg: "操作成功", data: list };
}
} catch (e) {
return { code: -1, msg: "操作失败", data: null };
}
}
}
module.exports = ArticleService;
const system=require("../../../system");
const ServiceBase=require("../../sve.base");
class NewschannelService extends ServiceBase{
constructor(){
super(ServiceBase.getDaoName(NewschannelService));
//this.appDao=system.getObject("db.appDao");
}
async findAgreenment(queryobj,qobj,req){
return this.dao.findAgreenment();
}
async findPrev5(queryobj,qobj){
return this.dao.findPrev5();
}
}
module.exports=NewschannelService;
const system=require("../../../system");
const ServiceBase=require("../../sve.base");
class SloganpictureService extends ServiceBase{
constructor(){
super(ServiceBase.getDaoName(SloganpictureService));
//this.appDao=system.getObject("db.appDao");
}
async findAndCountAll(obj){
const apps=await super.findAndCountAll(obj);
// apps.forEach(a=>{
// if(a.content && a.content!=""){
// a.content=decodeURIComponent(a.content);
// }
// });
// console.log("xxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxx");
// for(var arch of apps.rows){
// var c=arch.content.toString("utf-8") ;
// console.log("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
// console.log(c);
// if(c && c!=""){
// arch.content=c;
// }
// }
return apps;
}
}
module.exports=SloganpictureService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
const appconfig = system.getSysConfig();
const fs=require("fs")
class AppService extends ServiceBase {
constructor() {
super("common", ServiceBase.getDaoName(AppService));
this.userS = system.getObject("service.auth.userSve");
this.routeDao = system.getObject("db.common.routeDao");
this.ossC= system.getObject("util.ossClient");
}
async getApp(p) {
let app = this.cacheManager["AppCache"].cache(p.appkey, null);
return app;
}
async upFrontRoute(jsonObject,app_id){
var self=this
return this.db.transaction(async function (t) {
let keyfile=self.getUUID()+".json"
let tmpdirfile="/tmp"+keyfile
let str=JSON.stringify(jsonObject[0].children)
fs.writeFileSync(tmpdirfile,str)
let result=await self.ossC.upfile(keyfile,tmpdirfile)
fs.unlinkSync(tmpdirfile)
await self.db.models.app.update({docUrl:result.url,id:app_id},{where:{id:app_id},transaction:t})
return result
})
}
async findAllApps(uid) {
var apps = null;
var dicRtn = {};
var wheresql = {};
if (uid) {
wheresql[this.db.Op.and] = {
[this.db.Op.or]:
[
{ isPublish: false, creator_id: uid },
{ isEnabled: true, isPublish: true }
],
};
apps = await this.dao.model.findAll({
where: wheresql,
attributes: ['id', 'name', 'appkey', 'showimgUrl', 'appType', 'docUrl', 'homePage']
});
} else {
wheresql = { isEnabled: true, isPublish: true };
apps = await this.dao.model.findAll({
where: wheresql,
attributes: ['id', 'name', 'appkey', 'showimgUrl', 'appType', 'docUrl', 'homePage']
});
}
for (var app of apps) {
var tmk = uiconfig.config.pdict.app_type[app.appType];
if (!dicRtn[tmk]) {
dicRtn[tmk] = [];
dicRtn[tmk].push(app);
} else {
dicRtn[tmk].push(app);
}
}
return dicRtn;
}
//创建应用
//每个应用建立两个路由,一个api路由
//对api路由启用jwt插件
async create(pobj, qobj, req) {
var self = this;
return this.db.transaction(async function (t) {
var app = await self.dao.create(pobj, t);
//创建后台应用服务
let svobj = await self.cjsonregister(AppService.newServiceUrl(), { name: app.name, url: "http://" + app.backend })
//添加路由
let ps = ["/web/auth/userCtl/pmlogin", "/web/auth/userCtl/pmregister", "/web/auth/userCtl/pmSendVCode", "/web/auth/userCtl/pmloginByVCode"]
let routeobj = await self.cjsonregister(AppService.newRouteUrl(app.name),
{ name: app.name, paths: ps, hosts: [app.domainName], strip_path: false })
let ps2 = ["/api", "/web"]
let routeapi = await self.cjsonregister(AppService.newRouteUrl(app.name), { name: app.name + "_api", hosts: [app.domainName], paths: ps2, strip_path: false })
let r1 = await self.routeDao.create({ name: app.name, center_id: routeobj.id, app_id: app.id, shosts: app.domainName, spaths: ps.join(",") }, t);
let r2 = await self.routeDao.create({ name: app.name + "_api", center_id: routeapi.id, app_id: app.id, shosts: app.domainName, spaths: ps2.join(",") }, t);
//给api路由启动插件
await self.cjsonregister(AppService.bindPluginUrl(app.name + "_api"), { name: "jwt" })
if (svobj && routeobj && r1 && r2) {
try {
app.appkey = svobj.id;
await app.save({ transaction: t });
} catch (e) {
await self.cdel(AppService.routeUrl(app.name))
await self.cdel(AppService.routeUrl(app.name + "_api"))
await self.cdel(AppService.serviceUrl(app.name))
}
} else {
throw new Error("创建应用服务失败");
}
return app;
});
}
async translateInitSels(funcobjs) {
funcobjs.forEach((item) => {
console.log(item.title)
if (item.children && item.children.length>0) {
this.translateInitSels(item.children)
} else {
if(item.auths && item.auths.length>0){
item.sels=[]
}
}
})
}
async saveFuncTree(pobj){
var self = this;
return this.db.transaction(async function (t) {
//如果存在functionJSON,那么就需要转换,构建编码路径
if (pobj.funcJson) {
// let funcobjs = JSON.parse(pobj.functionJSON)
await self.translateInitSels(pobj.funcJson)
pobj.functionJSON= JSON.stringify(pobj.funcJson)
}
let appcache=await self.cacheManager["AppCache"].cache(pobj.appkey);
let upobj={id:appcache.id,functionJSON:pobj.functionJSON}
await self.dao.update(upobj, t)
//令缓存失效
await self.cacheManager["AppCache"].invalidate(pobj.appkey);
let appcache2=await self.dao.model.findById(appcache.id,{transaction:t});
return {funcJson:JSON.parse(appcache2.functionJSON)}
})
}
//删除应用
async update(pobj, qobj) {
var self = this;
return this.db.transaction(async function (t) {
//如果存在functionJSON,那么就需要转换,构建编码路径
if (pobj.functionJSON != "") {
let funcobjs = JSON.parse(pobj.functionJSON)
await self.translateWithBizCode(funcobjs,null)
pobj.functionJSON= JSON.stringify(funcobjs)
}
await self.dao.update(pobj, t)
let upobj = await self.dao.findById(pobj.id)
//令缓存失效
await self.cacheManager["AppCache"].invalidate(upobj.appkey);
return upobj
})
}
//删除应用
async delete(pobj, qobj) {
var self = this;
return this.db.transaction(async function (t) {
let delobj = await self.dao.delete(pobj, t)
//令缓存失效
await self.cacheManager["AppCache"].invalidate(delobj.appkey);
//删除路由
await self.cdel(AppService.routeUrl(pobj.name));
//删除api路由
await self.cdel(AppService.routeUrl(pobj.name + "_api"));
//删除服务
await self.cdel(AppService.serviceUrl(pobj.name));
return {}
})
}
async findAndCountAll(obj) {
var self = this;
const apps = await super.findAndCountAll(obj);
return apps;
}
}
module.exports = AppService;
// (async ()=>{
// let u=new AppService();
// // let x=await u.cregister("jiangong")
// // console.log(x)
// // let x=await u.cunregister("jiangong")
// // console.log(x)
// // let t=await u.cmakejwt()
// // console.log(t)
// //let ux=await u.cjsonregister(AppService.newRouteUrl("test-service2"),{name:"test-service2",hosts:["ttest1.com"]})
// //let ux=await u.cjsonregister(AppService.newServiceUrl(),{name:"test-service3",url:"http://zhichan.gongsibao.com"})
// //let ux=await u.cdel(AppService.routeUrl("test-service2"))
// //let ux=await u.cdel(AppService.serviceUrl("test-service2"))
// // let ux=await u.create({name:"test4-service",backend:"zhichan-service",domainName:"domain.com"})
// // console.log(ux);
// // let delrtn=await u.delete({id:2,name:"test4-service"})
// // console.log(delrtn);
// })()
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
const uuidv4 = require('uuid/v4');
class CachSearchesSve {
constructor() {
this.cacheManager = system.getObject("db.common.cacheManager");
this.appDao = system.getObject("db.common.appDao");
this.authUtils = system.getObject("util.businessManager.authUtils");
}
getUUID() {
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
return u;
}
async buildCacheRtn(pageValues) {
var ps = pageValues.map(k => {
var tmpList = k.split("|");
if (tmpList.length == 2) {
return { name: tmpList[0], val: tmpList[1], key: k };
}
});
return ps;
}
async findAndCountAllCache(obj) {
const pageNo = obj.pageInfo.pageNo;
const pageSize = obj.pageInfo.pageSize;
const limit = pageSize;
const offset = (pageNo - 1) * pageSize;
var search_name = obj.search && obj.search.name ? obj.search.name : "";
var cacheCacheKeyPrefix = "sadd_base_appkeys:" + settings.appKey + "_cachekey";
if (obj.appid == settings.platformid) {
var cacheList = await this.cacheManager["MagCache"].getCacheSmembersByKey(cacheCacheKeyPrefix);
if (search_name) {
cacheList = cacheList.filter(f => f.indexOf(search_name) >= 0);
}
var pageValues = cacheList.slice(offset, offset + limit);
var kobjs = await this.buildCacheRtn(pageValues);
var tmpList = { results: { rows: kobjs, count: cacheList.length } };
return system.getResult(tmpList);
} else {
var body = {
pageInfo: obj.pageInfo,
search: obj.search
};
var tmpList = await this.opOtherAppCache("findAndCountAll", body, obj.opCacheUrl);
return tmpList;
}
}
async delCache(obj) {
if (obj.appid == settings.platformid) {
var keyList = obj.key.split("|");
if (keyList.length == 2) {
var cacheCacheKeyPrefix = "sadd_base_appkeys:" + settings.appKey + "_cachekey";
await this.cacheManager["MagCache"].delCacheBySrem(cacheCacheKeyPrefix, obj.key);
await this.cacheManager["MagCache"].del(keyList[0]);
return { status: 0 };
}
} else {
var body = {
del_cachekey: obj.key
};
return await this.opOtherAppCache("delCache", body, obj.opCacheUrl);
}
}
async clearAllCache(obj) {
if (obj.appid == settings.platformid) {
await this.cacheManager["MagCache"].clearAll();
return { status: 0 };
}
return await this.opOtherAppCache("clearAllCache", {}, obj.opCacheUrl);
}
//app调用次数
async findAndCountAlldetail(obj) {
var apicallAccu = await this.cacheManager["ApiAccuCache"].getApiCallAccu(obj);
var result = { rows: [], count: 0 };
var keys = await this.cacheManager["MagCache"].keys("api_call_" + appkey + "*");
var detail = null;
for (let j = 0; j < keys.length; j++) {
var d = keys[j];
var pathdetail = d.substr(d.lastIndexOf("_") + 1, d.length);
var apicalldetailAccu = await this.cacheManager["ApiCallCountCache"].getApiCallCount(appkey, pathdetail);
var detail = { "detailPath": d, "detailCount": apicalldetailAccu.callcount };
}
result.rows = detail;
}
//操作别的应用的缓存
async opOtherAppCache(action_type, body = null, opCacheUrl) {
var appData = await this.authUtils.getTokenInfo(settings.appKey, settings.secret);
if (appData.status != 0) {
return appData;
}
//按照访问token
const restS = await system.getObject("util.restClient");
var restResult = await restS.execPostWithAK(
{
action_type: action_type,
body: body
},
opCacheUrl, appData.data.accessKey);
if (restResult && restResult.status == 0) {
return restResult;
}
return system.getResultFail();
}
}
module.exports = CachSearchesSve;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
class CompanyService extends ServiceBase {
constructor() {
super("common", ServiceBase.getDaoName(CompanyService));
}
async setOrgs(p,cmk) {
var self=this
return this.db.transaction(async function (t) {
let strjson = JSON.stringify(p.orgJson)
p.id = p.company_id
p.orgJson = strjson
//更新组织机构
let u = await self.dao.update(p,t)
//更新,还得传输当前节点,查询出当前节点的角色
//按照当前节点的opath查询出所有的用户,更新这些用户的角色信息
let curNodeData=p.curdata
if(curNodeData && curNodeData.isPosition){
let opathstr=curNodeData.orgpath
let us=await self.db.models.user.findAll({where:{opath:opathstr},transaction:t})
//查询出角色
let roleids=curNodeData.roles
let rs=await self.db.models.role.findAll({where:{id:{[self.db.Op.in]:roleids},app_id:p.app_id,company_id:p.company_id},transaction:t})
for(let u of us){
await u.setRoles(rs,{transaction:t})
}
// users.forEach((u)=>{
// await u.setRoles(rs, { transaction: t });
// })
}
//用户缓存也要失效
//缓存失效
await self.cacheManager["CompanyCache"].invalidate(cmk)
let companytmp=await self.dao.model.findOne({where:{companykey:cmk},transaction:t});
return {orgJson:JSON.parse(companytmp.orgJson)}
})
}
}
module.exports = CompanyService;
const system=require("../../../system");
const ServiceBase=require("../../sve.base");
const settings=require("../../../../config/settings");
class MetaService extends ServiceBase{
constructor(){
super("common",ServiceBase.getDaoName(MetaService));
this.restS=system.getObject("util.restClient");
}
async getApiDoc(appid){
var p=settings.basepath+"/app/base/db/impl/common/apiDocManager.js";
var ClassObj= require(p) ;
var obj=new ClassObj();
return obj.doc;
}
async getApiDocRemote(appid,docUrl){
var rtn=await this.restS.execPost({}, docUrl);
if(rtn.stdout){
var dod=JSON.parse(rtn.stdout);
if(dod.data){
return dod.data;
}
}
return null;
}
async getUiConfig(appid){
const cfg=await this.cacheManager["UIConfigCache"].cache(appid,null,60);
return cfg;
}
async getRemoteUiConfig(appkey,uiconfigUrl){
const cfg=await this.cacheManager["UIRemoteConfigCache"].cache(appkey,null,120,uiconfigUrl);
return cfg;
}
}
module.exports=MetaService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
const appconfig = system.getSysConfig();
class PluginService extends ServiceBase {
constructor() {
super("common", ServiceBase.getDaoName(AppService));
this.userS = system.getObject("service.auth.userSve");
}
}
module.exports = PluginService;
// (async ()=>{
// let u=new AppService();
// // let x=await u.cregister("jiangong")
// // console.log(x)
// // let x=await u.cunregister("jiangong")
// // console.log(x)
// // let t=await u.cmakejwt()
// // console.log(t)
// //let ux=await u.cjsonregister(AppService.newRouteUrl("test-service2"),{name:"test-service2",hosts:["ttest1.com"]})
// //let ux=await u.cjsonregister(AppService.newServiceUrl(),{name:"test-service3",url:"http://zhichan.gongsibao.com"})
// //let ux=await u.cdel(AppService.routeUrl("test-service2"))
// //let ux=await u.cdel(AppService.serviceUrl("test-service2"))
// // let ux=await u.create({name:"test4-service",backend:"zhichan-service",domainName:"domain.com"})
// // console.log(ux);
// // let delrtn=await u.delete({id:2,name:"test4-service"})
// // console.log(delrtn);
// })()
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
const appconfig = system.getSysConfig();
class RouteService extends ServiceBase {
constructor() {
super("common", ServiceBase.getDaoName(RouteService));
}
//创建应用
//每个应用建立两个路由,一个api路由
//对api路由启用jwt插件
async create(serviceName, routedata, req) {
var self = this;
return this.db.transaction(async function (t) {
var rtn=null;
try {
//添加路由
let routeobj = await self.cjsonregister(RouteService.newRouteUrl(serviceName), { name: routedata.name, hosts: routedata.hosts, paths: routedata.paths, strip_path: routedata.isstrip })
routedata.center_id = routeobj.id;
rtn = await self.dao.create(routedata, t);
} catch (e) {
console.log(e)
await self.cdel(RouteService.routeUrl(routedata.name));
}
return rtn;
});
}
async delete(qobj) {
var self = this;
return this.db.transaction(async function (t) {
let a=await self.dao.delete(qobj,t);
await self.cdel(RouteService.routeUrl(a.name));
return a
});
}
async findAndCountAll(obj) {
var self = this;
const apps = await super.findAndCountAll(obj);
return apps;
}
}
module.exports = RouteService;
// (async ()=>{
// let u=new AppService();
// // let x=await u.cregister("jiangong")
// // console.log(x)
// // let x=await u.cunregister("jiangong")
// // console.log(x)
// // let t=await u.cmakejwt()
// // console.log(t)
// //let ux=await u.cjsonregister(AppService.newRouteUrl("test-service2"),{name:"test-service2",hosts:["ttest1.com"]})
// //let ux=await u.cjsonregister(AppService.newServiceUrl(),{name:"test-service3",url:"http://zhichan.gongsibao.com"})
// //let ux=await u.cdel(AppService.routeUrl("test-service2"))
// //let ux=await u.cdel(AppService.serviceUrl("test-service2"))
// // let ux=await u.create({name:"test4-service",backend:"zhichan-service",domainName:"domain.com"})
// // console.log(ux);
// // let delrtn=await u.delete({id:2,name:"test4-service"})
// // console.log(delrtn);
// })()
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
const moment = require("moment");
const System = require("../../../system");
const pushTx = require("../../../utils/totxClient")
class DeliverService extends ServiceBase {
constructor() {
super("delivery", ServiceBase.getDaoName(DeliverService));
this.cacheinfoDao = system.getObject("db.delivery.cacheinfoDao");
this.materialDao = system.getObject("db.delivery.materialDao");
this.statuslogDao = system.getObject("db.bizchance.statuslogDao");
this.qualificationDao = system.getObject("db.delivery.qualificationDao");
this.annualreportDao = system.getObject("db.delivery.annualreportDao");
}
async temporarySave(pobj) {
const deliverData = await this.dao.findOne({
id: pobj.deliver_id
});
if (!deliverData) {
throw new Error("没有关联的交付单");
}
let result = await this.cacheinfoDao.createOrUpdate(pobj);
return result;
}
async findTemporary(pobj) {
return this.cacheinfoDao.findOne({
deliver_id: pobj.deliver_id
});
}
async submitMaterials(pobj) {
/**
* 1.此状态下是否可以提交材料
* 2.推送到腾讯
* 2.同步暂存数据表
* 3.存储到材料表
* 4.更改 交付单流转状态
*/
const deliverData = await this.dao.findOne({
id: pobj.deliver_id
});
if (!deliverData || ![
system.SERVERSESTATUS.COLLECTING,
system.SERVERSESTATUS.SUBMITING,
system.SERVERSESTATUS.DISPOSEING
].includes(deliverData.delivery_status)) {
throw new Error("此交付单不可提交材料");
}
// 推送到商城
await pushTx.submitMaterials(deliverData, JSON.parse(JSON.stringify(pobj.cache_info)))
return this.db.transaction(async (t) => {
await this.cacheinfoDao.createOrUpdate(pobj, t);
await this.materialDao.createOrUpdate(pobj, t);
if (deliverData.delivery_status === system.SERVERSESTATUS.COLLECTING) {
await this.dao.updateByWhere({
delivery_status: system.SERVERSESTATUS.SUBMITING
}, {
id: pobj.deliver_id
}, t);
this.statuslogDao.create({
flow_type: system.FLOWCODE.DELIVERY,
flow_id: pobj.deliver_id,
status_code: system.SERVERSESTATUS.SUBMITING,
salesman_id: pobj.userid,
salesman_name: pobj.username
});
}
return "SUCCESS"
});
}
async findInfo(pobj) {
/**
* 交付单表 关联 材料表(材料基本信息、邮寄信息) 、 资质信息表
*/
let result = await this.dao.findInfo(pobj);
if (!result) {
throw new Error("交付单不可查看");
}
result = JSON.parse(JSON.stringify(result));
if (result.master_source_number) {
let annualReportData = await this.dao.findOne({
master_source_number: result.master_source_number,
id: {
$ne: result.id
}
});
if (annualReportData) {
result.delivery_info.annualReport = true;
} else {
result.delivery_info.annualReport = false;
}
}
return result;
}
async changeDeliveryStatus(pobj) {
/**
* 判断 交付单状态下能否更新
*/
const deliverData = await this.dao.findOne({
id: pobj.id
});
if (!deliverData) {
throw new Error("没有此交付单");
}
if (![system.SERVERSESTATUS.SUBMITING, system.SERVERSESTATUS.POSTING].includes(deliverData.delivery_status)) {
throw new Error("此状态下不可手动更新办理状态");
}
let status;
let txstatus;
switch (deliverData.delivery_status) {
case system.SERVERSESTATUS.SUBMITING:
status = system.SERVERSESTATUS.DISPOSEING;
txstatus = pushTx.TXSTATUS.DISPOSEING;
break
case system.SERVERSESTATUS.POSTING:
status = system.SERVERSESTATUS.SUCCESS;
txstatus = pushTx.TXSTATUS.SUCCESS;
break
}
await pushTx.pushChangeOrder(txstatus, deliverData.delivery_code);
await this.dao.updateByWhere({
delivery_status: status
}, {
id: pobj.id
})
this.statuslogDao.create({
flow_type: system.FLOWCODE.DELIVERY,
flow_id: pobj.id,
status_code: status,
salesman_id: pobj.userid,
salesman_name: pobj.username
});
return "success"
}
// 点击详情 将 订单状态 从 已接单更新为收集材料中
async toCollecting(pobj) {
const deliverData = await this.dao.findOne({
id: pobj.id
});
if (!deliverData) {
throw new Error("没有此交付单");
}
if (system.SERVERSESTATUS.RECEIVED === deliverData.delivery_status) {
await pushTx.pushChangeOrder(pushTx.TXSTATUS.COLLECTING, deliverData.delivery_code);
await this.dao.updateByWhere({
delivery_status: system.SERVERSESTATUS.COLLECTING
}, {
id: pobj.id
});
this.statuslogDao.create({
flow_type: system.FLOWCODE.DELIVERY,
flow_id: pobj.id,
status_code: system.SERVERSESTATUS.COLLECTING,
salesman_id: pobj.userid,
salesman_name: pobj.username
});
}
return "success"
}
async addQualification(pobj) {
/**
* 1. 保存资质信息
* 2. 判断是否有年报服务,有的话改变年报状态
*/
const deliverData = await this.dao.findOne({
id: pobj.deliver_id
});
if (!deliverData) {
throw new Error("查不到交付单");
}
if (deliverData.delivery_status !== system.SERVERSESTATUS.DISPOSEING) {
throw new Error("该交付单状态下不可提交");
}
let annualReportData;
let annualReportArry = [];
// 年报逻辑
if (deliverData.master_source_number) {
annualReportData = await this.dao.findOne({
master_source_number: deliverData.master_source_number,
id: {
$ne: deliverData.id
}
});
if (annualReportData && annualReportData.delivery_status === System.ANNUALREPORT.RECEIVED) {
// TODO: let year = annualReportData.delivery_info && annualReportData.delivery_info.numYear || 5
let year = 5;
for (let i = new Date().getFullYear(); i < new Date().getFullYear() + year; i++) {
annualReportArry.push({
year: i,
status: System.ANNUALREPORT.WAITDECLARE,
deliver_id: annualReportData.id
});
}
// 推送年报信息
await pushTx.pushChangeOrder(pushTx.TXSTATUS.WAITDECLARE, annualReportData.delivery_code, {
annualReport: annualReportArry
})
}
}
return this.db.transaction(async (t) => {
await this.qualificationDao.createOrUpdate(pobj, t);
if (annualReportData && annualReportData.delivery_status === System.ANNUALREPORT.RECEIVED) {
await this.dao.updateByWhere({
delivery_status: System.ANNUALREPORT.TAKEEFFECT
}, {
id: annualReportData.id
}, t);
this.statuslogDao.create({
flow_type: system.FLOWCODE.DELIVERY,
flow_id: annualReportData.id,
status_code: System.ANNUALREPORT.TAKEEFFECT,
salesman_id: pobj.userid,
salesman_name: pobj.username
});
await this.annualreportDao.bulkCreate(annualReportArry, t);
}
return "success"
});
}
async closeDeliver(pobj) {
/**
* 1 关闭资质
* 2 查询是否有年报信息 关闭
*/
const deliverData = await this.dao.findOne({
id: pobj.id
});
if (!deliverData) {
throw new Error("查不到交付单");
}
if (![system.SERVERSESTATUS.RECEIVED, system.SERVERSESTATUS.COLLECTING].includes(deliverData.delivery_status)) {
throw new Error("该交付单状态下不可提交");
}
// 推送 关闭交付
await pushTx.pushChangeOrder(pushTx.TXSTATUS.CLOSED, deliverData.delivery_code, {
close_reason: pobj.close_reason
});
// 推送 退费
await pushTx.returnPremium(deliverData.delivery_code);
// 年报逻辑
let annualReportData;
if (deliverData.master_source_number) {
annualReportData = await this.dao.findOne({
master_source_number: deliverData.master_source_number,
id: {
$ne: deliverData.id
}
});
// 推送 关闭交付 资质
if (annualReportData) {
await pushTx.pushChangeOrder(pushTx.TXSTATUS.CLOSED, annualReportData.delivery_code, {
close_reason: "对应的资质交付关闭了"
});
// 推送 年报退费
await pushTx.returnPremium(annualReportData.delivery_code);
}
}
return this.db.transaction(async (t) => {
await this.dao.updateByWhere({
delivery_status: system.SERVERSESTATUS.CLOSED,
close_reason: pobj.close_reason
}, {
id: pobj.id
}, t);
this.statuslogDao.create({
flow_type: system.FLOWCODE.DELIVERY,
flow_id: pobj.id,
status_code: system.SERVERSESTATUS.CLOSED,
salesman_id: pobj.userid,
salesman_name: pobj.username
});
if (annualReportData) {
await this.dao.updateByWhere({
delivery_status: system.SERVERSESTATUS.CLOSED,
close_reason: "对应的资质交付关闭了"
}, {
id: annualReportData.id
}, t);
this.statuslogDao.create({
flow_type: system.FLOWCODE.DELIVERY,
flow_id: annualReportData.id,
status_code: system.SERVERSESTATUS.CLOSED,
salesman_id: pobj.userid,
salesman_name: pobj.username
});
}
return "success"
});
}
async addMail(pobj) {
/**
* 判断状态
* 保存 邮寄信息
* 更改流转状态
*/
let result = await this.dao.findInfo(pobj);
if (!result) {
throw new Error("交付单不可查看");
}
if (!result.qualification) {
throw new Error("请先上传资质信息");
}
if (result.delivery_status !== system.SERVERSESTATUS.DISPOSEING) {
throw new Error("该状态下不可填写邮寄信息");
}
const { material } = result;
let { proposerInfo } = material
proposerInfo.recipientInfo = pobj.recipientInfo;
await pushTx.pushChangeOrder(pushTx.TXSTATUS.POSTING, result.delivery_code, {
qualification: result.qualification,
recipientInfo: pobj.recipientInfo
});
return this.db.transaction(async (t) => {
await this.materialDao.updateByWhere({
proposerInfo
}, {
id: material.id
}, t);
await this.dao.updateByWhere({
delivery_status: system.SERVERSESTATUS.POSTING,
}, {
id: pobj.id
}, t);
this.statuslogDao.create({
flow_type: system.FLOWCODE.DELIVERY,
flow_id: pobj.id,
status_code: system.SERVERSESTATUS.POSTING,
salesman_id: pobj.userid,
salesman_name: pobj.username
});
return "success"
});
}
async findAnnualReportInfo(pobj) {
let annualReportResult = await this.dao.findAnnualReportInfo(pobj);
if (!annualReportResult) {
throw new Error("交付单不可查看");
}
if (!annualReportResult.master_source_number) {
throw new Error("查不到主订单号");
}
let data = await this.dao.findOne({
master_source_number: annualReportResult.master_source_number,
id: {
$ne: annualReportResult.id
}
});
if (!data) {
throw new Error("查不到对应的交付单");
}
let result = await this.dao.findInfo({ ...pobj, id: data.id });
annualReportResult = JSON.parse(JSON.stringify(annualReportResult));
const { material: { proposerInfo: { businessLicense } }, qualification } = result;
annualReportResult.businessLicense = businessLicense;
annualReportResult.qualification = qualification;
return annualReportResult;
}
async declareReport(pobj) {
/**
* 1. 更新 年报信息
* 2. 判断是否 都已申报完毕
* 3. 改变 交付单状态
*/
const annualReportData = await this.annualreportDao.findOne({
id: pobj.id
});
if (!annualReportData) {
throw new Error("查不到此年报信息");
}
const deliverData = await this.dao.findOne({
id: annualReportData.deliver_id
});
// 年报逻辑
let isChange = false;
if (deliverData && deliverData.delivery_status === system.ANNUALREPORT.TAKEEFFECT) {
const annualReports = await this.annualreportDao.findAll({
deliver_id: deliverData.id,
status: system.ANNUALREPORT.WAITDECLARE
});
const ids = annualReports.map(item => {
return item.id;
});
if (ids.length === 1 && ids.includes(annualReportData.id)) {
isChange = true
}
}
// 推送年报信息
await pushTx.pushDeclareReport({ id: pobj.id, file: pobj.file }, deliverData);
//修改年报订单状态
if (isChange) {
await pushTx.pushChangeOrder(pushTx.TXSTATUS.SUCCESS, deliverData.delivery_code);
}
return this.db.transaction(async (t) => {
await this.annualreportDao.updateByWhere({
file: pobj.file,
status: system.ANNUALREPORT.DECLARESUCCESS
}, {
id: annualReportData.id
}, t);
if (isChange) {
await this.dao.updateByWhere({
delivery_status: system.ANNUALREPORT.SUCCESS
}, {
id: deliverData.id
}, t);
this.statuslogDao.create({
flow_type: system.FLOWCODE.DELIVERY,
flow_id: deliverData.id,
status_code: System.ANNUALREPORT.SUCCESS,
salesman_id: pobj.userid,
salesman_name: pobj.username
});
}
return 'success';
});
}
}
module.exports = DeliverService;
const system=require("../../../system");
const ServiceBase=require("../../sve.base");
class MsgHistoryService extends ServiceBase{
constructor(){
super(ServiceBase.getDaoName(MsgHistoryService));
this.msgnoticeDao = system.getObject("db.msg.msgnoticeDao");
this.userDao = system.getObject("db.auth.userDao");
this.redisClient = system.getObject("util.redisClient");
}
async saveMsg(msg) {
var self = this;
console.log("save msg ", msg);
// 事务
await this.db.transaction(async function (t){
// 1.保存聊天信息
msg = await self.dao.create(msg, t);
// 2.保存好友信息
await self.msgnoticeDao.saveNotice(msg, t);
});
return msg;
}
async pushBusinessLicenseMsg(senderId, targetId, businessLicense_id) {
if(!businessLicense_id) {
return 0;
}
var notice = await this.msgnoticeDao.findOne({fromId : senderId, toId : targetId});
if(notice && notice.businessLicense_id == businessLicense_id) {
return 0;
}
var senderUser = await this.userDao.findById(senderId);
var targetUser = await this.userDao.findById(targetId);
var senderChannel = senderUser.app_id + "¥" + senderUser.id;
var targetChannel = targetUser.app_id + "¥" + targetUser.id;
var sender = senderUser.app_id + "¥" + senderUser.id + "¥" + senderUser.headUrl;
var target = targetUser.app_id + "¥" + targetUser.id + "¥" + targetUser.headUrl;
var msg = {
msgType: "mryzLicense",
sender:sender,
senderId:senderId,
target:target,
targetId:targetId,
content:businessLicense_id,
isRead:false,
businessLicense_id:businessLicense_id
}
var obj = await this.saveMsg(msg);
var bl = await this.businesslicenseDao.findById(businessLicense_id);
msg.businessLicense = bl;
msg.id = obj.id;
msg.created_at = obj.created_at;
this.redisClient.publish(senderChannel, JSON.stringify(msg));
this.redisClient.publish(targetChannel, JSON.stringify(msg));
return 1;
}
async getChatList(senderId, targetId, maxId, pageSize) {
let sql = "SELECT * FROM `msghistory` WHERE id < :maxId AND ((senderId = :senderId AND targetId = :targetId) OR (targetId = :senderId AND senderId = :targetId)) ORDER BY id DESC LIMIT :pageSize "
let params = {senderId:senderId, targetId: targetId, maxId: maxId, pageSize: pageSize};
var list = await this.dao.customQuery(sql, params);
if(!list || list.length == 0) {
return [];
}
var licenseIds = [];
var msgIds = [];
list.forEach(item => {
if(item.msgType == 'mryzLicense') {
licenseIds.push(Number(item.businessLicense_id));
}
msgIds.push(item.id);
});
if(licenseIds.length > 0) {
let licenseSql = "SELECT * FROM yz_business_license WHERE id IN (" + licenseIds.join(",") + ") ";
var licenseList = await this.businesslicenseDao.customQuery(licenseSql);
var licenseMap = [];
licenseList.forEach(item => {
licenseMap["id" + item.id] = item;
});
list.forEach(item => {
if(item.msgType == 'mryzLicense') {
item.businessLicense = licenseMap['id' + item.businessLicense_id];
}
});
}
var self = this;
setTimeout(function(){
self.setRead(senderId, targetId, list);
}, 1000);
return list;
}
async setRead(senderId, targetId, list) {
if(!list || list.length == 0) {
return;
}
var target = await this.userDao.findById(targetId);
if(!target) {
return;
}
var pushIds = [];
for(var item of list) {
if(item.isRead || senderId != item.targetId) {
continue;
}
pushIds.push(item.id);
}
if(pushIds.length == 0) {
return;
}
this.dao.updateByWhere({isRead: true}, {where:{id:{[this.db.Op.in]:pushIds}}});
var channel = target.app_id + "¥" + target.id;
var rs = await this.redisClient.publish(channel, JSON.stringify({type:"readmsg", data : pushIds}));
console.log(rs, "------------------------------------------ publish result ");
}
async readMsg(userId, id) {
var msg = await this.dao.findById(id);
if(!msg || userId != msg.targetId) {
return 0;
}
msg.isRead = true;
await msg.save();
var user = await this.userDao.findById(msg.senderId);
if(!user) {
return 0;
}
var channel = user.app_id + "¥" + user.id;
return await this.redisClient.publish(channel, JSON.stringify({type:"readmsg", data : [msg.id]}));
}
}
module.exports=MsgHistoryService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
class MsgNoticeService extends ServiceBase {
constructor() {
super(ServiceBase.getDaoName(MsgNoticeService));
this.userDao = system.getObject("db.auth.userDao");
this.msghistoryDao = system.getObject("db.msg.msghistoryDao");
}
getApp(appkey) {
return this.cacheManager["AppCache"].cacheApp(appkey);
}
async getUserList(userId) {
var list = await this.dao.model.findAll({
where: {
fromId: userId
},
order: [
["updated_at", "DESC"]
],
raw: true
});
if (!list || list.length == 0) {
return [];
}
var msgIds = [];
var businessLicenseIds = [];
var userIds = [];
for (var item of list) {
msgIds.push(item.lastMsgId);
businessLicenseIds.push(item.businessLicense_id);
userIds.push(item.toId);
}
var msgMap = [];
var businessLicenseMap = [];
var userMap = [];
var unreadMap = [];
// 最后一条聊天记录
if (msgIds.length > 0) {
var msgList = await this.msghistoryDao.customQuery("SELECT * FROM msghistory WHERE id IN (" + msgIds.join(",") + ") ");
msgList.forEach(item => {
msgMap["id" + item.id] = item;
});
}
// 最后一次聊天关联执照
if (businessLicenseIds.length > 0) {
var licenseList = await this.businesslicenseDao.customQuery("SELECT * FROM yz_business_license WHERE id IN (" + businessLicenseIds.join(",") + ") ");
var serviceTypeIds = [];
for (var item of licenseList) {
serviceTypeIds.push(item.serviceTypeOneId);
serviceTypeIds.push(item.serviceTypeTwoId);
}
if (serviceTypeIds.length > 0) {
var sql = "SELECT id, name FROM `p_service_type` WHERE id IN (" + serviceTypeIds.join(",") + ") ";
var typeList = await this.dao.customQuery(sql);
var typeMap = [];
if (typeList && typeList.length > 0) {
for (var t of typeList) {
typeMap["type_id_" + t.id] = t.name;
if (t.id == item.serviceTypeOneId) {
item.serviceTypeOneName = t.name;
} else if (t.id == item.serviceTypeTwoId) {
item.serviceTypeTwoName = t.name;
} else {}
}
}
}
for (var item of licenseList) {
item.serviceTypeOneName = typeMap["type_id_" + item.serviceTypeOneId];
item.serviceTypeTwoName = typeMap["type_id_" + item.serviceTypeTwoId];
}
licenseList.forEach(item => {
businessLicenseMap["id" + item.id] = item;
});
}
// 聊天好友用户信息
if (userIds.length > 0) {
var userList = await this.userDao.customQuery("SELECT * FROM p_user WHERE id IN (" + userIds.join(",") + ") ");
userList.forEach(item => {
userMap["id" + item.id] = item;
});
}
// 未读消息数量
var unreadList = await this.userDao.customQuery("SELECT senderId, COUNT(1) AS num FROM `msghistory` WHERE isRead = 0 AND targetId = " + userId + " GROUP BY senderId ");
unreadList.forEach(item => {
unreadMap["id" + item.senderId] = item.num;
});
var rs = [];
for (var i in list) {
var item = list[i];
item.lastMsg = msgMap["id" + item.lastMsgId];
item.businessLicense = businessLicenseMap["id" + item.businessLicense_id];
item.friend = userMap["id" + item.toId];
item.unreadCount = unreadMap["id" + item.toId] || 0;
rs.push(item);
}
return rs;
}
async countUnread(userId) {
debugger;
var unreadList = await this.userDao.customQuery("SELECT COUNT(1) AS num FROM `msghistory` WHERE isRead = 0 AND targetId = " + userId);
var count = 0;
if (unreadList && unreadList.length > 0) {
count = unreadList[0].num || 0;
}
return count;
}
}
module.exports = MsgNoticeService;
\ No newline at end of file
const system = require("../system");
var moment = require('moment');
const settings = require("../../config/settings");
const uuidv4 = require('uuid/v4');
class ServiceBase {
constructor(gname, daoName) {
//this.dbf=system.getObject("db.connection");
this.db = system.getObject("db.common.connection").getCon();
this.cacheManager = system.getObject("db.common.cacheManager");
console.log(">>>>>>>>>>>>>>..", daoName)
this.daoName = daoName;
this.dao = system.getObject("db." + gname + "." + daoName);
this.restS = system.getObject("util.restClient");
this.md5 = require("MD5");
}
getEncryptStr(str) {
if (!str) {
throw new Error("字符串不能为空");
}
var md5 = this.md5(str + "_" + settings.salt);
return md5.toString().toLowerCase();
}
getUUID() {
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
return u;
}
static getDaoName(ClassObj) {
console.log(">>>>>>>>>>>>>>>>>>>>>>>>>>>..");
let rtnstr = ClassObj["name"].substring(0, ClassObj["name"].lastIndexOf("Service")).toLowerCase() + "Dao";
console.log(">>>>>>>>>>>>>>>>>>>>>>>>>>>..", rtnstr);
return rtnstr;
}
async findAndCountAll(obj) {
const apps = await this.dao.findAndCountAll(obj);
return apps;
}
async refQuery(pobj) {
return this.dao.refQuery(pobj);
}
async bulkDelete(ids) {
var en = await this.dao.bulkDelete(ids);
return en;
}
async delete(qobj) {
return this.dao.delete(qobj);
}
async create(qobj) {
return this.dao.create(qobj);
}
async update(qobj, tm = null) {
return this.dao.update(qobj, tm);
}
async updateByWhere(setObj, whereObj, t) {
return this.dao.updateByWhere(setObj, whereObj, t);
}
async customExecAddOrPutSql(sql, paras = null) {
return this.dao.customExecAddOrPutSql(sql, paras);
}
async customQuery(sql, paras, t) {
return this.dao.customQuery(sql, paras, t);
}
async findCount(whereObj = null) {
return this.dao.findCount(whereObj);
}
async findSum(fieldName, whereObj = null) {
return this.dao.findSum(fieldName, whereObj);
}
async getPageList(pageIndex, pageSize, whereObj = null, orderObj = null, attributesObj = null, includeObj = null) {
return this.dao.getPageList(pageIndex, pageSize, whereObj, orderObj, attributesObj, includeObj);
}
async findOne(obj, attributes = []) {
return this.dao.findOne(obj, attributes);
}
async findById(oid) {
return this.dao.findById(oid);
}
async findAll(obj, include = []) {
return this.dao.findAll(obj, include);
}
/*
返回20位业务订单号
prefix:业务前缀
*/
async getBusUid(prefix) {
prefix = (prefix || "");
if (prefix) {
prefix = prefix.toUpperCase();
}
var prefixlength = prefix.length;
var subLen = 8 - prefixlength;
var uidStr = "";
if (subLen > 0) {
uidStr = await this.getUidInfo(subLen, 60);
}
var timStr = moment().format("YYYYMMDDHHmm");
return prefix + timStr + uidStr;
}
/*
len:返回长度
radix:参与计算的长度,最大为62
*/
async getUidInfo(len, radix) {
var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');//长度62,到yz长度为长36
var uuid = [], i;
radix = radix || chars.length;
if (len) {
for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
} else {
var r;
uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
uuid[14] = '4';
for (i = 0; i < 36; i++) {
if (!uuid[i]) {
r = 0 | Math.random() * 16;
uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
}
}
}
return uuid.join('');
}
//kong统一处理
//统一注册组件
async cformregister(opurl, opts) {
try {
let rtn = await system.post3wFormTypeReq(opurl, opts)
console.log(rtn);
if (rtn.statusCode == 409) {
//return new Error("已经存在相同的统一账号名称!");
return null;
}
if (rtn.statusCode == 201) {
return rtn.data;
} else {
throw new Error(rtn.data);
}
} catch (e) {
console.log(e);
return null;
}
}
async cget(opurl) {
let rtn = await system.getReq(opurl)
return rtn;
}
async cjsonregister(opurl, opts) {
try {
let rtn = await system.postJsonTypeReq(opurl, opts)
console.log(",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", rtn);
if (rtn.statusCode == 409) {
//return new Error("已经存在相同的统一账号名称!");
return null;
}
if (rtn.statusCode == 201) {
return rtn.data;
} else {
throw new Error(rtn.data);
}
return null;
} catch (e) {
console.log(e);
return null;
}
}
async cdel(opurl) {
try {
let rtn = await system.delReq(opurl)
if (rtn.statusCode == 204) {
return {};
} else {
throw new Error(rtn.data);
}
} catch (e) {
console.log(e);
return null;
}
}
static bindPluginUrl(rname) {
return settings.kongurl() + "routes/" + rname + "/plugins";
}
static newRouteUrl(sname) {
return settings.kongurl() + "services/" + sname + "/routes";
}
static newServiceUrl() {
return settings.kongurl() + "services";
}
static newConsumerUrl() {
return settings.kongurl() + "consumers";
}
static newJwtCredUrl(consumername) {
return settings.kongurl() + "consumers/" + consumername + "/jwt";
}
static serviceUrl(sname) {
return settings.kongurl() + "services/" + sname;
}
static routeUrl(rname) {
return settings.kongurl() + "routes/" + rname;
}
static consumerUrl(consumerName) {
return settings.kongurl() + "consumers/" + consumerName;
}
}
module.exports = ServiceBase;
var fs = require("fs");
var objsettings = require("../config/objsettings");
var settings = require("../config/settings");
const request = require('request');
class System {
static declare(ns) {
var ar = ns.split('.');
var root = System;
for (var i = 0, len = ar.length; i < len; ++i) {
var n = ar[i];
if (!root[n]) {
root[n] = {};
root = root[n];
} else {
root = root[n];
}
}
}
static async delReq(url, qdata) {
let rtn = {}
let promise = new Promise(function (resv, rej) {
request.del({
url: url,
qs: qdata
}, function (error, response, body) {
rtn.statusCode = response.statusCode
if (!error) {
if (body) {
let data = JSON.parse(body)
rtn.data = data
} else {
rtn.data = null
}
resv(rtn);
} else {
rej(error)
}
});
})
return promise;
}
static async getReq(url, qdata) {
let rtn = {}
let promise = new Promise(function (resv, rej) {
request.get({
url: url,
json: true,
qs: qdata
}, function (error, response, body) {
rtn.statusCode = response.statusCode;
if (!error) {
if (body) {
rtn.data = body
} else {
rtn.data = null
}
resv(rtn);
} else {
rej(error);
}
});
})
return promise;
}
static async postJsonTypeReq(url, data, md = "POST") {
let rtn = {}
let promise = new Promise(function (resv, rej) {
request({
url: url,
method: md,
json: true,
headers: {
'Content-type': 'application/json',
// 'Authorization': 'Basic YWRtaW5lczphZG1pbkdTQmVzLg=='
},
body: data
}, function (error, response, body) {
rtn.statusCode = response.statusCode
if (!error) {
if (body) {
rtn.data = body
} else {
rtn.data = null
}
resv(rtn);
} else {
rej(error)
}
});
})
return promise;
}
static async post3wFormTypeReq(url, data) {
let rtn = {}
let promise = new Promise(function (resv, rej) {
request.post({
url: url,
form: data
}, function (error, response, body) {
rtn.statusCode = response.statusCode
if (!error) {
let data = JSON.parse(body)
rtn.data = data
resv(rtn);
} else {
rej(error)
}
});
})
return promise;
}
static async postMpFormTypeReq(url, formdata) {
let promise = new Promise(function (resv, rej) {
request.post({
url: url,
formData: formdata
}, function (error, response, body) {
if (!error && response.statusCode == 200) {
resv(body);
} else {
rej(error)
}
});
})
return promise;
}
/**
* 请求返回成功
* @param {*} data 操作成功返回的数据,有值为成功,无值为失败
* @param {*} okmsg 操作成功的描述
* @param {*} req 请求头信息
*/
static getResult(data, opmsg = "操作成功", req) {
return {
status: !data ? -1 : 0,
msg: opmsg,
data: data,
bizmsg: req && req.session && req.session.bizmsg ? req.session.bizmsg : "empty"
};
}
/**
* 请求返回成功
* @param {*} data 操作成功返回的数据
* @param {*} okmsg 操作成功的描述
*/
static getResultSuccess(data, okmsg = "success") {
return {
status: 0,
msg: okmsg,
data: data,
};
}
/**
* 请求返回失败
* @param {*} status 操作失败状态,默认为-1
* @param {*} errmsg 操作失败的描述,默认为fail
* @param {*} data 操作失败返回的数据
*/
static getResultFail(status = -1, errmsg = "fail", data = null) {
return {
status: status,
msg: errmsg,
data: data,
};
}
/**
* 请求处理异常
* @param {*} errmsg 操作失败的描述,默认为fail
* @param {*} data 操作失败返回的数据
*/
static getResultError(errmsg = "fail", data = null) {
return {
status: -200,
msg: errmsg,
data: data,
};
}
static register(key, ClassObj, groupName, filename) {
if (System.objTable[key] != null) {
throw new Error("相同key的对象已经存在");
} else {
let obj;
if (ClassObj.name === "ServiceBase") {
obj = new ClassObj(groupName, filename.replace("Sve", "Dao"));
} else {
obj = new ClassObj(groupName, filename);
}
System.objTable[key] = obj;
}
return System.objTable[key];
}
static getObject(objpath) {
var pathArray = objpath.split(".");
var packageName = pathArray[0];
var groupName = pathArray[1];
var filename = pathArray[2];
var classpath = "";
if (filename) {
classpath = objsettings[packageName] + "/" + groupName;
} else {
classpath = objsettings[packageName];
filename = groupName;
}
var objabspath = classpath + "/" + filename + ".js";
//判断文件的存在性
//如果不存在,需要查看packageName
//如果packageName=web.service,dao
if (System.objTable[objabspath] != null) {
return System.objTable[objabspath];
} else {
var ClassObj = null;
try {
ClassObj = require(objabspath);
} catch (e) {
// console.log(e)
let fname = objsettings[packageName + "base"];
ClassObj = require(fname);
}
if (ClassObj.name == "Dao") {
let modelname = filename.substring(0, filename.lastIndexOf("Dao"))
return System.register(objabspath, ClassObj, modelname);
}
if (ClassObj.name.indexOf("Ctl") >= 0) {
console.log(ClassObj.name);
}
return System.register(objabspath, ClassObj, groupName, filename);
}
}
static getSysConfig() {
var configPath = settings.basepath + "/app/base/db/metadata/index.js";
// if(settings.env=="dev"){
// console.log("delete "+configPath+"cache config");
// delete require.cache[configPath];
// }
delete require.cache[configPath];
var configValue = require(configPath);
return configValue.config;
}
static get_client_ip(req) {
var ip = req.headers['x-forwarded-for'] ||
req.ip ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
(req.connection.socket && req.connection.socket.remoteAddress) || '';
var x = ip.match(/(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$/);
if (x) {
return x[0];
} else {
return "localhost";
}
};
/**
* 记录日志信息
* @param {*} opTitle 操作的标题
* @param {*} params 参数
* @param {*} identifyCode 业务标识
* @param {*} resultInfo 返回结果
* @param {*} errorInfo 错误信息
*/
static execLogs(opTitle, params, identifyCode, resultInfo, errorInfo) {
var reqUrl = settings.logUrl();
let isLogData = true
if (params.method && (params.method.indexOf("find") >= 0 || params.method.indexOf("get") >= 0)) {
isLogData = false
}
var param = {
actionType: "produceLogsData",// Y 功能名称
actionBody: {
opTitle: opTitle || "",// N 操作的业务标题
identifyCode: identifyCode || "brg-center-manage",// Y 操作的业务标识
indexName: settings.logindex,// Y es索引值,同一个项目用一个值
messageBody: params, //日志的描述信息
resultInfo: isLogData ? resultInfo : { status: resultInfo.status },//返回信息
errorInfo: errorInfo,//错误信息
requestId: resultInfo.requestId || ""
}
};
console.log(JSON.stringify(param))
let P = new Promise((resv, rej) => {
this.postJsonTypeReq(reqUrl, param).then(res => {
if (res.statusCode == 200) {
resv(res.data)
} else {
rej(null)
}
});
})
return P
}
}
Date.prototype.Format = function (fmt) { //author: meizz
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"h+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt))
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt))
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}
/**
* 常用 ENUM
*/
// 表分类
System.FLOWCODE = {
BIZ: "BIZ",//商机表
SCHEME: "SCHEME",//方案表
DELIVERY: "DELIVERY",//服务单表
ANNUALREPORT: "ANNUALREPORT"//年报表
}
// 服务名称
System.SERVICECODE = {
ICP: "ICP",
EDI: 'EDI',
ICPANNUALREPORT: "ICPANNUALREPORT",
EDIANNUALREPORT: "EDIANNUALREPORT"
}
// 商机状态
System.BUSSTATUS = {
WAITINGSCHEME: "beforeSubmission",//待提交方案
WAITINGCONFIRM: "beforeConfirmation",//待用户确认
SUCCESS: "isFinished",//已成交
CLOSED: "isClosed"//需求关闭
}
// 方案状态
System.SCHEMESTATUS = {
WAITINGCONFIRM: "beforeConfirmation",//待用户确认.
CLOSED: "isClosed",//方案关闭
REJECT: "isReject"//方案被拒绝
}
// 资质服务单状态
System.SERVERSESTATUS = {
RECEIVED: "received",//已接单
COLLECTING: "collecting",//收集材料中
SUBMITING: "submiting",//递交材料中
DISPOSEING: "disposeing",//工信部处理中
POSTING: "posting",//证书已邮寄
SUCCESS: "success",//服务已完成
CLOSED: "closed",//已关闭
}
// 年报服务单状态
System.ANNUALREPORT = {
RECEIVED: "received",//已接单
WAITDECLARE: "waitdeclare",//待申报
DECLARESUCCESS: "declaresuccess",//申报成功
SUCCESS: "success",//服务已完成
CLOSED: "closed",//已关闭
TAKEEFFECT: "takeeffect"//生效
}
// 渠道名
System.SOURCENAME = {
tencentCloud: "腾讯云"
}
/*
编码说明,
1000----1999 为请求参数验证和app权限验证
2000----2100 为请求用户信息操作验证,如:注册,登录,获取验证码,修改用户信息,修改用户密码
*/
System.objTable = {};
//访问token失效,请重新获取
System.tokenFail = 1000;
//appKey授权有误
System.appKeyError = 1100;
//应用处于待审核等待启用状态
System.waitAuditApp = 1110;
//获取访问token失败
System.getAppInfoFail = 1130;
//已经存在此用户,注册失败
System.existUserRegFail = 2000;
//用户名或密码错误
System.userLoginFail = 2010;
//用户名错误
System.userNameLoginFail = 2020;
//验证验证码错误
System.verifyVCodeFail = 2030;
//opencode存储的值已经失效
System.verifyOpencodeFail = 2040;
//重复操作
System.redoFail = 2050;
module.exports = System;
// (async ()=>{
// try{
// let d=await System.getReq("http://127.0.0.1:8001x/services")
// console.log(d)
// }catch(e){
// console.log(e);
// }
// })()
\ No newline at end of file
const system = require("../../system");
const uuidv4 = require('uuid/v4');
class AuthUtils {
constructor() {
this.cacheManager = system.getObject("db.common.cacheManager");
this.exTime = 5 * 3600;//缓存过期时间,5小时
}
getUUID() {
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
return u;
}
/**
* 获取访问token信息
* @param {*} appkey 应用key
* @param {*} secret 应用密钥
*/
async getTokenInfo(appkey, secret) {
var rtnKey = this.getUUID();
var cacheAccessKey = await this.cacheManager["ApiAccessKeyCache"].cache(appkey, rtnKey, this.exTime);
if (cacheAccessKey) {
rtnKey = cacheAccessKey.accessKey;
}//获取之前的token值
var appData = await this.cacheManager["ApiAccessKeyCache"].cache(rtnKey, secret, this.exTime, appkey);
if (!appData) {
return system.getResultFail(system.getAppInfoFail, "key或secret错误.");
}
if (!appData.isEnabled) {
return system.getResultFail(system.waitAuditApp, "应用处于待审核等待启用状态.");
}
appData.accessKey = rtnKey;
return system.getResultSuccess(appData);
}
}
module.exports = AuthUtils;
var excel = require('exceljs');
const system=require("../system");
const uuidv4 = require('uuid/v4');
const fs=require("fs");
class ExcelClient {
constructor() {
this.columns = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
this.ossClient=system.getObject("util.ossClient");
this.filedownloadDao = system.getObject("db.filedownloadDao");
}
async download(params) {
var self = this;
var title = params.title || "";
var code = params.code || uuidv4();
var fileName = params.fileName || code + ".xlsx";
var filePath = params.filePath || "/tmp/" + fileName;
var rows = params.rows || [];
var user = params.user || {};
var wb = new excel.Workbook();
wb.properties.date1904 = true;
var sheet = wb.addWorksheet("sheet1");
var headers = rows[0];
console.log(headers, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2 headers");
if(title) {
sheet.addRow([title]);
sheet.getCell("A1").font = {
    name: '微软雅黑',
    family: 4,
    size: 12,
    bold: true
};
sheet.getCell('A1').alignment = { vertical: 'middle', horizontal: 'center' };
var colkey = 0;
if(headers.length > 0) {
colkey = headers.length - 1;
}
var endColumn = this.columns[colkey] || "A";
sheet.mergeCells("A1:" + endColumn + "1");
}
for(var r of rows) {
sheet.addRow(r);
}
wb.xlsx.writeFile(filePath).then(async function(d) {
var rtn = await self.ossClient.upfile(fileName, filePath);
fs.unlink(filePath,function(err){});
var obj = {
user_id : user.id || 0,
userName : user.userName || "",
code : code,
fileName : fileName,
filePath : rtn.url || "",
isDownload : false,
}
var obj = await self.filedownloadDao.create(obj);
});
}
}
module.exports = ExcelClient;
var childproc = require('child_process');
const util = require('util');
const exec = util.promisify(require('child_process').exec);
class ExecClient {
constructor() {
this.cmdPostPattern = "curl -k -H 'Content-type: application/json' -d '{data}' {url}";
this.cmdGetPattern = "curl -G -X GET '{url}'";
}
async exec(cmd) {
//await后面表达式返回的promise对象,是then的语法糖,await返回then函数的返回值
//异常需要try/catch自己捕获或外部catch捕获
const {stdout, stderr} = await exec(cmd);
return {stdout, stderr};
}
async exec2(cmd) {
return exec(cmd, {encoding: "base64"});
}
FetchPostCmd(subData, url) {
var data = JSON.stringify(subData);
var cmd = this.cmdPostPattern.replace(/\{data\}/g,
data).replace(/\{url\}/g, url);
console.log(cmd);
return cmd;
}
async execPost(subData, url) {
let cmd = this.FetchPostCmd(subData, url);
var result = await this.exec(cmd);
return result;
}
async execPost2(subData, url) {
let cmd = this.FetchPostCmd(subData, url);
var result = await this.exec2(cmd);
return result;
}
FetchGetCmd(subData, url) {
var cmd = this.cmdGetPattern.replace(
/\{data\}/g, subData).replace(/\{url\}/g, url);
console.log(cmd);
return cmd;
}
async execGet(subData, url) {
let cmd = this.FetchGetCmd(subData, url);
console.log(cmd);
var result = await this.exec(cmd);
return result;
}
async execGet2(subData, url) {
let cmd = this.FetchGetCmd(subData, url);
console.log(cmd);
var result = await this.exec2(cmd);
return result;
}
async execGetTimeOut(subData, url, timeOut = 5000) {
//timeOut,单位是毫秒
let cmd = this.FetchGetCmd(subData, url);
var options = {
timeout: timeOut,
};
const {stdout, stderr} = await exec(cmd, options);
return {stdout, stderr};
}
}
module.exports = ExecClient;
// var x=new RestClient();
// x.execGet("","http://www.163.com").then(function(r){
// console.log(r.stdout);
// console.log(r.stderr);
// });
// var log4js = require('log4js');
var settings = require("../../config/settings");
const uuidv4 = require('uuid/v4');
const system = require("../system");
class LogClient {
constructor() {
}
getUUID() {
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
return u;
}
async log(pobj, req, rtninfo, errinfo) {
rtninfo.requestId = this.getUUID()
req.params.param = pobj
//第三个字段应该存公司id
system.execLogs(settings.appname + "_" + req.xctx.codetitle, req.params, "_" + pobj.company_id + "_", rtninfo, errinfo).then(res => {
if (res && res.status == 1) {
console.log("log.....success")
} else {
console.log("log.....fail")
}
}).catch(e => {
console.log("log.....fail")
})
}
}
module.exports = LogClient;
var nodemailer = require('nodemailer');
class MailClient{
constructor(){
this.mailer=nodemailer.createTransport({
service: 'aliyun',
secureConnection: true,
port: 465,
auth: {
user: 'czhd_ip@gongsibao.com',
pass: 'HANtang2018'
}
});
}
//嵌入图片
// var mailOptions = {
// from: 'bsspirit ',
// to: 'xxxxx@163.com',
// subject: 'Embedded Image',
// html: '<b>Hello world ✔</b><br/>Embedded image: <img src="cid:00000001"/>',
// attachments: [{
// filename: '01.png',
// path: './img/r-book1.png',
// cid: '00000001'
// }]
// }
//发送邮件
// var mailOptions = {
// from: 'bsspirit ',
// to: 'xxxxx@163.com',
// subject: 'Hello ✔',
// text: 'Hello world ✔',
// html: '<b>Hello world ✔</b>' // html body
// attachments: [
// {
// filename: 'text0.txt',
// content: 'hello world!'
// },
// {
// filename: 'text1.txt',
// path: './attach/text1.txt'
// }
// ]
// };
async sendMsg(to,title,text,html,cc,bcc,atts){
var options={
from: "czhd_ip@gongsibao.com", // sender address
to: to, // list of receivers
cc: cc||'',
bcc: bcc||'',
subject: title, // Subject line
text: text || '', // plaintext body
html: html || '',// html body
attachments: atts||[
]
};
var self=this;
var p=new Promise(function(resv,rej){
self.mailer.sendMail(options, function(error, info){
if(error){
return rej(error);
}else{
return resv(info.response);
}
});
});
return p;
}
}
module.exports=MailClient;
// var d=new MailClient();
// d.sendMsg("zhangjiao@gongsibao.com","test","see","hello txt",null,null,[
// {
// filename: 'text1.jpg',
// path: 'https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_3369154019592833720182216128337mmexport1540195729827.jpg'
// }
// ]).then(r=>{
// console.log(r);
// }).catch(e=>{
// console.log(e);
// });
var co = require('co');
var OSS = require('ali-oss');
class OSSClient{
constructor(){
this.client=new OSS({
endpoint: 'https://oss-cn-beijing.aliyuncs.com',
accessKeyId: 'LTAI4GC5tSKvqsH2hMqj6pvd',
accessKeySecret: '3KV9nIwW8qkTGlrPmAe3HnR3fzM6r5'
});
this.client.useBucket('gsb-zc');
}
async downfile(key){
var me=this;
var result=await co(function* () {
var result = yield me.client.get(key, '/tmp/'+key);
return result;
});
return result;
}
async upfile(key,filepath){
var me=this;
var result=await co(function* () {
var result = yield me.client.put(key, filepath);
return result;
})
return result;
}
async putBuffer (key,buf) {
try {
var result = await this.client.put(key, buf);
console.log(result);
return result
} catch (e) {
console.log(e);
return null
}
}
}
module.exports=OSSClient;
// var oss=new OSSClient();
// var key="netsharp_QSzjD4HdKdTmRR6b5486pEA3AbsW8Pr8.jpg"
// oss.upfile(key,"/usr/devws/OMC/igirl-api/r3.jpg").then(function(result){
// console.log(result);
// });
// oss.downfile(key).then(function(result){
// console.log(result);
// });
const system = require("../system");
const redis = require("redis");
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();
this.client = redis.createClient({
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
// // a individual error
// return new Error('The server refused the connection');
// }
if (options.total_retry_time > 1000 * 60 * 60) {
// End reconnecting after a specific timeout and flush all commands
// with a individual error
return new Error('Retry time exhausted');
}
if (options.attempt > 10) {
// End reconnecting with built in error
return 10000;
}
// reconnect after
return Math.min(options.attempt * 100, 3000);
}
});
// return client.multi().get('foo').execAsync().then(function(res) {
// console.log(res); // => 'bar'
// });
this.client.on("error", function (err) {
console.log("Error " + err);
// //日志记录
// logCtl.error({
// optitle:"redis this.client.on异常:",
// op:"base/utils/redisClient/this.client.on",
// content:err,
// clientIp:""
// });
});
this.subclient = this.client.duplicate();
this.subclient.on("error", function (err) {
console.log("Error " + err);
// //日志记录
// logCtl.error({
// optitle:"redis this.subclient.on异常:",
// op:"base/utils/redisClient/this.subclient.on",
// content:err,
// clientIp:""
// });
});
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);
}
})(self)
} 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);
}
}
}
if (self.chatserver) {
if (channel != "task") {
var message = JSON.parse(message);
console.log(message, "------------------------------------------ publish message");
if (channel == "brc") {//如果是广播频道,则发送广播到客户端
self.chatserver.server.emit("brc", message);
} else if (self.chatserver.users[channel]) {
if (message.type) {
self.chatserver.users[channel].client.emit(message.type, message.data);
} else {
//持久化
self.chatserver.users[channel].client.emit("chatmsg", message);
}
}
}
}
});
}
async subscribe(channel, chatserver) {
if (!this.chatserver) {
this.chatserver = chatserver;
}
return this.subclient.subscribeAsync(channel);
}
async unsubscribe(channel) {
//this.chatserver=null;
return this.subclient.unsubscribeAsync(channel);
}
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 rpush(key, val) {
return this.client.rpushAsync(key, val);
}
async llen(key) {
return this.client.llenAsync(key);
}
async rpushWithEx(key, val, t) {
var p = this.rpush(key, val);
this.client.expire(key, t);
return p;
}
async rpop(key) {
return this.client.rpopAsync(key);
}
async lpop(key) {
return this.client.lpopAsync(key);
}
async lrem(key, val) {
return this.client.lremAsync(key, 1, val);
}
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);
return 0;
}
async flushall() {
console.log("sss");
return this.client.flushallAsync();
}
async keys(p) {
return this.client.keysAsync(p);
}
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);
}
async setWithEx(key, val, t) {
var p = this.client.setAsync(key, val);
this.client.expire(key, t);
return p;
}
async get(key) {
return this.client.getAsync(key);
}
async delete(key) {
return this.client.delAsync(key);
}
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);
return p;
}
async hgetall(key) {
return this.client.hgetallAsync(key);
}
async hincrby(key, f, n) {
return this.client.hincrbyAsync(key, f, n);
}
async sadd(key, vals) {
await this.client.saddAsync(key, ...vals);
return this.scard(key);
}
async scard(key) {
return this.client.scardAsync(key);
}
async srem(key, val) {
return this.client.sremAsync(key, val);
}
async sismember(key, val) {
return this.client.sismemberAsync(key, val);
}
async smembers(key) {
return this.client.smembersAsync(key);
}
async exists(key) {
return this.client.existsAsync(key);
}
async incr(key) {
return this.client.incrAsync(key);
}
}
module.exports = RedisClient;
// var client = new RedisClient();
// (async ()=>{
// await client.rpush("tasklist","xxx");
// await client.rpush("tasklist","xxx");
// var len=await client.llen("tasklist");
// //await client.clearlist("tasklist");
// len=await client.llen("tasklist");
// console.log(len);
// })()
// client.keys('*').then(s=>{
// console.log(s);
// });
// let clients = {};
// clients.watcher = redis.createClient({ ... } );
// clients.alterer = clients.watcher.duplicate();
// client.sadd("h",["ok","jy","ok"]).then(function(r){
// console.log(r);
// });
// client.sadd("h","jy").then(function(r){
// console.log(r);
// });
// client.srem("h","jy").then(function(r){
// console.log(r);
// });
// client.smembers("h").then(function(r){
// console.log(r);
// });
// client.sismember("h","ok").then(function(r){
// console.log(r);
// });
// console.dir(client);ti.exec( callback )回调函数参数err:返回null或者Array,出错则返回对应命令序列链中发生错误的错误信息,这个数组中最后一个元素是源自exec本身的一个EXECABORT类型的错误
// r.set("hello","oooo").then(function(result){
// console.log(result);
// });
// r.get("hello").then(function(result){
// console.log(result);
// });
// client.hmset("user_1",{name:"jy",age:13}).then(function(r){
// console.log(r);
//
// });
// client.hincrby("user_1","age",2).then(function(r){
// console.log(r);
// setTimeout(function(){
// client.hgetall("user_1").then(function(u){
// console.log(u);
// });
// },3000);
// });
var childproc = require('child_process');
const util = require('util');
const exec = util.promisify(require('child_process').exec);
const querystring = require('querystring');
var settings=require("../../config/settings");
class RestClient{
constructor(){
this.cmdGetPattern = "curl {-G} -k -d '{data}' {url}";
this.cmdPostPattern="curl -k -H 'Content-type: application/json' -d '{data}' {url}";
this.cmdDownLoadFilePattern="curl -G -o {fileName} {url}";
this.cmdPostPattern2="curl -k -H 'Content-type: application/x-www-form-urlencoded' -d '{data}' {url}";
this.cmdPostPatternWithAK="curl -k -H 'Content-type: application/json' -H 'AccessKey:{ak}' -d '{data}' {url}";
//云帐户
// this.cmdPostPattern3="curl -k -H 'Content-type: application/x-www-form-urlencoded' -H 'dealer-id:"+settings.apiconfig.yunzhanghuDealer_id()+"' -H 'request-id:"+parseInt(Date.now() / 1000)+"_gsb"+"' -d '{data}' {url}";
// this.cmdGetPattern3 = "curl {-G} -k {url} --header 'dealer-id:"+settings.apiconfig.yunzhanghuDealer_id()+"'";
//e签宝
//this.cmdPostPattern4="curl -k -H 'Content-type: application/json' -H 'X-Tsign-Open-App-Id:"+settings.apiconfig.eSignBaoAppId()+"' -H 'X-Tsign-Open-App-Secret:"+settings.apiconfig.eSignBaoAppKey()+"' -d '{data}' {url}";
// form-data形式post data参数类型 md5=2&data=1
this.cmdPostPattern5="curl -k --data '{data}' {url}";
}
FetchGetCmd(subData, url) {
var cmd = this.cmdGetPattern.replace(/\{\-G\}/g, "-G").replace(
/\{data\}/g, subData).replace(/\{url\}/g, url);
return cmd;
}
FetchPostCmd(subData, url) {
var data=JSON.stringify(subData);
var cmd= this.cmdPostPattern.replace(/\{data\}/g,
data).replace(/\{url\}/g, url);
return cmd;
}
FetchPostCmdWithAK(subData, url,acck) {
var data=JSON.stringify(subData);
var cmd= this.cmdPostPatternWithAK.replace(/\{data\}/g,
data).replace(/\{url\}/g, url).replace(/\{ak\}/g,acck);
return cmd;
}
FetchPostCmd2(subData, url) {
var data=subData;
var cmd= this.cmdPostPattern2.replace(/\{data\}/g,
data).replace(/\{url\}/g, url);
return cmd;
}
FetchPostCmd3(subData, url) {
var data=subData;
var cmd= this.cmdPostPattern3.replace(/\{data\}/g,
data).replace(/\{url\}/g, url);
return cmd;
}
FetchGetCmd3(url) {
var cmd = this.cmdGetPattern3.replace(/\{\-G\}/g, "-G").replace(/\{url\}/g, url);
return cmd;
}
FetchPostCmd4(subData, url) {
var data=subData;
var cmd= this.cmdPostPattern4.replace(/\{data\}/g,
data).replace(/\{url\}/g, url);
return cmd;
}
FetchPostCmd5(subData, url) {
var data=subData;
var cmd= this.cmdPostPattern5.replace(/\{data\}/g,
data).replace(/\{url\}/g, url);
return cmd;
}
FetchDownLoadCmd(outfname,url) {
// console.log(this.cmdPattern);
var cmd = this.cmdDownLoadFilePattern.replace(/\{fileName\}/g, outfname).replace(
/\{url\}/g, url);
return cmd;
}
async exec(cmd) {
//await后面表达式返回的promise对象,是then的语法糖,await返回then函数的返回值
//异常需要try/catch自己捕获或外部catch捕获
const { stdout, stderr } = await exec(cmd);
return { stdout, stderr };
}
async execDownload(url,outfname){
let cmd=this.FetchDownLoadCmd(outfname,url);
var result=await this.exec(cmd);
return result;
}
async execGet(subData, url){
let cmd=this.FetchGetCmd(subData,url);
var result=await this.exec(cmd);
return result;
}
async execGet2(subData, url){
var data=querystring.stringify(subData);
let cmd=this.FetchGetCmd(data,url);
var result=await this.exec(cmd);
return result;
}
async execPost(subData, url){
let cmd=this.FetchPostCmd(subData,url);
var result=await this.exec(cmd,{
maxBuffer: 4096 * 1024
});
return result;
}
async execPostWithAK(subData, url,ak){
let cmd=this.FetchPostCmdWithAK(subData,url,ak);
var result=await this.exec(cmd,{
maxBuffer:1024*1024*15
});
var rtn=result.stdout;
if(rtn){
return JSON.parse(rtn);
}else{
return null;
}
}
async execPost2(subData, url){
let cmd=this.FetchPostCmd2(subData,url);
console.log(cmd);
var result=await this.exec(cmd);
return result;
}
async execPost3(subData, url){
let cmd=this.FetchPostCmd3(subData,url);
console.log(cmd);
var result=await this.exec(cmd);
return result;
}
async execGet3(url){
let cmd=this.FetchGetCmd3(url);
console.log("execGet3-----01");
console.log(cmd);
var result=await this.exec(cmd);
return result;
}
async execPostESignBao(subData, url){
let cmd=this.FetchPostCmd4(subData,url);
console.log(cmd);
var result=await this.exec(cmd);
return result;
}
async execPostForm(subData, url){
let cmd=this.FetchPostCmd5(subData,url);
console.log(cmd);
var result=await this.exec(cmd);
return result;
}
async execCustomPostESignBao(cmd){
console.log(cmd);
var result=await this.exec(cmd);
return result;
}
test(){
console.log("hello");
}
}
module.exports=RestClient;
// var x=new RestClient();
// x.execGet("","http://www.163.com").then(function(r){
// console.log(r.stdout);
// console.log(r.stderr);
// });
const system=require("../system");
const Core = require('@alicloud/pop-core');
class SmsClient{
constructor(){
this.smsTeml="http://123.57.156.109:4103/api/Send";
this.restClient=system.getObject("util.restClient");
this.aliclient=new Core({
accessKeyId: 'LTAI4FtNp3wcqFzaADvo1WtZ',
accessKeySecret: 'VBKn1Anx4UmMF0LKNz7PVaCFG1phcg',
endpoint: 'https://dysmsapi.aliyuncs.com',
apiVersion: '2017-05-25'
});
}
async aliSendMsg(to,tmplcode,signName,jsonContent){
var params = {
"RegionId": "default",
"PhoneNumbers": to,
"SignName": signName,
"TemplateCode": tmplcode,
"TemplateParam": jsonContent
}
var requestOption = {
method: 'POST'
};
this.aliclient.request('SendSms', params, requestOption).then((result) => {
console.log(JSON.stringify(result));
}, (ex) => {
console.log(ex);
})
}
async sendMsg(to,content){
var txtObj ={
"appId":8,
"mobilePhone":to,
"content":content
}
return this.restClient.execPost(txtObj,this.smsTeml);
}
async getUidStr(len, radix) {
var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
var uuid = [], i;
radix = radix || chars.length;
if (len) {
for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
} else {
var r;
uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
uuid[14] = '4';
for (i = 0; i < 36; i++) {
if (!uuid[i]) {
r = 0 | Math.random() * 16;
uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
}
}
}
return uuid.join('');
}
}
module.exports=SmsClient;
// var sms=new SmsClient();
// sms.aliSendMsg("13381139519","SMS_173946419","iboss",JSON.stringify({code:"hello"}));
// var util = require('util');
// var ssdb = require('ssdb-node');
// const settings = require("../../config/settings");
// const bluebird = require("bluebird");
// bluebird.promisifyAll(ssdb);
// class SsdbClient {
// constructor() {
// this.pool = new ssdb({
// port: 8888,
// host: '192.168.18.26',
// auth: 'lowlogslowlogslowlogslowlogYsy123',
// authCallback:""
// });
// }
// async set(obj) {
// var key = obj.key;
// var value = obj.value;
// return new Promise((resolve, reject) => {
// this.pool.set(key, value, function (err, data) {
// if (err) {
// reject(err)
// } else {
// resolve(data)
// }
// });
// })
// }
// async get(obj) {
// var key = obj.key;
// return new Promise((resolve, reject) => {
// this.pool.get(key, function (err, data) {
// if (err) {
// reject(err)
// } else {
// resolve(data)
// }
// });
// })
// }
// }
// module.exports = SsdbClient;
\ No newline at end of file
const axios = require("axios");
const settings = require("../../config/settings");
const system = require("../system");
const annualreportDao = system.getObject("db.delivery.annualreportDao");
const BUSINESSTYPE = {
ICP: "/qcfw/icp/",
EDI: "/qcfw/edi/"
}
const TXSTATUS = {
COLLECTING: "70",//手机材料中
SUBMITING: "80",//递交材料中
DISPOSEING: "90",//工信部处理中
POSTING: "150",//证书已邮寄
SUCCESS: "170",//服务已完成
CLOSED: "190",//已关闭
WAITDECLARE: "25",//待申报
DECLARESUCCESS: "26",//申报成功
}
// 推送到 控制台
const porApi = axios.create({
baseURL: settings.txurl(), // api 的 base_url
timeout: 2000, // request timeout
headers: {
'Content-Type': 'application/json'
}
})
// 推送公共服务
const publicApi = axios.create({
baseURL: settings.requrl(), // api 的 base_url
timeout: 2000, // request timeout
headers: {
'Content-Type': 'application/json'
}
})
/**
* 推送 方案
* @param {*} bizData
* @param {*} schemeData
*/
const pushScheme = async (bizData, schemeData) => {
let data = {
actionType: "submitSolution",
actionBody: {
needNum: bizData.demand_code,
solutionContent: {
scheme_info: schemeData.scheme_info,
remark_info: schemeData.remark_info,
businessType: BUSINESSTYPE[bizData.business_type],
servicerName: bizData.facilitator_name,
servicerCode: bizData.facilitator_id,
clerkName: bizData.salesman_name,
clerkPhone: bizData.salesman_phone
}
}
}
// 新增 还是修改
if (schemeData.scheme_number) {
data.actionBody.solutionNum = schemeData.scheme_number;
}
let result = await postRequest('api/receive/entService/springBoard', data);
return result.data;
}
/**
* 推送 关闭商机
* @param {*} bizData
* @param {*} note
*/
const pushCloseNeed = async (bizData, note) => {
let data = {
"actionType": "closeNeed",
"actionBody": {
"needNum": bizData.demand_code,
"note": note
}
}
let result = await postRequest('api/receive/entService/springBoard', data);
return result.data;
}
/**
* 推送 订单状态改变
* @param {*} status
* @param {*} orderNum
* @param {*} data
*/
const pushChangeOrder = async (status, orderNum, data = {}) => {
let req = {
"actionType": "updateOrderStatus",
"actionBody": {
"orderNum": orderNum,
"status": status,
"deliverContent": data
}
}
let result = await postRequest('api/receive/entService/springBoard', req);
return result.data;
}
/**
* 提交材料
* @param {*} deliverData
* @param {*} materials
*/
const submitMaterials = async (deliverData, materials) => {
let status;
if (deliverData.delivery_status === system.SERVERSESTATUS.COLLECTING || deliverData.delivery_status === system.SERVERSESTATUS.SUBMITING) {
status = TXSTATUS.SUBMITING;
}
if (deliverData.delivery_status === system.SERVERSESTATUS.DISPOSEING) {
status = TXSTATUS.DISPOSEING;
}
materials.proposerInfo.businessInformation.ifListed = materials.proposerInfo.businessInformation.ifListed === "true"
await pushChangeOrder(status, deliverData.delivery_code, {
servicerName: deliverData.facilitator_name,
servicerCode: deliverData.facilitator_id,
clerkId: deliverData.salesman_id,
clerkName: deliverData.salesman_name,
clerkPhone: deliverData.salesman_phone,
...materials
});
}
const pushDeclareReport = async (annualReport, deliverData) => {
const annualReports = await annualreportDao.findAll({
deliver_id: deliverData.id
});
let status = TXSTATUS.DECLARESUCCESS;
if (annualReports && annualReports.filter(item => {
return item.status === system.ANNUALREPORT.WAITDECLARE
}).length <= 0) {
status = TXSTATUS.SUCCESS;
}
const result = annualReports && annualReports.map((item) => {
if (item.id === annualReport.id) {
item.updated_at = new Date();
item.file = annualReport.file;
item.status = system.ANNUALREPORT.DECLARESUCCESS;
}
// item.status = item.status === system.ANNUALREPORT.WAITDECLARE ? "待申报" : "已申报"
return item
})
await pushChangeOrder(status, deliverData.delivery_code, { annualReport: result })
}
/**
* 退费
* @param {*} orderNum
*/
const returnPremium = async (orderNum) => {
try {
let data = {
"actionType": "produceData",
"actionBody": {
"pushUrl": settings.txurl() + "/api/action/order/springBoard",
"actionType": "refundOrder",
"identifyCode": "icp-manage",
"messageBody": {
"orderNum": orderNum//订单编码
}
}
}
console.log("请求数据 ------- ");
console.log(data);
let result = await publicApi.post('api/queueAction/producer/springBoard', data);
result = result.data;
console.log("返回数据 ------- ");
console.log(result);
if (result.status === 1) {
return result
} else {
throw new Error(result.message)
}
} catch (err) {
console.log("------ err -----");
console.log(err)
throw (err)
}
}
/**
* 发送请求
* @param {*} url
* @param {*} data
*/
const postRequest = async (url, data) => {
try {
console.log("请求数据 ------- ");
console.log(data);
console.log(JSON.stringify(data.actionBody.deliverContent));
let result = await porApi.post(url, data);
result = result.data;
console.log("返回数据 ------- ");
console.log(result);
if (result.status === 1) {
return result
} else {
throw new Error(result.message)
}
} catch (err) {
console.log("------ err -----");
console.log(err)
throw (err)
}
}
module.exports = {
pushScheme,
pushCloseNeed,
submitMaterials,
pushChangeOrder,
pushDeclareReport,
TXSTATUS,
returnPremium
}
\ No newline at end of file
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var methodOverride = require('method-override');
var cookierParser = require('cookie-parser');
var bodyParser = require('body-parser');
var multer = require('multer');
var errorHandler = require('errorhandler');
var settings = require('./settings');
var system = require('../base/system');
var routes = require('./routes');
var history = require('connect-history-api-fallback');
module.exports = function (app) {
app.set('port', settings.port);
app.set('views', settings.basepath + '/app/front/entry');
app.set('view engine', 'ejs');
app.use(history());
app.use(methodOverride());
app.use(cookierParser());
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
routes(app);//初始化路由
app.use(express.static(path.join(settings.basepath, '/app/front/entry/public')));
// development only
if ('development' == app.get('env')) {
app.use(errorHandler());
} else {
app.use(function (err, req, res) {
console.log("prod error handler................................>>>>>>>>>>>>>>>>>");
console.log(err);
//logerApp.error("prod error handler",err);
res.send("link admin");
});
}
};
var path= require('path');
var basepath=path.normalize(path.join(__dirname, '../..'));
var settings = {
webbase:path.join(basepath,"app/base/controller/ctl.base.js"),
web:path.join(basepath,"app/base/controller/impl"),
apibase:path.join(basepath,"app/base/api/api.base.js"),
api:path.join(basepath,"app/base/api/impl"),
util:path.join(basepath,"app/base/utils"),
servicebase:path.join(basepath,"app/base/service/sve.base.js"),
service:path.join(basepath,"app/base/service/impl"),
dbbase:path.join(basepath,"app/base/db/dao.base.js"),
db:path.join(basepath,"app/base/db/impl"),
tool:path.join(basepath,"app/base/tool"),
service2:path.join(basepath,"app/base/service"),
applet:path.join(basepath,"app/base/wxapplet/impl"),
};
module.exports = settings;
var fs=require("fs");
var path=require("path");
var System = require('../base/system');
module.exports = function (app) {
var routePath=__dirname+"/routes";
fs.readdir(routePath,function(err,rs){
if(rs){
rs.forEach(function(r){
var func=require(routePath+"/"+r);
func.call(null,app);
});
}
});
};
var url=require("url");
var qr=require("qr-image")
module.exports = function (app) {
app.get('/api/qc', function(req,res){
var params = url.parse(req.url,true);
var detailLink = params.query.detailLink;
try {
var img = qr.image(detailLink,{size :10});
console.log(detailLink)
res.writeHead(200, {'Content-Type': 'image/png'});
img.pipe(res);
} catch (e) {
res.writeHead(414, {'Content-Type': 'text/html'});
res.end('<h1>414 Request-URI Too Large</h1>');
}
});
};
var url = require("url");
var System = require("../../base/system");
module.exports = function (app) {
app.get('/api/:gname/:qname/:method', function (req, res) {
// var classPath = req.params["qname"];
var methodName = req.params["method"];
var gname=req.params["gname"];
classPath=gname+"."+classPath;
var tClientIp = System.get_client_ip(req);
req.clientIp = tClientIp;
req.uagent= req.headers["user-agent"];
// req.classname=classPath;
var params = [];
params.push(gname);
params.push(methodName);
params.push(req.body);
params.push(req.query);
params.push(req);
var p = null;
var invokeObj = System.getObject("api." + classPath);
if (invokeObj["doexec"]) {
p = invokeObj["doexec"].apply(invokeObj, params);
}
p.then(r => {
res.end(JSON.stringify(r));
});
});
app.post('/api/:gname/:qname/:method', function (req, res) {
var classPath = req.params["qname"];
var methodName = req.params["method"];
var gname=req.params["gname"];
var params = [];
classPath=gname+"."+classPath;
console.log("====================");
console.log(classPath);
var tClientIp = System.get_client_ip(req);
req.clientIp = tClientIp;
req.uagent= req.headers["user-agent"];
// req.classname=classPath;
params.push(gname);
params.push(methodName);
params.push(req.body);
params.push(req.query);
params.push(req);
var p = null;
var invokeObj = System.getObject("api." + classPath);
if (invokeObj["doexec"]) {
p = invokeObj["doexec"].apply(invokeObj, params);
}
p.then(r => {
res.end(JSON.stringify(r));
});
});
};
var url = require("url");
var system = require("../../base/system");
var metaCtl=system.getObject("web.common.metaCtl");
module.exports = function (app) {
app.get('/web/:gname/:qname/:method', function (req, res) {
var classPath = req.params["qname"];
var methodName = req.params["method"];
var gname=req.params["gname"];
classPath=gname+"."+classPath;
var params = [];
params.push(methodName);
params.push(req.body);
params.push(req.query);
params.push(req);
var p = null;
var invokeObj = system.getObject("web." + classPath);
if (invokeObj["doexec"]) {
p = invokeObj["doexec"].apply(invokeObj, params);
}
p.then(r => {
res.end(JSON.stringify(r));
});
});
app.post('/web/:gname/:qname/:method', function (req, res) {
req.codepath = req.headers["codepath"];
var classPath = req.params["qname"];
var methodName = req.params["method"];
var gname=req.params["gname"];
var params = [];
classPath=gname+"."+classPath;
var tClientIp = system.get_client_ip(req);
req.body.clientIp = tClientIp;
req.body.agent= req.headers["user-agent"];
req.body.classname=classPath;
params.push(methodName);
params.push(req.body);
params.push(req.query);
params.push(req);
var p = null;
var invokeObj = system.getObject("web." + classPath);
if (invokeObj["doexec"]) {
p = invokeObj["doexec"].apply(invokeObj, params);
}
p.then(r => {
res.end(JSON.stringify(r));
});
});
};
var path = require('path');
var ENVINPUT = {
DB_HOST: process.env.DB_HOST,
DB_PORT: process.env.DB_PORT,
DB_USER: process.env.DB_USER,
DB_PWD: process.env.DB_PWD,
DB_NAME: process.env.DELIVERY_DB_NAME,
REDIS_HOST: process.env.REDIS_HOST,
REDIS_PORT: process.env.REDIS_PORT,
REDIS_PWD: process.env.REDIS_PWD,
REDIS_DB: process.env.PAAS_REDIS_DB,
APP_ENV: process.env.APP_ENV ? process.env.APP_ENV : "dev"
};
var settings = {
env: ENVINPUT.APP_ENV,
salt: "%iatpD1gcxz7iF#B",
defaultpwd: "gsb2020",
basepath: path.normalize(path.join(__dirname, '../..')),
port: process.env.NODE_PORT || 8002,
logindex: "center_manage",
appname: "icp_deliver",
kongurl: function () { if (this.env == "dev") { var localsettings = require("./localsettings"); return localsettings.kongurl; } else { return ENVINPUT.KONG_ADMIAN; } },
txurl: function () {
if (this.env == "dev") { var localsettings = require("./localsettings"); return localsettings.txurl; }
else { return "http://brg-user-center-service"; }
},
logUrl: function () {
if (this.env == "dev") {
return "http://43.247.184.94:7200/api/queueAction/producer/springBoard";
} else {
return "http://logs-sytxpublic-msgq-service/api/queueAction/producer/springBoard";
}
},
requrl: function () {
if (this.env == "dev") {
return "http://192.168.1.128:4018";
} else {
return "http://sytxpublic-msgq-service";
}
},
pmappid: 1,
pmcompanyid: 1,
pmroleid: { "ta": 1, "pr": 2 },
redis: function () {
if (this.env == "dev") {
var localsettings = require("./localsettings");
return localsettings.redis;
} else {
return {
host: ENVINPUT.REDIS_HOST,
port: ENVINPUT.REDIS_PORT,
password: ENVINPUT.REDIS_PWD,
db: ENVINPUT.REDIS_DB,
};
}
},
database: function () {
if (this.env == "dev") {
var localsettings = require("./localsettings");
return localsettings.database;
} else {
return {
dbname: ENVINPUT.DB_NAME,
user: ENVINPUT.DB_USER,
password: ENVINPUT.DB_PWD,
config: {
host: ENVINPUT.DB_HOST,
port: ENVINPUT.DB_PORT,
dialect: 'mysql',
operatorsAliases: false,
pool: {
max: 5,
min: 0,
acquire: 90000000,
idle: 1000000
},
debug: false,
timezone: '+08:00',
dialectOptions: {
requestTimeout: 999999,
// instanceName:'DEV'
} //设置MSSQL超时时间
},
};
}
}
};
settings.ENVINPUT = ENVINPUT;
module.exports = settings;
var Server=require('socket.io');
var system = require('../base/system');
var redisClient=system.getObject("util.redisClient");
const notifyCtl=system.getObject("web.socketNotifyCtl");
const msgHistoryService=system.getObject("service.msghistorySve");
class MsgHandler{
constructor(server,client){
this.server=server;
this.client=client;
this.init();
}
notifyClient(ukchannel,msg){
var msgH={msgType:"system",sender:"s¥s¥s¥s",target:msg.to,content:msg.content};
msgHistoryService.create(msgH).then((m)=>{
redisClient.publish(ukchannel,JSON.stringify(msg));
}).catch(e=>{
console.log(e);
});
}
init(){
var self=this;
//转发通信消息
this.client.on("chatmsg",msg=>{
const from=msg.from;
const to=msg.to;
const msgContent=msg.content;
var arrs=to.split("¥");
var tochannel=arrs[0]+"¥"+arrs[1];
//发布消息
//持久化消息
var msgH={msgType:"single",sender:msg.from,target:msg.to,content:msg.content};
msgHistoryService.create(msgH).then((m)=>{
redisClient.publish(tochannel,JSON.stringify(msg));
}).catch(e=>{
console.log(e);
});
//self.server.users[to].emit("chatmsg",msg);
});
//响应消息处理
this.client.on("replymsg",(msg,fn)=>{
var p=null;
var invokeObj= system.getObject("web."+msg.pkgname+"."+msg.cls);
if(invokeObj[msg.method]){
p=invokeObj[msg.method].apply(invokeObj,[msg.data]);
}
p.then(r=>{
fn(r);
}).then(()=>{
console.log("call success")
}).catch(err=>{
console.log(err)
})
});
}
}
class SocketServer{
constructor(httpServer){
this.server=Server(httpServer,{
serveClient: false,
});
this.users={};
this.init();
this.onlines=0;
}
init(){
var self=this;
//挂载到web应用的控制器
notifyCtl.setSocketServer(self);
//订阅广播频道
redisClient.subscribe("brc",self);
//中间件可以在链接事件发出前调用一次
this.server.use((socket,next)=>{
next();
});
this.server.on('connection', function(client){
console.log("connection.....socket");
//链接登录事件
client.on('login', function(data){
console.log("login...........................................................success");
console.log(data);
console.log(client.remoteAddress);
var uk=data.appid+"¥"+data.id;
client.uk=uk;
client.uid=data.id;
client.username=data.nickName;
client.appname=data.appname;
client.appkey=data.appkey;
client.sex=data.sex;
client.imgUrl=data.imgUrl;
self.users[uk]=new MsgHandler(self,client);
//订阅uk私人频道
var ss = redisClient.subscribe(uk,self);
//加入redisClient列表
redisClient.sadd("onlineset"+"¥"+data.appkey,[uk+"¥"+data.nickName+"¥"+data.imgUrl]).then(n=>{
//当前在线
self.onlines=n;
redisClient.publish("brc",JSON.stringify({"type":"online","content":n}));
});
});
//链接断开事件
client.on('disconnect', async function(r){
console.log("connection.........................................dismiss.............");
if(client.uk) {
await redisClient.srem("onlineset"+"¥"+client.appkey,client.uk+"¥"+client.username+"¥"+client.imgUrl);
await redisClient.publish("brc",JSON.stringify({"type":"online","content":(self.onlines--)}));
delete self.users[client.uk];
redisClient.unsubscribe(client.uk);
//redisClient.unsubscribe("brc");
console.log(client.uk+"¥"+client.username+"¥"+client.imgUrl);
}
});
});
}
}
module.exports=SocketServer;
This source diff could not be displayed because it is too large. You can view the blob instead.
.error-page{width:100%;height:100%;position:relative;background:#f8f8f9}.error-page .content-con{width:700px;height:600px;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-60%);transform:translate(-50%,-60%)}.error-page .content-con img{display:block;width:100%;height:100%}.error-page .content-con .text-con{position:absolute;left:0;top:0}.error-page .content-con .text-con h4{position:absolute;left:0;top:0;font-size:80px;font-weight:700;color:#348eed}.error-page .content-con .text-con h5{position:absolute;width:700px;left:0;top:100px;font-size:20px;font-weight:700;color:#67647d}.error-page .content-con .back-btn-group{position:absolute;right:0;bottom:20px}
\ No newline at end of file
.error-page{width:100%;height:100%;position:relative;background:#f8f8f9}.error-page .content-con{width:700px;height:600px;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-60%);transform:translate(-50%,-60%)}.error-page .content-con img{display:block;width:100%;height:100%}.error-page .content-con .text-con{position:absolute;left:0;top:0}.error-page .content-con .text-con h4{position:absolute;left:0;top:0;font-size:80px;font-weight:700;color:#348eed}.error-page .content-con .text-con h5{position:absolute;width:700px;left:0;top:100px;font-size:20px;font-weight:700;color:#67647d}.error-page .content-con .back-btn-group{position:absolute;right:0;bottom:20px}
\ No newline at end of file
.error-page{width:100%;height:100%;position:relative;background:#f8f8f9}.error-page .content-con{width:700px;height:600px;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-60%);transform:translate(-50%,-60%)}.error-page .content-con img{display:block;width:100%;height:100%}.error-page .content-con .text-con{position:absolute;left:0;top:0}.error-page .content-con .text-con h4{position:absolute;left:0;top:0;font-size:80px;font-weight:700;color:#348eed}.error-page .content-con .text-con h5{position:absolute;width:700px;left:0;top:100px;font-size:20px;font-weight:700;color:#67647d}.error-page .content-con .back-btn-group{position:absolute;right:0;bottom:20px}
\ No newline at end of file
.info{background:#fff;-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.2),0 1px 3px 0 rgba(0,0,0,.2);box-shadow:0 1px 3px 0 rgba(0,0,0,.2),0 1px 3px 0 rgba(0,0,0,.2);padding:15px;margin-bottom:20px}.info h3{margin-bottom:5px}.info .ivu-form-item-content span{font-size:12px;font-family:Helvetica;color:#000;line-height:14px}
\ No newline at end of file
.common{float:left;height:100%;display:table;text-align:center}.size{width:100%;height:100%}.middle-center{display:table-cell;vertical-align:middle}.info-card-wrapper{overflow:hidden}.info-card-wrapper,.info-card-wrapper .ivu-card-body{width:100%;height:100%}.info-card-wrapper .content-con{width:100%;height:100%;position:relative}.info-card-wrapper .content-con .left-area{float:left;height:100%;display:table;text-align:center}.info-card-wrapper .content-con .left-area>.icon{display:table-cell;vertical-align:middle}.info-card-wrapper .content-con .right-area{float:left;height:100%;display:table;text-align:center}.info-card-wrapper .content-con .right-area>div{display:table-cell;vertical-align:middle}.count-to-wrapper .content-outer{display:inline-block}.count-to-wrapper .content-outer .count-to-unit-text{font-style:normal}.count-style{font-size:50px}
\ No newline at end of file
.content{padding:20px;background-color:#fff}.content h3{margin-top:10px;margin-bottom:10px}.content .steps{margin-bottom:10px;margin-left:30px}.content .shareholder_info h3{display:inline-block;margin-top:10px;margin-bottom:30px}.content .shareholder_info .button{margin-right:20px;float:right}.content .shareholder_info .button button{margin-left:10px}.footer-button button{margin-top:10px;margin-right:5px}.demo-drawer-footer{width:100%;position:absolute;bottom:0;left:0;border-top:1px solid #e8e8e8;padding:10px 16px;text-align:right;background:#fff}
\ No newline at end of file
.message-page-con{height:calc(100vh - 176px);display:inline-block;vertical-align:top;position:relative}.message-page-con.message-category-con{border-right:1px solid #e6e6e6;width:200px}.message-page-con.message-list-con{border-right:1px solid #e6e6e6;width:230px}.message-page-con.message-view-con{position:absolute;left:446px;top:16px;right:16px;bottom:16px;overflow:auto;padding:12px 20px 0}.message-page-con.message-view-con .message-view-header{margin-bottom:20px}.message-page-con.message-view-con .message-view-header .message-view-title{display:inline-block}.message-page-con.message-view-con .message-view-header .message-view-time{margin-left:20px}.message-page-con .category-title{display:inline-block;width:65px}.message-page-con .gray-dadge{background:#dcdcdc}.message-page-con .not-unread-list .msg-title{color:#aaa9a9}.message-page-con .not-unread-list .ivu-menu-item .ivu-btn.ivu-btn-text.ivu-btn-small.ivu-btn-icon-only{display:none}.message-page-con .not-unread-list .ivu-menu-item:hover .ivu-btn.ivu-btn-text.ivu-btn-small.ivu-btn-icon-only{display:inline-block}
\ No newline at end of file
.button button{margin-right:20px;margin-bottom:20px}.vertical-center-modal{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.vertical-center-modal .ivu-modal{top:0}
\ No newline at end of file
button{margin-left:10px}.content{margin-top:20px;padding:20px;background-color:#fff}.content h3{margin-bottom:15px}.content .steps{margin-bottom:20px;margin-left:30px}.demo-drawer-footer{width:100%;position:absolute;bottom:0;left:0;border-top:1px solid #e8e8e8;padding:10px 16px;text-align:right;background:#fff}.info{background:#fff;-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.2),0 1px 3px 0 rgba(0,0,0,.2);box-shadow:0 1px 3px 0 rgba(0,0,0,.2),0 1px 3px 0 rgba(0,0,0,.2);padding:15px;margin-bottom:5px}.info .ivu-form-item-content span{font-size:12px;font-family:Helvetica;color:#000;line-height:14px}.strengthenSpan{word-break:normal;width:auto;display:block;white-space:pre-wrap;word-wrap:break-word;overflow:auto;height:200px}
\ No newline at end of file
.org-tree-container{display:inline-block;padding:15px;background-color:#fff}.org-tree{display:table;text-align:center}.org-tree:after,.org-tree:before{content:"";display:table;pointer-events:none}.org-tree:after{clear:both;pointer-events:none}.org-tree-node,.org-tree-node-children{position:relative;margin:0 auto;padding:0;list-style-type:none}.org-tree-node-children:after,.org-tree-node-children:before,.org-tree-node:after,.org-tree-node:before{-webkit-transition:all .35s;transition:all .35s;pointer-events:none}.org-tree-node-label{position:relative;display:inline-block}.org-tree-node-label .org-tree-node-label-inner{padding:10px 15px;text-align:center;border-radius:3px;-webkit-box-shadow:0 1px 5px rgba(0,0,0,.15);box-shadow:0 1px 5px rgba(0,0,0,.15)}.org-tree-button-wrapper{position:absolute;top:100%;left:50%;width:0;height:0;z-index:10;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.org-tree-button-wrapper>*{position:absolute;top:50%;left:50%}.org-tree-button-wrapper .org-tree-node-btn{position:relative;display:inline-block;width:20px;height:20px;background-color:#fff;border:1px solid #ccc;border-radius:50%;-webkit-box-shadow:0 0 2px rgba(0,0,0,.15);box-shadow:0 0 2px rgba(0,0,0,.15);cursor:pointer;-webkit-transition:all .35s ease;transition:all .35s ease;-webkit-transform:translate(-50%,9px);transform:translate(-50%,9px)}.org-tree-button-wrapper .org-tree-node-btn:hover{background-color:#e7e8e9;-webkit-transform:translate(-50%,9px) scale(1.15);transform:translate(-50%,9px) scale(1.15)}.org-tree-button-wrapper .org-tree-node-btn:after,.org-tree-button-wrapper .org-tree-node-btn:before{content:"";position:absolute;pointer-events:none}.org-tree-button-wrapper .org-tree-node-btn:before{top:50%;left:4px;right:4px;height:0;border-top:1px solid #ccc}.org-tree-button-wrapper .org-tree-node-btn:after{top:4px;left:50%;bottom:4px;width:0;border-left:1px solid #ccc;pointer-events:none}.org-tree-button-wrapper .org-tree-node-btn.expanded:after{border:none;pointer-events:none}.org-tree-node{padding-top:20px;display:table-cell;vertical-align:top}.org-tree-node.collapsed,.org-tree-node.is-leaf{padding-left:10px;padding-right:10px}.org-tree-node:after,.org-tree-node:before{pointer-events:none;content:"";position:absolute;top:0;left:0;width:50%;height:19px}.org-tree-node:after{left:50%;border-left:1px solid #ddd;pointer-events:none}.org-tree-node:not(:first-child):before,.org-tree-node:not(:last-child):after{border-top:1px solid #ddd;pointer-events:none}.collapsable .org-tree-node.collapsed{padding-bottom:30px}.collapsable .org-tree-node.collapsed .org-tree-node-label:after{content:"";position:absolute;top:100%;left:0;width:50%;height:20px;border-right:1px solid #ddd;pointer-events:none}.org-tree>.org-tree-node{padding-top:0}.org-tree>.org-tree-node:after{border-left:0;pointer-events:none}.org-tree-node-children{padding-top:20px;display:table}.org-tree-node-children:before{content:"";position:absolute;top:0;left:50%;width:0;height:20px;border-left:1px solid #ddd}.org-tree-node-children:after{content:"";display:table;clear:both;pointer-events:none}.horizontal .org-tree-node{display:table-cell;float:none;padding-top:0;padding-left:20px}.horizontal .org-tree-node.collapsed,.horizontal .org-tree-node.is-leaf{padding-top:10px;padding-bottom:10px}.horizontal .org-tree-node:after,.horizontal .org-tree-node:before{width:19px;height:50%;pointer-events:none}.horizontal .org-tree-node:after{top:50%;left:0;border-left:0;pointer-events:none}.horizontal .org-tree-node:only-child:before{top:1px;border-bottom:1px solid #ddd}.horizontal .org-tree-node:not(:first-child):before,.horizontal .org-tree-node:not(:last-child):after{border-top:0;border-left:1px solid #ddd;pointer-events:none}.horizontal .org-tree-node:not(:only-child):after{border-top:1px solid #ddd;pointer-events:none}.horizontal .org-tree-node .org-tree-node-inner{display:table}.horizontal .org-tree-node-label{display:table-cell;vertical-align:middle}.horizontal.collapsable .org-tree-node.collapsed{padding-right:30px}.horizontal.collapsable .org-tree-node.collapsed .org-tree-node-label:after{top:0;left:100%;width:20px;height:50%;border-right:0;border-bottom:.625em solid #ddd;pointer-events:none}.horizontal .org-tree-button-wrapper{position:absolute;top:50%;left:100%;width:0;height:0;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.horizontal .org-tree-button-wrapper>*{position:absolute;top:50%;left:50%}.horizontal .org-tree-button-wrapper .org-tree-node-btn{display:inline-block;-webkit-transform:translate(9PX,-50%);transform:translate(9PX,-50%)}.horizontal>.org-tree-node:only-child:before{border-bottom:0}.horizontal .org-tree-node-children{display:table-cell;padding-top:0;padding-left:20px}.horizontal .org-tree-node-children:before{top:50%;left:0;width:20px;height:0;border-left:0;border-top:1px solid #ddd}.horizontal .org-tree-node-children:after{display:none}.horizontal .org-tree-node-children>.org-tree-node{display:block}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<svg width="300px" height="488px" viewBox="0 0 300 488" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>1流程</title>
<g id="工商交付流程" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="02-一级列表页备份-4" transform="translate(-230.000000, -238.000000)">
<g id="1流程" transform="translate(230.000000, 238.000000)">
<rect id="矩形" fill="#D8D8D8" opacity="0" x="0" y="0" width="300" height="488"></rect>
<g id="编组-2" transform="translate(12.000000, 8.000000)">
<text id="售前正常流程备份-4" font-family="PingFangSC-Medium, PingFang SC" font-size="14" font-weight="400" fill="#000000">
<tspan x="96" y="15">售前正常流程</tspan>
</text>
<g id="编组备份-5" transform="translate(0.000000, 50.000000)">
<g id="编组-6">
<line x1="12.5" y1="47" x2="12.5" y2="387" id="直线" stroke="#C07400" stroke-linecap="square" stroke-dasharray="3"></line>
<g id="编组-3" fill="#C07400">
<text id="用户" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal">
<tspan x="0" y="33">用户</tspan>
</text>
<path d="M18.03198,12.9099904 C16.9781945,12.1496343 15.9009336,11.7749265 15.6766129,11.703814 C14.5497928,11.266199 14.0646341,10.9024315 13.892481,10.7437961 C13.9003062,10.710975 13.9133481,10.6699485 13.9289983,10.626187 C14.5524011,10.1557509 15.0845107,9.48018273 15.4679425,8.66238968 C15.8800666,7.78989475 16.1200375,6.77517494 16.1617716,5.72216382 C16.2321979,4.00999508 15.7444308,2.48381273 14.7871553,1.42533141 C13.9655157,0.517280264 12.8360871,0.0112879063 11.6049318,0.000170967758 C10.3633429,-0.0105928443 9.22087248,0.487194232 8.38619089,1.40892085 C7.41326516,2.48107763 6.93332324,4.01820036 7.03244168,5.73857438 C7.09243442,6.79705569 7.3428389,7.8117755 7.75757131,8.67606515 C8.14882831,9.49112311 8.6835462,10.1666913 9.30694902,10.6316572 C9.31999092,10.6726836 9.33303282,10.710975 9.34085796,10.741061 C9.1660965,10.8996964 8.6835462,11.2634639 7.55672605,11.7010789 C7.33501376,11.7749265 6.25514445,12.1468992 5.20135894,12.9072553 C3.56068793,14.0888158 2.81469126,15.6040578 3.03901194,17.2888756 C3.06770412,17.5076831 3.17725607,17.6991397 3.34419239,17.8331593 C3.48243653,17.942563 3.64676447,18 3.81630917,18 C3.85282649,18 3.88934381,17.9972649 3.92586113,17.9917947 C4.13453153,17.9617087 4.31711812,17.8468347 4.44492874,17.6717887 C4.57013098,17.4967427 4.62490696,17.2806703 4.59621478,17.0618628 C4.25190862,14.5072852 7.99232551,13.2874333 8.02884283,13.2737579 L8.07579367,13.2573473 C10.0190368,12.5079316 10.6033139,11.8268932 10.7780753,11.4877416 C11.1223815,10.8367893 10.7911172,10.0217313 10.632006,9.70172533 C10.5667965,9.57044083 10.4676781,9.45830198 10.3476926,9.38171935 C9.36694176,8.74444249 8.6965881,7.30851823 8.60007804,5.63737591 C8.5270434,4.37923275 8.85569928,3.27972503 9.52344456,2.54398479 C10.0633792,1.95046943 10.7780753,1.63866873 11.5892815,1.64687401 C12.403096,1.6550793 13.1151838,1.96961509 13.6472933,2.56039535 C14.3098218,3.2906654 14.6436944,4.39017312 14.5941352,5.65378647 C14.5263173,7.30031295 13.871614,8.72803193 12.883038,9.37898426 C12.7604441,9.46103708 12.6613257,9.57317592 12.5961162,9.70993061 C12.4396134,10.0299366 12.1135659,10.8422595 12.4526553,11.4877416 C12.6274167,11.8268932 13.2116938,12.5079316 15.1549369,13.2573473 C15.1705872,13.2628175 15.1862375,13.2682877 15.1992794,13.2737579 C15.2384051,13.2846982 18.978822,14.5045501 18.6371242,17.0618628 C18.608432,17.2806703 18.6605996,17.4967427 18.7884102,17.6717887 C18.9136125,17.8468347 19.0988074,17.9617087 19.3074778,17.9917947 C19.3439952,17.9972649 19.3805125,18 19.4170298,18 C19.8056784,18 20.1395511,17.6936695 20.194327,17.2888756 C20.4186477,15.6067929 19.672651,14.094286 18.03198,12.9099904 L18.03198,12.9099904 Z" id="形状" fill-rule="nonzero"></path>
</g>
</g>
<g id="编组-5" transform="translate(9.000000, 0.000000)">
<g id="编组-3备份">
<line x1="129.5" y1="47" x2="129.5" y2="387" id="直线备份" stroke="#006EFF" stroke-linecap="square" stroke-dasharray="3"></line>
<circle id="椭圆形" stroke="#006EFF" fill="#FFFFFF" cx="129.5" cy="88.5" r="3.5"></circle>
<circle id="椭圆形" stroke="#006EFF" fill="#FFFFFF" cx="129.5" cy="218.5" r="3.5"></circle>
<circle id="椭圆形" stroke="#006EFF" fill="#FFFFFF" cx="129.5" cy="348.5" r="3.5"></circle>
<circle id="椭圆形" stroke="#006EFF" fill="#FFFFFF" cx="129.5" cy="175.5" r="3.5"></circle>
<circle id="椭圆形" stroke="#006EFF" fill="#FFFFFF" cx="129.5" cy="305.5" r="3.5"></circle>
<circle id="椭圆形" stroke="#006EFF" fill="#006EFF" cx="129.5" cy="390.5" r="3.5"></circle>
<circle id="椭圆形备份-2" stroke="#C07400" fill="#C07400" cx="3.5" cy="390.5" r="3.5"></circle>
<circle id="椭圆形备份" stroke="#007E3B" fill="#007E3B" cx="255.5" cy="390.5" r="3.5"></circle>
<path d="M137.960663,14.0010692 C137.524207,14.4377286 136.745397,14.9336063 135.466827,14.9774365 C134.875875,14.9976658 134.185177,15 133.869341,15 L127,15 C129.499225,12.5466328 131.679536,10.4069929 131.926935,10.1641546 C132.153289,9.94189144 132.662972,9.4491259 133.102507,9.04912131 C134.067637,8.17104771 134.936185,7.99434371 135.550576,8.00013587 C136.513311,8.00904023 137.388617,8.40627841 138.014215,9.04773811 C139.353095,10.4305938 139.321271,12.6401718 137.960663,14.0010692 M139.408687,7.73116131 C138.40405,6.72825433 137.003803,6.09644834 135.447239,6.09644834 C134.101666,6.09612051 132.943138,6.55032583 131.931468,7.35645421 C131.49073,7.70804945 131.028391,8.12881634 130.446238,8.68202563 C130.253248,8.86577307 126.439996,12.4874499 123.936147,14.8655122 C123.587593,14.8642829 123.086739,14.8593655 122.642652,14.8447771 C121.391272,14.803225 120.629107,14.33312 120.201849,13.9191555 C118.870259,12.6289895 118.839112,10.5342523 120.14952,9.22326921 C120.76173,8.61514877 121.618841,8.23855667 122.560767,8.23011511 C123.151125,8.22782031 123.952474,8.39566811 124.85756,9.13041201 L124.857728,9.13033005 C125.289925,9.48102376 126.249434,10.3066579 126.670496,10.6783326 C126.69193,10.6971827 126.717718,10.6989038 126.742836,10.6787424 L128.228316,9.26006787 C128.253937,9.23564471 128.25243,9.20269802 128.22706,9.18032378 C127.512787,8.54818996 126.500028,7.66371075 125.890414,7.21942222 C125.249904,6.75030074 124.559409,6.41657212 123.811143,6.24061058 C123.818762,6.24224972 123.826716,6.24323321 123.834754,6.24479039 C124.339124,3.88746315 126.468212,2.13653526 128.999858,2.13653526 C131.108601,2.13653526 132.958377,3.38129714 133.792546,5.14550206 C133.80544,5.17344937 133.827712,5.18254659 133.850569,5.17631787 C134.477766,5.00756854 135.229633,4.9094661 135.956046,4.96208245 C136.026628,4.96724573 136.054174,4.92798836 136.031317,4.86496348 C135.006082,2.03105669 132.24628,0 128.999858,0 C125.27611,0 122.190276,2.68040146 121.6314,6.17176676 C121.633075,6.17176676 121.634749,6.17209459 121.636424,6.17176676 C120.45035,6.36625056 119.394305,6.92954055 118.591281,7.73116131 C116.439084,9.88425187 116.47224,13.3247219 118.677185,15.444374 C119.562428,16.2953329 120.635052,16.7583076 121.779011,16.9148453 L121.778676,16.9148453 C122.217823,16.9761491 122.821744,16.9943435 123.360693,16.9976218 C123.86523,17.0009001 133.492051,17 133.895028,17 C134.706257,17 135.233986,16.999261 135.801068,16.9586103 C137.101261,16.8655072 138.329784,16.3989264 139.322783,15.444374 C141.527728,13.3247219 141.560967,9.88425187 139.408687,7.73116131" id="Fill-1" fill="#006EFF"></path>
<text id="腾讯云" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#006EFF">
<tspan x="111" y="33">腾讯云</tspan>
</text>
</g>
</g>
<g id="编组-4" transform="translate(246.000000, 0.000000)">
<g id="编组-3备份-2">
<line x1="18.5" y1="47" x2="18.5" y2="387" id="直线备份-2" stroke="#007E3B" stroke-linecap="square" stroke-dasharray="3"></line>
<circle id="椭圆形" stroke="#007E3B" fill="#FFFFFF" cx="18.5" cy="131.5" r="3.5"></circle>
<circle id="椭圆形" stroke="#007E3B" fill="#FFFFFF" cx="18.5" cy="261.5" r="3.5"></circle>
<g id="服务商" transform="translate(4.000000, 0.000000)" fill="#007E3B" fill-rule="nonzero">
<path d="M13.6049318,0.000170967758 C14.8360871,0.0112879063 15.9655157,0.517280264 16.7871553,1.42533141 C17.7444308,2.48381273 18.2321979,4.00999508 18.1617716,5.72216382 C18.1200375,6.77517494 17.8800666,7.78989475 17.4679425,8.66238968 C17.0845107,9.48018273 16.5524011,10.1557509 15.9289983,10.626187 C15.9133481,10.6699485 15.9003062,10.710975 15.892481,10.7437961 C16.0646341,10.9024315 16.5497928,11.266199 17.6766129,11.703814 C17.9009336,11.7749265 18.9781945,12.1496343 20.03198,12.9099904 C21.672651,14.094286 22.4186477,15.6067929 22.194327,17.2888756 C22.1395511,17.6936695 21.8056784,18 21.4170298,18 C21.3805125,18 21.3439952,17.9972649 21.3074778,17.9917947 C21.0988074,17.9617087 20.9136125,17.8468347 20.7884102,17.6717887 C20.6605996,17.4967427 20.608432,17.2806703 20.6371242,17.0618628 C20.978822,14.5045501 17.2384051,13.2846982 17.1992794,13.2737579 C17.1862375,13.2682877 17.1705872,13.2628175 17.1549369,13.2573473 C15.2116938,12.5079316 14.6274167,11.8268932 14.4526553,11.4877416 C14.1135659,10.8422595 14.4396134,10.0299366 14.5961162,9.70993061 C14.6613257,9.57317592 14.7604441,9.46103708 14.883038,9.37898426 C15.871614,8.72803193 16.5263173,7.30031295 16.5941352,5.65378647 C16.6436944,4.39017312 16.3098218,3.2906654 15.6472933,2.56039535 C15.1151838,1.96961509 14.403096,1.6550793 13.5892815,1.64687401 C12.7780753,1.63866873 12.0633792,1.95046943 11.5234446,2.54398479 C10.8556993,3.27972503 10.5270434,4.37923275 10.600078,5.63737591 C10.6965881,7.30851823 11.3669418,8.74444249 12.3476926,9.38171935 C12.4676781,9.45830198 12.5667965,9.57044083 12.632006,9.70172533 C12.7911172,10.0217313 13.1223815,10.8367893 12.7780753,11.4877416 C12.6033139,11.8268932 12.0190368,12.5079316 10.0757937,13.2573473 L10.0757937,13.2573473 L10.0288428,13.2737579 C9.99232551,13.2874333 6.25190862,14.5072852 6.59621478,17.0618628 C6.62490696,17.2806703 6.57013098,17.4967427 6.44492874,17.6717887 C6.31711812,17.8468347 6.13453153,17.9617087 5.92586113,17.9917947 C5.88934381,17.9972649 5.85282649,18 5.81630917,18 C5.64676447,18 5.48243653,17.942563 5.34419239,17.8331593 C5.17725607,17.6991397 5.06770412,17.5076831 5.03901194,17.2888756 C4.81469126,15.6040578 5.56068793,14.0888158 7.20135894,12.9072553 C8.25514445,12.1468992 9.33501376,11.7749265 9.55672605,11.7010789 C10.6835462,11.2634639 11.1660965,10.8996964 11.340858,10.741061 C11.3330328,10.710975 11.3199909,10.6726836 11.306949,10.6316572 C10.6835462,10.1666913 10.1488283,9.49112311 9.75757131,8.67606515 C9.3428389,7.8117755 9.09243442,6.79705569 9.03244168,5.73857438 C8.93332324,4.01820036 9.41326516,2.48107763 10.3861909,1.40892085 C11.2208725,0.487194232 12.3633429,-0.0105928443 13.6049318,0.000170967758 Z M6.24622541,3.00132768 C6.70741355,3.01158124 7.13671101,3.09360972 7.52185216,3.24228634 C7.70583679,3.31149786 7.85302449,3.4550477 7.93643086,3.64217516 C8.01983722,3.82930263 8.01738409,4.04206399 7.95114963,4.23431823 C7.88491516,4.42657248 7.74753997,4.58037587 7.5684616,4.66753113 C7.38938323,4.75212299 7.18822671,4.76237655 7.00424208,4.69060164 C6.77119488,4.60088299 6.50135076,4.55217858 6.20452223,4.54448841 C5.62558394,4.53167146 5.15458329,4.70854537 4.80869219,5.07767351 C4.34505093,5.56984438 4.11445686,6.40038271 4.15616004,7.41292172 C4.20522261,8.60746142 4.66641075,9.64050756 5.35573982,10.1121713 C5.48084936,10.1967632 5.57652137,10.3172425 5.63294332,10.4582289 C5.66974025,10.5479476 5.97638129,11.352852 5.58388075,12.0987985 C5.54217757,12.1757002 5.48820875,12.2474751 5.42442741,12.3064331 C5.37536484,12.3525741 4.9043642,12.7678433 3.86178464,13.239507 L3.86178464,13.239507 L3.80290956,13.2651409 C3.3392683,13.4753389 2.63522046,13.7906358 2.1200635,14.2828067 C1.57792213,14.8006115 1.38657812,15.3722474 1.51659392,16.0823064 C1.55584398,16.2848142 1.51414079,16.4898854 1.40375002,16.6616325 C1.29335924,16.8333797 1.12654651,16.9487322 0.93274937,16.9871831 C0.886139931,16.9948732 0.839530492,17 0.792921053,17 C0.439670569,17 0.133029523,16.7385342 0.0667950569,16.3745329 C-0.0583144899,15.7029247 -0.00679879415,15.0646406 0.213982759,14.4750609 C0.400420515,13.9880169 0.704608432,13.5394236 1.12409338,13.1395348 C1.82323497,12.4730534 2.69654867,12.0808548 3.21906501,11.8450229 L3.21906501,11.8450229 L3.27794009,11.819389 C3.80045643,11.5835571 4.13898815,11.3707958 4.308254,11.2503164 C4.308254,11.2400629 4.30580088,11.2298093 4.30580088,11.2169924 C3.35398707,10.4249049 2.74806436,9.03554754 2.68428302,7.47956986 C2.62540794,6.03638134 3.00564284,4.79826401 3.75875325,3.99592297 C4.3941135,3.32175142 5.25270842,2.97569378 6.24622541,3.00132768 Z M20.3580275,2.00517131 C21.4144214,1.97782037 22.3299628,2.34432294 23.0029248,3.06638771 C23.8036975,3.92247208 24.2106048,5.2407873 24.1453953,6.78338022 C24.0775774,8.44358217 23.4333075,9.92326793 22.4212561,10.771147 C22.4186477,10.7820874 22.4186477,10.7957629 22.4186477,10.8067032 C22.5986259,10.9325176 22.9585824,11.1622654 23.5141673,11.4138941 L23.5141673,11.4138941 L23.5767684,11.441245 C24.1323534,11.6901385 25.0609366,12.111343 25.8043249,12.8224674 C26.2503579,13.2464069 26.573797,13.7277834 26.7720339,14.2474513 C27.0093965,14.8710527 27.0641725,15.552091 26.9233199,16.2768909 C26.8502853,16.6625391 26.5268462,16.9442538 26.1512395,16.9442538 C26.1016802,16.9442538 26.052121,16.9415187 26.0025618,16.9305783 C25.5773959,16.8430553 25.2982992,16.4109105 25.379159,15.9650902 C25.5174031,15.2074692 25.3139495,14.5975433 24.7374975,14.0450543 C24.1897377,13.5199163 23.4411327,13.1834998 22.9481489,12.9592221 L22.9481489,12.9592221 L22.8855477,12.9318711 C21.80307,12.4422893 21.3126946,12.0156147 21.2240097,11.936297 C21.1561918,11.8733898 21.0988074,11.7995423 21.054465,11.7147544 C20.6371242,10.9188421 20.9631717,10.0600226 21.0022974,9.96429434 C21.0648985,9.81112908 21.1666253,9.68531477 21.2970443,9.59505667 C22.0299991,9.09179941 22.5203745,7.9895566 22.5725421,6.71500287 C22.6168846,5.63464081 22.3716969,4.74847041 21.8787131,4.2233324 C21.5135399,3.82947889 21.0127309,3.63802232 20.3945449,3.65443288 C20.0789309,3.66263816 19.7920091,3.71460495 19.544213,3.81033323 C19.1373057,3.96623358 18.6834476,3.74742607 18.5347699,3.32075144 C18.3860923,2.8940768 18.5947627,2.41817047 19.0016699,2.26227013 C19.4111856,2.10363468 19.8676521,2.01611168 20.3580275,2.00517131 Z" id="形状结合"></path>
</g>
<text id="服务商" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#007E3B">
<tspan x="0" y="33">服务商</tspan>
</text>
</g>
</g>
<g id="编组-7" transform="translate(29.000000, 66.000000)">
<text id="1.发布需求" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#111111">
<tspan x="17.0371094" y="13">1.发布需求</tspan>
</text>
<g id="返-回" transform="translate(93.000000, 17.000000)" fill="#999999" fill-rule="nonzero" opacity="0.546642485">
<g id="编组">
<polygon id="路径" points="9.38022374e-16 10.1750005 0.918749536 11 7 5.53928563 6.95625009 5.5 7 5.46071437 0.918749536 0 0 0.824999533 5.20625562 5.5000043"></polygon>
<polygon id="路径备份" points="9.38022374e-16 140.175 0.918749536 141 7 135.539286 6.95625009 135.5 7 135.460714 0.918749536 130 0 130.825 5.20625562 135.500004"></polygon>
<polygon id="路径备份-2" points="9.38022374e-16 270.175 0.918749536 271 7 265.539286 6.95625009 265.5 7 265.460714 0.918749536 260 0 260.825 5.20625562 265.500004"></polygon>
<polygon id="路径备份-3" points="126 183.175 126.91875 184 133 178.539286 132.95625 178.5 133 178.460714 126.91875 173 126 173.825 131.206256 178.500004"></polygon>
<polygon id="路径备份-4" points="126 53.1750005 126.91875 54 133 48.5392856 132.95625 48.5 133 48.4607144 126.91875 43 126 43.8249995 131.206256 48.5000043"></polygon>
<polygon id="路径备份-5" transform="translate(30.500000, 92.500000) scale(-1, 1) translate(-30.500000, -92.500000) " points="27 97.1750005 27.9187495 98 34 92.5392856 33.9562501 92.5 34 92.4607144 27.9187495 87 27 87.8249995 32.2062556 92.5000043"></polygon>
<polygon id="路径备份-6" transform="translate(30.500000, 222.500000) scale(-1, 1) translate(-30.500000, -222.500000) " points="27 227.175 27.9187495 228 34 222.539286 33.9562501 222.5 34 222.460714 27.9187495 217 27 217.825 32.2062556 222.500004"></polygon>
</g>
</g>
<line x1="0" y1="22.5" x2="96" y2="22.5" id="直线-2" stroke="#999999" opacity="0.548990885" stroke-linecap="square" stroke-dasharray="3"></line>
</g>
<g id="编组-7备份-3" transform="translate(28.000000, 196.000000)">
<text id="4.确认并支付方案" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#111111">
<tspan x="0.037109375" y="13">4.确认并支付方案</tspan>
</text>
<line x1="1" y1="22.5" x2="97" y2="22.5" id="直线-2" stroke="#999999" opacity="0.548990885" stroke-linecap="square" stroke-dasharray="3"></line>
</g>
<g id="编组-7备份-7" transform="translate(29.000000, 326.000000)">
<text id="7.查看交付进度" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#111111">
<tspan x="5.03710938" y="13">7.查看交付进度</tspan>
</text>
<line x1="0" y1="22.5" x2="96" y2="22.5" id="直线-2" stroke="#999999" opacity="0.548990885" stroke-linecap="square" stroke-dasharray="3"></line>
</g>
<g id="编组-7备份" transform="translate(157.000000, 109.000000)">
<text id="2.通知服务商" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#111111">
<tspan x="9.03710938" y="13">2.通知服务商</tspan>
</text>
<line x1="0" y1="22.5" x2="91" y2="22.5" id="直线-2" stroke="#999999" opacity="0.548990885" stroke-linecap="square" stroke-dasharray="3"></line>
</g>
<g id="编组-7备份-2" transform="translate(154.000000, 153.000000)">
<text id="3.提交方案" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#111111">
<tspan x="18.0371094" y="13">3.提交方案</tspan>
</text>
<line x1="0" y1="22.5" x2="96" y2="22.5" id="直线-2" stroke="#999999" opacity="0.548990885" stroke-linecap="square" stroke-dasharray="3"></line>
</g>
<g id="编组-7备份-5" transform="translate(150.000000, 239.000000)">
<text id="5.通知服务商(订单)" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#111111">
<tspan x="0.029296875" y="13">5.通知服务商(订单)</tspan>
</text>
<line x1="7" y1="22.5" x2="98" y2="22.5" id="直线-2" stroke="#999999" opacity="0.548990885" stroke-linecap="square" stroke-dasharray="3"></line>
</g>
<g id="编组-7备份-4" transform="translate(154.000000, 283.000000)">
<text id="6.提交交付信息" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#111111">
<tspan x="6.03710938" y="13">6.提交交付信息</tspan>
</text>
<line x1="0" y1="22.5" x2="96" y2="22.5" id="直线-2" stroke="#999999" opacity="0.548990885" stroke-linecap="square" stroke-dasharray="3"></line>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<svg width="300px" height="488px" viewBox="0 0 300 488" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>2流程</title>
<g id="工商交付流程" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="02-一级列表页备份-4" transform="translate(-570.000000, -238.000000)">
<g id="2流程" transform="translate(570.000000, 238.000000)">
<rect id="矩形" fill="#D8D8D8" opacity="0" x="0" y="0" width="300" height="488"></rect>
<g id="编组备份-3" transform="translate(12.000000, 58.000000)">
<g id="编组-6">
<line x1="12.5" y1="47" x2="12.5" y2="387" id="直线" stroke="#C07400" stroke-linecap="square" stroke-dasharray="3"></line>
<g id="编组-3" fill="#C07400">
<text id="用户" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal">
<tspan x="0" y="33">用户</tspan>
</text>
<path d="M18.03198,12.9099904 C16.9781945,12.1496343 15.9009336,11.7749265 15.6766129,11.703814 C14.5497928,11.266199 14.0646341,10.9024315 13.892481,10.7437961 C13.9003062,10.710975 13.9133481,10.6699485 13.9289983,10.626187 C14.5524011,10.1557509 15.0845107,9.48018273 15.4679425,8.66238968 C15.8800666,7.78989475 16.1200375,6.77517494 16.1617716,5.72216382 C16.2321979,4.00999508 15.7444308,2.48381273 14.7871553,1.42533141 C13.9655157,0.517280264 12.8360871,0.0112879063 11.6049318,0.000170967758 C10.3633429,-0.0105928443 9.22087248,0.487194232 8.38619089,1.40892085 C7.41326516,2.48107763 6.93332324,4.01820036 7.03244168,5.73857438 C7.09243442,6.79705569 7.3428389,7.8117755 7.75757131,8.67606515 C8.14882831,9.49112311 8.6835462,10.1666913 9.30694902,10.6316572 C9.31999092,10.6726836 9.33303282,10.710975 9.34085796,10.741061 C9.1660965,10.8996964 8.6835462,11.2634639 7.55672605,11.7010789 C7.33501376,11.7749265 6.25514445,12.1468992 5.20135894,12.9072553 C3.56068793,14.0888158 2.81469126,15.6040578 3.03901194,17.2888756 C3.06770412,17.5076831 3.17725607,17.6991397 3.34419239,17.8331593 C3.48243653,17.942563 3.64676447,18 3.81630917,18 C3.85282649,18 3.88934381,17.9972649 3.92586113,17.9917947 C4.13453153,17.9617087 4.31711812,17.8468347 4.44492874,17.6717887 C4.57013098,17.4967427 4.62490696,17.2806703 4.59621478,17.0618628 C4.25190862,14.5072852 7.99232551,13.2874333 8.02884283,13.2737579 L8.07579367,13.2573473 C10.0190368,12.5079316 10.6033139,11.8268932 10.7780753,11.4877416 C11.1223815,10.8367893 10.7911172,10.0217313 10.632006,9.70172533 C10.5667965,9.57044083 10.4676781,9.45830198 10.3476926,9.38171935 C9.36694176,8.74444249 8.6965881,7.30851823 8.60007804,5.63737591 C8.5270434,4.37923275 8.85569928,3.27972503 9.52344456,2.54398479 C10.0633792,1.95046943 10.7780753,1.63866873 11.5892815,1.64687401 C12.403096,1.6550793 13.1151838,1.96961509 13.6472933,2.56039535 C14.3098218,3.2906654 14.6436944,4.39017312 14.5941352,5.65378647 C14.5263173,7.30031295 13.871614,8.72803193 12.883038,9.37898426 C12.7604441,9.46103708 12.6613257,9.57317592 12.5961162,9.70993061 C12.4396134,10.0299366 12.1135659,10.8422595 12.4526553,11.4877416 C12.6274167,11.8268932 13.2116938,12.5079316 15.1549369,13.2573473 C15.1705872,13.2628175 15.1862375,13.2682877 15.1992794,13.2737579 C15.2384051,13.2846982 18.978822,14.5045501 18.6371242,17.0618628 C18.608432,17.2806703 18.6605996,17.4967427 18.7884102,17.6717887 C18.9136125,17.8468347 19.0988074,17.9617087 19.3074778,17.9917947 C19.3439952,17.9972649 19.3805125,18 19.4170298,18 C19.8056784,18 20.1395511,17.6936695 20.194327,17.2888756 C20.4186477,15.6067929 19.672651,14.094286 18.03198,12.9099904 L18.03198,12.9099904 Z" id="形状" fill-rule="nonzero"></path>
</g>
</g>
<g id="编组-5" transform="translate(9.000000, 0.000000)">
<g id="编组-3备份">
<line x1="129.5" y1="47" x2="129.5" y2="387" id="直线备份" stroke="#006EFF" stroke-linecap="square" stroke-dasharray="3"></line>
<circle id="椭圆形" stroke="#006EFF" fill="#FFFFFF" cx="129.5" cy="88.5" r="3.5"></circle>
<circle id="椭圆形" stroke="#006EFF" fill="#FFFFFF" cx="129.5" cy="218.5" r="3.5"></circle>
<circle id="椭圆形" stroke="#006EFF" fill="#FFFFFF" cx="129.5" cy="175.5" r="3.5"></circle>
<circle id="椭圆形" stroke="#006EFF" fill="#FFFFFF" cx="129.5" cy="305.5" r="3.5"></circle>
<circle id="椭圆形" stroke="#006EFF" fill="#006EFF" cx="129.5" cy="390.5" r="3.5"></circle>
<circle id="椭圆形备份-2" stroke="#C07400" fill="#C07400" cx="3.5" cy="390.5" r="3.5"></circle>
<circle id="椭圆形备份" stroke="#007E3B" fill="#007E3B" cx="255.5" cy="390.5" r="3.5"></circle>
<path d="M137.960663,14.0010692 C137.524207,14.4377286 136.745397,14.9336063 135.466827,14.9774365 C134.875875,14.9976658 134.185177,15 133.869341,15 L127,15 C129.499225,12.5466328 131.679536,10.4069929 131.926935,10.1641546 C132.153289,9.94189144 132.662972,9.4491259 133.102507,9.04912131 C134.067637,8.17104771 134.936185,7.99434371 135.550576,8.00013587 C136.513311,8.00904023 137.388617,8.40627841 138.014215,9.04773811 C139.353095,10.4305938 139.321271,12.6401718 137.960663,14.0010692 M139.408687,7.73116131 C138.40405,6.72825433 137.003803,6.09644834 135.447239,6.09644834 C134.101666,6.09612051 132.943138,6.55032583 131.931468,7.35645421 C131.49073,7.70804945 131.028391,8.12881634 130.446238,8.68202563 C130.253248,8.86577307 126.439996,12.4874499 123.936147,14.8655122 C123.587593,14.8642829 123.086739,14.8593655 122.642652,14.8447771 C121.391272,14.803225 120.629107,14.33312 120.201849,13.9191555 C118.870259,12.6289895 118.839112,10.5342523 120.14952,9.22326921 C120.76173,8.61514877 121.618841,8.23855667 122.560767,8.23011511 C123.151125,8.22782031 123.952474,8.39566811 124.85756,9.13041201 L124.857728,9.13033005 C125.289925,9.48102376 126.249434,10.3066579 126.670496,10.6783326 C126.69193,10.6971827 126.717718,10.6989038 126.742836,10.6787424 L128.228316,9.26006787 C128.253937,9.23564471 128.25243,9.20269802 128.22706,9.18032378 C127.512787,8.54818996 126.500028,7.66371075 125.890414,7.21942222 C125.249904,6.75030074 124.559409,6.41657212 123.811143,6.24061058 C123.818762,6.24224972 123.826716,6.24323321 123.834754,6.24479039 C124.339124,3.88746315 126.468212,2.13653526 128.999858,2.13653526 C131.108601,2.13653526 132.958377,3.38129714 133.792546,5.14550206 C133.80544,5.17344937 133.827712,5.18254659 133.850569,5.17631787 C134.477766,5.00756854 135.229633,4.9094661 135.956046,4.96208245 C136.026628,4.96724573 136.054174,4.92798836 136.031317,4.86496348 C135.006082,2.03105669 132.24628,0 128.999858,0 C125.27611,0 122.190276,2.68040146 121.6314,6.17176676 C121.633075,6.17176676 121.634749,6.17209459 121.636424,6.17176676 C120.45035,6.36625056 119.394305,6.92954055 118.591281,7.73116131 C116.439084,9.88425187 116.47224,13.3247219 118.677185,15.444374 C119.562428,16.2953329 120.635052,16.7583076 121.779011,16.9148453 L121.778676,16.9148453 C122.217823,16.9761491 122.821744,16.9943435 123.360693,16.9976218 C123.86523,17.0009001 133.492051,17 133.895028,17 C134.706257,17 135.233986,16.999261 135.801068,16.9586103 C137.101261,16.8655072 138.329784,16.3989264 139.322783,15.444374 C141.527728,13.3247219 141.560967,9.88425187 139.408687,7.73116131" id="Fill-1" fill="#006EFF"></path>
<text id="腾讯云" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#006EFF">
<tspan x="111" y="33">腾讯云</tspan>
</text>
</g>
</g>
<g id="编组-4" transform="translate(246.000000, 0.000000)">
<g id="编组-3备份-2">
<line x1="18.5" y1="47" x2="18.5" y2="387" id="直线备份-2" stroke="#007E3B" stroke-linecap="square" stroke-dasharray="3"></line>
<circle id="椭圆形" stroke="#007E3B" fill="#FFFFFF" cx="18.5" cy="131.5" r="3.5"></circle>
<circle id="椭圆形" stroke="#007E3B" fill="#FFFFFF" cx="18.5" cy="261.5" r="3.5"></circle>
<g id="服务商" transform="translate(4.000000, 0.000000)" fill="#007E3B" fill-rule="nonzero">
<path d="M13.6049318,0.000170967758 C14.8360871,0.0112879063 15.9655157,0.517280264 16.7871553,1.42533141 C17.7444308,2.48381273 18.2321979,4.00999508 18.1617716,5.72216382 C18.1200375,6.77517494 17.8800666,7.78989475 17.4679425,8.66238968 C17.0845107,9.48018273 16.5524011,10.1557509 15.9289983,10.626187 C15.9133481,10.6699485 15.9003062,10.710975 15.892481,10.7437961 C16.0646341,10.9024315 16.5497928,11.266199 17.6766129,11.703814 C17.9009336,11.7749265 18.9781945,12.1496343 20.03198,12.9099904 C21.672651,14.094286 22.4186477,15.6067929 22.194327,17.2888756 C22.1395511,17.6936695 21.8056784,18 21.4170298,18 C21.3805125,18 21.3439952,17.9972649 21.3074778,17.9917947 C21.0988074,17.9617087 20.9136125,17.8468347 20.7884102,17.6717887 C20.6605996,17.4967427 20.608432,17.2806703 20.6371242,17.0618628 C20.978822,14.5045501 17.2384051,13.2846982 17.1992794,13.2737579 C17.1862375,13.2682877 17.1705872,13.2628175 17.1549369,13.2573473 C15.2116938,12.5079316 14.6274167,11.8268932 14.4526553,11.4877416 C14.1135659,10.8422595 14.4396134,10.0299366 14.5961162,9.70993061 C14.6613257,9.57317592 14.7604441,9.46103708 14.883038,9.37898426 C15.871614,8.72803193 16.5263173,7.30031295 16.5941352,5.65378647 C16.6436944,4.39017312 16.3098218,3.2906654 15.6472933,2.56039535 C15.1151838,1.96961509 14.403096,1.6550793 13.5892815,1.64687401 C12.7780753,1.63866873 12.0633792,1.95046943 11.5234446,2.54398479 C10.8556993,3.27972503 10.5270434,4.37923275 10.600078,5.63737591 C10.6965881,7.30851823 11.3669418,8.74444249 12.3476926,9.38171935 C12.4676781,9.45830198 12.5667965,9.57044083 12.632006,9.70172533 C12.7911172,10.0217313 13.1223815,10.8367893 12.7780753,11.4877416 C12.6033139,11.8268932 12.0190368,12.5079316 10.0757937,13.2573473 L10.0757937,13.2573473 L10.0288428,13.2737579 C9.99232551,13.2874333 6.25190862,14.5072852 6.59621478,17.0618628 C6.62490696,17.2806703 6.57013098,17.4967427 6.44492874,17.6717887 C6.31711812,17.8468347 6.13453153,17.9617087 5.92586113,17.9917947 C5.88934381,17.9972649 5.85282649,18 5.81630917,18 C5.64676447,18 5.48243653,17.942563 5.34419239,17.8331593 C5.17725607,17.6991397 5.06770412,17.5076831 5.03901194,17.2888756 C4.81469126,15.6040578 5.56068793,14.0888158 7.20135894,12.9072553 C8.25514445,12.1468992 9.33501376,11.7749265 9.55672605,11.7010789 C10.6835462,11.2634639 11.1660965,10.8996964 11.340858,10.741061 C11.3330328,10.710975 11.3199909,10.6726836 11.306949,10.6316572 C10.6835462,10.1666913 10.1488283,9.49112311 9.75757131,8.67606515 C9.3428389,7.8117755 9.09243442,6.79705569 9.03244168,5.73857438 C8.93332324,4.01820036 9.41326516,2.48107763 10.3861909,1.40892085 C11.2208725,0.487194232 12.3633429,-0.0105928443 13.6049318,0.000170967758 Z M6.24622541,3.00132768 C6.70741355,3.01158124 7.13671101,3.09360972 7.52185216,3.24228634 C7.70583679,3.31149786 7.85302449,3.4550477 7.93643086,3.64217516 C8.01983722,3.82930263 8.01738409,4.04206399 7.95114963,4.23431823 C7.88491516,4.42657248 7.74753997,4.58037587 7.5684616,4.66753113 C7.38938323,4.75212299 7.18822671,4.76237655 7.00424208,4.69060164 C6.77119488,4.60088299 6.50135076,4.55217858 6.20452223,4.54448841 C5.62558394,4.53167146 5.15458329,4.70854537 4.80869219,5.07767351 C4.34505093,5.56984438 4.11445686,6.40038271 4.15616004,7.41292172 C4.20522261,8.60746142 4.66641075,9.64050756 5.35573982,10.1121713 C5.48084936,10.1967632 5.57652137,10.3172425 5.63294332,10.4582289 C5.66974025,10.5479476 5.97638129,11.352852 5.58388075,12.0987985 C5.54217757,12.1757002 5.48820875,12.2474751 5.42442741,12.3064331 C5.37536484,12.3525741 4.9043642,12.7678433 3.86178464,13.239507 L3.86178464,13.239507 L3.80290956,13.2651409 C3.3392683,13.4753389 2.63522046,13.7906358 2.1200635,14.2828067 C1.57792213,14.8006115 1.38657812,15.3722474 1.51659392,16.0823064 C1.55584398,16.2848142 1.51414079,16.4898854 1.40375002,16.6616325 C1.29335924,16.8333797 1.12654651,16.9487322 0.93274937,16.9871831 C0.886139931,16.9948732 0.839530492,17 0.792921053,17 C0.439670569,17 0.133029523,16.7385342 0.0667950569,16.3745329 C-0.0583144899,15.7029247 -0.00679879415,15.0646406 0.213982759,14.4750609 C0.400420515,13.9880169 0.704608432,13.5394236 1.12409338,13.1395348 C1.82323497,12.4730534 2.69654867,12.0808548 3.21906501,11.8450229 L3.21906501,11.8450229 L3.27794009,11.819389 C3.80045643,11.5835571 4.13898815,11.3707958 4.308254,11.2503164 C4.308254,11.2400629 4.30580088,11.2298093 4.30580088,11.2169924 C3.35398707,10.4249049 2.74806436,9.03554754 2.68428302,7.47956986 C2.62540794,6.03638134 3.00564284,4.79826401 3.75875325,3.99592297 C4.3941135,3.32175142 5.25270842,2.97569378 6.24622541,3.00132768 Z M20.3580275,2.00517131 C21.4144214,1.97782037 22.3299628,2.34432294 23.0029248,3.06638771 C23.8036975,3.92247208 24.2106048,5.2407873 24.1453953,6.78338022 C24.0775774,8.44358217 23.4333075,9.92326793 22.4212561,10.771147 C22.4186477,10.7820874 22.4186477,10.7957629 22.4186477,10.8067032 C22.5986259,10.9325176 22.9585824,11.1622654 23.5141673,11.4138941 L23.5141673,11.4138941 L23.5767684,11.441245 C24.1323534,11.6901385 25.0609366,12.111343 25.8043249,12.8224674 C26.2503579,13.2464069 26.573797,13.7277834 26.7720339,14.2474513 C27.0093965,14.8710527 27.0641725,15.552091 26.9233199,16.2768909 C26.8502853,16.6625391 26.5268462,16.9442538 26.1512395,16.9442538 C26.1016802,16.9442538 26.052121,16.9415187 26.0025618,16.9305783 C25.5773959,16.8430553 25.2982992,16.4109105 25.379159,15.9650902 C25.5174031,15.2074692 25.3139495,14.5975433 24.7374975,14.0450543 C24.1897377,13.5199163 23.4411327,13.1834998 22.9481489,12.9592221 L22.9481489,12.9592221 L22.8855477,12.9318711 C21.80307,12.4422893 21.3126946,12.0156147 21.2240097,11.936297 C21.1561918,11.8733898 21.0988074,11.7995423 21.054465,11.7147544 C20.6371242,10.9188421 20.9631717,10.0600226 21.0022974,9.96429434 C21.0648985,9.81112908 21.1666253,9.68531477 21.2970443,9.59505667 C22.0299991,9.09179941 22.5203745,7.9895566 22.5725421,6.71500287 C22.6168846,5.63464081 22.3716969,4.74847041 21.8787131,4.2233324 C21.5135399,3.82947889 21.0127309,3.63802232 20.3945449,3.65443288 C20.0789309,3.66263816 19.7920091,3.71460495 19.544213,3.81033323 C19.1373057,3.96623358 18.6834476,3.74742607 18.5347699,3.32075144 C18.3860923,2.8940768 18.5947627,2.41817047 19.0016699,2.26227013 C19.4111856,2.10363468 19.8676521,2.01611168 20.3580275,2.00517131 Z" id="形状结合"></path>
</g>
<text id="服务商" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#007E3B">
<tspan x="0" y="33">服务商</tspan>
</text>
</g>
</g>
<g id="编组-7" transform="translate(28.000000, 66.000000)">
<text id="1.发布需求" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#111111">
<tspan x="24.0371094" y="13">1.发布需求</tspan>
</text>
<g id="返-回" transform="translate(94.000000, 17.000000)" fill="#999999" fill-rule="nonzero" opacity="0.546642485">
<g id="编组">
<polygon id="路径" points="9.38022374e-16 10.1750005 0.918749536 11 7 5.53928563 6.95625009 5.5 7 5.46071437 0.918749536 0 0 0.824999533 5.20625562 5.5000043"></polygon>
<polygon id="路径备份" points="9.38022374e-16 140.175 0.918749536 141 7 135.539286 6.95625009 135.5 7 135.460714 0.918749536 130 0 130.825 5.20625562 135.500004"></polygon>
<polygon id="路径备份-3" points="126 183.175 126.91875 184 133 178.539286 132.95625 178.5 133 178.460714 126.91875 173 126 173.825 131.206256 178.500004"></polygon>
<polygon id="路径备份-4" points="126 53.1750005 126.91875 54 133 48.5392856 132.95625 48.5 133 48.4607144 126.91875 43 126 43.8249995 131.206256 48.5000043"></polygon>
<polygon id="路径备份-5" transform="translate(30.500000, 92.500000) scale(-1, 1) translate(-30.500000, -92.500000) " points="27 97.1750005 27.9187495 98 34 92.5392856 33.9562501 92.5 34 92.4607144 27.9187495 87 27 87.8249995 32.2062556 92.5000043"></polygon>
<polygon id="路径备份-6" transform="translate(30.500000, 222.500000) scale(-1, 1) translate(-30.500000, -222.500000) " points="27 227.175 27.9187495 228 34 222.539286 33.9562501 222.5 34 222.460714 27.9187495 217 27 217.825 32.2062556 222.500004"></polygon>
</g>
</g>
<line x1="0" y1="22.5" x2="96" y2="22.5" id="直线-2" stroke="#999999" opacity="0.548990885" stroke-linecap="square" stroke-dasharray="3"></line>
</g>
<g id="编组-7备份-3" transform="translate(28.000000, 196.000000)">
<text id="4.用户否决方案" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#111111">
<tspan x="11.0371094" y="13">4.用户否决方案</tspan>
</text>
<line x1="0" y1="22.5" x2="96" y2="22.5" id="直线-2" stroke="#999999" opacity="0.548990885" stroke-linecap="square" stroke-dasharray="3"></line>
</g>
<g id="编组-7备份" transform="translate(158.000000, 109.000000)">
<text id="2.通知服务商" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#111111">
<tspan x="4.03710938" y="13">2.通知服务商</tspan>
</text>
<line x1="0" y1="22.5" x2="91" y2="22.5" id="直线-2" stroke="#999999" opacity="0.548990885" stroke-linecap="square" stroke-dasharray="3"></line>
</g>
<g id="编组-7备份-2" transform="translate(155.000000, 153.000000)">
<text id="3.提交方案" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#111111">
<tspan x="13.0371094" y="13">3.提交方案</tspan>
</text>
<line x1="0" y1="22.5" x2="96" y2="22.5" id="直线-2" stroke="#999999" opacity="0.548990885" stroke-linecap="square" stroke-dasharray="3"></line>
</g>
<g id="编组-7备份-5" transform="translate(158.000000, 239.000000)">
<text id="5.通知服务商" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#111111">
<tspan x="3.03710938" y="13">5.通知服务商</tspan>
</text>
<line x1="0" y1="22.5" x2="91" y2="22.5" id="直线-2" stroke="#999999" opacity="0.548990885" stroke-linecap="square" stroke-dasharray="3"></line>
</g>
<g id="编组-7备份-4" transform="translate(142.000000, 283.000000)">
<text id="6.关闭需求或修改方案" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#111111">
<tspan x="0.037109375" y="13">6.关闭需求或修改方案</tspan>
</text>
<line x1="13" y1="22.5" x2="109" y2="22.5" id="直线-2" stroke="#999999" opacity="0.548990885" stroke-linecap="square" stroke-dasharray="3"></line>
</g>
</g>
<text id="售前异常流程" font-family="PingFangSC-Medium, PingFang SC" font-size="14" font-weight="400" fill="#000000">
<tspan x="108" y="23">售前异常流程</tspan>
</text>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<svg width="300px" height="488px" viewBox="0 0 300 488" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>3流程</title>
<g id="工商交付流程" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="02-一级列表页备份-4" transform="translate(-910.000000, -238.000000)">
<g id="3流程" transform="translate(910.000000, 238.000000)">
<rect id="矩形" fill="#D8D8D8" opacity="0" x="0" y="0" width="300" height="488"></rect>
<text id="售后流程" font-family="PingFangSC-Medium, PingFang SC" font-size="14" font-weight="400" fill="#000000">
<tspan x="122" y="23">售后流程</tspan>
</text>
<g id="编组备份-3" transform="translate(12.000000, 58.000000)">
<g id="编组-6">
<line x1="12.5" y1="47" x2="12.5" y2="387" id="直线" stroke="#C07400" stroke-linecap="square" stroke-dasharray="3"></line>
<g id="编组-3" fill="#C07400">
<text id="用户" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal">
<tspan x="0" y="33">用户</tspan>
</text>
<path d="M18.03198,12.9099904 C16.9781945,12.1496343 15.9009336,11.7749265 15.6766129,11.703814 C14.5497928,11.266199 14.0646341,10.9024315 13.892481,10.7437961 C13.9003062,10.710975 13.9133481,10.6699485 13.9289983,10.626187 C14.5524011,10.1557509 15.0845107,9.48018273 15.4679425,8.66238968 C15.8800666,7.78989475 16.1200375,6.77517494 16.1617716,5.72216382 C16.2321979,4.00999508 15.7444308,2.48381273 14.7871553,1.42533141 C13.9655157,0.517280264 12.8360871,0.0112879063 11.6049318,0.000170967758 C10.3633429,-0.0105928443 9.22087248,0.487194232 8.38619089,1.40892085 C7.41326516,2.48107763 6.93332324,4.01820036 7.03244168,5.73857438 C7.09243442,6.79705569 7.3428389,7.8117755 7.75757131,8.67606515 C8.14882831,9.49112311 8.6835462,10.1666913 9.30694902,10.6316572 C9.31999092,10.6726836 9.33303282,10.710975 9.34085796,10.741061 C9.1660965,10.8996964 8.6835462,11.2634639 7.55672605,11.7010789 C7.33501376,11.7749265 6.25514445,12.1468992 5.20135894,12.9072553 C3.56068793,14.0888158 2.81469126,15.6040578 3.03901194,17.2888756 C3.06770412,17.5076831 3.17725607,17.6991397 3.34419239,17.8331593 C3.48243653,17.942563 3.64676447,18 3.81630917,18 C3.85282649,18 3.88934381,17.9972649 3.92586113,17.9917947 C4.13453153,17.9617087 4.31711812,17.8468347 4.44492874,17.6717887 C4.57013098,17.4967427 4.62490696,17.2806703 4.59621478,17.0618628 C4.25190862,14.5072852 7.99232551,13.2874333 8.02884283,13.2737579 L8.07579367,13.2573473 C10.0190368,12.5079316 10.6033139,11.8268932 10.7780753,11.4877416 C11.1223815,10.8367893 10.7911172,10.0217313 10.632006,9.70172533 C10.5667965,9.57044083 10.4676781,9.45830198 10.3476926,9.38171935 C9.36694176,8.74444249 8.6965881,7.30851823 8.60007804,5.63737591 C8.5270434,4.37923275 8.85569928,3.27972503 9.52344456,2.54398479 C10.0633792,1.95046943 10.7780753,1.63866873 11.5892815,1.64687401 C12.403096,1.6550793 13.1151838,1.96961509 13.6472933,2.56039535 C14.3098218,3.2906654 14.6436944,4.39017312 14.5941352,5.65378647 C14.5263173,7.30031295 13.871614,8.72803193 12.883038,9.37898426 C12.7604441,9.46103708 12.6613257,9.57317592 12.5961162,9.70993061 C12.4396134,10.0299366 12.1135659,10.8422595 12.4526553,11.4877416 C12.6274167,11.8268932 13.2116938,12.5079316 15.1549369,13.2573473 C15.1705872,13.2628175 15.1862375,13.2682877 15.1992794,13.2737579 C15.2384051,13.2846982 18.978822,14.5045501 18.6371242,17.0618628 C18.608432,17.2806703 18.6605996,17.4967427 18.7884102,17.6717887 C18.9136125,17.8468347 19.0988074,17.9617087 19.3074778,17.9917947 C19.3439952,17.9972649 19.3805125,18 19.4170298,18 C19.8056784,18 20.1395511,17.6936695 20.194327,17.2888756 C20.4186477,15.6067929 19.672651,14.094286 18.03198,12.9099904 L18.03198,12.9099904 Z" id="形状" fill-rule="nonzero"></path>
</g>
</g>
<g id="编组-5" transform="translate(9.000000, 0.000000)">
<g id="编组-3备份">
<line x1="129.5" y1="47" x2="129.5" y2="387" id="直线备份" stroke="#006EFF" stroke-linecap="square" stroke-dasharray="3"></line>
<circle id="椭圆形" stroke="#006EFF" fill="#FFFFFF" cx="129.5" cy="88.5" r="3.5"></circle>
<circle id="椭圆形" stroke="#006EFF" fill="#FFFFFF" cx="129.5" cy="261.5" r="3.5"></circle>
<circle id="椭圆形" stroke="#006EFF" fill="#006EFF" cx="129.5" cy="390.5" r="3.5"></circle>
<circle id="椭圆形备份-2" stroke="#C07400" fill="#C07400" cx="3.5" cy="390.5" r="3.5"></circle>
<circle id="椭圆形备份" stroke="#007E3B" fill="#007E3B" cx="255.5" cy="390.5" r="3.5"></circle>
<path d="M137.960663,14.0010692 C137.524207,14.4377286 136.745397,14.9336063 135.466827,14.9774365 C134.875875,14.9976658 134.185177,15 133.869341,15 L127,15 C129.499225,12.5466328 131.679536,10.4069929 131.926935,10.1641546 C132.153289,9.94189144 132.662972,9.4491259 133.102507,9.04912131 C134.067637,8.17104771 134.936185,7.99434371 135.550576,8.00013587 C136.513311,8.00904023 137.388617,8.40627841 138.014215,9.04773811 C139.353095,10.4305938 139.321271,12.6401718 137.960663,14.0010692 M139.408687,7.73116131 C138.40405,6.72825433 137.003803,6.09644834 135.447239,6.09644834 C134.101666,6.09612051 132.943138,6.55032583 131.931468,7.35645421 C131.49073,7.70804945 131.028391,8.12881634 130.446238,8.68202563 C130.253248,8.86577307 126.439996,12.4874499 123.936147,14.8655122 C123.587593,14.8642829 123.086739,14.8593655 122.642652,14.8447771 C121.391272,14.803225 120.629107,14.33312 120.201849,13.9191555 C118.870259,12.6289895 118.839112,10.5342523 120.14952,9.22326921 C120.76173,8.61514877 121.618841,8.23855667 122.560767,8.23011511 C123.151125,8.22782031 123.952474,8.39566811 124.85756,9.13041201 L124.857728,9.13033005 C125.289925,9.48102376 126.249434,10.3066579 126.670496,10.6783326 C126.69193,10.6971827 126.717718,10.6989038 126.742836,10.6787424 L128.228316,9.26006787 C128.253937,9.23564471 128.25243,9.20269802 128.22706,9.18032378 C127.512787,8.54818996 126.500028,7.66371075 125.890414,7.21942222 C125.249904,6.75030074 124.559409,6.41657212 123.811143,6.24061058 C123.818762,6.24224972 123.826716,6.24323321 123.834754,6.24479039 C124.339124,3.88746315 126.468212,2.13653526 128.999858,2.13653526 C131.108601,2.13653526 132.958377,3.38129714 133.792546,5.14550206 C133.80544,5.17344937 133.827712,5.18254659 133.850569,5.17631787 C134.477766,5.00756854 135.229633,4.9094661 135.956046,4.96208245 C136.026628,4.96724573 136.054174,4.92798836 136.031317,4.86496348 C135.006082,2.03105669 132.24628,0 128.999858,0 C125.27611,0 122.190276,2.68040146 121.6314,6.17176676 C121.633075,6.17176676 121.634749,6.17209459 121.636424,6.17176676 C120.45035,6.36625056 119.394305,6.92954055 118.591281,7.73116131 C116.439084,9.88425187 116.47224,13.3247219 118.677185,15.444374 C119.562428,16.2953329 120.635052,16.7583076 121.779011,16.9148453 L121.778676,16.9148453 C122.217823,16.9761491 122.821744,16.9943435 123.360693,16.9976218 C123.86523,17.0009001 133.492051,17 133.895028,17 C134.706257,17 135.233986,16.999261 135.801068,16.9586103 C137.101261,16.8655072 138.329784,16.3989264 139.322783,15.444374 C141.527728,13.3247219 141.560967,9.88425187 139.408687,7.73116131" id="Fill-1" fill="#006EFF"></path>
<text id="腾讯云" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#006EFF">
<tspan x="111" y="33">腾讯云</tspan>
</text>
</g>
</g>
<g id="编组-4" transform="translate(135.000000, 0.000000)">
<g id="编组-3备份-2">
<line x1="129.5" y1="47" x2="129.5" y2="387" id="直线备份-2" stroke="#007E3B" stroke-linecap="square" stroke-dasharray="3"></line>
<circle id="椭圆形" stroke="#007E3B" fill="#FFFFFF" cx="129.5" cy="175.5" r="3.5"></circle>
<circle id="椭圆形" stroke="#006EFF" fill="#FFFFFF" cx="3.5" cy="131.5" r="3.5"></circle>
<circle id="椭圆形" stroke="#006EFF" fill="#FFFFFF" cx="3.5" cy="218.5" r="3.5"></circle>
<g id="服务商" transform="translate(115.000000, 0.000000)" fill="#007E3B" fill-rule="nonzero">
<path d="M13.6049318,0.000170967758 C14.8360871,0.0112879063 15.9655157,0.517280264 16.7871553,1.42533141 C17.7444308,2.48381273 18.2321979,4.00999508 18.1617716,5.72216382 C18.1200375,6.77517494 17.8800666,7.78989475 17.4679425,8.66238968 C17.0845107,9.48018273 16.5524011,10.1557509 15.9289983,10.626187 C15.9133481,10.6699485 15.9003062,10.710975 15.892481,10.7437961 C16.0646341,10.9024315 16.5497928,11.266199 17.6766129,11.703814 C17.9009336,11.7749265 18.9781945,12.1496343 20.03198,12.9099904 C21.672651,14.094286 22.4186477,15.6067929 22.194327,17.2888756 C22.1395511,17.6936695 21.8056784,18 21.4170298,18 C21.3805125,18 21.3439952,17.9972649 21.3074778,17.9917947 C21.0988074,17.9617087 20.9136125,17.8468347 20.7884102,17.6717887 C20.6605996,17.4967427 20.608432,17.2806703 20.6371242,17.0618628 C20.978822,14.5045501 17.2384051,13.2846982 17.1992794,13.2737579 C17.1862375,13.2682877 17.1705872,13.2628175 17.1549369,13.2573473 C15.2116938,12.5079316 14.6274167,11.8268932 14.4526553,11.4877416 C14.1135659,10.8422595 14.4396134,10.0299366 14.5961162,9.70993061 C14.6613257,9.57317592 14.7604441,9.46103708 14.883038,9.37898426 C15.871614,8.72803193 16.5263173,7.30031295 16.5941352,5.65378647 C16.6436944,4.39017312 16.3098218,3.2906654 15.6472933,2.56039535 C15.1151838,1.96961509 14.403096,1.6550793 13.5892815,1.64687401 C12.7780753,1.63866873 12.0633792,1.95046943 11.5234446,2.54398479 C10.8556993,3.27972503 10.5270434,4.37923275 10.600078,5.63737591 C10.6965881,7.30851823 11.3669418,8.74444249 12.3476926,9.38171935 C12.4676781,9.45830198 12.5667965,9.57044083 12.632006,9.70172533 C12.7911172,10.0217313 13.1223815,10.8367893 12.7780753,11.4877416 C12.6033139,11.8268932 12.0190368,12.5079316 10.0757937,13.2573473 L10.0757937,13.2573473 L10.0288428,13.2737579 C9.99232551,13.2874333 6.25190862,14.5072852 6.59621478,17.0618628 C6.62490696,17.2806703 6.57013098,17.4967427 6.44492874,17.6717887 C6.31711812,17.8468347 6.13453153,17.9617087 5.92586113,17.9917947 C5.88934381,17.9972649 5.85282649,18 5.81630917,18 C5.64676447,18 5.48243653,17.942563 5.34419239,17.8331593 C5.17725607,17.6991397 5.06770412,17.5076831 5.03901194,17.2888756 C4.81469126,15.6040578 5.56068793,14.0888158 7.20135894,12.9072553 C8.25514445,12.1468992 9.33501376,11.7749265 9.55672605,11.7010789 C10.6835462,11.2634639 11.1660965,10.8996964 11.340858,10.741061 C11.3330328,10.710975 11.3199909,10.6726836 11.306949,10.6316572 C10.6835462,10.1666913 10.1488283,9.49112311 9.75757131,8.67606515 C9.3428389,7.8117755 9.09243442,6.79705569 9.03244168,5.73857438 C8.93332324,4.01820036 9.41326516,2.48107763 10.3861909,1.40892085 C11.2208725,0.487194232 12.3633429,-0.0105928443 13.6049318,0.000170967758 Z M6.24622541,3.00132768 C6.70741355,3.01158124 7.13671101,3.09360972 7.52185216,3.24228634 C7.70583679,3.31149786 7.85302449,3.4550477 7.93643086,3.64217516 C8.01983722,3.82930263 8.01738409,4.04206399 7.95114963,4.23431823 C7.88491516,4.42657248 7.74753997,4.58037587 7.5684616,4.66753113 C7.38938323,4.75212299 7.18822671,4.76237655 7.00424208,4.69060164 C6.77119488,4.60088299 6.50135076,4.55217858 6.20452223,4.54448841 C5.62558394,4.53167146 5.15458329,4.70854537 4.80869219,5.07767351 C4.34505093,5.56984438 4.11445686,6.40038271 4.15616004,7.41292172 C4.20522261,8.60746142 4.66641075,9.64050756 5.35573982,10.1121713 C5.48084936,10.1967632 5.57652137,10.3172425 5.63294332,10.4582289 C5.66974025,10.5479476 5.97638129,11.352852 5.58388075,12.0987985 C5.54217757,12.1757002 5.48820875,12.2474751 5.42442741,12.3064331 C5.37536484,12.3525741 4.9043642,12.7678433 3.86178464,13.239507 L3.86178464,13.239507 L3.80290956,13.2651409 C3.3392683,13.4753389 2.63522046,13.7906358 2.1200635,14.2828067 C1.57792213,14.8006115 1.38657812,15.3722474 1.51659392,16.0823064 C1.55584398,16.2848142 1.51414079,16.4898854 1.40375002,16.6616325 C1.29335924,16.8333797 1.12654651,16.9487322 0.93274937,16.9871831 C0.886139931,16.9948732 0.839530492,17 0.792921053,17 C0.439670569,17 0.133029523,16.7385342 0.0667950569,16.3745329 C-0.0583144899,15.7029247 -0.00679879415,15.0646406 0.213982759,14.4750609 C0.400420515,13.9880169 0.704608432,13.5394236 1.12409338,13.1395348 C1.82323497,12.4730534 2.69654867,12.0808548 3.21906501,11.8450229 L3.21906501,11.8450229 L3.27794009,11.819389 C3.80045643,11.5835571 4.13898815,11.3707958 4.308254,11.2503164 C4.308254,11.2400629 4.30580088,11.2298093 4.30580088,11.2169924 C3.35398707,10.4249049 2.74806436,9.03554754 2.68428302,7.47956986 C2.62540794,6.03638134 3.00564284,4.79826401 3.75875325,3.99592297 C4.3941135,3.32175142 5.25270842,2.97569378 6.24622541,3.00132768 Z M20.3580275,2.00517131 C21.4144214,1.97782037 22.3299628,2.34432294 23.0029248,3.06638771 C23.8036975,3.92247208 24.2106048,5.2407873 24.1453953,6.78338022 C24.0775774,8.44358217 23.4333075,9.92326793 22.4212561,10.771147 C22.4186477,10.7820874 22.4186477,10.7957629 22.4186477,10.8067032 C22.5986259,10.9325176 22.9585824,11.1622654 23.5141673,11.4138941 L23.5141673,11.4138941 L23.5767684,11.441245 C24.1323534,11.6901385 25.0609366,12.111343 25.8043249,12.8224674 C26.2503579,13.2464069 26.573797,13.7277834 26.7720339,14.2474513 C27.0093965,14.8710527 27.0641725,15.552091 26.9233199,16.2768909 C26.8502853,16.6625391 26.5268462,16.9442538 26.1512395,16.9442538 C26.1016802,16.9442538 26.052121,16.9415187 26.0025618,16.9305783 C25.5773959,16.8430553 25.2982992,16.4109105 25.379159,15.9650902 C25.5174031,15.2074692 25.3139495,14.5975433 24.7374975,14.0450543 C24.1897377,13.5199163 23.4411327,13.1834998 22.9481489,12.9592221 L22.9481489,12.9592221 L22.8855477,12.9318711 C21.80307,12.4422893 21.3126946,12.0156147 21.2240097,11.936297 C21.1561918,11.8733898 21.0988074,11.7995423 21.054465,11.7147544 C20.6371242,10.9188421 20.9631717,10.0600226 21.0022974,9.96429434 C21.0648985,9.81112908 21.1666253,9.68531477 21.2970443,9.59505667 C22.0299991,9.09179941 22.5203745,7.9895566 22.5725421,6.71500287 C22.6168846,5.63464081 22.3716969,4.74847041 21.8787131,4.2233324 C21.5135399,3.82947889 21.0127309,3.63802232 20.3945449,3.65443288 C20.0789309,3.66263816 19.7920091,3.71460495 19.544213,3.81033323 C19.1373057,3.96623358 18.6834476,3.74742607 18.5347699,3.32075144 C18.3860923,2.8940768 18.5947627,2.41817047 19.0016699,2.26227013 C19.4111856,2.10363468 19.8676521,2.01611168 20.3580275,2.00517131 Z" id="形状结合"></path>
</g>
<text id="服务商" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#007E3B">
<tspan x="111" y="33">服务商</tspan>
</text>
</g>
</g>
<g id="编组-7" transform="translate(28.000000, 66.000000)">
<text id="1.下单购买产品" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#111111">
<tspan x="7.03710938" y="13">1.下单购买产品</tspan>
</text>
<g id="返-回" transform="translate(94.000000, 17.000000)" fill="#999999" fill-rule="nonzero" opacity="0.546642485">
<g id="编组">
<polygon id="路径" points="9.38022374e-16 10.1750005 0.918749536 11 7 5.53928563 6.95625009 5.5 7 5.46071437 0.918749536 0 0 0.824999533 5.20625562 5.5000043"></polygon>
<polygon id="路径备份" points="9.38022374e-16 183.175 0.918749536 184 7 178.539286 6.95625009 178.5 7 178.460714 0.918749536 173 0 173.825 5.20625562 178.500004"></polygon>
<polygon id="路径备份-3" transform="translate(33.500000, 135.500000) scale(-1, 1) translate(-33.500000, -135.500000) " points="30 140.175 30.9187495 141 37 135.539286 36.9562501 135.5 37 135.460714 30.9187495 130 30 130.825 35.2062556 135.500004"></polygon>
<polygon id="路径备份-4" points="9.38022374e-16 53.1750005 0.918749536 54 7 48.5392856 6.95625009 48.5 7 48.4607144 0.918749536 43 0 43.8249995 5.20625562 48.5000043"></polygon>
<polygon id="路径备份-5" points="126 97.1750005 126.91875 98 133 92.5392856 132.95625 92.5 133 92.4607144 126.91875 87 126 87.8249995 131.206256 92.5000043"></polygon>
</g>
</g>
<line x1="0" y1="22.5" x2="96" y2="22.5" id="直线-2" stroke="#999999" opacity="0.548990885" stroke-linecap="square" stroke-dasharray="3"></line>
</g>
<g id="编组-7备份-3" transform="translate(28.000000, 239.000000)">
<text id="5.查看交付进度" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#111111">
<tspan x="6.03710938" y="13">5.查看交付进度</tspan>
</text>
<line x1="0" y1="22.5" x2="96" y2="22.5" id="直线-2" stroke="#999999" opacity="0.548990885" stroke-linecap="square" stroke-dasharray="3"></line>
</g>
<g id="编组-7备份" transform="translate(31.000000, 109.000000)">
<text id="2.支付成功" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#111111">
<tspan x="11.0371094" y="13">2.支付成功</tspan>
</text>
<line x1="0" y1="22.5" x2="91" y2="22.5" id="直线-2" stroke="#999999" opacity="0.548990885" stroke-linecap="square" stroke-dasharray="3"></line>
</g>
<g id="编组-7备份-2" transform="translate(154.000000, 153.000000)">
<text id="3.通知服务商" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#111111">
<tspan x="8.03710938" y="13">3.通知服务商</tspan>
</text>
<line x1="0" y1="22.5" x2="96" y2="22.5" id="直线-2" stroke="#999999" opacity="0.548990885" stroke-linecap="square" stroke-dasharray="3"></line>
</g>
<g id="编组-7备份-5" transform="translate(155.000000, 196.000000)">
<text id="4.提交交付信息" font-family="MicrosoftYaHei, Microsoft YaHei" font-size="12" font-weight="normal" fill="#111111">
<tspan x="0.037109375" y="13">4.提交交付信息</tspan>
</text>
<line x1="2" y1="22.5" x2="93" y2="22.5" id="直线-2" stroke="#999999" opacity="0.548990885" stroke-linecap="square" stroke-dasharray="3"></line>
</g>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<svg id="11567813-e781-4e7f-9d62-924af5cdcf5c" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="883.34" height="785.3" viewBox="0 0 883.34 785.3"><defs><linearGradient id="de64225e-aed0-4729-9589-fefa50377364" x1="586.34" y1="777.6" x2="586.34" y2="296.43" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity="0.25"/><stop offset="0.54" stop-color="gray" stop-opacity="0.12"/><stop offset="1" stop-color="gray" stop-opacity="0.1"/></linearGradient><linearGradient id="c2d29fed-0e3c-4665-9fc2-6bc8bc700b9c" x1="665.58" y1="818.95" x2="665.58" y2="130.43" gradientTransform="matrix(-1, 0, 0, 1, 1038, 0)" xlink:href="#de64225e-aed0-4729-9589-fefa50377364"/><linearGradient id="c8cc5a91-18e5-403f-9b97-91f48ba2f890" x1="832.33" y1="380.69" x2="1046.36" y2="380.69" gradientTransform="matrix(-1, 0, 0, 1, 1874, 0)" xlink:href="#de64225e-aed0-4729-9589-fefa50377364"/></defs><title>tasting</title><ellipse cx="428.11" cy="662.98" rx="428.11" ry="122.32" fill="#f5f5f5"/><path d="M818.56,450.17s-53,37.48-39,109-74.44,171.26-74.44,171.26.76,0,2.18,0c95.73-.47,160.12-98.82,122-186.63C815.15,511.16,805.28,474,818.56,450.17Z" transform="translate(-158.33 -57.35)" fill="#348eed"/><path d="M818.56,450.17s-35,51.08-17.27,100.7-25.15,173-96.14,179.56" transform="translate(-158.33 -57.35)" fill="none" stroke="#535461" stroke-miterlimit="10"/><path d="M867.76,647s-50.21-17.07-62.85,28.39S696.6,711,696.6,711s.54.53,1.57,1.48c69.29,64.64,147.12,58.84,147.54-11.15C845.87,675.32,850.57,650,867.76,647Z" transform="translate(-158.33 -57.35)" fill="#348eed"/><path d="M867.76,647s-50.21-17.07-62.85,28.39S696.6,711,696.6,711s.54.53,1.57,1.48c69.29,64.64,147.12,58.84,147.54-11.15C845.87,675.32,850.57,650,867.76,647Z" transform="translate(-158.33 -57.35)" fill="#f5f5f5" opacity="0.2"/><path d="M867.76,647s-41.58,1.93-44.54,38.92S750,755.8,696.6,711" transform="translate(-158.33 -57.35)" fill="none" stroke="#535461" stroke-miterlimit="10"/><path d="M779.61,543.22c3-15,2.31-36.85-22.23-47.49,13.12-21.09,6.95-36-4.91-41.29-.08-5.5-1.52-16.66-11.18-22.65,1.28-10.38,3.36-51.64-43.26-56.26-5.47-9.44-22.59-35-50.48-42.08v-37c-6.72,14.11-49,22.17-49,22.17-48.46,6.77-59.33,34.15-61.78,46.11-6.24.19-11.73,1-14.82,2.94-10.16,6.35-82.68,25.3-77,75.54-1,.34-1.94.68-2.91,1,0,0-39.67,31.65-29,56.82l-4,.29s-23,14.22-15.93,42.24a8.45,8.45,0,0,0-2,7.69l54.69,182.29A5.86,5.86,0,0,0,448,736.7c2.47,1.72,7.6,5.15,15.08,9.31l.06.29.33-.07a245.79,245.79,0,0,0,26.32,12.55l0,.21.33-.06c6.34,2.57,13.29,5.09,20.8,7.41l0,.16.33,0c6.95,2.13,14.37,4.09,22.22,5.75v.1l.33,0c7.37,1.55,15.13,2.83,23.23,3.75v0h.31a246.37,246.37,0,0,0,30,1.52v0h.67v0a246.48,246.48,0,0,0,28.06-2h.33v-.06q11.29-1.46,23.09-4.09l-.08.78.67.07.1-1q11.77-2.68,24-6.69l.33,0,0-.16q10.16-3.37,20.59-7.74l.33.06,0-.22q12.09-5.11,24.5-11.71l.33.07.06-.28q7-3.75,14.11-8a5.88,5.88,0,0,0,2.6-3.36l54.51-182.43a8.46,8.46,0,0,0-2-7.67Z" transform="translate(-158.33 -57.35)" fill="url(#de64225e-aed0-4729-9589-fefa50377364)"/><path d="M695.81,384.81s-24.6-50.5-71.22-45.32,3.24,53.09,3.24,53.09S684.81,397.11,695.81,384.81Z" transform="translate(-158.33 -57.35)" fill="#348eed"/><path d="M695.81,384.81s-24.6-50.5-71.22-45.32,3.24,53.09,3.24,53.09S684.81,397.11,695.81,384.81Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M537.84,376.39s0-.66.12-1.82c.83-8.09,7.46-40.67,60.09-48,0,0,40.79-7.77,47.26-21.37v41.44s-8.42,29.14-50.5,38.85S537.84,376.39,537.84,376.39Z" transform="translate(-158.33 -57.35)" fill="#348eed"/><path d="M415.47,502.64S385,521.42,406.4,558.32s361.28,0,361.28,0,22-45.32-17.48-61.51S415.47,502.64,415.47,502.64Z" transform="translate(-158.33 -57.35)" fill="#784f69"/><path d="M746.75,458.74c-.08-5.3-1.47-16-10.78-21.82,1.23-10,3.25-49.77-41.69-54.22-5.28-9.1-21.76-33.78-48.65-40.55V306.46c-6.47,13.6-47.26,21.37-47.26,21.37-46.7,6.53-57.18,32.91-59.53,44.43-6,.18-11.3,1-14.28,2.83-9.79,6.12-79.68,24.38-74.25,72.8-.94.32-1.87.66-2.8,1,0,0-55.1,44-15.15,68.31h0s18.39,35.29,72.13,8.09l.17-.11c20.24,5.81,74.47,18,106.66-6.37l2.31-1.75c12.8,7.63,43.13,21.58,68.91,1.75l.22-.17c10,9.41,30.35,21.39,54.81-3.07C766.86,486.31,761.17,465.2,746.75,458.74Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M675.74,509.76s26.55,39.49,61.51,4.53,20.07-58.27,0-58.92S675.74,509.76,675.74,509.76Z" transform="translate(-158.33 -57.35)" fill="#348eed"/><path d="M675.74,509.76s26.55,39.49,61.51,4.53,20.07-58.27,0-58.92S675.74,509.76,675.74,509.76Z" transform="translate(-158.33 -57.35)" opacity="0.15"/><path d="M746.32,460.56s6.47-55-77-12.95-62.16,64.1-62.16,64.1,41.44,31.73,75.1,5.83S736.6,483.87,746.32,460.56Z" transform="translate(-158.33 -57.35)" fill="#348eed"/><path d="M746.32,460.56s6.47-55-77-12.95-62.16,64.1-62.16,64.1,41.44,31.73,75.1,5.83S736.6,483.87,746.32,460.56Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M682.22,443.72s-31.73-22-80.28,0S496.4,521.42,496.4,521.42,570.86,548,611,517.53,680.28,464.44,682.22,443.72Z" transform="translate(-158.33 -57.35)" fill="#348eed"/><path d="M682.22,443.72s-31.73-22-80.28,0S496.4,521.42,496.4,521.42,570.86,548,611,517.53,680.28,464.44,682.22,443.72Z" transform="translate(-158.33 -57.35)" opacity="0.07"/><path d="M616.83,440.49s-64.75-9.06-94.53,9.06S432,515.92,432,515.92s18.39,35.29,72.13,8.09C504.17,524,615.53,454.73,616.83,440.49Z" transform="translate(-158.33 -57.35)" fill="#348eed"/><path d="M616.83,440.49s-64.75-9.06-94.53,9.06S432,515.92,432,515.92s18.39,35.29,72.13,8.09C504.17,524,615.53,454.73,616.83,440.49Z" transform="translate(-158.33 -57.35)" opacity="0.03"/><path d="M447.19,447.61s-57.62,46-12.3,69.93c0,0,95.82-62.8,97.77-69.93C532.66,447.61,488,432.07,447.19,447.61Z" transform="translate(-158.33 -57.35)" fill="#348eed"/><path d="M572.8,373.8s-38.2-6.47-48.56,0-88.05,26.55-72.52,81.58L475,447S519.71,390.63,572.8,373.8Z" transform="translate(-158.33 -57.35)" fill="#348eed"/><path d="M572.8,373.8s-38.2-6.47-48.56,0-88.05,26.55-72.52,81.58L475,447S519.71,390.63,572.8,373.8Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M636.25,382.22s-27.19-25.25-87.41-1.94-80.28,65.39-80.28,65.39l90.32,6.8S609.7,379.63,636.25,382.22Z" transform="translate(-158.33 -57.35)" fill="#348eed"/><path d="M636.25,382.22s-27.19-25.25-87.41-1.94-80.28,65.39-80.28,65.39l90.32,6.8S609.7,379.63,636.25,382.22Z" transform="translate(-158.33 -57.35)" opacity="0.07"/><path d="M678.33,385.45s-43.38-14.24-77,5.18-46,57.62-46,57.62l53.74-2.59S651.14,379.63,678.33,385.45Z" transform="translate(-158.33 -57.35)" fill="#348eed"/><path d="M678.33,385.45s-43.38-14.24-77,5.18-46,57.62-46,57.62l53.74-2.59S651.14,379.63,678.33,385.45Z" transform="translate(-158.33 -57.35)" opacity="0.03"/><path d="M735.31,437.9s14.89-75.75-83.52-52.44c0,0-55.93,49.21-40.26,62.8S735.31,437.9,735.31,437.9Z" transform="translate(-158.33 -57.35)" fill="#348eed"/><path d="M398.14,549.47l52.7,175.67a5.65,5.65,0,0,0,2.17,3c14.71,10.29,127.89,83.3,266.49,0a5.67,5.67,0,0,0,2.5-3.24l52.53-175.8a5.67,5.67,0,0,0-6.81-7.12l-22.82,5.7a5.67,5.67,0,0,1-2.4.08l-21.45-4a5.67,5.67,0,0,0-3.7.57l-25.46,13.58a5.67,5.67,0,0,1-4,.5L660.5,551.6a5.67,5.67,0,0,0-3.14.11l-31.81,10.41a5.67,5.67,0,0,1-4.35-.34L600.13,551a5.67,5.67,0,0,0-4.31-.36l-27.17,8.67a5.67,5.67,0,0,1-2.12.25l-26.16-1.83a5.67,5.67,0,0,1-1.16-.2l-20.76-5.93a5.67,5.67,0,0,0-2.69-.1L487,557.34a5.67,5.67,0,0,1-3.22-.28l-28-11.09a5.67,5.67,0,0,0-3.09-.31l-22.29,4a5.67,5.67,0,0,1-2.7-.17l-22.46-7.06A5.67,5.67,0,0,0,398.14,549.47Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M398.14,550.76l52.7,175.67a5.65,5.65,0,0,0,2.17,3c14.71,10.29,127.89,83.3,266.49,0a5.67,5.67,0,0,0,2.5-3.24l52.53-175.8a5.67,5.67,0,0,0-6.81-7.12L744.92,549a5.67,5.67,0,0,1-2.4.08l-21.45-4a5.67,5.67,0,0,0-3.7.57l-25.46,13.58a5.67,5.67,0,0,1-4,.5l-27.38-6.84a5.67,5.67,0,0,0-3.14.11l-31.81,10.41a5.67,5.67,0,0,1-4.35-.34l-21.07-10.8a5.67,5.67,0,0,0-4.31-.36l-27.17,8.67a5.67,5.67,0,0,1-2.12.25L540.37,559a5.67,5.67,0,0,1-1.16-.2l-20.76-5.93a5.67,5.67,0,0,0-2.69-.1L487,558.63a5.67,5.67,0,0,1-3.22-.28l-28-11.09a5.67,5.67,0,0,0-3.09-.31l-22.29,4a5.67,5.67,0,0,1-2.7-.17l-22.46-7.06A5.67,5.67,0,0,0,398.14,550.76Z" transform="translate(-158.33 -57.35)" fill="#4d4981"/><polygon points="297.62 430.78 292.11 428.86 289.02 423.91 302.76 406.71 308.27 408.63 311.36 413.58 297.62 430.78" fill="#fff" opacity="0.5"/><polygon points="558.55 459.92 553.03 458 549.95 453.05 563.68 435.85 569.19 437.76 572.28 442.71 558.55 459.92" fill="#fff" opacity="0.5"/><polygon points="443.95 366.03 438.44 364.12 435.35 359.17 449.08 341.96 454.6 343.88 457.68 348.83 443.95 366.03" fill="#fff" opacity="0.5"/><polygon points="474.88 429.29 469.55 431.65 463.91 430.15 462.18 408.2 467.51 405.84 473.15 407.34 474.88 429.29" fill="#fff" opacity="0.5"/><polygon points="385.08 375.41 381.4 379.94 375.69 381.15 364.21 362.37 367.9 357.84 373.61 356.63 385.08 375.41" fill="#fff" opacity="0.5"/><polygon points="378.61 428.5 374.92 433.03 369.22 434.24 357.74 415.46 361.42 410.93 367.13 409.72 378.61 428.5" fill="#fff" opacity="0.5"/><polygon points="536.96 433.67 532.73 437.69 526.91 438.16 517.93 418.06 522.17 414.04 527.98 413.57 536.96 433.67" fill="#fff" opacity="0.5"/><polygon points="508.11 364.79 509.54 359.13 514.2 355.63 532.54 367.81 531.11 373.47 526.45 376.98 508.11 364.79" fill="#fff" opacity="0.5"/><polygon points="313.16 373.16 307.65 371.24 304.56 366.29 318.3 349.09 323.81 351 326.9 355.95 313.16 373.16" fill="#fd6f8d" opacity="0.5"/><polygon points="382.54 340.82 381.19 335.15 383.71 329.88 405.6 332.21 406.95 337.89 404.43 343.16 382.54 340.82" fill="#fd6f8d" opacity="0.5"/><polygon points="488.62 308.54 489.71 302.81 494.16 299.03 513.18 310.11 512.09 315.84 507.64 319.62 488.62 308.54" fill="#fd6f8d" opacity="0.5"/><polygon points="446.21 279.63 451.9 278.33 457.14 280.9 454.59 302.77 448.9 304.06 443.66 301.49 446.21 279.63" fill="#fd6f8d" opacity="0.5"/><polygon points="407.15 452.19 405.8 446.51 408.31 441.24 430.2 443.57 431.55 449.25 429.04 454.52 407.15 452.19" fill="#fd6f8d" opacity="0.5"/><polygon points="326.21 456.34 322.76 451.63 323.02 445.81 344.09 439.42 347.55 444.13 347.28 449.96 326.21 456.34" fill="#fd6f8d" opacity="0.5"/><polygon points="552.8 417.34 548.01 414.01 546.38 408.4 564.25 395.55 569.04 398.88 570.67 404.48 552.8 417.34" fill="#fd6f8d" opacity="0.5"/><polygon points="401.3 421.87 396.51 418.54 394.87 412.94 412.74 400.08 417.53 403.41 419.17 409.01 401.3 421.87" fill="#fd6f8d" opacity="0.5"/><path d="M452.73,545.66l-22.29,4a5.67,5.67,0,0,1-2.7-.17l-.37-.12,40.57,188-40.57-188-22.09-6.94a5.67,5.67,0,0,0-7.13,7l52.7,175.67a5.65,5.65,0,0,0,2.17,3c4.61,3.23,18.91,12.62,40.63,21.42l-39.29-204A5.66,5.66,0,0,0,452.73,545.66Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M767.74,542l-22.82,5.7a5.67,5.67,0,0,1-2.4.08l-21.45-4a5.66,5.66,0,0,0-2,0L681.57,747.48l37.48-203.69a5.67,5.67,0,0,0-1.68.58l-25.46,13.58a5.67,5.67,0,0,1-3.79.55L661.4,755.06a280.26,280.26,0,0,0,44.15-19l40.89-188.75L705.54,736q6.94-3.7,14-7.92a5.67,5.67,0,0,0,2.5-3.24l52.53-175.8A5.67,5.67,0,0,0,767.74,542Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M687.87,558.44,660.5,551.6a5.66,5.66,0,0,0-1.61-.16L638,761.58q11.5-2.61,23.44-6.52l26.72-196.56Z" transform="translate(-158.33 -57.35)" fill="#4d4981"/><g opacity="0.5"><rect x="447.32" y="548.5" width="0.65" height="192.29" transform="translate(-284.25 51.59) rotate(-12.18)" fill="#fff"/><rect x="499.39" y="557.95" width="0.65" height="201.19" transform="translate(-247.01 20.51) rotate(-8.19)" fill="#fff"/><rect x="473.66" y="544.79" width="0.65" height="207.96" transform="translate(-272.5 44.02) rotate(-10.9)" fill="#fff"/><rect x="526.13" y="552.08" width="0.65" height="212.05" transform="translate(-214.22 -8.45) rotate(-5.05)" fill="#fff"/><rect x="555.12" y="559.81" width="0.65" height="207.61" transform="translate(-177.58 -40.75) rotate(-1.68)" fill="#fff"/><rect x="586.67" y="554.95" width="0.65" height="213.91" transform="translate(-162.63 -53.52) rotate(-0.37)" fill="#fff"/><rect x="517.7" y="665.22" width="202.95" height="0.65" transform="translate(-229.51 1199.57) rotate(-87.65)" fill="#fff"/><rect x="542.25" y="657.79" width="212.28" height="0.65" transform="translate(-229.42 1180.31) rotate(-84.28)" fill="#fff"/><rect x="574.78" y="656.84" width="200.2" height="0.65" transform="matrix(0.13, -0.99, 0.99, 0.13, -225.62, 1179.91)" fill="#fff"/><rect x="596.61" y="646.43" width="207.48" height="0.65" transform="translate(-221.08 1160.76) rotate(-79.55)" fill="#fff"/><rect x="629.42" y="642.64" width="193.13" height="0.65" transform="translate(-214.09 1159.48) rotate(-77.81)" fill="#fff"/></g><path d="M207.92,697.1c6-2,15-4.28,22.09-3.47,6.74-2.46,22.6-8.88,33.43-18.39a241,241,0,0,1,.71-28.24c5.54-63-6.92-104.49-6.92-104.49s-9.78-31.67-8.71-57.95c-.63,1.19-1,1.9-1,1.9-.86-22.67-8.58-46.13-14.36-60.74a4.88,4.88,0,0,1-.65-.24l-6.59-15.34a13.31,13.31,0,0,1-1.22-2.83l-1-2.43.31-.13c-.1-.4-.21-.82-.31-1.25h0c-4.13-17.47-7.28-58.9-7.28-58.9C205.33,301,231.63,274,231.63,274l44.63-38.41a5.66,5.66,0,0,0-.44,1.57l.37-.32c.63-1.8,1.32-4,2-6.44a33.93,33.93,0,0,1-4.46-3.77,34.27,34.27,0,0,1-10-17.85c-1.08-5.31-.87-10.78-.65-16.19l.74-18.52a58.81,58.81,0,0,1,1.1-10.8c3.37-14.74,18.43-25,33.54-25.65,4.81-.2,9.61.41,14.4.77a96.85,96.85,0,0,0,11.7.25,2.12,2.12,0,0,0,1.26-.33,1.85,1.85,0,0,0,.55-1.28,6.37,6.37,0,0,0-1.56-4.77,5.94,5.94,0,0,0-2-1.16l1.08.26a5.88,5.88,0,0,0-1.77-.95c3.86.91,7.81,1.86,11.13,4a14.38,14.38,0,0,1,2.6,2.19,11.35,11.35,0,0,1,3.76,7c1.73-1.69,3.39-3.55,4-5.87a5.93,5.93,0,0,0,0-2.84q.39.49.76,1c0-.1,0-.2-.07-.3a29.7,29.7,0,0,1,5.81,12,4.66,4.66,0,0,0,1.05-3.44c.22.68.43,1.37.62,2.07a4.79,4.79,0,0,0,.07-1.38,47.32,47.32,0,0,1,2.31,16.43c0,5.56-2.46,14.21-8.42,16.16-.3.1-.62.18-.94.25a37.35,37.35,0,0,1-25.19,57.05q-.14,1-.28,2.13l-.24,0c-.16,1.5-.29,3.08-.39,4.73a31.84,31.84,0,0,0,4.9,3.94A40.46,40.46,0,0,0,339.85,251a48.63,48.63,0,0,1,19.65,5.84c7.12,4,15,9.79,17.45,16.84,4.12,11.77,26.76,30,42,32.27l5.4-.31.39-.12v.1l1.32-.08.08,0v0l.35,0,0,.08,1.37-.08s.14.63.32,1.75c7.65-2.62,23.88-9.92,45-29.08,23.54-21.35,55.31-17.15,67.56-14.46a2.1,2.1,0,0,1,.56,3.89c-4.94,2.72-12.62,6.67-16.22,7.11,0,0,7.42,7.68-.46,11.78a5.67,5.67,0,0,1-5.93-.57c-3.79-2.77-14.33,3.51-29.59,6.78,0,0-43.08,44.58-64.45,51.48A30.74,30.74,0,0,1,423,347l-1.32-.11-.07.11h-.18l-.16,1.4s-33.25-1.75-44-13.82a17.32,17.32,0,0,1-2.11-2.25l11.56,145.48h-.11l.11,1.38h-8.5a320.62,320.62,0,0,0,2.28,53.63v94.8s.44,8.35-16.89,20.5A647.93,647.93,0,0,0,311,688.79l-2.1,1.82c3.19,29,9.86,83.08,15.42,85.1l-3.43.6c5.91,7.45,22.56,27.89,27.65,28.46,6.23.69,10.38,10.38,0,12.46-9.58,1.92-34.48,4.42-61.65-6.08a9.41,9.41,0,0,1-5.92-10l2-15.28a2.14,2.14,0,0,0-.88.93c-1.38,4.15,0-5.54,0-5.54a433,433,0,0,1-13.38-55.84l-20.52,17.78s-.42-.51-1.13-1.43c-5,11.44-14,34.81-12,51.95,2.77,23.53-23.53,2.77-20.76-11.07,2.24-11.2-7.75-58.64-11.65-76.34A7.89,7.89,0,0,1,207.92,697.1Z" transform="translate(-158.33 -57.35)" fill="url(#c2d29fed-0e3c-4665-9fc2-6bc8bc700b9c)"/><path d="M422.79,313.2s19.6-3.38,48.65-29.73c23-20.85,54-16.74,66-14.12a2,2,0,0,1,.55,3.79c-4.83,2.65-12.33,6.51-15.84,6.95,0,0,7.24,7.5-.45,11.51a5.54,5.54,0,0,1-5.79-.56c-3.7-2.7-14,3.43-28.89,6.62,0,0-58.11,60.14-71.62,50Z" transform="translate(-158.33 -57.35)" fill="#fec3be"/><path d="M322.78,231.44s-5.41,23,0,39.19L298.46,274,276.84,263.2V249s10.14-21.62,7.43-46.62Z" transform="translate(-158.33 -57.35)" fill="#fec3be"/><path d="M253.86,729.44S236.29,763.9,239,786.87s-23,2.7-20.27-10.81c2.19-10.93-7.57-57.26-11.37-74.54a7.7,7.7,0,0,1,5.12-9c8.13-2.67,21.72-6,28.56-.94C251.16,699,253.86,729.44,253.86,729.44Z" transform="translate(-158.33 -57.35)" fill="#8b416f"/><path d="M320.76,767.27s23,29.73,29.06,30.41,10.14,10.14,0,12.16c-9.35,1.87-33.67,4.32-60.2-5.94a9.19,9.19,0,0,1-5.78-9.78l3.81-28.88Z" transform="translate(-158.33 -57.35)" fill="#8b416f"/><path d="M358.6,451.72l22,2.94s-5.14,36.92.26,77.47V624.7s.43,8.15-16.49,20a632.65,632.65,0,0,0-51.24,39.71l-61.32,53.12s-24.33-29.73-20.95-47.3c0,0,40.54-12.84,45.95-33.79,3.1-12,18.82-22,31.69-28.35,16.58-8.19,25.62-26.8,21.08-44.72a34.48,34.48,0,0,0-3.45-8.69c-10.81-18.92-26.35-61.49-26.35-61.49l29.73-56.76Z" transform="translate(-158.33 -57.35)" fill="#4d4981"/><path d="M358.6,451.72l22,2.94s-5.14,36.92.26,77.47V624.7s.43,8.15-16.49,20a632.65,632.65,0,0,0-51.24,39.71l-61.32,53.12s-24.33-29.73-20.95-47.3c0,0,40.54-12.84,45.95-33.79,3.1-12,18.82-22,31.69-28.35,16.58-8.19,25.62-26.8,21.08-44.72a34.48,34.48,0,0,0-3.45-8.69c-10.81-18.92-26.35-61.49-26.35-61.49l29.73-56.76Z" transform="translate(-158.33 -57.35)" opacity="0.05"/><path d="M326.16,769.3s-39.87,6.76-41.22,10.81,0-5.41,0-5.41-23-69.6-17.57-131.09-6.76-102-6.76-102-14.19-45.95-6.08-72.3,93.25-14.87,93.25-14.87S318.05,524,318.73,557.13c0,0-3.38,100-9.46,111.49C309.27,668.62,318.73,766.6,326.16,769.3Z" transform="translate(-158.33 -57.35)" fill="#4d4981"/><path d="M321.43,249s-4.05,25-44.6,14.19l27,205.41s78.38,2.7,77.71-6.76L365.35,337.53Z" transform="translate(-158.33 -57.35)" fill="#fff"/><path d="M320.42,247.66s7.68,8.24,19.52,9.27a47.49,47.49,0,0,1,19.18,5.71c7,3.89,14.63,9.55,17,16.45,4.73,13.51,34.46,35.81,48,31.08l-4.73,40.54s-38.51-2-45.27-16.89l11.49,144.6H375.49s-5.41-39.19-9.46-47.3-12.16-52.7-12.84-63.52-10.81-73-19.6-83.79l-13.18-32.1Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M320.42,249.69s9,7.57,20.87,8.59A47.49,47.49,0,0,1,360.47,264c7,3.89,14.63,9.55,17,16.45,4.73,13.51,34.46,35.81,48,31.08l-4.73,40.54s-38.51-2-45.27-16.89L387,479.76H376.84s-5.41-39.19-9.46-47.3-12.16-52.7-12.84-63.52-10.81-73-19.6-83.79l-14.53-31.42Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M320.42,248.34s9,7.57,20.87,8.59a47.49,47.49,0,0,1,19.18,5.71c7,3.89,14.63,9.55,17,16.45,4.73,13.51,34.46,35.81,48,31.08l-4.73,40.54s-38.51-2-45.27-16.89L387,478.41H376.84s-5.41-39.19-9.46-47.3-12.16-52.7-12.84-63.52-10.81-73-19.6-83.79l-14.53-31.42Z" transform="translate(-158.33 -57.35)" fill="#fd6f8d"/><path d="M286,222.32c.88-6.4-.88-10.4-1.69-17.91l38.51,29.06s-.92,3.93-1.62,9.67a36.73,36.73,0,0,1-5.81.47C301.91,243.61,292.29,233.14,286,222.32Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><circle cx="157.02" cy="147.74" r="36.49" fill="#fec3be"/><path d="M355.17,169.33a46.19,46.19,0,0,0-3-18.06,4.5,4.5,0,0,1-.77,5.83,28.91,28.91,0,0,0-9.17-16.24c2.6.42,3.93,3.65,3.3,6.21s-2.61,4.53-4.51,6.35c.22-3.87-2.33-7.47-5.57-9.6s-7.1-3-10.87-3.94a6.3,6.3,0,0,1,4.17,6.46,1.8,1.8,0,0,1-.54,1.25,2.07,2.07,0,0,1-1.23.33,94.57,94.57,0,0,1-11.42-.24,119.71,119.71,0,0,0-14.06-.75c-14.76.62-29.46,10.65-32.75,25a57.43,57.43,0,0,0-1.07,10.54L267,200.6c-.21,5.28-.42,10.63.64,15.81a33.49,33.49,0,0,0,17.21,22.74c5.3-7.68,5.77-17.55,7.61-26.7a13.51,13.51,0,0,1,2.29-5.9c1.33-1.66,3.67-2.71,5.65-1.92s2.84,3.82,1.19,5.17c1.42,1.73,4.22.44,5.85-1.1a31.56,31.56,0,0,0,9.16-16.35c.66-3.15,1.32-7,4.36-8.09a8.2,8.2,0,0,1,3.27-.22c6.43.44,16.49,3.1,22.73,1.06C352.77,183.2,355.17,174.76,355.17,169.33Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M354.5,168.65a46.19,46.19,0,0,0-3-18.06,4.5,4.5,0,0,1-.77,5.83,28.91,28.91,0,0,0-9.17-16.24c2.6.42,3.93,3.65,3.3,6.21s-2.61,4.53-4.51,6.35c.22-3.87-2.33-7.47-5.57-9.6s-7.1-3-10.87-3.94a6.3,6.3,0,0,1,4.17,6.46,1.8,1.8,0,0,1-.54,1.25,2.07,2.07,0,0,1-1.23.33,94.57,94.57,0,0,1-11.42-.24,119.71,119.71,0,0,0-14.06-.75c-14.76.62-29.46,10.65-32.75,25A57.43,57.43,0,0,0,267,181.84l-.72,18.08c-.21,5.28-.42,10.63.64,15.81a33.49,33.49,0,0,0,17.21,22.74c5.3-7.68,5.77-17.55,7.61-26.7a13.51,13.51,0,0,1,2.29-5.9c1.33-1.66,3.67-2.71,5.65-1.92s2.84,3.82,1.19,5.17c1.42,1.73,4.22.44,5.85-1.1a31.56,31.56,0,0,0,9.16-16.35c.66-3.15,1.32-7,4.36-8.09a8.2,8.2,0,0,1,3.27-.22c6.43.44,16.49,3.1,22.73,1.06C352.09,182.53,354.5,174.08,354.5,168.65Z" transform="translate(-158.33 -57.35)" fill="#fad375"/><path d="M427.18,310.16s5.41,25-4.73,40.54l-5.74-.47,3.13-39.65Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M425.83,310.16s5.41,25-4.73,40.54l-5.74-.47,3.13-39.65Z" transform="translate(-158.33 -57.35)" fill="#fd6f8d"/><path d="M280.55,241.92,237,279.42s-25.68,26.35-14.87,68.92c0,0,4.73,62.16,10.14,64.87,0,0,18.92,37.84,20.27,73.65,0,0,25.34-51,36.83-19.93s38.18,35.47,38.18,35.47L312.65,318.61S275.15,253.4,280.55,241.92Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M279.2,241.92l-43.58,37.5s-25.68,26.35-14.87,68.92c0,0,4.73,62.16,10.14,64.87,0,0,18.92,37.84,20.27,73.65,0,0,26.69-53.72,38.18-22.64s36.83,38.18,36.83,38.18L311.3,318.61S273.8,253.4,279.2,241.92Z" transform="translate(-158.33 -57.35)" fill="#fd6f8d"/><path d="M259.27,400.37s-10.81-7.43-28.38,12.84l43.24,78.38,14.53-22S257.92,409.15,259.27,400.37Z" transform="translate(-158.33 -57.35)" fill="#fec3be"/><path d="M269.74,404.76s-23.91,26.86-33.24,22.55l-8.64-20.11,32.42-13.93Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M269.74,403.41S245.83,430.27,236.5,426l-8.64-20.11,32.42-13.93Z" transform="translate(-158.33 -57.35)" fill="#fd6f8d"/><path d="M287.2,464.54s-11.38,23.33-17.46,24.69l8.78,10.14L291.36,475Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M287.88,465.21s-11.38,23.33-17.46,24.69L279.2,500,292,475.71Z" transform="translate(-158.33 -57.35)" fill="#4d4981"/><path d="M266.36,321s-1.35,48.65,4.05,66.89" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M375.83,330.43s-8.11-2.7-8.11-9.46" transform="translate(-158.33 -57.35)" opacity="0.1"/><g opacity="0.5"><path d="M827.65,331.62c-.06,6.39.7,12.3,2.76,16.93l2,29s.5-.28,1.41-.72c-1.21,11-.34,31.15,21.26,34.94a3.66,3.66,0,0,0,1.33-.66,98,98,0,0,0,4-9.21l.25.08-.25,1.24,1.6.5c-7.79,16.88-6,52-4.27,55.44.73,1.44,1.28,5.68,1.69,10.49a119.67,119.67,0,0,1-1,28c-1,6.39-1.3,14.23,2,17.49,6,5.92,5.33,51.33,5.33,51.33a32.84,32.84,0,0,0,1.39,3l-2.06.29s0,17.77,3.33,30.27c1.92,7.19-.8,16.56-3.45,23.22a46.94,46.94,0,0,0-2.31,28.27c1.95,8.14,6,16.26,14.43,18.93,18.67,5.92,22.67-25,22.67-25s-.67-23.69,0-27c.21-1,1.17-3.84,2.41-7.26a90.46,90.46,0,0,0,5-39l-.77-8.32-3.62.52c-.06-.86-.11-1.76-.16-2.7s-.09-1.62-.13-2.47-.08-1.72-.12-2.62-.08-1.81-.11-2.74q0-.7-.05-1.41c-.15-4.26-.28-8.81-.39-13.31,0-2-.09-4-.12-5.95,0-1.46-.05-2.91-.07-4.31q0-.7,0-1.4c0-2.3-.06-4.5-.07-6.53q0-.61,0-1.2,0-1.18,0-2.26,0-.54,0-1.06c0-.69,0-1.34,0-2s0-1.2,0-1.73,0-1,0-1.48c0-2.47.1-3.57.2-2.66.33,3,1.33,21.06,0-2-1.08-18.59,15.66-62.91,22.15-79.3a57.75,57.75,0,0,1,6,3.58c2.22,25.86-.83,75.43-1.81,90v.06c-.08,1.13-.14,2-.19,2.71v.12l-.05.72v.2l0,.21v.11s-8.67,54-8.67,66.47c0,9.63-4.75,23.56-6.93,29.44-3.17,1.38-5.74,2.8-5.74,2.8l.67,49.36s-7.33,24.35,19.33,30.27,15.33-24.35,15.33-24.35l-2-21.72,9.33-33.56-2.62-.53c5.54-17.7,20.38-66.4,19.29-77.12-1.22-12,4.77-25.08,5.84-27.3h0l.16-.34c-5.72-11.8,11.67-74,19.6-100.84,9.89-4.72,17.06-8.4,17.06-8.4s-.2-.37-.55-1l.55-.28a132.29,132.29,0,0,1-10.23-25.09l.57-.58-.43-1.21c1.36-1.31,2.1-2.08,2.1-2.08s19.33,3.29,14.67-5.92-3.33-23-3.33-23V299.41l9.33,3.07c17.55,2.89,20.69-16.71,20.6-31.74a116.66,116.66,0,0,0-1.26-17.62s-13.33-102-36.67-98.71c-21.86,3.08-41.08-9.71-43.43-11.35q-.43-1.32-.77-2.6a33,33,0,0,0,3.5-4.76c.73,0,1.47-.1,2.17-.18,0-.2,0-.39,0-.59l.67-.07a17.22,17.22,0,0,1,4.76-12.43,16.51,16.51,0,0,1,4.38-3c3.23-1.51,6.88-2,10.05-3.62a11.09,11.09,0,0,0,3-2.29c2-1.8,3.3-4.31,2.61-6.81-.31-1.11-1-2.13-1-3.28,0-1.6,1.25-2.88,2-4.29C994,95,992,89.82,989.25,86s-6.28-7.42-7.29-12c-.41-1.88-.38-3.86-1-5.69-2-5.93-9.66-7.7-16-7.37s-13.14,1.68-18.62-1.44A17.45,17.45,0,0,0,943,57.6a9.16,9.16,0,0,0-4.21,0c-8,1.39-15.37,5.36-22,10a50.64,50.64,0,0,0-7.46,6.1,27.44,27.44,0,0,0-4,4.77c-2.7,4.17-4,9.49-2.31,14.16a14.33,14.33,0,0,0,4.83,6.48,32.62,32.62,0,0,0,6.71,46.18,38.1,38.1,0,0,1-3.76,5.14v-.26s-20.33,10.2-27.67,8.88c-7.16-1.29-25.76,10.62-25.38,34.46,0,.6,0,1.22,0,1.84l-12,37.21a150.56,150.56,0,0,0-7.29,46.26S827.44,308.76,827.65,331.62Zm32.23,15.76,15.86-59.16v12.94l-10,35.54s-2,11.89-3.53,24.52Z" transform="translate(-158.33 -57.35)" fill="url(#c8cc5a91-18e5-403f-9b97-91f48ba2f890)"/></g><path d="M907.17,555.35l.74,8.13a89.47,89.47,0,0,1-4.85,38.15c-1.19,3.35-2.12,6.11-2.32,7.1-.64,3.22,0,26.37,0,26.37s-3.86,30.23-21.87,24.44c-8.1-2.6-12-10.55-13.92-18.5a46.44,46.44,0,0,1,2.23-27.62c2.56-6.51,5.18-15.66,3.33-22.69-3.22-12.22-3.22-29.58-3.22-29.58Z" transform="translate(-158.33 -57.35)" fill="#5a5773"/><path d="M926.46,415.8s-25.08,61.1-23.79,83.6.32,4.82,0,1.93c-.57-5.15,0,56,1.93,63,0,0-26.37,19.29-36.66-6.43,0,0,.64-44.37-5.14-50.16-3.18-3.18-2.87-10.84-1.93-17.09a118.45,118.45,0,0,0,1-27.33c-.39-4.7-.93-8.84-1.63-10.25-1.93-3.86-3.86-47.59,7.72-59.81Z" transform="translate(-158.33 -57.35)" fill="#605d82"/><path d="M901.38,564.36c-1.93-7.07-2.5-68.18-1.93-63,.32,2.89,1.29,20.58,0-1.93s23.79-83.6,23.79-83.6l-56.11-21.58c.26-.33.53-.64.8-.93l58.52,22.51s-25.08,61.1-23.79,83.6.32,4.82,0,1.93c-.57-5.15,0,56,1.93,63,0,0-10.53,7.7-20.88,6.88C892.92,570.54,901.38,564.36,901.38,564.36Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M948.32,613.88l-9,32.8,1.93,21.22s10.93,29.58-14.79,23.79-18.65-29.58-18.65-29.58l-.64-48.23s10.29-5.79,14.79-5.14S948.32,613.88,948.32,613.88Z" transform="translate(-158.33 -57.35)" fill="#5a5773"/><path d="M992.7,400.37S963.12,496.19,970.19,511c0,0-7.07,14.15-5.79,27s-20.58,81.67-20.58,81.67l-32.16-5.79s7.72-19.29,7.72-31.51,8.36-65,8.36-65,7.07-96.47-1.29-106.76Z" transform="translate(-158.33 -57.35)" fill="#605d82"/><g opacity="0.1"><path d="M928.95,418.42c5.33,21.84-.56,102.21-.56,102.21s-8.36,52.73-8.36,65c0,9.33-4.49,22.77-6.62,28.61l-1.74-.31s7.72-19.29,7.72-31.51,8.36-65,8.36-65S933.13,444,928.95,418.42Z" transform="translate(-158.33 -57.35)"/><path d="M970.19,511l-.16.33c-.05-.33-.1-.68-.13-1A7.11,7.11,0,0,0,970.19,511Z" transform="translate(-158.33 -57.35)"/><path d="M927.91,413.75a9.47,9.47,0,0,0-1.45-3.09l66.24-10.29s-.39,1.25-1.06,3.48Z" transform="translate(-158.33 -57.35)"/></g><path d="M838.35,365.64s-9.65,36,19.29,41.16a3.52,3.52,0,0,0,1.29-.64s16.72-32.8,3.86-45.66Z" transform="translate(-158.33 -57.35)" fill="#a1616a"/><path d="M956.69,126.4s-1.93,27,19.29,39.87-45,48.23-45,48.23L896.23,159.2S911,161.13,920,135.41Z" transform="translate(-158.33 -57.35)" fill="#a1616a"/><path d="M970.83,168.2s-32.8,68.17-62.38,3.86L862.79,398.44s70.74,21.87,71.38,32.16,71.38-26.37,71.38-26.37-15.43-28.3-11.58-45.66S970.83,168.2,970.83,168.2Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M970.83,166.92s-32.8,68.17-62.38,3.86L862.79,397.15S933.53,419,934.18,429.3s71.38-26.37,71.38-26.37-15.43-28.3-11.58-45.66S970.83,166.92,970.83,166.92Z" transform="translate(-158.33 -57.35)" fill="#e1e7ef"/><path d="M938.68,631.88s8.36-18.65-10.93-18.65S911.67,630,911.67,630Z" transform="translate(-158.33 -57.35)" fill="#5a5773"/><path d="M894.95,583.65s7.72-19.94-11.58-20.58-9.65,18-9.65,18Z" transform="translate(-158.33 -57.35)" fill="#5a5773"/><path d="M911.35,152.45s-19.61,10-26.69,8.68-25.72,10.93-24.44,35.37L848.6,233a148.9,148.9,0,0,0-7,45.21h0s-16.72,46.3-7.72,66.88l1.93,28.3S850.57,365,866,367.57l-3.86-23.15,17.36-65.6,28.94-70.1Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M911.35,151.16s-19.61,10-26.69,8.68-25.72,10.93-24.44,35.37L848.6,231.68a148.9,148.9,0,0,0-7,45.21h0s-16.72,46.3-7.72,66.88l1.93,28.3s14.79-8.36,30.23-5.79l-3.86-23.15,17.36-65.6,28.94-70.1Z" transform="translate(-158.33 -57.35)" fill="#67647e"/><path d="M878.87,229.3V302l-9.65,34.73s-6.43,37.94-4.5,49.52,32.8,14.15,41.16,4.5,3.86-92,3.86-92l1.61-120.58-1.29-3.86Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M877.58,226.08v72.67l-9.65,34.73s-6.43,37.94-4.5,49.52,32.8,14.15,41.16,4.5,3.86-92,3.86-92L910.06,175Z" transform="translate(-158.33 -57.35)" fill="#67647e"/><path d="M1007.17,286.54l-20.58,64,9.65,27.33s-45.66,48.23-74.6,25.08c0,0-3.22-98.4,3.22-121.55s37.3-101,37.3-101l6.43-20.58,34.08,19.29Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M1008.78,283.32v63s-1.29,13.51,3.22,22.51-14.15,5.79-14.15,5.79-45.66,48.23-74.6,25.08c0,0-3.22-98.4,3.22-121.55s37.3-101,37.3-101l6.43-20.58,34.08,19.29Z" transform="translate(-158.33 -57.35)" fill="#67647e"/><rect x="929.99" y="262.04" width="45" height="7" transform="translate(1535.67 -445.97) rotate(123)" fill="#e6e6e6"/><ellipse cx="937.75" cy="288.24" rx="14.57" ry="8" transform="matrix(0.54, -0.84, 0.84, 0.54, 26.9, 860.32)" opacity="0.1"/><ellipse cx="937.28" cy="288.96" rx="14.57" ry="8" transform="translate(26.08 860.25) rotate(-57)" fill="#e6e6e6"/><ellipse cx="937.28" cy="288.96" rx="11.84" ry="6.5" transform="translate(26.08 860.25) rotate(-57)" opacity="0.1"/><path d="M958.94,145.37s19.61,14.47,42.12,11.25,35.37,96.47,35.37,96.47,8.36,51.45-18.65,46.95L958,280.1s12.86-13.51,10.93-30.87l28.94,11.58-1.29-55.31Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M1035.14,251.81s8.36,51.45-18.65,46.95l-59.81-19.94s12.86-13.51,10.93-30.87l28.94,11.58Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M969,254.73S949,228.34,934.19,241s29.55,35.89,29.55,35.89Z" transform="translate(-158.33 -57.35)" fill="#a1616a"/><path d="M958.94,144.09s19.61,14.47,42.12,11.25,35.37,96.47,35.37,96.47,8.36,51.45-18.65,46.95L958,278.82s12.86-13.51,10.93-30.87l28.94,11.58-1.29-55.31-32.8-27Z" transform="translate(-158.33 -57.35)" fill="#67647e"/><path d="M919.38,136.69l36.66-9s-1.91,2.16.32,10.61c-5.9,6.77-13.15,15.76-22.83,15.76a32,32,0,0,1-19.22-6.37A57.82,57.82,0,0,0,919.38,136.69Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><circle cx="775.84" cy="63.26" r="32.16" fill="#a1616a"/><path d="M922,106.66c-7.46-1.27-15.66-4.58-18.16-11.72-1.6-4.57-.38-9.77,2.23-13.84s6.45-7.2,10.41-10c6.43-4.52,13.52-8.4,21.26-9.76a8.73,8.73,0,0,1,4.06,0,16.76,16.76,0,0,1,3.29,1.8c5.29,3.05,11.87,1.73,18,1.41s13.48,1.41,15.41,7.2c.6,1.79.56,3.72,1,5.56,1,4.5,4.39,8,7,11.75s4.62,8.82,2.42,12.86c-.75,1.37-2,2.63-2,4.19a13,13,0,0,0,1,3.21c.91,3.32-1.74,6.67-4.8,8.25s-6.58,2.07-9.7,3.54a17,17,0,0,0-9.47,15.74c-2.84.33-6.15.5-8.07-1.62-.86-.95-1.28-2.22-2.06-3.23-1-1.32-2.56-2.1-3.84-3.16-6.73-5.53-1.95-13.17-5.76-19.13-2-3.07-5.18-2.13-8.4-2.08A74.22,74.22,0,0,1,922,106.66Z" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M922.63,106c-7.46-1.27-15.66-4.58-18.16-11.72-1.6-4.57-.38-9.77,2.23-13.84s6.45-7.2,10.41-10c6.43-4.52,13.52-8.4,21.26-9.76a8.73,8.73,0,0,1,4.06,0,16.76,16.76,0,0,1,3.29,1.8c5.29,3.05,11.87,1.73,18,1.41s13.48,1.41,15.41,7.2c.6,1.79.56,3.72,1,5.56,1,4.5,4.39,8,7,11.75s4.62,8.82,2.42,12.86c-.75,1.37-2,2.63-2,4.19a13,13,0,0,0,1,3.21c.91,3.32-1.74,6.67-4.8,8.25s-6.58,2.07-9.7,3.54a17,17,0,0,0-9.47,15.74c-2.84.33-6.15.5-8.07-1.62-.86-.95-1.28-2.22-2.06-3.23-1-1.32-2.56-2.1-3.84-3.16-6.73-5.53-1.95-13.17-5.76-19.13-2-3.07-5.18-2.13-8.4-2.08A74.22,74.22,0,0,1,922.63,106Z" transform="translate(-158.33 -57.35)" fill="#4a4347"/><path d="M883.69,214.19s-7.07,36.66-3.86,50.81a47.15,47.15,0,0,1-.84,24.92" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M998,229.62s3.08,24.44-2.05,29.58" transform="translate(-158.33 -57.35)" opacity="0.1"/><path d="M818.42,530.81a1.5,1.5,0,0,0,0-3,1.5,1.5,0,0,0,0,3Z" transform="translate(-158.33 -57.35)"/><rect x="507.29" y="273.65" width="45" height="7" transform="translate(-14.36 -236.96) rotate(22.2)" fill="#e6e6e6"/><ellipse cx="554.85" cy="287.38" rx="8" ry="14.57" transform="translate(-79.18 635.19) rotate(-67.8)" opacity="0.1"/><ellipse cx="555.65" cy="287.7" rx="8" ry="14.57" transform="translate(-78.99 636.12) rotate(-67.8)" fill="#e6e6e6"/><ellipse cx="555.65" cy="287.7" rx="6.5" ry="11.84" transform="translate(-78.99 636.12) rotate(-67.8)" opacity="0.1"/></svg>
\ No newline at end of file
<svg id="26c346b9-da0c-4941-90c9-e7f7f9ba5ac3" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="958.98" height="717.78" viewBox="0 0 958.98 717.78"><defs><linearGradient id="4ef13be0-8e55-4463-b812-64152197208f" x1="768.34" y1="226.6" x2="768.34" y2="91.11" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity="0.25"/><stop offset="0.54" stop-color="gray" stop-opacity="0.12"/><stop offset="1" stop-color="gray" stop-opacity="0.1"/></linearGradient><linearGradient id="5bed69c4-1e02-4930-aaf9-54950fab6759" x1="324.42" y1="444.93" x2="324.42" y2="444.59" xlink:href="#4ef13be0-8e55-4463-b812-64152197208f"/><linearGradient id="a88837d3-ccd3-4ab3-a7ec-270b2797a153" x1="437.75" y1="743.35" x2="437.75" y2="288.01" xlink:href="#4ef13be0-8e55-4463-b812-64152197208f"/></defs><title>drone_delivery</title><polygon points="910 277.53 910 213.53 872 213.53 872 277.53 827 277.53 827 178.53 794 178.53 794 104.53 767 104.53 767 28.53 711 28.53 711 104.53 684 104.53 684 178.53 652 178.53 652 89.53 634 89.53 634 44.53 623 44.53 623 89.53 559 89.53 559 373.53 510 373.53 510 343.53 480 343.53 480 373.53 431 373.53 431 277.53 343 277.53 343 213.53 305 213.53 305 277.53 303 277.53 303 400.53 263 400.53 263 328.53 215 328.53 215 400.53 175 400.53 175 178.53 144 178.53 144 104.53 30 104.53 30 178.53 0 178.53 0 569.53 175 569.53 303 569.53 431 569.53 559 569.53 652 569.53 827 569.53 955 569.53 955 277.53 910 277.53" fill="#348eed" opacity="0.25"/><rect x="19" y="201.53" width="42" height="24" fill="#fff" opacity="0.4"/><rect x="233.51" y="292.64" width="42" height="24" transform="translate(388.51 518.17) rotate(-180)" fill="#fff" opacity="0.4"/><rect x="19" y="248.53" width="42" height="24" fill="#fff" opacity="0.4"/><rect x="233.51" y="339.64" width="42" height="24" transform="translate(388.51 612.17) rotate(-180)" fill="#fff" opacity="0.4"/><rect x="19" y="295.53" width="42" height="24" fill="#fff" opacity="0.4"/><rect x="233.51" y="386.64" width="42" height="24" transform="translate(388.51 706.17) rotate(-180)" fill="#fff" opacity="0.4"/><rect x="19" y="342.53" width="42" height="24" fill="#fff" opacity="0.4"/><rect x="233.51" y="433.64" width="42" height="24" transform="translate(388.51 800.17) rotate(-180)" fill="#fff" opacity="0.4"/><rect x="19" y="389.53" width="42" height="24" fill="#fff" opacity="0.4"/><rect x="233.51" y="480.64" width="42" height="24" transform="translate(388.51 894.17) rotate(-180)" fill="#fff" opacity="0.4"/><rect x="19" y="436.53" width="42" height="24" fill="#fff" opacity="0.4"/><rect x="233.51" y="527.64" width="42" height="24" transform="translate(388.51 988.17) rotate(-180)" fill="#fff" opacity="0.4"/><rect x="19" y="483.53" width="42" height="24" fill="#fff" opacity="0.4"/><rect x="233.51" y="574.64" width="42" height="24" transform="translate(388.51 1082.17) rotate(-180)" fill="#fff" opacity="0.4"/><rect x="190" y="424.53" width="98" height="12" fill="#fff" opacity="0.4"/><rect x="190" y="442.53" width="98" height="12" fill="#fff" opacity="0.4"/><rect x="190" y="460.53" width="98" height="12" fill="#fff" opacity="0.4"/><rect x="446" y="430.53" width="98" height="12" fill="#fff" opacity="0.4"/><rect x="446" y="448.53" width="98" height="12" fill="#fff" opacity="0.4"/><rect x="446" y="466.53" width="98" height="12" fill="#fff" opacity="0.4"/><rect x="190" y="478.53" width="98" height="12" fill="#fff" opacity="0.4"/><rect x="190" y="496.53" width="98" height="12" fill="#fff" opacity="0.4"/><rect x="190" y="514.53" width="98" height="12" fill="#fff" opacity="0.4"/><rect x="324" y="300.53" width="27" height="35" fill="#fff" opacity="0.4"/><rect x="503.51" y="391.64" width="27" height="35" transform="translate(913.51 727.17) rotate(-180)" fill="#fff" opacity="0.4"/><rect x="324" y="356.53" width="27" height="35" fill="#fff" opacity="0.4"/><rect x="503.51" y="447.64" width="27" height="35" transform="translate(913.51 839.17) rotate(-180)" fill="#fff" opacity="0.4"/><rect x="324" y="412.53" width="27" height="35" fill="#fff" opacity="0.4"/><rect x="503.51" y="503.64" width="27" height="35" transform="translate(913.51 951.17) rotate(-180)" fill="#fff" opacity="0.4"/><rect x="324" y="468.53" width="27" height="35" fill="#fff" opacity="0.4"/><rect x="503.51" y="559.64" width="27" height="35" transform="translate(913.51 1063.17) rotate(-180)" fill="#fff" opacity="0.4"/><rect x="559" y="112.53" width="36" height="46" fill="#fff" opacity="0.4"/><rect x="559" y="178.53" width="36" height="46" fill="#fff" opacity="0.4"/><rect x="559" y="244.53" width="36" height="46" fill="#fff" opacity="0.4"/><rect x="559" y="310.53" width="36" height="46" fill="#fff" opacity="0.4"/><rect x="559" y="376.53" width="36" height="46" fill="#fff" opacity="0.4"/><rect x="559" y="442.53" width="36" height="46" fill="#fff" opacity="0.4"/><rect x="672.5" y="206.53" width="134" height="39" fill="#fff" opacity="0.4"/><rect x="673" y="290.53" width="134" height="39" fill="#fff" opacity="0.4"/><rect x="673.5" y="374.53" width="134" height="39" fill="#fff" opacity="0.4"/><rect x="674" y="458.53" width="134" height="39" fill="#fff" opacity="0.4"/><rect x="30" y="125.53" width="18" height="38" fill="#fff" opacity="0.4"/><rect x="910" y="300.53" width="45" height="58" fill="#fff" opacity="0.4"/><rect x="910" y="384.53" width="45" height="58" fill="#fff" opacity="0.4"/><rect x="910" y="468.53" width="45" height="58" fill="#fff" opacity="0.4"/><path d="M385.19,167.32h-6.88a4.82,4.82,0,1,0,0-9.63H322.58a4.82,4.82,0,0,0,0,9.63h6.88a4.82,4.82,0,1,0,0,9.63h-9.63a4.82,4.82,0,0,0,0,9.63h55.73a4.82,4.82,0,0,0,0-9.63h9.63a4.82,4.82,0,1,0,0-9.63Z" transform="translate(-120.51 -91.11)" fill="#252223" opacity="0.1"/><path d="M631.19,288.32h-6.88a4.82,4.82,0,1,0,0-9.63H568.58a4.82,4.82,0,0,0,0,9.63h6.88a4.82,4.82,0,1,0,0,9.63h-9.63a4.82,4.82,0,1,0,0,9.63h55.73a4.82,4.82,0,1,0,0-9.63h9.63a4.82,4.82,0,1,0,0-9.63Z" transform="translate(-120.51 -91.11)" fill="#252223" opacity="0.1"/><path d="M1050.19,130.32h-6.88a4.82,4.82,0,1,0,0-9.63H987.58a4.82,4.82,0,0,0,0,9.63h6.88a4.82,4.82,0,1,0,0,9.63h-9.63a4.82,4.82,0,1,0,0,9.63h55.73a4.82,4.82,0,1,0,0-9.63h9.63a4.82,4.82,0,1,0,0-9.63Z" transform="translate(-120.51 -91.11)" fill="#252223" opacity="0.1"/><path d="M918.56,95.65a181.12,181.12,0,0,0-25.21,1.52h0a6,6,0,0,0-12.1,0h0a181.12,181.12,0,0,0-25.21-1.52c-18.65,0-33.78,2-33.78,4.54s15.12,4.54,33.78,4.54a181.12,181.12,0,0,0,25.21-1.52h0a6,6,0,0,0,.39,2.13,4,4,0,0,0-.4,6.53,11.17,11.17,0,0,0-6.63,6.1,10.33,10.33,0,0,0-5.8-2.11L806,113.06a24.54,24.54,0,0,0-19.67-9.85H746.79a24.54,24.54,0,0,0-19.78,10l-59.66,2.67a10.33,10.33,0,0,0-5.43,1.83,11.17,11.17,0,0,0-5.81-5.58,4,4,0,0,0-.95-7.19,6,6,0,0,0,.25-1.73h0a181.11,181.11,0,0,0,25.21,1.52c18.65,0,33.78-2,33.78-4.54s-15.12-4.54-33.78-4.54a181.12,181.12,0,0,0-25.21,1.52h0a6,6,0,0,0-6-6h0a6,6,0,0,0-6,6h0a181.12,181.12,0,0,0-25.21-1.52c-18.65,0-33.78,2-33.78,4.54s15.12,4.54,33.78,4.54a181.12,181.12,0,0,0,25.21-1.52h0a6,6,0,0,0,.39,2.13,4,4,0,0,0-.24,6.66,11.14,11.14,0,0,0-7.21,10.41v7.46A11.14,11.14,0,0,0,647.4,141h4.43a11.11,11.11,0,0,0,8.93-4.5,10.33,10.33,0,0,0,6.76,2.77l58.5,1.64a24.7,24.7,0,0,0,7.25,7.39c-5.6,5.69-27.44,30.92-23.92,75.38,0,0,3.53,6.55,12.6,0,0,0-5.8-49.54,26.67-69.94a8.06,8.06,0,0,0,7.61,5.41h4.15a21.68,21.68,0,1,0,15.91,0h4.15a8.06,8.06,0,0,0,7.61-5.41c32.47,20.4,26.67,69.94,26.67,69.94,9.07,6.55,12.6,0,12.6,0,4-50.92-25.21-76.62-25.21-76.62h-.53a24.7,24.7,0,0,0,5.48-6.06l61.58-1.72a10.34,10.34,0,0,0,7.05-3,11.12,11.12,0,0,0,9.14,4.78h4.43a11.14,11.14,0,0,0,11.14-11.14v-7.46a11.14,11.14,0,0,0-6.6-10.17,4,4,0,0,0-.72-7.31,6,6,0,0,0,.25-1.73h0a181.11,181.11,0,0,0,25.21,1.52c18.65,0,33.78-2,33.78-4.54S937.22,95.65,918.56,95.65Z" transform="translate(-120.51 -91.11)" fill="url(#4ef13be0-8e55-4463-b812-64152197208f)"/><circle cx="647.83" cy="87.06" r="20.44" fill="#348eed"/><circle cx="647.83" cy="87.06" r="13.79" fill="#348eed"/><circle cx="647.83" cy="87.06" r="13.79" fill="#f5f5f5" opacity="0.2"/><circle cx="647.83" cy="87.06" r="9.03" fill="#348eed"/><circle cx="647.83" cy="87.06" r="9.03" opacity="0.25"/><path d="M736.48,147.74S708.91,172,712.71,220c0,0,3.33,6.18,11.89,0,0,0-7.13-60.86,40.41-72.27Z" transform="translate(-120.51 -91.11)" fill="#348eed"/><path d="M800.19,147.74S827.77,172,824,220c0,0-3.33,6.18-11.89,0,0,0,7.13-60.86-40.41-72.27Z" transform="translate(-120.51 -91.11)" fill="#348eed"/><rect x="604.32" y="15.26" width="83.68" height="46.36" rx="23.18" ry="23.18" fill="#348eed"/><path d="M738.54,142.22l-65.29-1.83a9.79,9.79,0,0,1-9.52-9.79V128.1a9.79,9.79,0,0,1,9.35-9.78l65.29-2.93a9.79,9.79,0,0,1,10.23,9.78v7.27A9.79,9.79,0,0,1,738.54,142.22Z" transform="translate(-120.51 -91.11)" fill="#348eed"/><path d="M797.66,142.22l65.29-1.83a9.79,9.79,0,0,0,9.52-9.79V128.1a9.79,9.79,0,0,0-9.35-9.78l-65.29-2.93a9.79,9.79,0,0,0-10.23,9.78v7.27A9.79,9.79,0,0,0,797.66,142.22Z" transform="translate(-120.51 -91.11)" fill="#348eed"/><path d="M738.54,142.22l-65.29-1.83a9.79,9.79,0,0,1-9.52-9.79V128.1a9.79,9.79,0,0,1,9.35-9.78l65.29-2.93a9.79,9.79,0,0,1,10.23,9.78v7.27A9.79,9.79,0,0,1,738.54,142.22Z" transform="translate(-120.51 -91.11)" fill="#f5f5f5" opacity="0.2"/><path d="M797.66,142.22l65.29-1.83a9.79,9.79,0,0,0,9.52-9.79V128.1a9.79,9.79,0,0,0-9.35-9.78l-65.29-2.93a9.79,9.79,0,0,0-10.23,9.78v7.27A9.79,9.79,0,0,0,797.66,142.22Z" transform="translate(-120.51 -91.11)" fill="#f5f5f5" opacity="0.2"/><rect x="523.26" y="22.87" width="25.2" height="28.05" rx="11.17" ry="11.17" fill="#348eed"/><rect x="747.2" y="22.87" width="25.2" height="28.05" rx="11.17" ry="11.17" fill="#348eed"/><rect x="528.49" y="16.69" width="15.21" height="7.61" rx="3.8" ry="3.8" fill="#348eed"/><rect x="529.92" y="3.85" width="11.41" height="17.12" rx="5.71" ry="5.71" fill="#348eed"/><ellipse cx="506.14" cy="12.41" rx="31.86" ry="4.28" fill="#348eed"/><ellipse cx="565.1" cy="12.41" rx="31.86" ry="4.28" fill="#348eed"/><rect x="752.9" y="16.69" width="15.21" height="7.61" rx="3.8" ry="3.8" fill="#348eed"/><rect x="754.33" y="3.85" width="11.41" height="17.12" rx="5.71" ry="5.71" fill="#348eed"/><ellipse cx="730.56" cy="12.41" rx="31.86" ry="4.28" fill="#348eed"/><ellipse cx="789.51" cy="12.41" rx="31.86" ry="4.28" fill="#348eed"/><ellipse cx="506.14" cy="12.41" rx="31.86" ry="4.28" fill="#f5f5f5" opacity="0.2"/><ellipse cx="565.1" cy="12.41" rx="31.86" ry="4.28" fill="#f5f5f5" opacity="0.2"/><ellipse cx="730.56" cy="12.41" rx="31.86" ry="4.28" fill="#f5f5f5" opacity="0.2"/><ellipse cx="789.51" cy="12.41" rx="31.86" ry="4.28" fill="#f5f5f5" opacity="0.2"/><rect x="628.81" y="52.82" width="38.04" height="15.21" rx="7.61" ry="7.61" fill="#348eed"/><rect x="628.81" y="52.82" width="38.04" height="15.21" rx="7.61" ry="7.61" fill="#f5f5f5" opacity="0.2"/><polygon points="682.36 131.85 597.65 131.85 597.65 216.56 682.36 216.56 704 216.56 704 131.85 682.36 131.85" fill="#67647e"/><rect x="682.36" y="131.85" width="21.65" height="84.71" opacity="0.25"/><rect x="608" y="145.97" width="16" height="8.47" opacity="0.25"/><path d="M764.45,213c3.6,5.1,3,11.67,3,11.67s-6.38-1.69-10-6.79-5-10.32-3-11.67S760.85,207.89,764.45,213Z" transform="translate(-120.51 -91.11)" fill="#67647e"/><path d="M770.54,213c-3.6,5.1-3,11.67-3,11.67s6.38-1.69,10-6.79,5-10.32,3-11.67S774.14,207.89,770.54,213Z" transform="translate(-120.51 -91.11)" fill="#67647e"/><path d="M324.48,444.59l-.11.34A2,2,0,0,0,324.48,444.59Z" transform="translate(-120.51 -91.11)" fill="url(#5bed69c4-1e02-4930-aaf9-54950fab6759)"/><path d="M646.39,721.2c.07-.1.14-.19.19-.29l.11-.21c.05-.1.11-.19.15-.29l.08-.21c0-.1.08-.2.11-.3s0-.13.05-.2.05-.2.07-.31,0-.12,0-.19,0-.21,0-.32,0-.11,0-.17,0-.22,0-.33,0-.1,0-.15,0-.23,0-.34l0-.13c0-.12,0-.24-.08-.36l0-.11c0-.13-.08-.25-.12-.38l0-.08q-.07-.2-.16-.39l0-.06q-.09-.21-.2-.41l0,0-.24-.43h0a14.8,14.8,0,0,0-3.43-3.72c-10.31,4.25-23-.61-23-.61s-17-8.49-15.77-6.07c.41.82.2,2.45-.26,4.27-8.14-1.71-12.63-6.08-15.07-10l9.27-10s-37.61-21.23-41.85-32.15-24.87-41.85-24.87-41.85-6.67-24.26-18.8-29.72c0,0-24.19-28.9-38.32-53.68,5-12.49,12-32,10.42-40.33-2-10.38.07-30,.9-36.94,6.71,5.6,34,27.77,44.59,27.24,3.81-.19,7.91-2.23,11.76-4.95,9.16-5.8,17.36-16.28,17.36-16.28-1.24.12-2.25-1-3.07-2.9,10.13-11,31.11-33.64,33.4-34.1,3-.61,19.41-29.11,10.31-35.18s-25.47,15.77-26.08,20c-.41,2.88-13.1,15.52-21.22,23.36,0-.2,0-.31,0-.31l-1.2.6c0-.38,0-.6,0-.6l-20.95,10.47-17.87-24.42s-4.85-26.08-17-30.33S474.48,370,474.48,370a12.49,12.49,0,0,0-.27,1.29c-.61-.81-.94-1.29-.94-1.29s0,.11-.08.29a31.91,31.91,0,0,1-.69-11.42l.17-.1c.07-.47.15-.92.23-1.35a30.35,30.35,0,0,0,12.29-37.59c3.09-2.16,7.57-3.5,11.38-5.14a33.38,33.38,0,0,0,13.69-10.35,12.07,12.07,0,0,0-6.34.13c-.26-2.81,3-6,.46-8.14-1.56-1.33-4.47-1.21-6.69-.55s-4.25,1.74-6.61,2c-4.11.5-8-1.49-10.93-3.64s-5.69-4.67-9.61-5.69c-7.79-2-15.51,2.61-23.33,4.57-12.56,3.14-20,6.5-20.61,14.5a26,26,0,0,0-4.44,3.77,16.55,16.55,0,0,0-5.32,9c-1.06,5.44,1.14,11,3.8,15.84,1.51,2.77,8.77,17.12,13.7,15.23a30.5,30.5,0,0,0,4.54,4.25c-.16,1.65-.39,3.32-.65,5a11.28,11.28,0,0,1-3.57,1.23,42.93,42.93,0,0,1-8.23.72,120.44,120.44,0,0,1-12.91-.79,109,109,0,0,0-12.55-.72,61.25,61.25,0,0,0-6.26.3l-.32,0-1.24.15-.19,0-1.35.22-.15,0-1.1.22-.25.05-1.12.27h0l-1.1.31-.18.05-.86.27-.19.06c-.65.22-1.26.46-1.84.7l-.18.08-.72.31-.13.06-.81.38-.07,0-.7.35-.17.09-.68.35,0,0-.86.45-.52.27-.24.13-.71.36c-6.07,3-64.9,18.8-75.21,50.34l.21.19,0,0,.23.21c-.17.46-.34.92-.49,1.38,0,0,1,.9,2.56,2.36-2.77,12.06-10.19,42.88-14.09,44.34-4.85,1.82-10.31,38.82,2.43,37.61s12.74-30.93,12.74-30.93,8.4-22.52,14.59-33.95a15.94,15.94,0,0,1,2.43,4.71l0,.13,0-.12a3.41,3.41,0,0,1,.07,1.6c.6-1.76,3.71-9.84,10.2-8.76,6.93,1.16,33.11-24.63,35.59-27.1-.06.67-.14,1.51-.22,2.48h0v0c0,.57-.1,1.18-.15,1.84l0,.21,0,.5,0,.33,0,.51,0,.36,0,.51,0,.46-.05.75,0,.61,0,.43,0,.61,0,.41,0,.64,0,.43,0,.7,0,.4-.07,1.1v.15l-.06,1,0,.35,0,.84,0,.4,0,.86,0,.36-.05,1v.2q0,.65-.06,1.31v.08q0,.6-.05,1.2v.35l0,1,0,.4q0,.5,0,1v.34q0,1.37-.09,2.77v.2q0,.59,0,1.18v.36q0,.53,0,1.06v.37q0,.58,0,1.17v.23q0,1.43,0,2.88c0,.1,0,.2,0,.31q0,.56,0,1.12,0,.19,0,.39,0,.53,0,1.07c0,.1,0,.2,0,.3,0,13.23.81,26.7,3.78,34.38a37.78,37.78,0,0,1,2.48,12.92,52.73,52.73,0,0,1-6.12,22.87h0l.71-.22-.13.23.39-.12c-.6,1.25-1,1.94-1,1.94s.88-.28,2.45-.74c-2.24,7.9-3.73,20.06.58,35.32,0,0,2.43,13.34.61,18.2s-3.64,43.67-3.64,43.67-3.64,4.85-10.31,1.82-88.55-13.34-88.55-13.34-.19.33-.51.92c-2.52-.79-6.15-2-8.8-3.11,1-1.38,1.89-2.17,2.64-2.06,0,0-4.37-2.11-9.13-3.78h0l-.87-.3h0l-.85-.28-.06,0-.81-.25-.09,0-.74-.21-.15,0-.7-.18-.18,0-.67-.15-.19,0-.6-.12-.23,0-.54-.09-.26,0-.49-.06-.27,0-.46,0h-.93l-.37,0-.24,0-.33.07-.22,0-.28.1-.2.07a2.36,2.36,0,0,0-.26.15l-.15.09a1.88,1.88,0,0,0-.33.31c-3,3.64-20,73.39-12.13,78.24l.68.41.28.16.36.2.35.18.25.13.38.18.19.09.39.17.14.06.4.15.09,0,.41.13h.05c4.4,1.19,5.86-2.88,11.19-11.6,5.22-8.54,11.93-19.31,17.79-23.3.13.29.26.58.4.86,0,0,61.26,6.67,83.7,14s40,17,54.59,0c13.06-15.23,26.11-64.62,28.66-74.63h0v0l.38-1.5h0l0-.13v-.13l48.52,37,21.23,24.87s29.72,41.85,35.18,42.46S567,722.73,567,722.73l.92-1c.22,1.11.39,2.13.52,3-2,4.81-.15,10.61,1.67,14.43h0l.08.16.21.42.11.22.2.39.1.19.21.4.11.19.16.29.08.15.21.36.09.15.13.21.07.12.16.26.06.1.1.15,0,.07.1.16,0,0,.06.08v0l0,0s63.69-15.16,71.57-20c.25-.15.48-.31.7-.47l.2-.16.4-.32.2-.19.31-.29.18-.21.24-.28Z" transform="translate(-120.51 -91.11)" fill="url(#a88837d3-ccd3-4ab3-a7ec-270b2797a153)"/><path d="M276.5,602.74s-14.18-4.14-14.77-5.91-12.41,32.49-12.41,32.49l11.82,8.27s12.41-7.09,18.91-5.91S276.5,602.74,276.5,602.74Z" transform="translate(-120.51 -91.11)" fill="#4c4c56"/><path d="M581.94,687.22s1.77,16,21.27,17.72-13,16-13,16l-24.81,1.77s-.59-10-4.73-17.72S581.94,687.22,581.94,687.22Z" transform="translate(-120.51 -91.11)" fill="#4c4c56"/><path d="M376.94,507.62s-11.22,17.13-3.54,44.31c0,0,2.36,13,.59,17.72s-3.54,42.54-3.54,42.54-3.54,4.73-10,1.77-86.25-13-86.25-13-13,22.45-5.91,36c0,0,59.67,6.5,81.53,13.59s39,16.54,53.17,0,28.36-74.44,28.36-74.44l47.26,36,20.68,24.22s28.95,40.76,34.27,41.35,30.13,39.58,30.13,39.58l30.13-32.49S557.13,664.18,553,653.54s-24.22-40.76-24.22-40.76-6.5-23.63-18.31-28.95c0,0-42.54-50.81-46.67-74.44S392.89,497,392.89,497Z" transform="translate(-120.51 -91.11)" fill="#5f5d7e"/><path d="M596.71,712s4.14-9.45,3-11.82S615,706.12,615,706.12s12.41,4.73,22.45.59c0,0,8.86,6.5,1.18,11.22s-69.71,19.5-69.71,19.5-9.45-13.59-1.77-21.27Z" transform="translate(-120.51 -91.11)" fill="#986365"/><path d="M553,653.54c-4.14-10.63-24.22-40.76-24.22-40.76s-6.5-23.63-18.31-28.95c0,0-42.54-50.81-46.67-74.44-.85-4.87-4.37-8.26-9.41-10.57l-8.24,24.75-11.25,33.8c-2.17,6.52-4.23,13.79-4,20.53.29-1.12.44-1.74.44-1.74l47.26,36,20.68,24.22s28.95,40.76,34.27,41.35,30.13,39.58,30.13,39.58l30.13-32.49S557.13,664.18,553,653.54Z" transform="translate(-120.51 -91.11)" opacity="0.1"/><path d="M473.23,355.79s-5,12.7,1.48,24.52-2.66,32.79-8.57,34-29.54-14.18-31.31-24.22,7.68-30.72,3-44.31Z" transform="translate(-120.51 -91.11)" fill="#fdc2cc"/><path d="M441.33,377.65s18.31,37.22,38.4,10.63c0,0,20.09,40.76,13.59,47.26A136.22,136.22,0,0,1,478.55,448l-10.63,74.44s-60.26-20.68-85.66-17.13l39-93.34Z" transform="translate(-120.51 -91.11)" opacity="0.1"/><path d="M441.33,375.88s18.31,37.22,38.4,10.63c0,0,20.09,40.76,13.59,47.26a136.22,136.22,0,0,1-14.77,12.41l-10.63,74.44s-60.26-20.68-85.66-17.13l39-93.34Z" transform="translate(-120.51 -91.11)" fill="#d39999"/><path d="M310.77,419s-10,46.08-14.77,47.85-10,37.81,2.36,36.63,12.41-30.13,12.41-30.13,13-34.86,18.31-39S310.77,419,310.77,419Z" transform="translate(-120.51 -91.11)" fill="#fdc2cc"/><path d="M542.95,440.27s26.59-24.81,27.18-28.95,16.54-25.4,25.4-19.5-7.09,33.67-10,34.27-37.81,39-37.81,39Z" transform="translate(-120.51 -91.11)" fill="#fdc2cc"/><path d="M438.67,366.13s-3.25,3.84-25.11,1.48-27.18,1.77-33.08,4.73-63.21,18.31-73.26,49c0,0,22.45,20.09,20.09,25.4,0,0,3-10,10-8.86s34.86-26.59,34.86-26.59-5.32,52,1.77,70.3-3.54,36.63-3.54,36.63,50.22-16,72.67-8.27c0,0,13-58.49,1.77-82.12s4.73-46.08,4.73-46.08Z" transform="translate(-120.51 -91.11)" opacity="0.1"/><path d="M439.26,364.36s-3.25,3.84-25.11,1.48-27.18,1.77-33.08,4.73-63.21,18.31-73.26,49c0,0,22.45,20.09,20.09,25.4,0,0,3-10,10-8.86s34.86-26.59,34.86-26.59-5.32,52,1.77,70.3S371,516.48,371,516.48s50.22-16,72.67-8.27c0,0,13-58.49,1.77-82.12S450.19,380,450.19,380Z" transform="translate(-120.51 -91.11)" opacity="0.1"/><path d="M438.67,364.36s-3.25,3.84-25.11,1.48-27.18,1.77-33.08,4.73-63.21,18.31-73.26,49c0,0,22.45,20.09,20.09,25.4,0,0,3-10,10-8.86s34.86-26.59,34.86-26.59-5.32,52,1.77,70.3-3.54,36.63-3.54,36.63,50.22-16,72.67-8.27c0,0,13-58.49,1.77-82.12S449.6,380,449.6,380Z" transform="translate(-120.51 -91.11)" fill="#ec7580"/><path d="M471.76,375s8.57,12.7,20.38,16.84,16.54,29.54,16.54,29.54l17.72,24.22L547.67,435s.59,28.95,6.5,28.36c0,0-14.77,18.91-26.59,19.5S482.69,455,482.69,455s-3.54,26-1.18,38.4-14.77,50.22-14.77,50.22l-23.63-4.73s12.41-47.26,27.77-54.94c0,0,0-31.9-2.36-39.58s15.36-36.63,13-42.54c-1.33-3.31-6.53-10.4-9.16-16.84A16.85,16.85,0,0,1,471.76,375Z" transform="translate(-120.51 -91.11)" opacity="0.1"/><path d="M473.53,373.81s8.57,12.7,20.38,16.84,16.54,29.54,16.54,29.54l17.72,24.22,21.27-10.63s.59,28.95,6.5,28.36c0,0-14.77,18.91-26.59,19.5s-44.9-27.77-44.9-27.77-3.54,26-1.18,38.4-14.77,50.22-14.77,50.22l-23.63-4.73s12.41-47.26,27.77-54.94c0,0,0-31.9-2.36-39.58s15.36-36.63,13-42.54c-1.33-3.31-6.53-10.4-9.16-16.84A16.85,16.85,0,0,1,473.53,373.81Z" transform="translate(-120.51 -91.11)" opacity="0.1"/><path d="M472.35,373.81s8.57,12.7,20.38,16.84,16.54,29.54,16.54,29.54L527,444.41l21.27-10.63s.59,28.95,6.5,28.36c0,0-14.77,18.91-26.59,19.5s-44.9-27.77-44.9-27.77-3.54,26-1.18,38.4-14.77,50.22-14.77,50.22l-23.63-4.73s12.41-47.26,27.77-54.94c0,0,0-31.9-2.36-39.58s15.36-36.63,13-42.54c-1.33-3.31-6.53-10.4-9.16-16.84A16.85,16.85,0,0,1,472.35,373.81Z" transform="translate(-120.51 -91.11)" fill="#ec7580"/><path d="M473.35,374.81s8.57,12.7,20.38,16.84,16.54,29.54,16.54,29.54L528,445.41l21.27-10.63s.59,28.95,6.5,28.36c0,0-14.77,18.91-26.59,19.5s-44.9-27.77-44.9-27.77-3.54,26-1.18,38.4-14.77,50.22-14.77,50.22l-23.63-4.73s12.41-47.26,27.77-54.94c0,0,0-31.9-2.36-39.58s15.36-36.63,13-42.54c-1.33-3.31-6.53-10.4-9.16-16.84A16.85,16.85,0,0,1,473.35,374.81Z" transform="translate(-120.51 -91.11)" opacity="0.05"/><path d="M267.64,596.83s-17.13-8.27-20.09-4.73-19.5,71.48-11.82,76.21,8.27,1.18,14.77-9.45,15.36-24.81,21.86-24.22c0,0-18.91-6.5-18.31-8.86S263.51,596.24,267.64,596.83Z" transform="translate(-120.51 -91.11)" fill="#986365"/><path d="M438.86,361a29.53,29.53,0,0,0,32.92,1.85,29.93,29.93,0,0,1,1.46-5.9l-35.45-10C439.25,351.12,439.35,356,438.86,361Z" transform="translate(-120.51 -91.11)" opacity="0.1"/><path d="M460.78,337.89c7.2.62,16-.73,18.65-5.63.77-1.41.93-3,1.71-4.37,2.26-4.06,8.72-5.72,13.91-8a32.51,32.51,0,0,0,13.33-10.08,11.76,11.76,0,0,0-6.18.13c-.25-2.73,2.9-5.85.45-7.93-1.52-1.29-4.35-1.17-6.52-.53s-4.13,1.69-6.44,2c-4,.49-7.79-1.45-10.65-3.55s-5.54-4.55-9.36-5.54c-7.58-2-15.11,2.55-22.72,4.45-15.61,3.91-23.18,8.15-18.94,21.72C431.16,330.61,447.68,336.76,460.78,337.89Z" transform="translate(-120.51 -91.11)" fill="#865a61"/><circle cx="336.18" cy="245.18" r="29.54" fill="#fdc2cc"/><path d="M433.73,331.79c1.43-5.8,5.56-11.21,11.31-12.82,4.89-1.37,10.09.12,14.87,1.85s9.65,3.75,14.72,3.45,10.39-3.8,10.77-8.86a4.24,4.24,0,0,0-.37-2.29,5.63,5.63,0,0,0-2.11-2c-7.43-4.74-15.88-8.47-24.69-8.33-7.25.12-14.18,2.84-20.92,5.52-8.5,3.38-18.17,8.11-19.92,17.09-1,5.3,1.11,10.69,3.7,15.43,1.5,2.74,8.76,17.12,13.56,14.75C436.59,354.66,432.81,335.51,433.73,331.79Z" transform="translate(-120.51 -91.11)" opacity="0.1"/><path d="M434.91,330.61c1.43-5.8,5.56-11.21,11.31-12.82,4.89-1.37,10.09.12,14.87,1.85s9.65,3.75,14.72,3.45,10.39-3.8,10.77-8.86a4.24,4.24,0,0,0-.37-2.29,5.63,5.63,0,0,0-2.11-2c-7.43-4.74-15.88-8.47-24.69-8.33-7.25.12-14.18,2.84-20.92,5.52-8.5,3.38-18.17,8.11-19.92,17.09-1,5.3,1.11,10.69,3.7,15.43,1.5,2.74,8.76,17.12,13.56,14.75C437.77,353.48,434,334.33,434.91,330.61Z" transform="translate(-120.51 -91.11)" fill="#865a61"/><path d="M237.51,668.91c-7.68-4.73,8.86-72.67,11.82-76.21,1.29-1.55,5.31-.84,9.42.46-4.66-1.63-9.71-2.83-11.19-1-3,3.54-19.5,71.48-11.82,76.21a13.93,13.93,0,0,0,4.28,1.95A21.65,21.65,0,0,1,237.51,668.91Z" transform="translate(-120.51 -91.11)" fill="#fff" opacity="0.5"/><path d="M640.81,710.34c.8,2,.56,4.39-2.75,6.42-7.68,4.73-69.71,19.5-69.71,19.5a29.62,29.62,0,0,1-1.69-2.87,31.57,31.57,0,0,0,2.28,4.05s62-14.77,69.71-19.5C642.62,715.5,642.17,712.58,640.81,710.34Z" transform="translate(-120.51 -91.11)" fill="#fff" opacity="0.5"/><g opacity="0.05"><path d="M330.47,439.08C325.56,431.18,312,419,312,419c10-30.72,67.35-46.08,73.26-49,3.26-1.63,6.34-3.62,12.12-4.68-9,.66-12.79,3.24-16.84,5.27-5.91,3-63.21,18.31-73.26,49,0,0,21.58,19.31,20.19,25.07A18.49,18.49,0,0,1,330.47,439.08Z" transform="translate(-120.51 -91.11)"/><path d="M327.42,444.67l-.11.33A1.91,1.91,0,0,0,327.42,444.67Z" transform="translate(-120.51 -91.11)"/><path d="M439.35,365.33l-.68-1s-.75.88-3.93,1.54A34.47,34.47,0,0,0,439.35,365.33Z" transform="translate(-120.51 -91.11)"/><path d="M338,436.17a7.88,7.88,0,0,0,2.58-.7A6.42,6.42,0,0,0,338,436.17Z" transform="translate(-120.51 -91.11)"/><path d="M414.86,506.88c10.57-1.16,20.89-1.18,28.24,1.33,0,0,.14-.62.37-1.73C435.41,504.91,425.06,505.46,414.86,506.88Z" transform="translate(-120.51 -91.11)"/><path d="M375.68,514.93c2-4,9.17-19.82,3-35.67-7.09-18.31-1.77-70.3-1.77-70.3s-2,2-5.12,5c-1.09,12.89-3.67,50.84,2.17,65.93,7.09,18.31-3.54,36.63-3.54,36.63S372.39,515.86,375.68,514.93Z" transform="translate(-120.51 -91.11)"/></g><path d="M905.08,706.34c-7.12,3.67-14.58,6.84-21.94,10-27.19,11.48-54.79,23.06-84,27-54.82,7.39-111.44-12.62-165.33-.17-45.15,10.42-82.49,42.35-126.6,56.57-20.51,6.61-41.85,9.2-63.38,9.2H441q-4-.05-7.94-.2c-21.83-.82-43.75-4.05-65.15-8.18-67.57-13-136.34-36.83-188-80.7C330.34,692.33,640.19,650.15,905.08,706.34Z" transform="translate(-120.51 -91.11)" fill="#252223" opacity="0.1"/><path d="M745.48,534.72s19.42,19.42,8.46,48.24,18.8,76.75,18.8,76.75l-.91-.15c-39.89-7-59.71-52.66-37.53-86.55C742.54,560.4,749.31,545.62,745.48,534.72Z" transform="translate(-120.51 -91.11)" fill="#348eed"/><path d="M745.48,534.72s11,23.81,0,43.23-1.88,73.93,27.25,81.76" transform="translate(-120.51 -91.11)" fill="none" stroke="#535461" stroke-miterlimit="10"/><path d="M710.89,613.27s22.16-3.53,24.18,16.33,42.62,22.61,42.62,22.61l-.76.51c-33.52,22-65.56,14-60.73-15.2C718,626.66,717.84,615.75,710.89,613.27Z" transform="translate(-120.51 -91.11)" fill="#348eed"/><path d="M710.89,613.27s22.16-3.53,24.18,16.33,42.62,22.61,42.62,22.61l-.76.51c-33.52,22-65.56,14-60.73-15.2C718,626.66,717.84,615.75,710.89,613.27Z" transform="translate(-120.51 -91.11)" fill="#f5f5f5" opacity="0.2"/><path d="M710.89,613.27s17.2,3.78,15.79,19.42,25.55,34.39,51,19.53" transform="translate(-120.51 -91.11)" fill="none" stroke="#535461" stroke-miterlimit="10"/><path d="M795.6,656s-13.94-2.79-17.65-6.5-20.44-10.22-22.3-5.57-25.09,20.44-9.29,23.23,37.17,3.72,41.81,1.86S795.6,656,795.6,656Z" transform="translate(-120.51 -91.11)" fill="#a8a8a8"/><path d="M746.35,665.42c15.8,2.79,37.17,3.72,41.81,1.86,3.54-1.42,6-8.21,7-11.38l.46.1s-2.79,11.15-7.43,13-26,.93-41.81-1.86c-4.56-.8-5.86-2.69-5.37-5.09C741.37,663.62,743,664.82,746.35,665.42Z" transform="translate(-120.51 -91.11)" opacity="0.2"/><path d="M1048.26,680s13.21-44.87-2.48-77.89a70.87,70.87,0,0,1-5.73-44.46,119.19,119.19,0,0,1,6.29-20.87" transform="translate(-120.51 -91.11)" fill="none" stroke="#535461" stroke-miterlimit="10" stroke-width="2"/><path d="M1036.58,515.88c0,5.5,10,21.44,10,21.44s10-15.95,10-21.44a10,10,0,0,0-19.91,0Z" transform="translate(-120.51 -91.11)" fill="#348eed"/><path d="M1020.12,546.34c3,4.62,20,12.59,20,12.59s-.31-18.8-3.3-23.41a10,10,0,0,0-16.72,10.82Z" transform="translate(-120.51 -91.11)" fill="#348eed"/><path d="M1020.84,598.39c4.91,2.48,23.63.77,23.63.77s-9.76-16.07-14.67-18.55a10,10,0,1,0-9,17.78Z" transform="translate(-120.51 -91.11)" fill="#348eed"/><path d="M1030.25,637.65c4.42,3.27,23.16,4.75,23.16,4.75s-6.9-17.49-11.32-20.76a10,10,0,0,0-11.84,16Z" transform="translate(-120.51 -91.11)" fill="#348eed"/><path d="M1061,560c-3.94,3.83-22.32,7.8-22.32,7.8s4.5-18.25,8.44-22.08A10,10,0,0,1,1061,560Z" transform="translate(-120.51 -91.11)" fill="#348eed"/><path d="M1071.46,606.05c-4.91,2.48-23.63.77-23.63.77s9.76-16.07,14.67-18.55a10,10,0,1,1,9,17.78Z" transform="translate(-120.51 -91.11)" fill="#348eed"/><path d="M1075.45,652.2c-4.42,3.27-23.16,4.75-23.16,4.75s6.9-17.49,11.32-20.76a10,10,0,0,1,11.84,16Z" transform="translate(-120.51 -91.11)" fill="#348eed"/><path d="M1077,675.61s-24.15-4.83-30.59-11.27-35.42-17.71-38.64-9.66-43.47,35.42-16.1,40.25,64.4,6.44,72.44,3.22S1077,675.61,1077,675.61Z" transform="translate(-120.51 -91.11)" fill="#a8a8a8"/><path d="M991.68,691.94c27.37,4.83,64.4,6.44,72.44,3.22,6.13-2.45,10.39-14.23,12.07-19.72l.81.17s-4.83,19.32-12.88,22.54-45.08,1.61-72.44-3.22c-7.9-1.39-10.16-4.67-9.31-8.81C983.05,688.82,985.8,690.9,991.68,691.94Z" transform="translate(-120.51 -91.11)" opacity="0.2"/></svg>
\ No newline at end of file
<svg id="740546cb-34ca-4331-8221-ac3d3fc9ee67" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1120.61" height="862.52" viewBox="0 0 1120.61 862.52"><defs><linearGradient id="07a0b5f0-40d7-4714-acbe-80fa7c137a96" x1="922.95" y1="714.28" x2="922.95" y2="199.47" gradientTransform="matrix(1, 0.09, -0.09, 1, 45.13, -84.62)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity="0.25"/><stop offset="0.54" stop-color="gray" stop-opacity="0.12"/><stop offset="1" stop-color="gray" stop-opacity="0.1"/></linearGradient><linearGradient id="81276d2b-ddf3-474d-b794-9223ea4701e2" x1="329.5" y1="708.38" x2="329.5" y2="197" gradientTransform="matrix(1, 0, 0, 1, 0, 0)" xlink:href="#07a0b5f0-40d7-4714-acbe-80fa7c137a96"/></defs><title>co-working</title><path d="M1089.7,507c-41.29,62.11-30.84,148.44-10.05,216.82,7,22.89,14.91,47.08,10.21,72.38-5.75,30.94-29.19,54.77-53.22,68.11-43.79,24.33-94.62,22.33-132.33-5.19-32.59-23.79-54.74-64.38-88-87C760.72,734.4,686.49,754.58,622.39,787c-45.35,22.91-95.14,52.13-138.12,33.8-30.24-12.9-49.84-47.64-59.58-85.15-4.7-18.11-7.78-37.84-17.8-51.81-6-8.3-14-14-22.29-18.63C308.89,622.47,209,654.06,135.75,606,86.32,573.6,56.91,508.46,45.93,439.31S40.36,296.61,47.7,224.23C52.91,172.8,60.38,117.78,89.07,76.55c30.35-43.61,79.58-62.18,123-56.95S293.67,50.73,326.9,82C368.43,121,406.27,170.46,459,184c35.91,9.25,74.61.57,112.35-4,63.1-7.55,125.63-3.35,187.74,1.64,59.47,4.78,119.32,10.39,175.17,30.77,39.52,14.42,70.34,43.14,107.39,62.24,24.15,12.45,51.05,14.63,73.68,31,27.88,20.15,52.52,56.69,42.83,101.84C1148.95,450.48,1111.61,474,1089.7,507Z" transform="translate(-39.7 -18.74)" fill="#348eed" opacity="0.1"/><rect x="880.8" y="256.42" width="40.89" height="61.9" fill="#348eed" opacity="0.1"/><rect x="884.77" y="262.44" width="32.94" height="49.86" fill="#348eed" opacity="0.1"/><rect x="797.8" y="213.42" width="62.8" height="61.9" fill="#348eed" opacity="0.1"/><rect x="803.9" y="219.44" width="50.59" height="49.86" fill="#348eed" opacity="0.1"/><rect x="64.62" y="121.32" width="191.95" height="5.11" fill="#348eed" opacity="0.1"/><rect x="64.62" y="146.31" width="191.95" height="5.11" fill="#348eed" opacity="0.1"/><rect x="388.43" y="452.63" width="19.61" height="219.14" fill="#d6d6e3"/><path d="M1020.54,494.38V292.24A21.25,21.25,0,0,1,1041.79,271h0A21.25,21.25,0,0,1,1063,292.24V536.88a21.25,21.25,0,0,1-21.25,21.25H910.14a21.25,21.25,0,0,1-21.25-21.25h0a21.25,21.25,0,0,1,21.25-21.25h89.15A21.25,21.25,0,0,0,1020.54,494.38Z" transform="translate(-39.7 -18.74)" fill="#aebee1"/><path d="M1020.54,494.38V292.24A21.25,21.25,0,0,1,1041.79,271h0A21.25,21.25,0,0,1,1063,292.24V536.88a21.25,21.25,0,0,1-21.25,21.25H910.14a21.25,21.25,0,0,1-21.25-21.25h0a21.25,21.25,0,0,1,21.25-21.25h89.15A21.25,21.25,0,0,0,1020.54,494.38Z" transform="translate(-39.7 -18.74)" fill="#535461"/><path d="M888.92,535.74a21.25,21.25,0,0,1,21.22-20.11h89.15a21.25,21.25,0,0,0,21.25-21.25V292.24A21.25,21.25,0,0,1,1040.77,271V535.74Z" transform="translate(-39.7 -18.74)" fill="#d6d6e3"/><path d="M232.2,501.2V299.06A21.25,21.25,0,0,0,211,277.81h0a21.25,21.25,0,0,0-21.25,21.25V543.7A21.25,21.25,0,0,0,211,565H342.6a21.25,21.25,0,0,0,21.25-21.25h0a21.25,21.25,0,0,0-21.25-21.25H253.46A21.25,21.25,0,0,1,232.2,501.2Z" transform="translate(-39.7 -18.74)" fill="#aebee1"/><path d="M232.2,501.2V299.06A21.25,21.25,0,0,0,211,277.81h0a21.25,21.25,0,0,0-21.25,21.25V543.7A21.25,21.25,0,0,0,211,565H342.6a21.25,21.25,0,0,0,21.25-21.25h0a21.25,21.25,0,0,0-21.25-21.25H253.46A21.25,21.25,0,0,1,232.2,501.2Z" transform="translate(-39.7 -18.74)" fill="#535461"/><path d="M363.82,542.56a21.25,21.25,0,0,0-21.22-20.11H253.46A21.25,21.25,0,0,1,232.2,501.2V299.06A21.25,21.25,0,0,0,212,277.84V542.56Z" transform="translate(-39.7 -18.74)" fill="#d6d6e3"/><rect x="776.4" y="452.63" width="19.61" height="224.25" fill="#d6d6e3"/><rect x="388.43" y="452.63" width="19.61" height="16.2" opacity="0.1"/><rect x="776.4" y="452.63" width="19.61" height="16.2" opacity="0.1"/><path d="M498.17,337.92q-.47,5.18-1.19,10.5h-2.77v-10.5Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><path d="M578.52,447c.06,3.55-2.5,6.46-5.67,6.46H513v-6.24H562.8c2.15,0,3.49-2.6,2.41-4.68l-45.16-91.85a4,4,0,0,0-3.5-2.26H494.21v-10.5h28.21a2.8,2.8,0,0,1,2.45,1.58l51.77,100A17,17,0,0,1,578.52,447Z" transform="translate(-39.7 -18.74)" fill="#535461"/><path d="M468.6,430.34l-.82,1.38-7.67-5.12,23.73-182.47h6.11s.25.84.66,2.44C494.7,262.34,514.79,351.65,468.6,430.34Z" transform="translate(-39.7 -18.74)" fill="#535461"/><path d="M490.6,246.57l-22,183.77-.82,1.38-7.67-5.12,23.73-182.47h6.11S490.19,245,490.6,246.57Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><rect x="376.97" y="329.82" width="189.29" height="14.5" transform="translate(41.16 746.52) rotate(-83.17)" fill="#d6d6e3"/><path d="M403.83,447.07a1.72,1.72,0,0,1-1.71,1.71h-2.56a1.71,1.71,0,0,1-1.71-1.71.83.83,0,0,1,0-.2,1.71,1.71,0,0,1,1.69-1.5h2.56a1.72,1.72,0,0,1,1.65,1.3A1.58,1.58,0,0,1,403.83,447.07Z" transform="translate(-39.7 -18.74)" fill="#e3edf9"/><path d="M411.5,447.07a1.72,1.72,0,0,1-1.71,1.71h-2.56a1.71,1.71,0,0,1-1.71-1.71,1.68,1.68,0,0,1,.07-.47,1.61,1.61,0,0,1,.43-.73,1.67,1.67,0,0,1,1.2-.5h2.56a1.72,1.72,0,0,1,1.57,1A1.76,1.76,0,0,1,411.5,447.07Z" transform="translate(-39.7 -18.74)" fill="#e3edf9"/><path d="M418.32,447.07a1.72,1.72,0,0,1-1.71,1.71h-2.56a1.71,1.71,0,0,1-1.71-1.71,1.62,1.62,0,0,1,.15-.71,1.74,1.74,0,0,1,1.55-1h2.56a1.7,1.7,0,0,1,1.71,1.71Z" transform="translate(-39.7 -18.74)" fill="#e3edf9"/><path d="M426,447.07a1.72,1.72,0,0,1-1.71,1.71h-2.56a1.71,1.71,0,0,1-1.4-2.69l.2-.22a1.67,1.67,0,0,1,1.2-.5h2.56a1.72,1.72,0,0,1,1.24.55A1.65,1.65,0,0,1,426,447.07Z" transform="translate(-39.7 -18.74)" fill="#e3edf9"/><path d="M403.78,446.66a1.58,1.58,0,0,1,.05.41,1.72,1.72,0,0,1-1.71,1.71h-2.56a1.71,1.71,0,0,1-1.71-1.71.83.83,0,0,1,0-.2Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><path d="M411.36,446.39a1.76,1.76,0,0,1,.14.67,1.72,1.72,0,0,1-1.71,1.71h-2.56a1.71,1.71,0,0,1-1.71-1.71,1.68,1.68,0,0,1,.07-.47Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><path d="M418.07,446.16a1.72,1.72,0,0,1,.26.9,1.72,1.72,0,0,1-1.71,1.71h-2.56a1.71,1.71,0,0,1-1.71-1.71,1.62,1.62,0,0,1,.15-.71Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><path d="M426,447.07a1.72,1.72,0,0,1-1.71,1.71h-2.56a1.71,1.71,0,0,1-1.4-2.69l5.2-.18A1.65,1.65,0,0,1,426,447.07Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><path d="M441.34,453.89H391.89v-2.25a3.85,3.85,0,0,1,3.72-3.85l39.66-1.37a5.88,5.88,0,0,1,6.08,5.87Z" transform="translate(-39.7 -18.74)" fill="#d6d6e3"/><path d="M685.31,447c-.06,3.55,2.5,6.46,5.67,6.46h59.88v-6.24H701c-2.15,0-3.49-2.6-2.41-4.68l45.16-91.85a4,4,0,0,1,3.5-2.26h22.35v-10.5H741.41A2.8,2.8,0,0,0,739,339.5l-51.77,100A17,17,0,0,0,685.31,447Z" transform="translate(-39.7 -18.74)" fill="#535461"/><path d="M795.24,430.34l.82,1.38,7.67-5.12L780,244.13h-6.11s-.25.84-.66,2.44C769.13,262.34,749,351.65,795.24,430.34Z" transform="translate(-39.7 -18.74)" fill="#535461"/><path d="M773.23,246.57l22,183.77.82,1.38,7.67-5.12L780,244.13h-6.11S773.64,245,773.23,246.57Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><rect x="784.97" y="242.43" width="14.5" height="189.29" transform="translate(-74.16 77.85) rotate(-6.83)" fill="#d6d6e3"/><path d="M860,447.07a1.72,1.72,0,0,0,1.71,1.71h2.56a1.71,1.71,0,0,0,1.71-1.71.83.83,0,0,0,0-.2,1.71,1.71,0,0,0-1.69-1.5h-2.56a1.72,1.72,0,0,0-1.65,1.3A1.58,1.58,0,0,0,860,447.07Z" transform="translate(-39.7 -18.74)" fill="#e3edf9"/><path d="M852.33,447.07a1.72,1.72,0,0,0,1.71,1.71h2.56a1.71,1.71,0,0,0,1.71-1.71,1.68,1.68,0,0,0-.07-.47,1.61,1.61,0,0,0-.43-.73,1.67,1.67,0,0,0-1.2-.5H854a1.72,1.72,0,0,0-1.57,1A1.76,1.76,0,0,0,852.33,447.07Z" transform="translate(-39.7 -18.74)" fill="#e3edf9"/><path d="M845.51,447.07a1.72,1.72,0,0,0,1.71,1.71h2.56a1.71,1.71,0,0,0,1.71-1.71,1.62,1.62,0,0,0-.15-.71,1.74,1.74,0,0,0-1.55-1h-2.56a1.7,1.7,0,0,0-1.71,1.71Z" transform="translate(-39.7 -18.74)" fill="#e3edf9"/><path d="M837.83,447.07a1.72,1.72,0,0,0,1.71,1.71h2.56a1.71,1.71,0,0,0,1.4-2.69l-.2-.22a1.67,1.67,0,0,0-1.2-.5h-2.56a1.72,1.72,0,0,0-1.24.55A1.65,1.65,0,0,0,837.83,447.07Z" transform="translate(-39.7 -18.74)" fill="#e3edf9"/><path d="M860.05,446.66a1.58,1.58,0,0,0-.05.41,1.72,1.72,0,0,0,1.71,1.71h2.56a1.71,1.71,0,0,0,1.71-1.71.83.83,0,0,0,0-.2Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><path d="M852.47,446.39a1.76,1.76,0,0,0-.14.67,1.72,1.72,0,0,0,1.71,1.71h2.56a1.71,1.71,0,0,0,1.71-1.71,1.68,1.68,0,0,0-.07-.47Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><path d="M845.76,446.16a1.72,1.72,0,0,0-.26.9,1.72,1.72,0,0,0,1.71,1.71h2.56a1.71,1.71,0,0,0,1.71-1.71,1.62,1.62,0,0,0-.15-.71Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><path d="M837.83,447.07a1.72,1.72,0,0,0,1.71,1.71h2.56a1.71,1.71,0,0,0,1.4-2.69l-5.2-.18A1.65,1.65,0,0,0,837.83,447.07Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><path d="M822.49,453.89h49.45v-2.25a3.85,3.85,0,0,0-3.72-3.85l-39.66-1.37a5.88,5.88,0,0,0-6.08,5.87Z" transform="translate(-39.7 -18.74)" fill="#d6d6e3"/><path d="M1029.47,481c23.07-39.13,14.71-118.06,15.64-119.57.83-1.33-2.35-38.5-23.55-47.58-3.83-7.59-7.6-16.14-7.6-16.14a6.73,6.73,0,0,1-1.22.91q-.25-.68-.49-1.38c-.27-.79-.52-1.6-.77-2.41a15.53,15.53,0,0,0,1.81.46,7.54,7.54,0,0,0,4.84-.43,5.39,5.39,0,0,0,1.39-1.07c1.67-1.11,2.59-3.11,3.37-5l6.17-14.78c2.78-6.67,5.58-13.38,7.06-20.45a57.58,57.58,0,0,0-2.46-31.86c-1.46-3.88-3.48-7.76-6.91-10.08-6.87-4.66-16.43-1.44-24.28-4.17-2.58-.9-4.91-2.42-7.49-3.34-5.57-2-11.86-.93-17.22,1.56s-9.7,6.45-14.39,10c-2.31,1.77-6,3.6-8.72,6-2.64,2.06-4.67,4.55-4.28,7.83.44,3.75,4.39,6,8.07,6.88.61.14,1.24.25,1.86.36a36,36,0,0,0,15.37,59.8,84.36,84.36,0,0,1,4.86,10.93q.27.77.53,1.55c-6.06,1.72-10.8,3.15-11.75,3.94-2.87,2.38,3.14,23.22,3.14,23.22-1.53,1.94-3.09,4.15-4.67,6.52a140.55,140.55,0,0,0-22.16,60.57c-1,7.91-2.3,16-3.95,23.69L870,412.59l-.15,1.77-1.71-.42h0l-5.38-1.33-.21,1.21-.82-.39c-13.33-6.25-35.79-14.23-51-6-16.05,8.64,18.59,20.12,40.82,26.23-7.37.36-14.42,2.13-20,6.27-16.12,12.08,29.47,18.37,51,20.6l.87.09v.46l7.46.69,1.75.16.17,2.66s10.68,1.75,24.95,3.87c-16.29,4.07-36.42,6.89-50.4,8.54-14.82,1.74-27.44,12.06-31.42,26.45a23.52,23.52,0,0,0-.36,12.72c4.16,14.53-.92,121.42-2.07,144.44l-26.35,15.17s-41,5-13.69,14.61a56.16,56.16,0,0,0,7.53,2c-3.6,2.32-3.29,5.35,7.32,9.07,27.33,9.58,90.86-.42,90.86-.42s-1.39-11.26-3.65-20.62l.7.06s-6.56-24.41,3.39-36.72-1.67-106-1.67-106,17.42-7.21,69.49-7.68c42,10.78,62.47-27.81,62.18-47.76C1029.52,481.87,1029.5,481.41,1029.47,481Z" transform="translate(-39.7 -18.74)" fill="url(#07a0b5f0-40d7-4714-acbe-80fa7c137a96)"/><path d="M874.25,420.36l-4.45,18s-4-.9-10-2.44c-20.32-5.26-63.18-17.89-46-27.16,14.81-8,36.62-.22,49.57,5.85,4.74,2.23,8.3,4.23,9.89,5.17C873.93,420.16,874.25,420.36,874.25,420.36Z" transform="translate(-39.7 -18.74)" fill="#f8b9bf"/><path d="M873,425.44l-3.2,13s-4-.9-10-2.44l3.61-21.31c4.74,2.23,8.3,4.23,9.89,5.17Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><polygon points="833.31 420.93 820.89 417.86 824.75 395.1 834.68 397.55 833.31 420.93" fill="#d9dfe8"/><polygon points="833.31 420.93 827.95 419.61 829.97 396.39 834.68 397.55 833.31 420.93" opacity="0.1"/><path d="M992.85,345.4S969,331.62,958.4,371.15s-11.6,57.74-11.6,57.74l-75.32-15.06-2.39,27.51s80.53,26,90.66,24.11,43-57,43-57S1032.63,365.74,992.85,345.4Z" transform="translate(-39.7 -18.74)" fill="#348eed"/><g opacity="0.1"><path d="M874.25,420.36l-4.45,18s-4-.9-10-2.44c-20.32-5.26-63.18-17.89-46-27.16,14.81-8,36.62-.22,49.57,5.85,4.74,2.23,8.3,4.23,9.89,5.17C873.93,420.16,874.25,420.36,874.25,420.36Z" transform="translate(-39.7 -18.74)"/><path d="M873,425.44l-3.2,13s-4-.9-10-2.44l3.61-21.31c4.74,2.23,8.3,4.23,9.89,5.17Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><polygon points="833.31 420.93 820.89 417.86 824.75 395.1 834.68 397.55 833.31 420.93"/><polygon points="833.31 420.93 827.95 419.61 829.97 396.39 834.68 397.55 833.31 420.93" opacity="0.1"/><path d="M992.85,346.4S969,332.62,958.4,372.15s-11.6,57.74-11.6,57.74l-75.32-15.06-2.39,27.51s80.53,26,90.66,24.11,43-57,43-57S1032.63,366.74,992.85,346.4Z" transform="translate(-39.7 -18.74)"/></g><path d="M841.15,651.7,810.4,669.41s-39.84,4.88-13.3,14.18,88.24-.41,88.24-.41-3.43-27.72-8.21-31.59S841.15,651.7,841.15,651.7Z" transform="translate(-39.7 -18.74)" fill="#68739d"/><path d="M961,453s-15.3,8-42.48,14.91c-15.93,4-35.87,6.84-49.65,8.46A35.81,35.81,0,0,0,838.35,502,22.84,22.84,0,0,0,838,514.4c4.53,15.83-2.23,144.51-2.23,144.51l46.7,4.32s-6.37-23.71,3.3-35.66-1.62-102.91-1.62-102.91,16.92-7,67.48-7.46c46.84,12,66.14-39.27,58.91-53.64S961,453,961,453Z" transform="translate(-39.7 -18.74)" fill="#6394e2"/><g opacity="0.1"><path d="M841.15,651.7,810.4,669.41s-39.84,4.88-13.3,14.18,88.24-.41,88.24-.41-3.43-27.72-8.21-31.59S841.15,651.7,841.15,651.7Z" transform="translate(-39.7 -18.74)"/><path d="M961,453s-15.3,8-42.48,14.91c-15.93,4-35.87,6.84-49.65,8.46A35.81,35.81,0,0,0,838.35,502,22.84,22.84,0,0,0,838,514.4c4.53,15.83-2.23,144.51-2.23,144.51l46.7,4.32s-6.37-23.71,3.3-35.66-1.62-102.91-1.62-102.91,16.92-7,67.48-7.46c46.84,12,66.14-39.27,58.91-53.64S961,453,961,453Z" transform="translate(-39.7 -18.74)"/></g><path d="M855.57,662.45l-30.75,17.71S785,685,811.52,694.34s88.24-.41,88.24-.41-3.43-27.72-8.21-31.59S855.57,662.45,855.57,662.45Z" transform="translate(-39.7 -18.74)" fill="#68739d"/><path d="M966,527.95c-50.56.46-67.48,7.46-67.48,7.46s11.29,91,1.62,102.91-3.3,35.66-3.3,35.66l-46.7-4.32s.08-1.52.21-4.24c1.12-22.36,6.05-126.16,2-140.27a22.84,22.84,0,0,1,.35-12.36,35.82,35.82,0,0,1,30.51-25.69c13.77-1.61,33.71-4.41,49.64-8.46l.78-.2c26.7-6.86,41.7-14.71,41.7-14.71s42.31-3.8,49.54,10.57a17,17,0,0,1,1.48,7.25C1026.71,500.94,1006.81,538.42,966,527.95Z" transform="translate(-39.7 -18.74)" fill="#6394e2"/><path d="M895.57,442.79l-1.71,18.5s-4.11-.29-10.22-.93c-20.87-2.17-65.14-8.27-49.49-20,13.46-10.08,36.18-5.68,49.89-1.6,5,1.5,8.84,2.95,10.55,3.64C895.22,442.64,895.57,442.79,895.57,442.79Z" transform="translate(-39.7 -18.74)" fill="#f8b9bf"/><path d="M1019.78,321.84s-6.26,4.9-13.91,10.28c-8.39,1.9-18.13,3.47-25.15,4.49,2.51-8,1-17-1.83-24.89a93.69,93.69,0,0,0-12.55-23.08l42.32-13.21c-3.32,8.41-1.82,18,1,26.34A86.85,86.85,0,0,0,1019.78,321.84Z" transform="translate(-39.7 -18.74)" fill="#f8b9bf"/><path d="M895.09,448l-1.23,13.29s-4.11-.29-10.22-.93l.4-21.61c5,1.5,8.84,2.95,10.55,3.64Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><polygon points="857.52 443.33 844.78 442.15 845.2 419.07 855.39 420.01 857.52 443.33" fill="#d9dfe8"/><path d="M1019.78,321.84s-6.26,4.9-13.91,10.28c-8.39,1.9-18.13,3.47-25.15,4.49,2.51-8,1-17-1.83-24.89,10.34-3,25.13-6.88,30.78-10A86.85,86.85,0,0,0,1019.78,321.84Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><path d="M1011.32,302.22s7.08,16.07,11.54,23.33-51.82,14-51.82,14-5.84-20.23-3.05-22.55S1006.61,306.92,1011.32,302.22Z" transform="translate(-39.7 -18.74)" fill="#d9dfe8"/><path d="M1026.43,481.56a50.63,50.63,0,0,1-8.76,11.34c-24.86,23.62-65.61-1-84-14.46,26.7-6.86,41.7-14.71,41.7-14.71s42.31-3.8,49.54,10.57A17,17,0,0,1,1026.43,481.56Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><path d="M1017.83,491.21c-28.26,26.84-77-8.7-90.14-19.17-2.13-1.7-3.32-2.75-3.32-2.75,5.19-4.86,9.75-15.16,13.36-27.76A243.61,243.61,0,0,0,945,404.75a136.5,136.5,0,0,1,21.52-58.83c1.53-2.3,3-4.45,4.53-6.33,10.67-13.57,28.6-22.19,28.6-22.19,37.84-11.06,42.93,45.07,41.92,46.69S1050.68,460,1017.83,491.21Z" transform="translate(-39.7 -18.74)" fill="#348eed"/><path d="M1021.49,414.48s-24.33,59.4-34.06,62.79c-5.57,1.93-35.32-1.73-59.74-5.22-2.13-1.7-3.32-2.75-3.32-2.75,5.19-4.86,9.75-15.16,13.36-27.76l31.45,1.5s-1.75-18.14,2.87-58.82,30.23-30.6,30.23-30.6C1044.65,367.81,1021.49,414.48,1021.49,414.48Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><polygon points="857.52 443.33 852.02 442.82 850.56 419.57 855.39 420.01 857.52 443.33" opacity="0.1"/><path d="M1001.67,351s-25.61-10.07-30.23,30.6-2.87,58.82-2.87,58.82l-76.73-3.67,1.73,27.56s83.51,13.71,93.24,10.33,34.06-62.79,34.06-62.79S1044,365.18,1001.67,351Z" transform="translate(-39.7 -18.74)" fill="#348eed"/><path d="M1003.39,290.78c-1.12-6.08,5.23-6,7.51-11.72l-42.32,13.21a93.4,93.4,0,0,1,7.84,12.47,35.11,35.11,0,0,0,6.73,1.3C993.24,307,996.39,297.07,1003.39,290.78Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><circle cx="984.12" cy="267.59" r="34.96" transform="translate(587.38 1204.16) rotate(-84.72)" fill="#f8b9bf"/><path d="M949.6,236c.43,3.64,4.27,5.86,7.84,6.68s7.44.86,10.57,2.77c5,3.08,6.35,9.92,5.72,15.8-.35,3.32-.85,7.39,1.87,9.32a7.25,7.25,0,0,0,2.8,1,26.26,26.26,0,0,0,8.62.3c1.68-.22,3.41-.6,5-.13,2.62.76,4.17,3.52,4.68,6.19s.23,5.45.64,8.14a16.9,16.9,0,0,0,13.32,13.74,7.33,7.33,0,0,0,4.7-.42c1.9-1,2.87-3.13,3.69-5.12l6-14.36c2.7-6.47,5.42-13,6.86-19.86a55.92,55.92,0,0,0-2.39-30.94c-1.42-3.76-3.38-7.53-6.71-9.79-6.67-4.53-16-1.4-23.58-4-2.51-.87-4.77-2.35-7.27-3.24-5.41-1.93-11.52-.91-16.73,1.52s-9.42,6.26-14,9.75C957.26,226.44,948.85,229.71,949.6,236Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><path d="M950.52,235.23c.43,3.64,4.27,5.86,7.84,6.68s7.44.86,10.57,2.77c5,3.08,6.35,9.92,5.72,15.8-.35,3.32-.85,7.39,1.87,9.32a7.25,7.25,0,0,0,2.8,1,26.26,26.26,0,0,0,8.62.3c1.68-.22,3.41-.6,5-.13,2.62.76,4.17,3.52,4.68,6.19s.23,5.45.64,8.14a16.9,16.9,0,0,0,13.32,13.74,7.33,7.33,0,0,0,4.7-.42c1.9-1,2.87-3.13,3.69-5.12l6-14.36c2.7-6.47,5.42-13,6.86-19.86a55.92,55.92,0,0,0-2.39-30.94c-1.42-3.76-3.38-7.53-6.71-9.79-6.67-4.53-16-1.4-23.58-4-2.51-.87-4.77-2.35-7.27-3.24-5.41-1.93-11.52-.91-16.73,1.52s-9.42,6.26-14,9.75C958.19,225.67,949.78,228.94,950.52,235.23Z" transform="translate(-39.7 -18.74)" fill="#b96b6b"/><path d="M979.48,373.34S966.13,425.2,952.84,430s-7.42,6.16-7.42,6.16" transform="translate(-39.7 -18.74)" opacity="0.1"/><rect x="925.9" y="544.58" width="14.51" height="95.37" fill="#d6d6e3"/><rect x="925.9" y="544.58" width="14.51" height="7.07" opacity="0.1"/><path d="M936.57,562.82v2a4.69,4.69,0,0,0,4.69,4.69h63.18a4.69,4.69,0,0,0,4.69-4.69v-2a4.69,4.69,0,0,0-4.69-4.69H941.26a4.69,4.69,0,0,0-4.69,4.69Z" transform="translate(-39.7 -18.74)" fill="#d6d6e3"/><path d="M937.65,559.84h70.41a4.67,4.67,0,0,0-3.62-1.71H941.26A4.67,4.67,0,0,0,937.65,559.84Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><rect x="873.56" y="634.76" width="119.21" height="11.4" rx="5.5" ry="5.5" fill="#d6d6e3"/><circle cx="986.03" cy="653.42" r="7.26" fill="#535461"/><circle cx="880.29" cy="653.42" r="7.26" fill="#535461"/><circle cx="933.16" cy="653.42" r="7.26" fill="#535461"/><rect x="917.74" y="427.44" width="114.03" height="17.62" rx="8.5" ry="8.5" fill="#d6d6e3"/><path d="M980.11,653.5s-5.7,5.63-14.51,0" transform="translate(-39.7 -18.74)" opacity="0.1"/><path d="M1071.47,455.17v1.39a7.25,7.25,0,0,1-7.25,7.25H964.69a7.25,7.25,0,0,1-7.25-7.25v-1.39Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><rect x="822.44" y="452.63" width="19.61" height="249.86" fill="#d6d6e3"/><rect x="822.44" y="452.63" width="19.61" height="16.2" opacity="0.1"/><rect x="232.94" y="551.4" width="14.51" height="95.37" fill="#d6d6e3"/><rect x="232.94" y="551.4" width="14.51" height="7.07" opacity="0.1"/><path d="M316.17,569.65v2a4.69,4.69,0,0,1-4.69,4.69H248.3a4.69,4.69,0,0,1-4.69-4.69v-2A4.69,4.69,0,0,1,248.3,565h63.18a4.69,4.69,0,0,1,4.69,4.69Z" transform="translate(-39.7 -18.74)" fill="#d6d6e3"/><path d="M315.1,566.66H244.68A4.67,4.67,0,0,1,248.3,565h63.18A4.67,4.67,0,0,1,315.1,566.66Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><rect x="180.59" y="641.58" width="119.21" height="11.4" rx="5.5" ry="5.5" fill="#d6d6e3"/><circle cx="187.33" cy="660.24" r="7.26" fill="#535461"/><circle cx="293.06" cy="660.24" r="7.26" fill="#535461"/><circle cx="240.19" cy="660.24" r="7.26" fill="#535461"/><path d="M272.64,660.32s5.7,5.63,14.51,0" transform="translate(-39.7 -18.74)" opacity="0.1"/><path d="M642.81,373.22s-16.28-29.59-10.33-55.31a51.17,51.17,0,0,0-2.85-32.24A86.06,86.06,0,0,0,622,271.93" transform="translate(-39.7 -18.74)" fill="none" stroke="#535461" stroke-miterlimit="10" stroke-width="2"/><path d="M625.61,255.69c.85,3.88-3.7,16.67-3.7,16.67s-9.49-9.7-10.35-13.58a7.19,7.19,0,1,1,14-3.09Z" transform="translate(-39.7 -18.74)" fill="#348eed"/><path d="M641.94,274.62c-1.39,3.72-12.16,12-12.16,12s-2.7-13.3-1.3-17a7.19,7.19,0,1,1,13.47,5Z" transform="translate(-39.7 -18.74)" fill="#348eed"/><path d="M649.5,311.44c-3.08,2.51-16.55,4.2-16.55,4.2s4.39-12.84,7.47-15.35a7.19,7.19,0,1,1,9.08,11.15Z" transform="translate(-39.7 -18.74)" fill="#348eed"/><path d="M648.95,340.58c-2.61,3-15.6,6.94-15.6,6.94s2.15-13.4,4.76-16.39a7.19,7.19,0,1,1,10.83,9.45Z" transform="translate(-39.7 -18.74)" fill="#348eed"/><path d="M615.2,290.59c3.38,2.09,16.95,2,16.95,2s-6-12.17-9.38-14.26a7.19,7.19,0,1,0-7.57,12.22Z" transform="translate(-39.7 -18.74)" fill="#348eed"/><path d="M615,324.69c3.85,1,16.78-3.12,16.78-3.12s-9.37-9.82-13.22-10.8A7.19,7.19,0,0,0,615,324.69Z" transform="translate(-39.7 -18.74)" fill="#348eed"/><path d="M619.33,357.85c3.62,1.62,17.07-.24,17.07-.24s-7.58-11.26-11.2-12.88a7.19,7.19,0,0,0-5.87,13.13Z" transform="translate(-39.7 -18.74)" fill="#348eed"/><path d="M625.61,255.69c.85,3.88-3.7,16.67-3.7,16.67s-9.49-9.7-10.35-13.58a7.19,7.19,0,1,1,14-3.09Z" transform="translate(-39.7 -18.74)" fill="#348eed"/><path d="M641.94,274.62c-1.39,3.72-12.16,12-12.16,12s-2.7-13.3-1.3-17a7.19,7.19,0,1,1,13.47,5Z" transform="translate(-39.7 -18.74)" fill="#348eed"/><path d="M649.5,311.44c-3.08,2.51-16.55,4.2-16.55,4.2s4.39-12.84,7.47-15.35a7.19,7.19,0,1,1,9.08,11.15Z" transform="translate(-39.7 -18.74)" fill="#348eed"/><path d="M648.95,340.58c-2.61,3-15.6,6.94-15.6,6.94s2.15-13.4,4.76-16.39a7.19,7.19,0,1,1,10.83,9.45Z" transform="translate(-39.7 -18.74)" fill="#348eed"/><path d="M615.2,290.59c3.38,2.09,16.95,2,16.95,2s-6-12.17-9.38-14.26a7.19,7.19,0,1,0-7.57,12.22Z" transform="translate(-39.7 -18.74)" fill="#348eed"/><path d="M615,324.69c3.85,1,16.78-3.12,16.78-3.12s-9.37-9.82-13.22-10.8A7.19,7.19,0,0,0,615,324.69Z" transform="translate(-39.7 -18.74)" fill="#348eed"/><path d="M619.33,357.85c3.62,1.62,17.07-.24,17.07-.24s-7.58-11.26-11.2-12.88a7.19,7.19,0,0,0-5.87,13.13Z" transform="translate(-39.7 -18.74)" fill="#348eed"/><path d="M636.19,455.29h0a17.14,17.14,0,0,1-17.11-18.22l4.79-75.9h24.64l4.79,75.9A17.14,17.14,0,0,1,636.19,455.29Z" transform="translate(-39.7 -18.74)" fill="#348eed"/><rect x="83.6" y="63.42" width="14" height="58" fill="#348eed" opacity="0.1"/><rect x="101.6" y="63.42" width="14" height="58" fill="#348eed" opacity="0.1"/><rect x="119.6" y="63.42" width="14" height="58" fill="#348eed" opacity="0.1"/><rect x="137.6" y="63.42" width="14" height="58" fill="#348eed" opacity="0.1"/><rect x="173.6" y="63.42" width="14" height="58" fill="#348eed" opacity="0.1"/><rect x="191.6" y="63.42" width="14" height="58" fill="#348eed" opacity="0.1"/><rect x="83.6" y="74.42" width="14" height="3" fill="#348eed" opacity="0.1"/><rect x="83.6" y="110.42" width="14" height="3" fill="#348eed" opacity="0.1"/><rect x="101.6" y="74.42" width="14" height="3" fill="#348eed" opacity="0.1"/><rect x="101.6" y="110.42" width="14" height="3" fill="#348eed" opacity="0.1"/><rect x="119.6" y="74.42" width="14" height="3" fill="#348eed" opacity="0.1"/><rect x="119.6" y="110.42" width="14" height="3" fill="#348eed" opacity="0.1"/><rect x="137.6" y="74.42" width="14" height="3" fill="#348eed" opacity="0.1"/><rect x="137.6" y="110.42" width="14" height="3" fill="#348eed" opacity="0.1"/><rect x="155.6" y="74.42" width="14" height="3" fill="#348eed" opacity="0.1"/><rect x="155.6" y="110.42" width="14" height="3" fill="#348eed" opacity="0.1"/><rect x="173.6" y="74.42" width="14" height="3" fill="#348eed" opacity="0.1"/><rect x="173.6" y="110.42" width="14" height="3" fill="#348eed" opacity="0.1"/><rect x="191.6" y="74.42" width="14" height="3" fill="#348eed" opacity="0.1"/><rect x="191.6" y="110.42" width="14" height="3" fill="#348eed" opacity="0.1"/><rect x="155.6" y="63.42" width="14" height="58" fill="#348eed" opacity="0.1"/><rect x="257.29" y="82.16" width="14" height="58" transform="translate(-61.94 102.56) rotate(-24.84)" fill="#348eed" opacity="0.1"/><rect x="250.36" y="94.69" width="14" height="3" transform="translate(-56.29 98.27) rotate(-24.84)" fill="#348eed" opacity="0.1"/><rect x="265.48" y="127.36" width="14" height="3" transform="translate(-68.62 107.64) rotate(-24.84)" fill="#348eed" opacity="0.1"/><path d="M428.84,680.21,403.43,664c-.13-22.83-.49-128.82,4.26-143a23.29,23.29,0,0,0,.2-12.61c-3.3-14.41-15.34-25.17-29.93-27.54-13.76-2.24-33.56-5.91-49.5-10.65,14.21-1.47,24.86-2.74,24.86-2.74l.28-2.63,9.15-.44V464l.87-.05c21.37-1.27,66.75-5.5,51.33-18.16-5.29-4.34-12.19-6.39-19.47-7.08,22.26-5.08,57.05-14.92,41.54-24.17-14.74-8.78-37.31-1.88-50.78,3.73l-.83.35-.15-1.21-5.38,1.08h0l-1.71.34-.08-1.76-75.49,11.66a257.66,257.66,0,0,0-3.08-25.81c1.69-11.26,9.55-27.68,6.78-36.49-3.22-10.23-16.44-13.58-22-22.82-1.46-2.41-2.91-4.67-4.33-6.65a70,70,0,0,0-10.65-11.51,48.6,48.6,0,0,1,3.92-17.25,83.57,83.57,0,0,1,5.28-10.6,35.6,35.6,0,0,0,26.44-41c4.78,2.05,10.59,2.26,13.58-1.74l-1.42-.55c.14-.15.28-.3.4-.47-2.91-1.11-6-2.37-8.28-4.39a9.7,9.7,0,0,1-1.45-2.15c-1.38-2.8-1.22-6.16-2.54-9a10.41,10.41,0,0,0-2.59-3.38,17.83,17.83,0,0,0-8.46-4.84c-3.61-1.05-7.41-1.58-10.87-3a36.75,36.75,0,0,0-39.11-11l-1.25.43a16.31,16.31,0,0,0-31.81-7.2,16.27,16.27,0,0,1,4.36-9.74c-.26.22-.53.43-.78.66a16.32,16.32,0,0,0-.71,23.07l.29.28a16.39,16.39,0,0,0,4.09,3.58,16.32,16.32,0,0,1-10.76-13.37c0,.34,0,.68,0,1A16.32,16.32,0,0,0,225,230.13l.45-.05-.24.33a36.71,36.71,0,0,0,3.3,45.45,17,17,0,0,0,2.62,4.2,13.61,13.61,0,0,0,1.21,1.22,15.51,15.51,0,0,0,10.46,4.82q1,1.19,2.13,2.29a59.52,59.52,0,0,1-2.58,8.24,87.34,87.34,0,0,1-7.92,15.27c-21.6,6.14-23.5,42.82-22.72,44.21.93,1.66-3.22,59.26,12.78,128.84-.66,19.89,10.94,52.78,52.12,44.11C328.11,531.81,345,539.7,345,539.7s-4.89,89.57,2.09,102.61c4.37,8.17,1.27,20.17-2,28.64a31.47,31.47,0,0,0-2.88,6.64c-1,2.11-1.73,3.39-1.73,3.39l.7,0c-2.64,9.17-4.51,20.24-4.51,20.24s62.43,12.67,89.89,4.38c10.66-3.22,11.1-6.2,7.64-8.66a55.62,55.62,0,0,0,7.54-1.65C469.22,687,428.84,680.21,428.84,680.21Z" transform="translate(-39.7 -18.74)" fill="url(#81276d2b-ddf3-474d-b794-9223ea4701e2)"/><path d="M293,255a36,36,0,1,1-36-36A36,36,0,0,1,293,255Z" transform="translate(-39.7 -18.74)" fill="#fa595f"/><path d="M374.09,424.13l3.65,18.22s4.06-.73,10.07-2c20.53-4.35,63.91-15.09,47.11-25.11-14.45-8.61-36.58-1.84-49.78,3.66-4.84,2-8.48,3.86-10.11,4.73C374.42,423.94,374.09,424.13,374.09,424.13Z" transform="translate(-39.7 -18.74)" fill="#f8b9bf"/><path d="M375.12,429.27l2.62,13.08s4.06-.73,10.07-2l-2.67-21.45c-4.84,2-8.48,3.86-10.11,4.73Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><polygon points="334.79 424.74 347.33 422.23 344.49 399.32 334.45 401.33 334.79 424.74" fill="#d9dfe8"/><polygon points="334.79 424.74 340.2 423.65 339.21 400.38 334.45 401.33 334.79 424.74" opacity="0.1"/><path d="M258.91,344s24.41-12.72,33.28,27.25,9,58.19,9,58.19l75.92-11.73,1.18,27.59s-81.6,22.43-91.63,20.09-40.48-58.85-40.48-58.85S218.28,362.59,258.91,344Z" transform="translate(-39.7 -18.74)" fill="#348eed"/><g opacity="0.1"><path d="M374.09,424.13l3.65,18.22s4.06-.73,10.07-2c20.53-4.35,63.91-15.09,47.11-25.11-14.45-8.61-36.58-1.84-49.78,3.66-4.84,2-8.48,3.86-10.11,4.73C374.42,423.94,374.09,424.13,374.09,424.13Z" transform="translate(-39.7 -18.74)"/><path d="M375.12,429.27l2.62,13.08s4.06-.73,10.07-2l-2.67-21.45c-4.84,2-8.48,3.86-10.11,4.73Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><polygon points="334.79 424.74 347.33 422.23 344.49 399.32 334.45 401.33 334.79 424.74"/><polygon points="334.79 424.74 340.2 423.65 339.21 400.38 334.45 401.33 334.79 424.74" opacity="0.1"/><path d="M260.91,346s24.41-12.72,33.28,27.25,9,58.19,9,58.19l75.92-11.73,1.18,27.59s-81.6,22.43-91.63,20.09-40.48-58.85-40.48-58.85S220.28,364.59,260.91,346Z" transform="translate(-39.7 -18.74)"/></g><path d="M397,656.71l29.94,19s39.59,6.63,12.66,14.76-88.13-4.3-88.13-4.3,4.65-27.54,9.6-31.19S397,656.71,397,656.71Z" transform="translate(-39.7 -18.74)" fill="#f37291"/><path d="M286,452.9s14.93,8.67,41.78,16.77c15.74,4.75,35.54,8.42,49.22,10.65a35.81,35.81,0,0,1,29.35,27,22.84,22.84,0,0,1-.19,12.36C400.94,535.3,402,664.15,402,664.15l-46.84,2.25s7.41-23.41-1.72-35.77S359.6,527.9,359.6,527.9s-16.59-7.74-67.09-10.43c-47.33,10-64.34-42.15-56.48-56.19S286,452.9,286,452.9Z" transform="translate(-39.7 -18.74)" fill="#96a2d0"/><g opacity="0.1"><path d="M397,656.71l29.94,19s39.59,6.63,12.66,14.76-88.13-4.3-88.13-4.3,4.65-27.54,9.6-31.19S397,656.71,397,656.71Z" transform="translate(-39.7 -18.74)"/><path d="M286,452.9s14.93,8.67,41.78,16.77c15.74,4.75,35.54,8.42,49.22,10.65a35.81,35.81,0,0,1,29.35,27,22.84,22.84,0,0,1-.19,12.36C400.94,535.3,402,664.15,402,664.15l-46.84,2.25s7.41-23.41-1.72-35.77S359.6,527.9,359.6,527.9s-16.59-7.74-67.09-10.43c-47.33,10-64.34-42.15-56.48-56.19S286,452.9,286,452.9Z" transform="translate(-39.7 -18.74)"/></g><path d="M382.08,666.82l29.94,19s39.59,6.63,12.66,14.76-88.13-4.3-88.13-4.3,4.65-27.54,9.6-31.19S382.08,666.82,382.08,666.82Z" transform="translate(-39.7 -18.74)" fill="#f37291"/><path d="M277.64,527.57c50.5,2.69,67.09,10.43,67.09,10.43s-4.79,87.82,2,100.6c7.25,13.56-6.48,37.9-6.48,37.9l46.84-2.25s0-1.52,0-4.24c-.14-22.38-.48-126.3,4.17-140.23a22.84,22.84,0,0,0,.19-12.36,35.82,35.82,0,0,0-29.35-27c-13.69-2.22-33.48-5.89-49.22-10.64l-.77-.24c-26.37-8-41-16.53-41-16.53s-31.19-2.16-39,11.88c-1,1.82-5.31,5.4-5.49,8.29C225.45,502.52,236.46,536.24,277.64,527.57Z" transform="translate(-39.7 -18.74)" fill="#96a2d0"/><path d="M351.81,445.6l.89,18.56s4.12-.11,10.26-.48c20.95-1.25,65.45-5.39,50.33-17.8-13-10.67-35.9-7.27-49.77-3.8-5.09,1.28-9,2.56-10.7,3.17C352.16,445.47,351.81,445.6,351.81,445.6Z" transform="translate(-39.7 -18.74)" fill="#f8b9bf"/><path d="M233,319.29s6,5.17,13.44,10.89c8.3,2.26,18,4.27,24.93,5.6-2.15-8.15-.24-17,2.93-24.79a93.69,93.69,0,0,1,13.56-22.51l-41.7-15.07c2.95,8.55,1,18.1-2.17,26.27A86.85,86.85,0,0,1,233,319.29Z" transform="translate(-39.7 -18.74)" fill="#f8b9bf"/><path d="M352.06,450.83l.64,13.33s4.12-.11,10.26-.48l.56-21.61c-5.09,1.28-9,2.56-10.7,3.17Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><polygon points="309.62 446.05 322.39 445.44 322.99 422.36 312.77 422.85 309.62 446.05" fill="#d9dfe8"/><path d="M227.53,488.58c27,28.07,77.35-5.29,90.89-15.17,2.2-1.61,3.43-2.6,3.43-2.6-5-5.09-13-9.8-16.07-22.55a277,277,0,0,1-5.94-39.52c-.83-10.55,10.07-30.64,6.92-40.66s-16.12-13.31-21.57-22.38c-1.43-2.36-2.85-4.58-4.25-6.52-10.06-14-27.59-23.43-27.59-23.43C216,303,213.07,356.34,214,358S210.66,418.46,227.53,488.58Z" transform="translate(-39.7 -18.74)" fill="#348eed"/><path d="M227.25,411.76s21.69,60.42,31.26,64.23c5.48,2.18,35.37-.17,59.91-2.58,2.2-1.61,3.43-2.6,3.43-2.6-5-5.09-9.07-15.58-12.13-28.32l-31.49.11s2.55-18-.27-58.89-28.85-31.9-28.85-31.9C206.18,364.12,227.25,411.76,227.25,411.76Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><polygon points="309.62 446.05 315.13 445.79 317.62 422.62 312.77 422.85 309.62 446.05" opacity="0.1"/><path d="M249.85,349.21s26-8.93,28.85,31.9S279,440,279,440l76.82-.28-2.95,27.46s-84,10-93.6,6.21S228,409.17,228,409.17,206.91,361.52,249.85,349.21Z" transform="translate(-39.7 -18.74)" fill="#348eed"/><path d="M250.8,289c1.39-6-5-6.19-7-12L285.52,292a93.4,93.4,0,0,0-8.38,12.11,35.11,35.11,0,0,1-6.78,1C260.22,305.61,257.51,295.58,250.8,289Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><circle cx="271.07" cy="266.67" r="34.96" transform="translate(-52.19 -5.41) rotate(-2.75)" fill="#f8b9bf"/><path d="M253,375.14s11.06,52.39,24.12,57.74,7.14,6.49,7.14,6.49" transform="translate(-39.7 -18.74)" opacity="0.1"/><path d="M298.58,404.73s-9.24,2.89-20-10.92" transform="translate(-39.7 -18.74)" opacity="0.1"/><circle cx="189.3" cy="199.26" r="16" fill="#fa595f"/><path d="M217.76,226.45a16,16,0,0,1,0-21.89c-.26.21-.52.42-.76.65a16,16,0,0,0,21.92,23.32c.25-.23.47-.48.69-.72A16,16,0,0,1,217.76,226.45Z" transform="translate(-39.7 -18.74)" fill="#fa595f"/><path d="M226.9,232.49a16,16,0,0,1-16.84-14c0,.33,0,.66,0,1a16,16,0,1,0,31.94-2c0-.34-.07-.66-.11-1A16,16,0,0,1,226.9,232.49Z" transform="translate(-39.7 -18.74)" fill="#fa595f"/><path d="M283.95,231.91c3.73,1.84,8,2.35,12,3.51s8.08,3.28,9.84,7.06c1.29,2.78,1.14,6.07,2.49,8.82,1.94,4,6.42,5.84,10.54,7.41-3.54,4.75-11.14,3.46-16.1.23s-9.23-8-15-9.25a14.08,14.08,0,0,0-14.81,6.59c-1.58,2.77-2.14,6-2.92,9.08-2,8.12-6,16.2-13,20.81s-17.43,4.58-22.92-1.73c-3.2-3.68-4.27-8.69-5.22-13.47a27.37,27.37,0,0,1-.77-6.81c.32-5.74,4.14-10.63,8-14.89,4.55-5,9.39-9.8,14.23-14.57,4.18-4.12,9-11.1,15.3-11.59C272.87,222.53,278,229,283.95,231.91Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><path d="M282.95,230.91c3.73,1.84,8,2.35,12,3.51s8.08,3.28,9.84,7.06c1.29,2.78,1.14,6.07,2.49,8.82,1.94,4,6.42,5.84,10.54,7.41-3.54,4.75-11.14,3.46-16.1.23s-9.23-8-15-9.25a14.08,14.08,0,0,0-14.81,6.59c-1.58,2.77-2.14,6-2.92,9.08-2,8.12-6,16.2-13,20.81s-17.43,4.58-22.92-1.73c-3.2-3.68-4.27-8.69-5.22-13.47a27.37,27.37,0,0,1-.77-6.81c.32-5.74,4.14-10.63,8-14.89,4.55-5,9.39-9.8,14.23-14.57,4.18-4.12,9-11.1,15.3-11.59C271.87,221.53,277,228,282.95,230.91Z" transform="translate(-39.7 -18.74)" fill="#fa595f"/><rect x="141.58" y="434.26" width="114.03" height="17.62" rx="8.5" ry="8.5" fill="#d6d6e3"/><path d="M181.28,462v1.39a7.25,7.25,0,0,0,7.25,7.25h99.53a7.25,7.25,0,0,0,7.25-7.25V462Z" transform="translate(-39.7 -18.74)" opacity="0.1"/><rect x="342.39" y="452.63" width="19.61" height="249.83" fill="#d6d6e3"/><rect x="342.39" y="452.63" width="19.61" height="16.2" opacity="0.1"/><rect x="333.01" y="434.72" width="518.42" height="32.4" fill="#d6d6e3"/></svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<!--
2013-9-30: Created.
-->
<svg>
<metadata>
Created by iconfont
</metadata>
<defs>
<font id="iconfont" horiz-adv-x="1024" >
<font-face
font-family="iconfont"
font-weight="500"
font-stretch="normal"
units-per-em="1024"
ascent="896"
descent="-128"
/>
<missing-glyph />
<glyph glyph-name="bear" unicode="&#58880;" d="M1024 683.008q0-70.656-46.08-121.856 46.08-89.088 46.08-193.536 0-96.256-39.936-181.248t-109.568-147.968-162.816-99.328-199.68-36.352-199.68 36.352-162.304 99.328-109.568 147.968-40.448 181.248q0 104.448 46.08 193.536-46.08 51.2-46.08 121.856 0 37.888 13.824 71.168t37.376 58.368 55.808 39.424 68.096 14.336q43.008 0 78.848-18.432t59.392-50.176q46.08 17.408 96.256 26.624t102.4 9.216 102.4-9.216 96.256-26.624q24.576 31.744 59.904 50.176t78.336 18.432q36.864 0 68.608-14.336t55.296-39.424 37.376-58.368 13.824-71.168zM205.824 268.288q10.24 0 18.944 10.24t15.36 28.672 10.24 42.496 3.584 51.712-3.584 51.712-10.24 41.984-15.36 28.16-18.944 10.24q-9.216 0-17.92-10.24t-15.36-28.16-10.752-41.984-4.096-51.712 4.096-51.712 10.752-42.496 15.36-28.672 17.92-10.24zM512-31.744000000000028q53.248 0 99.84 13.312t81.408 35.84 54.784 52.736 19.968 65.024q0 33.792-19.968 64t-54.784 52.736-81.408 35.84-99.84 13.312-99.84-13.312-81.408-35.84-54.784-52.736-19.968-64q0-34.816 19.968-65.024t54.784-52.736 81.408-35.84 99.84-13.312zM818.176 268.288q10.24 0 18.944 10.24t15.36 28.672 10.24 42.496 3.584 51.712-3.584 51.712-10.24 41.984-15.36 28.16-18.944 10.24q-9.216 0-17.92-10.24t-15.36-28.16-10.752-41.984-4.096-51.712 4.096-51.712 10.752-42.496 15.36-28.672 17.92-10.24zM512 235.51999999999998q39.936 0 68.096-9.728t28.16-24.064-28.16-24.064-68.096-9.728-68.096 9.728-28.16 24.064 28.16 24.064 68.096 9.728z" horiz-adv-x="1024" />
<glyph glyph-name="resize-vertical" unicode="&#59331;" d="M512 896C229.248 896 0 666.752 0 384s229.248-512 512-512 512 229.248 512 512S794.752 896 512 896zM576 192l64 0-128-128-128 128 64 0L448 576l-64 0 128 128 128-128-64 0L576 192z" horiz-adv-x="1024" />
<glyph glyph-name="chuizhifanzhuan" unicode="&#58977;" d="M286.01856 645.08416l472.4224 0 0-146.2784-472.4224 0 0 146.2784ZM87.19872 420.37248l885.80096 0 0-70.87104-885.80096 0 0 70.87104ZM773.55008 268.05248l0-31.0016L270.6688 237.05088l0 31.0016L773.55008 268.05248zM773.55008 121.4208l0-31.0016L270.6688 90.4192l0 31.0016L773.55008 121.4208zM742.54848 240.75776l31.0016 0 0-123.04896-31.0016 0L742.54848 240.75776zM270.70464 240.57856l31.0016 0 0-123.04896-31.0016 0L270.70464 240.57856z" horiz-adv-x="1024" />
<glyph glyph-name="shuipingfanzhuan" unicode="&#58978;" d="M252.76928 596.096l146.2784 0 0-472.42752-146.2784 0 0 472.42752ZM477.48096 810.65472l70.87104 0 0-885.80608-70.87104 0 0 885.80608ZM629.80096 611.2l31.0016 0 0-502.88128-31.0016 0L629.80096 611.2zM776.42752 611.2l31.0016 0 0-502.88128-31.0016 0L776.42752 611.2zM657.09056 580.1984l0 31.0016 123.04896 0 0-31.0016L657.09056 580.1984zM657.27488 108.35456l0 31.0016 123.04896 0 0-31.0016L657.27488 108.35456z" horiz-adv-x="1024" />
<glyph glyph-name="qq" unicode="&#58889;" d="M147.372058 491.394284c-5.28997-13.909921 2.431986-22.698872 0-75.732573-0.682996-14.25092-62.165649-78.762555-86.569511-145.791177-24.192863-66.517625-27.519845-135.978232 9.811944-163.285078 37.419789-27.305846 72.191593 90.879487 76.757567 73.685584 1.961989-7.509958 4.436975-15.317914 7.423958-23.338868a331.945126 331.945126 0 0 1 61.140655-101.162429c5.929967-6.783962-36.009797-19.199892-61.140655-61.99365-25.173858-42.751759 7.209959-120.49032 132.223254-120.49032 161.27909 0 197.288886 56.70368 200.574868 56.447681 12.031932-0.895995 12.841928 0 25.599855 0 15.572912 0 9.129948-1.279993 23.593867 0 7.807956 0.682996 86.186514-67.839617 194.686901-56.447681 184.873956 19.45589 156.586116 81.40754 142.079198 120.48932-15.103915 40.83277-68.692612 59.946662-66.303626 62.549647 44.28775 48.938724 51.285711 79.018554 66.346626 123.9463 6.143965 18.473896 49.066723-101.674426 82.089537-73.685584 13.781922 11.690934 41.301767 60.24566 13.781922 163.285078-27.519845 102.996419-80.767544 126.505286-79.615551 145.791177 2.389987 40.191773 1.023994 68.436614-1.023994 75.732573-9.812945 35.4128-30.378829 27.604844-30.378829 35.4128C858.450044 730.752933 705.10691 896 515.966978 896s-342.398067-165.289067-342.398068-369.192916c0-16.169909-14.378919-4.223976-26.154852-35.4128z" horiz-adv-x="1024" />
<glyph glyph-name="frown" unicode="&#59262;" d="M336 475m-48 0a48 48 0 1 1 96 0 48 48 0 1 1-96 0ZM688 475m-48 0a48 48 0 1 1 96 0 48 48 0 1 1-96 0ZM512 832C264.6 832 64 631.4 64 384s200.6-448 448-448 448 200.6 448 448S759.4 832 512 832z m263-711c-34.2-34.2-74-61-118.3-79.8C611 21.8 562.3 12 512 12c-50.3 0-99 9.8-144.8 29.2-44.3 18.7-84.1 45.6-118.3 79.8-34.2 34.2-61 74-79.8 118.3C149.8 285 140 333.7 140 384s9.8 99 29.2 144.8c18.7 44.3 45.6 84.1 79.8 118.3 34.2 34.2 74 61 118.3 79.8C413 746.2 461.7 756 512 756c50.3 0 99-9.8 144.8-29.2 44.3-18.7 84.1-45.6 118.3-79.8 34.2-34.2 61-74 79.8-118.3C874.2 483 884 434.3 884 384s-9.8-99-29.2-144.8c-18.7-44.3-45.6-84.1-79.8-118.2zM512 363c-85.5 0-155.6-67.3-160-151.6-0.2-4.6 3.4-8.4 8-8.4h48.1c4.2 0 7.8 3.2 8.1 7.4C420 259.9 461.5 299 512 299s92.1-39.1 95.8-88.6c0.3-4.2 3.9-7.4 8.1-7.4H664c4.6 0 8.2 3.8 8 8.4-4.4 84.3-74.5 151.6-160 151.6z" horiz-adv-x="1024" />
<glyph glyph-name="meh" unicode="&#59264;" d="M336 475m-48 0a48 48 0 1 1 96 0 48 48 0 1 1-96 0ZM688 475m-48 0a48 48 0 1 1 96 0 48 48 0 1 1-96 0ZM512 832C264.6 832 64 631.4 64 384s200.6-448 448-448 448 200.6 448 448S759.4 832 512 832z m263-711c-34.2-34.2-74-61-118.3-79.8C611 21.8 562.3 12 512 12c-50.3 0-99 9.8-144.8 29.2-44.3 18.7-84.1 45.6-118.3 79.8-34.2 34.2-61 74-79.8 118.3C149.8 285 140 333.7 140 384s9.8 99 29.2 144.8c18.7 44.3 45.6 84.1 79.8 118.3 34.2 34.2 74 61 118.3 79.8C413 746.2 461.7 756 512 756c50.3 0 99-9.8 144.8-29.2 44.3-18.7 84.1-45.6 118.3-79.8 34.2-34.2 61-74 79.8-118.3C874.2 483 884 434.3 884 384s-9.8-99-29.2-144.8c-18.7-44.3-45.6-84.1-79.8-118.2zM664 331H360c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h304c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8z" horiz-adv-x="1024" />
<glyph glyph-name="smile" unicode="&#59267;" d="M336 475m-48 0a48 48 0 1 1 96 0 48 48 0 1 1-96 0ZM688 475m-48 0a48 48 0 1 1 96 0 48 48 0 1 1-96 0ZM512 832C264.6 832 64 631.4 64 384s200.6-448 448-448 448 200.6 448 448S759.4 832 512 832z m263-711c-34.2-34.2-74-61-118.3-79.8C611 21.8 562.3 12 512 12c-50.3 0-99 9.8-144.8 29.2-44.3 18.7-84.1 45.6-118.3 79.8-34.2 34.2-61 74-79.8 118.3C149.8 285 140 333.7 140 384s9.8 99 29.2 144.8c18.7 44.3 45.6 84.1 79.8 118.3 34.2 34.2 74 61 118.3 79.8C413 746.2 461.7 756 512 756c50.3 0 99-9.8 144.8-29.2 44.3-18.7 84.1-45.6 118.3-79.8 34.2-34.2 61-74 79.8-118.3C874.2 483 884 434.3 884 384s-9.8-99-29.2-144.8c-18.7-44.3-45.6-84.1-79.8-118.2zM664 363h-48.1c-4.2 0-7.8-3.2-8.1-7.4C604 306.1 562.5 267 512 267s-92.1 39.1-95.8 88.6c-0.3 4.2-3.9 7.4-8.1 7.4H360c-4.6 0-8.2-3.8-8-8.4 4.4-84.3 74.5-151.6 160-151.6s155.6 67.3 160 151.6c0.2 4.6-3.4 8.4-8 8.4z" horiz-adv-x="1024" />
<glyph glyph-name="man" unicode="&#59362;" d="M874 776H622c-3.3 0-6-2.7-6-6v-56c0-3.3 2.7-6 6-6h160.4L583.1 508.7c-50 38.5-111 59.3-175.1 59.3-76.9 0-149.3-30-203.6-84.4S120 356.9 120 280s30-149.3 84.4-203.6C258.7 22 331.1-8 408-8s149.3 30 203.6 84.4C666 130.7 696 203.1 696 280c0 64.1-20.8 124.9-59.2 174.9L836 654.1V494c0-3.3 2.7-6 6-6h56c3.3 0 6 2.7 6 6V746c0 16.5-13.5 30-30 30zM408 68c-116.9 0-212 95.1-212 212s95.1 212 212 212 212-95.1 212-212-95.1-212-212-212z" horiz-adv-x="1024" />
<glyph glyph-name="woman" unicode="&#59365;" d="M909.7 739.4l-42.2 42.2c-3.1 3.1-8.2 3.1-11.3 0L764 689.4l-84.2 84.2c-3.1 3.1-8.2 3.1-11.3 0l-42.1-42.1c-3.1-3.1-3.1-8.1 0-11.3l84.2-84.2-135.5-135.3c-50 38.5-111 59.3-175.1 59.3-76.9 0-149.3-30-203.6-84.4S112 348.9 112 272s30-149.3 84.4-203.6C250.7 14 323.1-16 400-16s149.3 30 203.6 84.4C658 122.7 688 195.1 688 272c0 64.2-20.9 125.1-59.3 175.1l135.4 135.4 84.2-84.2c3.1-3.1 8.2-3.1 11.3 0l42.1 42.1c3.1 3.1 3.1 8.1 0 11.3l-84.2 84.2 92.2 92.2c3.1 3.1 3.1 8.2 0 11.3zM400 60c-116.9 0-212 95.1-212 212s95.1 212 212 212 212-95.1 212-212-95.1-212-212-212z" horiz-adv-x="1024" />
</font>
</defs></svg>
This source diff could not be displayed because it is too large. You can view the blob instead.
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><link rel=icon href=/ccc.png><title></title><link href=/css/chunk-14b9857b.0dc416de.css rel=prefetch><link href=/css/chunk-2c359864.0dc416de.css rel=prefetch><link href=/css/chunk-3385141a.0dc416de.css rel=prefetch><link href=/css/chunk-382e9603.e4a5d5d6.css rel=prefetch><link href=/css/chunk-42651408.d8ccc255.css rel=prefetch><link href=/css/chunk-50a3aab5.3a534050.css rel=prefetch><link href=/css/chunk-79527e9c.8797b2b5.css rel=prefetch><link href=/css/chunk-bc0fc59e.dce456a2.css rel=prefetch><link href=/css/chunk-c99e2bc4.c315c3ce.css rel=prefetch><link href=/js/chunk-14b9857b.49736867.js rel=prefetch><link href=/js/chunk-2c359864.2d5ca5d9.js rel=prefetch><link href=/js/chunk-2d0cf4f6.47c7fc64.js rel=prefetch><link href=/js/chunk-2dc06650.6446a06d.js rel=prefetch><link href=/js/chunk-3385141a.d82f7c29.js rel=prefetch><link href=/js/chunk-382e9603.5f3cf288.js rel=prefetch><link href=/js/chunk-42651408.4fb15382.js rel=prefetch><link href=/js/chunk-506f6cae.b32e885e.js rel=prefetch><link href=/js/chunk-50a3aab5.29321dff.js rel=prefetch><link href=/js/chunk-72133a04.e70b11c7.js rel=prefetch><link href=/js/chunk-79527e9c.40bd32b8.js rel=prefetch><link href=/js/chunk-bc0fc59e.6d7a0ab1.js rel=prefetch><link href=/js/chunk-c99e2bc4.d5fa9189.js rel=prefetch><link href=/css/app.ecfe1570.css rel=preload as=style><link href=/css/chunk-vendors.1d90d08d.css rel=preload as=style><link href=/js/app.f23e3044.js rel=preload as=script><link href=/js/chunk-vendors.6ea93ac3.js rel=preload as=script><link href=/css/chunk-vendors.1d90d08d.css rel=stylesheet><link href=/css/app.ecfe1570.css rel=stylesheet></head><body><noscript><strong>We're sorry but iview-admin doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=/js/chunk-vendors.6ea93ac3.js></script><script src=/js/app.f23e3044.js></script></body></html>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-14b9857b"],{"0eb4":function(t,e,n){},3026:function(t,e,n){t.exports=n.p+"img/error-401.98bba5b1.svg"},9454:function(t,e,n){"use strict";var r=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"error-page"},[n("div",{staticClass:"content-con"},[n("img",{attrs:{src:t.src,alt:t.code}}),n("div",{staticClass:"text-con"},[n("h4",[t._v(t._s(t.code))]),n("h5",[t._v(t._s(t.desc))])]),n("back-btn-group",{staticClass:"back-btn-group"})],1)])},c=[],o=(n("0eb4"),function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("Button",{attrs:{size:"large",type:"text"},on:{click:t.backHome}},[t._v("返回首页")]),n("Button",{attrs:{size:"large",type:"text"},on:{click:t.backPrev}},[t._v("返回上一页("+t._s(t.second)+"s)")])],1)}),s=[],a=(n("f548"),{name:"backBtnGroup",data:function(){return{second:5,timer:null}},methods:{backHome:function(){this.$router.replace({name:this.$config.homeName})},backPrev:function(){this.$router.go(-1)}},mounted:function(){var t=this;this.timer=setInterval((function(){0===t.second?t.backPrev():t.second--}),1e3)},beforeDestroy:function(){clearInterval(this.timer)}}),i=a,u=n("9ca4"),l=Object(u["a"])(i,o,s,!1,null,null,null),b=l.exports,f={name:"error_content",components:{backBtnGroup:b},props:{code:String,desc:String,src:String}},d=f,p=Object(u["a"])(d,r,c,!1,null,null,null);e["a"]=p.exports},f94f:function(t,e,n){"use strict";n.r(e);var r=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("error-content",{attrs:{code:"401",desc:"Oh~~您没有浏览这个页面的权限~",src:t.src}})},c=[],o=n("3026"),s=n.n(o),a=n("9454"),i={name:"error_401",components:{errorContent:a["a"]},data:function(){return{src:s.a}}},u=i,l=n("9ca4"),b=Object(l["a"])(u,r,c,!1,null,null,null);e["default"]=b.exports}}]);
\ No newline at end of file
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2c359864"],{"0eb4":function(t,e,n){},4740:function(t,e,n){t.exports=n.p+"img/error-500.a371eabc.svg"},"88b2":function(t,e,n){"use strict";n.r(e);var r=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("error-content",{attrs:{code:"500",desc:"Oh~~鬼知道服务器经历了什么~",src:t.src}})},c=[],o=n("4740"),s=n.n(o),a=n("9454"),i={name:"error_500",components:{errorContent:a["a"]},data:function(){return{src:s.a}}},u=i,l=n("9ca4"),d=Object(l["a"])(u,r,c,!1,null,null,null);e["default"]=d.exports},9454:function(t,e,n){"use strict";var r=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"error-page"},[n("div",{staticClass:"content-con"},[n("img",{attrs:{src:t.src,alt:t.code}}),n("div",{staticClass:"text-con"},[n("h4",[t._v(t._s(t.code))]),n("h5",[t._v(t._s(t.desc))])]),n("back-btn-group",{staticClass:"back-btn-group"})],1)])},c=[],o=(n("0eb4"),function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("Button",{attrs:{size:"large",type:"text"},on:{click:t.backHome}},[t._v("返回首页")]),n("Button",{attrs:{size:"large",type:"text"},on:{click:t.backPrev}},[t._v("返回上一页("+t._s(t.second)+"s)")])],1)}),s=[],a=(n("f548"),{name:"backBtnGroup",data:function(){return{second:5,timer:null}},methods:{backHome:function(){this.$router.replace({name:this.$config.homeName})},backPrev:function(){this.$router.go(-1)}},mounted:function(){var t=this;this.timer=setInterval((function(){0===t.second?t.backPrev():t.second--}),1e3)},beforeDestroy:function(){clearInterval(this.timer)}}),i=a,u=n("9ca4"),l=Object(u["a"])(i,o,s,!1,null,null,null),d=l.exports,p={name:"error_content",components:{backBtnGroup:d},props:{code:String,desc:String,src:String}},b=p,f=Object(u["a"])(b,r,c,!1,null,null,null);e["a"]=f.exports}}]);
\ No newline at end of file
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d0cf4f6"],{"62bf":function(e,t,s){"use strict";s.r(t);var r=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",[s("CaseForm",{key:this.$route.query.bizId,ref:"caseinfo",attrs:{fminfo:e.metaInfo,noExpandAuth:""},scopedSlots:e._u([{key:"default",fn:function(t){return[s("Button",{on:{click:e.subcaseclick}},[e._v("提交")])]}}])})],1)},a=[],n=(s("9a33"),s("0086")),o=s("db7f"),i=s("7e1e"),l={name:"creatScheme",data:function(){return{metaInfos:{ICP:{name:"ICP许可证申请方案",main:[{title:"方案信息",key:"baseinfo",cols:1,ctls:[{type:"label",label:"服务类型",prop:"business_type_name",style:"width: 60%; transform: translateX(10px)",disabled:!1,rules:[]},{type:"input",prop:"company_name",label:"公司名称",placeHolder:"请输入企业名称",style:"width: 60%; ",disabled:!1,rules:[{required:!0,message:"请输入企业名称",trigger:"blur"}]},{type:"adds-select",label:"申请区域",isMulti:!1,prop:"address",style:"width: 60%;",productName:"icp",rules:[{required:!0,message:"请选择申请区域",trigger:"blur"}]},{type:"switch",label:"年报服务",prop:"annual_report",opentext:"是",closetext:"否",style:"",rules:[],remark:"注:该服务包含一个ICP许可证有效期限内(5年)年报服务。"},{type:"textarea",label:"方案备注",prop:"remark",placeHolder:"请输入该方案备注",style:"width: 60%; transform: translateX(10px)",disabled:!1,rules:[]}]}],lists:[]},EDI:{name:"EDI许可证申请方案",main:[{title:"方案信息",key:"baseinfo",cols:1,ctls:[{type:"label",label:"服务类型",prop:"business_type_name",style:"width: 60%; transform: translateX(10px)",disabled:!1,rules:[{required:!0,message:" ",trigger:"blur"}]},{type:"input",prop:"company_name",label:"公司名称",placeHolder:"请输入企业名称",style:"width: 60%; ",disabled:!1,rules:[{required:!0,message:" ",trigger:"blur"}]},{type:"adds-select",label:"申请区域",isMulti:!1,prop:"address",productName:"edi",style:"width: 60%;",rules:[{required:!0,message:"请选择申请区域",trigger:"blur"}]},{type:"switch",label:"年报服务",prop:"annual_report",opentext:"是",closetext:"否",style:"",rules:[],remark:"注:该服务包含一个EDI许可证有效期限内(5年)年报服务。"},{type:"textarea",label:"方案备注",prop:"remark",placeHolder:"请输入该方案其他备注",style:"width: 60%; transform: translateX(10px)",disabled:!1,rules:[]}]}],lists:[]}},bizType:this.$route.query.type}},components:{CaseForm:n["a"]},mounted:function(){this.initDataSource()},computed:{metaInfo:function(){return this.metaInfos[this.bizType]}},watch:{$route:function(e,t){this.initDataSource()}},methods:{initDataSource:function(){var e=this;this.bizType=this.$route.query.type,this.$nextTick((function(){e.$refs.caseinfo.formModel.business_type_name=o["a"]["business_type"][e.bizType],"update"===e.$route.query.operation&&Object(i["p"])({bizopt_id:e.$route.query.bizId}).then((function(t){var s=t.data;0===s.status?(s=s.data,e.$refs.caseinfo.formModel.company_name=s.scheme_info.company,e.$refs.caseinfo.formModel.address="".concat(s.scheme_info.addressCode,"-").concat(s.scheme_info.address),e.$refs.caseinfo.formModel.annual_report=s.scheme_info.annual_report,e.$refs.caseinfo.formModel.remark=s.remark_info):(console.log(s),e.$Message.error("获取数据错误"))}))}))},subcaseclick:function(){var e=this;this.$refs.caseinfo.validate((function(t){if(t){var s=e.$refs.caseinfo.formModel;s={scheme_info:{address:s.address.split("-")[1],addressCode:s.address.split("-")[0],companyName:s.company_name,annual_report:s.annual_report},remark_info:s.remark,bizopt_id:e.$route.query.bizId},Object(i["g"])(s).then((function(t){var s=t.data;0===s.status?(e.$Message.success("当前操作已完成"),e.$router.push({name:"wailtingDispose"})):e.$Message.error(s.msg)}))}}))}}},u=l,p=s("9ca4"),c=Object(p["a"])(u,r,a,!1,null,null,null);t["default"]=c.exports}}]);
\ No newline at end of file
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2dc06650"],{"391e":function(e,t,a){"use strict";var n=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{attrs:{id:"framediv"}},[e._t("default",null,{adjustHeight:e.frameHeight})],2)},r=[],i=a("9ee1"),o=i["a"],u=a("9ca4"),s=Object(u["a"])(o,n,r,!1,null,null,null);t["a"]=s.exports},"446f":function(e,t,a){"use strict";a.r(t);var n=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("PageSpace",{scopedSlots:e._u([{key:"default",fn:function(t){var n=t.adjustHeight;return[a("BizTable",{ref:"bt",attrs:{formatCol:e.formatCol,metaName:"delivery_info",packageName:"delivery",modelName:"deliver",tblheight:n-120,refvalidatemethod:e.validmethod,savebefore:e.beforesave,editbefore:e.beforedit,addbefore:e.beforeadd},on:{onexec:e.onexec}})]}}])})},r=[],i=(a("b449"),a("9666")),o=a("06d3"),u=a("391e"),s=a("db7f"),c=a("7e1e"),d={name:"deliveryList",watch:{$route:function(e,t){this.$refs.bt.fetchData()}},data:function(){return{}},components:{BizTable:o["a"],PageSpace:u["a"]},methods:{beforeadd:function(e,t){return t({value:!0,message:null})},beforedit:function(e,t){return t({value:!0,message:null})},beforesave:function(e,t,a){return a(t)},onexec:function(){var e=Object(i["a"])(regeneratorRuntime.mark((function e(t,a){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:e.t0=t,e.next="info"===e.t0?3:13;break;case 3:return e.prev=3,e.next=6,Object(c["v"])({id:a.id});case 6:this.$router.push({name:"delivery_info",query:{id:a.id}}),e.next=12;break;case 9:e.prev=9,e.t1=e["catch"](3),this.$Message.error(e.t1.message);case 12:return e.abrupt("break",13);case 13:case"end":return e.stop()}}),e,this,[[3,9]])})));function t(t,a){return e.apply(this,arguments)}return t}(),validmethod:function(e,t,a){return a()},formatCol:function(e,t,a){return"delivery_status"===t?s["a"]["delivery_status"][e.delivery_status]:"product_code"===t?s["a"]["business_type"][e.product_code]:void 0}}},f=d,l=a("9ca4"),h=Object(l["a"])(f,n,r,!1,null,null,null);t["default"]=h.exports},"9ee1":function(e,t,a){"use strict";(function(e){a("163d");t["a"]={name:"pagespace_page",prop:{tweak:Number},data:function(){return{frameHeight:0,advalue:this.tweak?this.tweak:0}},components:{},mounted:function(){var t=this;this.setHeight(),e(window).resize((function(){t.setHeight()}))},methods:{setHeight:function(){var t=this;this.$nextTick((function(){var a=e("#framediv"),n=a.get()[0]||0,r=window.innerHeight-n.offsetTop-t.advalue;t.frameHeight=r,t.$emit("sizechange",t.frameHeight)}))}}}}).call(this,a("a336"))}}]);
\ No newline at end of file
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-3385141a"],{"0eb4":function(t,e,n){},"35f5":function(t,e,n){"use strict";n.r(e);var r=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("error-content",{attrs:{code:"404",desc:"Oh~~您的页面好像飞走了~",src:t.src}})},c=[],o=n("c436"),s=n.n(o),a=n("9454"),i={name:"error_404",components:{errorContent:a["a"]},data:function(){return{src:s.a}}},u=i,l=n("9ca4"),d=Object(l["a"])(u,r,c,!1,null,null,null);e["default"]=d.exports},9454:function(t,e,n){"use strict";var r=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"error-page"},[n("div",{staticClass:"content-con"},[n("img",{attrs:{src:t.src,alt:t.code}}),n("div",{staticClass:"text-con"},[n("h4",[t._v(t._s(t.code))]),n("h5",[t._v(t._s(t.desc))])]),n("back-btn-group",{staticClass:"back-btn-group"})],1)])},c=[],o=(n("0eb4"),function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("Button",{attrs:{size:"large",type:"text"},on:{click:t.backHome}},[t._v("返回首页")]),n("Button",{attrs:{size:"large",type:"text"},on:{click:t.backPrev}},[t._v("返回上一页("+t._s(t.second)+"s)")])],1)}),s=[],a=(n("f548"),{name:"backBtnGroup",data:function(){return{second:5,timer:null}},methods:{backHome:function(){this.$router.replace({name:this.$config.homeName})},backPrev:function(){this.$router.go(-1)}},mounted:function(){var t=this;this.timer=setInterval((function(){0===t.second?t.backPrev():t.second--}),1e3)},beforeDestroy:function(){clearInterval(this.timer)}}),i=a,u=n("9ca4"),l=Object(u["a"])(i,o,s,!1,null,null,null),d=l.exports,f={name:"error_content",components:{backBtnGroup:d},props:{code:String,desc:String,src:String}},p=f,m=Object(u["a"])(p,r,c,!1,null,null,null);e["a"]=m.exports},c436:function(t,e,n){t.exports=n.p+"img/error-404.94756dcf.svg"}}]);
\ No newline at end of file
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-382e9603"],{1663:function(t,e,a){"use strict";var s=a("a0b5"),n=a.n(s);n.a},"391e":function(t,e,a){"use strict";var s=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{attrs:{id:"framediv"}},[t._t("default",null,{adjustHeight:t.frameHeight})],2)},n=[],i=a("9ee1"),r=i["a"],o=a("9ca4"),u=Object(o["a"])(r,s,n,!1,null,null,null);e["a"]=u.exports},"9ee1":function(t,e,a){"use strict";(function(t){a("163d");e["a"]={name:"pagespace_page",prop:{tweak:Number},data:function(){return{frameHeight:0,advalue:this.tweak?this.tweak:0}},components:{},mounted:function(){var e=this;this.setHeight(),t(window).resize((function(){e.setHeight()}))},methods:{setHeight:function(){var e=this;this.$nextTick((function(){var a=t("#framediv"),s=a.get()[0]||0,n=window.innerHeight-s.offsetTop-e.advalue;e.frameHeight=n,e.$emit("sizechange",e.frameHeight)}))}}}}).call(this,a("a336"))},a0b5:function(t,e,a){},ccb2:function(t,e,a){"use strict";a.r(e);var s=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("PageSpace",[a("div",{staticClass:"info"},[a("h3",[t._v("营业执照")]),a("Form",{attrs:{model:t.businessLicense,"label-position":"left","label-width":180}},[a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"公司名称"}},[a("span",[t._v(t._s(t.businessLicense.name))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"住所"}},[a("span",[t._v(t._s(t.businessLicense.address))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"成立时间"}},[a("span",[t._v(t._s(t.buildDate(t.businessLicense.createdAt)))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"公司类型"}},[a("span",[t._v(t._s(t.businessLicense.type))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"注册资本"}},[a("span",[t._v(t._s(t.businessLicense.registeredCapital)+"万人民币")])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"营业期限"}},[a("span",[t._v(t._s(t.businessLicense.businessTerm))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"企业统一社会信通代码"}},[a("span",[t._v(t._s(t.businessLicense.enterpriseCode))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"法定代表人"}},[a("span",[t._v(t._s(t.businessLicense.legalRepresentative))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"经营范围"}},[a("span",[t._v(t._s(t.businessLicense.scopeBusiness))])])],1)],1)],1)],1),a("div",{staticClass:"info"},[a("h3",[t._v("资质信息")]),a("Form",{attrs:{model:t.qualificationData,"label-position":"left","label-width":180}},[a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"证书编号"}},[a("span",[t._v(t._s(t.qualificationData.certificateNumber))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"业务种类"}},[a("span",[t._v(t._s(t.qualificationData.businessTypes))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"证书文件"}},[a("ShowFile",{attrs:{url:t.qualificationData.file&&t.qualificationData.file.url,name:t.qualificationData.file&&t.qualificationData.file.name}})],1)],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"服务项目"}},[a("span",[t._v(t._s(t.qualificationData.serviceProject))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"发证日期"}},[a("span",[t._v(t._s(t.buildDate(t.qualificationData.startAt)))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"有效期至"}},[a("span",[t._v(t._s(t.buildDate(t.qualificationData.endAt)))]),t._v("       \n "),a("span",{staticStyle:{"font-family":"PingFangSC-Regular, PingFang SC","font-weight":"400",color:"rgba(236, 148, 5, 1)","line-height":"17px"}},[t._v(t._s(t.expireTime))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"业务覆盖范围"}},[a("span",[t._v(t._s(t.qualificationData.businessScope))])])],1)],1)],1)],1),a("div",{staticClass:"info"},[a("h3",[t._v("年报信息")]),a("Table",{attrs:{border:"",columns:t.annualReportColumns,data:t.annualReportInfo},scopedSlots:t._u([{key:"year",fn:function(e){var s=e.row;return[a("span",[t._v(t._s(s.year)+"年")])]}},{key:"status",fn:function(e){var s=e.row;return[a("span",[t._v(t._s(t.buildStatus(s.status)))])]}},{key:"time",fn:function(e){var s=e.row;return[a("span",{directives:[{name:"show",rawName:"v-show",value:"declaresuccess"===s.status,expression:"row.status ==='declaresuccess'"}]},[t._v(t._s(t.buildDate(s.updated_at,"YYYY-MM-DD HH:mm:ss")))])]}},{key:"operation",fn:function(e){var s=e.row,n=e.index;return[a("uploadImg",{attrs:{file:s.file,type:"again"},on:{change:function(e,a){t.doDeclare(e,a,n)}}})]}}])})],1)])},n=[],i=(a("b449"),a("9666")),r=a("35f4"),o=a.n(r),u=(a("f1c3"),a("391e")),c=a("db7f"),l=a("7e1e"),f={name:"annualReportInfo",watch:{$route:function(t,e){this.initData()}},components:{PageSpace:u["a"]},computed:{expireTime:function(){var t=this.buildDate(new Date),e=this.buildDate(new Date(this.qualificationData.endAt));t=o()(t,"YYYY-MM-DD"),e=o()(e,"YYYY-MM-DD");var a=e.diff(t,"days"),s="";if(a>0){s="剩余",a=o.a.preciseDiff(t,e,!0);var n=a,i=n.years,r=n.months,u=n.days;0!==i&&(s="".concat(s).concat(i,"年")),0!==r&&(s="".concat(s).concat(r,"个月")),0!==u&&(s="".concat(s).concat(u,"天"))}else s="已到期";return"(".concat(s,")")}},data:function(){return{businessLicense:{},qualificationData:{},annualReportColumns:[{title:"年份",slot:"year"},{title:"状态",slot:"status"},{title:"上传时间",slot:"time"},{title:"操作",slot:"operation"}],annualReportInfo:[]}},methods:{buildDate:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"YYYY-MM-DD";return o()(t).format(e)},buildStatus:function(t){return c["a"].annualreport_status[t]},doDeclare:function(){var t=Object(i["a"])(regeneratorRuntime.mark((function t(e,a,s){var n;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:n=this.annualReportInfo[s],t.t0=e,t.next="add"===t.t0?4:15;break;case 4:return t.prev=4,t.next=7,Object(l["i"])({id:n.id,file:a});case 7:this.$Message.success("申报成功"),this.initData(),t.next=14;break;case 11:t.prev=11,t.t1=t["catch"](4),this.$Message.error(t.t1.message);case 14:return t.abrupt("break",15);case 15:case"end":return t.stop()}}),t,this,[[4,11]])})));function e(e,a,s){return t.apply(this,arguments)}return e}(),initData:function(){var t=Object(i["a"])(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,Object(l["j"])({id:this.$route.query.id});case 3:e=t.sent,this.businessLicense=e.businessLicense,this.qualificationData=e.qualification,this.annualReportInfo=e.annualreports,t.next=12;break;case 9:t.prev=9,t.t0=t["catch"](0),this.$Message.error(t.t0.message);case 12:case"end":return t.stop()}}),t,this,[[0,9]])})));function e(){return t.apply(this,arguments)}return e}()},created:function(){this.initData()}},p=f,m=(a("1663"),a("9ca4")),d=Object(m["a"])(p,s,n,!1,null,null,null);e["default"]=d.exports},f1c3:function(t,e,a){if("undefined"===typeof s)var s=a("35f4");(function(t){var e={nodiff:"",year:"year",years:"years",month:"month",months:"months",day:"day",days:"days",hour:"hour",hours:"hours",minute:"minute",minutes:"minutes",second:"second",seconds:"seconds",delimiter:" "};function a(t,a){return t+" "+e[a+(1===t?"":"s")]}function s(t,s,n,i,r,o){var u=[];return t&&u.push(a(t,"year")),s&&u.push(a(s,"month")),n&&u.push(a(n,"day")),i&&u.push(a(i,"hour")),r&&u.push(a(r,"minute")),o&&u.push(a(o,"second")),u.join(e.delimiter)}function n(t,e,a,s,n,i,r){return{years:t,months:e,days:a,hours:s,minutes:n,seconds:i,firstDateWasLater:r}}t.fn.preciseDiff=function(e,a){return t.preciseDiff(this,e,a)},t.preciseDiff=function(a,i,r){var o,u=t(a),c=t(i);if(u.add(c.utcOffset()-u.utcOffset(),"minutes"),u.isSame(c))return r?n(0,0,0,0,0,0,!1):e.nodiff;if(u.isAfter(c)){var l=u;u=c,c=l,o=!0}else o=!1;var f=c.year()-u.year(),p=c.month()-u.month(),m=c.date()-u.date(),d=c.hour()-u.hour(),h=c.minute()-u.minute(),v=c.second()-u.second();if(v<0&&(v=60+v,h--),h<0&&(h=60+h,d--),d<0&&(d=24+d,m--),m<0){var b=t(c.year()+"-"+(c.month()+1),"YYYY-MM").subtract(1,"M").daysInMonth();m=b<u.date()?b+m+(u.date()-b):b+m,p--}return p<0&&(p=12+p,f--),r?n(f,p,m,d,h,v,o):s(f,p,m,d,h,v)}})(s)}}]);
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-506f6cae"],{"391e":function(e,t,a){"use strict";var n=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{attrs:{id:"framediv"}},[e._t("default",null,{adjustHeight:e.frameHeight})],2)},i=[],s=a("9ee1"),r=s["a"],o=a("9ca4"),c=Object(o["a"])(r,n,i,!1,null,null,null);t["a"]=c.exports},"9ee1":function(e,t,a){"use strict";(function(e){a("163d");t["a"]={name:"pagespace_page",prop:{tweak:Number},data:function(){return{frameHeight:0,advalue:this.tweak?this.tweak:0}},components:{},mounted:function(){var t=this;this.setHeight(),e(window).resize((function(){t.setHeight()}))},methods:{setHeight:function(){var t=this;this.$nextTick((function(){var a=e("#framediv"),n=a.get()[0]||0,i=window.innerHeight-n.offsetTop-t.advalue;t.frameHeight=i,t.$emit("sizechange",t.frameHeight)}))}}}}).call(this,a("a336"))},c18d:function(e,t,a){"use strict";a.r(t);var n=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("PageSpace",{scopedSlots:e._u([{key:"default",fn:function(t){var n=t.adjustHeight;return[a("BizTable",{ref:"bt",attrs:{formatCol:e.formatCol,metaName:"bizchance_info",packageName:"bizchance",modelName:"bizopt",tblheight:n-120,refvalidatemethod:e.validmethod,savebefore:e.beforesave,editbefore:e.beforedit,addbefore:e.beforeadd},on:{onexec:e.onexec,oninitbtn:e.oninitbtn}})]}}])})},i=[],s=a("06d3"),r=a("391e"),o=a("db7f"),c={name:"businessList",data:function(){return{}},components:{BizTable:s["a"],PageSpace:r["a"]},watch:{$route:function(e,t){this.$refs.bt.fetchData()}},methods:{beforeadd:function(e,t){return t({value:!0,message:null})},beforedit:function(e,t){return t({value:!0,message:null})},beforesave:function(e,t,a){return a(t)},onexec:function(e,t){switch(e){case"info":this.$router.push({name:"bizchanceinfo",query:{id:t.id,type:t.business_type}});break;case"created_scheme":this.$router.push({name:"createdScheme",query:{bizId:t.id,type:t.business_type}});break}},validmethod:function(e,t,a){return a()},formatCol:function(e,t,a){var n=e[t];return o["a"][t]&&o["a"][t][e[t]]&&(n=o["a"][t][e[t]]),n},oninitbtn:function(e,t){switch(t.business_status){case"beforeSubmission":"created_scheme"===e.key&&("isReject"===t.schemeStatus?e.ishide=!0:e.ishide=!1);break;case"beforeConfirmation":case"isFinished":case"isClosed":"created_scheme"===e.key&&(e.ishide=!0);break}}}},u=c,f=a("9ca4"),d=Object(f["a"])(u,n,i,!1,null,null,null);t["default"]=d.exports}}]);
\ No newline at end of file
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-72133a04"],{"391e":function(e,t,a){"use strict";var n=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{attrs:{id:"framediv"}},[e._t("default",null,{adjustHeight:e.frameHeight})],2)},r=[],i=a("9ee1"),o=i["a"],u=a("9ca4"),s=Object(u["a"])(o,n,r,!1,null,null,null);t["a"]=s.exports},"88e5":function(e,t,a){"use strict";a.r(t);var n=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("PageSpace",{scopedSlots:e._u([{key:"default",fn:function(t){var n=t.adjustHeight;return[a("BizTable",{ref:"bt",attrs:{formatCol:e.formatCol,metaName:"annualReport_info",packageName:"delivery",modelName:"deliver",tblheight:n-120,refvalidatemethod:e.validmethod,savebefore:e.beforesave,editbefore:e.beforedit,addbefore:e.beforeadd},on:{onexec:e.onexec}})]}}])})},r=[],i=a("06d3"),o=a("391e"),u=a("db7f"),s={name:"deliveryList",watch:{$route:function(e,t){this.$refs.bt.fetchData()}},data:function(){return{}},components:{BizTable:i["a"],PageSpace:o["a"]},methods:{beforeadd:function(e,t){return t({value:!0,message:null})},beforedit:function(e,t){return t({value:!0,message:null})},beforesave:function(e,t,a){return a(t)},onexec:function(e,t){switch(e){case"info":this.$router.push({name:"annualReportInfo",query:{id:t.id}});break}},validmethod:function(e,t,a){return a()},formatCol:function(e,t,a){return"delivery_status"===t?u["a"]["annualreport_status"][e.delivery_status]:"product_code"===t?u["a"]["annualreport_type"][e.product_code]:void 0}}},c=s,f=a("9ca4"),d=Object(f["a"])(c,n,r,!1,null,null,null);t["default"]=d.exports},"9ee1":function(e,t,a){"use strict";(function(e){a("163d");t["a"]={name:"pagespace_page",prop:{tweak:Number},data:function(){return{frameHeight:0,advalue:this.tweak?this.tweak:0}},components:{},mounted:function(){var t=this;this.setHeight(),e(window).resize((function(){t.setHeight()}))},methods:{setHeight:function(){var t=this;this.$nextTick((function(){var a=e("#framediv"),n=a.get()[0]||0,r=window.innerHeight-n.offsetTop-t.advalue;t.frameHeight=r,t.$emit("sizechange",t.frameHeight)}))}}}}).call(this,a("a336"))}}]);
\ No newline at end of file
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-79527e9c"],{"2e25":function(e,t,s){},3759:function(e,t,s){"use strict";s.r(t);var a=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("Card",{attrs:{shadow:""}},[s("div",[s("div",{staticClass:"message-page-con message-category-con"},[s("Menu",{attrs:{width:"auto","active-name":"unread"},on:{"on-select":e.handleSelect}},[s("MenuItem",{attrs:{name:"unread"}},[s("span",{staticClass:"category-title"},[e._v("未读消息")]),s("Badge",{staticStyle:{"margin-left":"10px"},attrs:{count:e.messageUnreadCount}})],1),s("MenuItem",{attrs:{name:"readed"}},[s("span",{staticClass:"category-title"},[e._v("已读消息")]),s("Badge",{staticStyle:{"margin-left":"10px"},attrs:{"class-name":"gray-dadge",count:e.messageReadedCount}})],1),s("MenuItem",{attrs:{name:"trash"}},[s("span",{staticClass:"category-title"},[e._v("回收站")]),s("Badge",{staticStyle:{"margin-left":"10px"},attrs:{"class-name":"gray-dadge",count:e.messageTrashCount}})],1)],1)],1),s("div",{staticClass:"message-page-con message-list-con"},[e.listLoading?s("Spin",{attrs:{fix:"",size:"large"}}):e._e(),s("Menu",{class:e.titleClass,attrs:{width:"auto","active-name":""},on:{"on-select":e.handleView}},e._l(e.messageList,(function(t){return s("MenuItem",{key:"msg_"+t.msg_id,attrs:{name:t.msg_id}},[s("div",[s("p",{staticClass:"msg-title"},[e._v(e._s(t.title))]),s("Badge",{attrs:{status:"default",text:t.create_time}}),s("Button",{directives:[{name:"show",rawName:"v-show",value:"unread"!==e.currentMessageType,expression:"currentMessageType !== 'unread'"}],staticStyle:{float:"right","margin-right":"20px"},style:{display:t.loading?"inline-block !important":""},attrs:{loading:t.loading,size:"small",icon:"readed"===e.currentMessageType?"md-trash":"md-redo",title:"readed"===e.currentMessageType?"删除":"还原",type:"text"},nativeOn:{click:function(s){return s.stopPropagation(),e.removeMsg(t)}}})],1)])})),1)],1),s("div",{staticClass:"message-page-con message-view-con"},[e.contentLoading?s("Spin",{attrs:{fix:"",size:"large"}}):e._e(),s("div",{staticClass:"message-view-header"},[s("h2",{staticClass:"message-view-title"},[e._v(e._s(e.showingMsgItem.title))]),s("time",{staticClass:"message-view-time"},[e._v(e._s(e.showingMsgItem.create_time))])]),s("div",{domProps:{innerHTML:e._s(e.messageContent)}})],1)])])},n=[],i=(s("5ab2"),s("6d57"),s("e10e"),s("e697"),s("13c1")),r=s("9f3a");function o(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,a)}return s}function c(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{};t%2?o(Object(s),!0).forEach((function(t){Object(i["a"])(e,t,s[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):o(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))}))}return e}var g={unread:"messageUnreadList",readed:"messageReadedList",trash:"messageTrashList"},d={name:"message_page",data:function(){return{listLoading:!0,contentLoading:!1,currentMessageType:"unread",messageContent:"",showingMsgItem:{}}},computed:c(c({},Object(r["e"])({messageUnreadList:function(e){return e.user.messageUnreadList},messageReadedList:function(e){return e.user.messageReadedList},messageTrashList:function(e){return e.user.messageTrashList},messageList:function(){return this[g[this.currentMessageType]]},titleClass:function(){return{"not-unread-list":"unread"!==this.currentMessageType}}})),Object(r["c"])(["messageUnreadCount","messageReadedCount","messageTrashCount"])),methods:c(c(c({},Object(r["d"])([])),Object(r["b"])(["getContentByMsgId","getMessageList","hasRead","removeReaded","restoreTrash"])),{},{stopLoading:function(e){this[e]=!1},handleSelect:function(e){this.currentMessageType=e},handleView:function(e){var t=this;this.contentLoading=!0,this.getContentByMsgId({msg_id:e}).then((function(s){t.messageContent=s;var a=t.messageList.find((function(t){return t.msg_id===e}));a&&(t.showingMsgItem=a),"unread"===t.currentMessageType&&t.hasRead({msg_id:e}),t.stopLoading("contentLoading")})).catch((function(){t.stopLoading("contentLoading")}))},removeMsg:function(e){e.loading=!0;var t=e.msg_id;"readed"===this.currentMessageType?this.removeReaded({msg_id:t}):this.restoreTrash({msg_id:t})}}),mounted:function(){var e=this;this.listLoading=!0,this.getMessageList().then((function(){return e.stopLoading("listLoading")})).catch((function(){return e.stopLoading("listLoading")}))}},u=d,m=(s("ac69"),s("9ca4")),l=Object(m["a"])(u,a,n,!1,null,null,null);t["default"]=l.exports},ac69:function(e,t,s){"use strict";var a=s("2e25"),n=s.n(a);n.a}}]);
\ No newline at end of file
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-bc0fc59e"],{"1f02":function(e,t,a){"use strict";a.r(t);var s=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",[a("PageSpace",{key:this.$route.query.id},[a("div",{staticClass:"button"},[a("Button",{directives:[{name:"show",rawName:"v-show",value:e.closeShow,expression:"closeShow"}],on:{click:function(t){e.showModel=!0}}},[e._v("关闭商机")]),a("Button",{directives:[{name:"show",rawName:"v-show",value:e.createShow,expression:"createShow"}],attrs:{type:"primary"},on:{click:e.doCreate}},[e._v("新建方案")]),a("Button",{directives:[{name:"show",rawName:"v-show",value:e.updateShow,expression:"updateShow"}],attrs:{type:"primary"},on:{click:e.doUpdate}},[e._v("修改方案")])],1),a("FormAccount",{ref:"bizchanceInfo",attrs:{fminfo:e.form[this.$route.query.type].formInfo,noExpandAuth:""}}),a("FormAccount",{directives:[{name:"show",rawName:"v-show",value:e.showScheme,expression:"showScheme"}],ref:"schemeInfo",attrs:{fminfo:e.form[e.type].schemeInfo,noExpandAuth:""}})],1),a("div",[a("Modal",{attrs:{title:"关闭商机",width:"500",loading:e.loading},on:{"on-ok":e.ok,"on-cancel":e.cancel},model:{value:e.showModel,callback:function(t){e.showModel=t},expression:"showModel"}},[a("Divider",{staticStyle:{height:"20px",width:"3px","background-color":"blue"},attrs:{type:"vertical"}}),e._v("关闭原因\n "),a("Form",{ref:"formItem",attrs:{model:e.formItem,"label-width":70,rules:e.ruleValidate,"class-name":"vertical-center-modal"}},[a("FormItem",{attrs:{label:"商机编号"}},[a("span",[e._v(e._s(e.formItem.demand_code))])]),a("FormItem",{attrs:{label:"关闭理由",prop:"close_reason"}},[a("Input",{attrs:{type:"textarea",autosize:{minRows:2,maxRows:5},placeholder:"请输入关闭理由"},model:{value:e.formItem.close_reason,callback:function(t){e.$set(e.formItem,"close_reason",t)},expression:"formItem.close_reason"}})],1)],1)],1)],1)],1)},o=[],n=(a("b449"),a("9666")),r=a("0086"),l=a("7e1e"),i=a("db7f"),c=a("391e"),u={name:"wailtingDispose",components:{FormAccount:r["a"],PageSpace:c["a"]},data:function(){return{form:{ICP:{formInfo:{name:"ICP商机详情",main:[{title:"基本信息",key:"baseinfo",ctls:[{type:"label",label:"创建时间",prop:"created_at",style:"",disabled:!0},{type:"label",label:"商机状态",prop:"business_status",style:""},{type:"label",label:"商机编号",prop:"demand_code",style:""},{type:"label",label:"商机类型",prop:"business_type",style:""},{type:"label",label:"公司名称",prop:"company_name",style:""},{type:"label",label:"公司区域",prop:"service_address",style:""},{type:"label",label:"联系人姓名",prop:"customer_name",style:""},{type:"label",label:"联系电话",prop:"customer_number",style:""},{type:"label",label:"商机内容",prop:"content",style:""},{type:"label",label:"关闭原因",prop:"close_reason",style:""}]}]},schemeInfo:{name:"方案详情",main:[{title:"基本信息",key:"baseinfo",ctls:[{type:"label",label:"创建时间",prop:"created_at",style:""},{type:"label",label:"服务类型",prop:"business_type",style:""},{type:"label",label:"年报服务",prop:"annual_report",style:""},{type:"label",label:"申请区域",prop:"address",style:""},{type:"label",label:"公司名称",prop:"company_name",style:""},{type:"label",label:"备注",prop:"remark_info",style:""},{type:"label",label:"退回原因",prop:"reject_reason",style:""}]}]}},EDI:{formInfo:{name:"EDI商机详情",main:[{title:"基本信息",key:"baseinfo",ctls:[{type:"label",label:"创建时间",prop:"created_at",style:"",disabled:!0},{type:"label",label:"商机状态",prop:"business_status",style:""},{type:"label",label:"商机编号",prop:"demand_code",style:""},{type:"label",label:"商机类型",prop:"business_type",style:""},{type:"label",label:"公司名称",prop:"company_name",style:""},{type:"label",label:"公司区域",prop:"service_address",style:""},{type:"label",label:"联系人姓名",prop:"customer_name",style:""},{type:"label",label:"联系电话",prop:"customer_number",style:""},{type:"label",label:"商机内容",prop:"content",style:""},{type:"label",label:"关闭原因",prop:"close_reason",style:""}]}]},schemeInfo:{name:"方案详情",main:[{title:"基本信息",key:"baseinfo",ctls:[{type:"label",label:"创建时间",prop:"created_at",style:""},{type:"label",label:"服务类型",prop:"business_type",style:""},{type:"label",label:"年报服务",prop:"annual_report",style:""},{type:"label",label:"申请区域",prop:"address",style:""},{type:"label",label:"公司名称",prop:"company_name",style:""},{type:"label",label:"备注",prop:"remark_info",style:""},{type:"label",label:"退回原因",prop:"reject_reason",style:""}]}]}}},bizchanceData:null,showScheme:!0,type:this.$route.query.type,closeShow:!1,createShow:!1,updateShow:!1,bizStatus:"",schemeStatus:"",showModel:!1,formItem:{demand_code:"",close_reason:""},ruleValidate:{close_reason:[{required:!0,message:"关闭理由不能为空",trigger:"blur"}]},loading:!0,key:"".concat(this.$route.query.type,"_").concat(this.$route.query.id)}},watch:{$route:function(e,t){this.initDataSource(e.query.id)}},methods:{initDataSource:function(e){var t=this;this.key="".concat(this.$route.query.type,"_").concat(this.$route.query.id),Object(l["k"])({id:e}).then((function(e){var a=e.data;0===a.status?(a=a.data,t.bizchanceData=a,t.type=a.bussinessData.business_type,a.bussinessData.business_type=i["a"].business_type[a.bussinessData.business_type],t.bizStatus=a.bussinessData.business_status,a.bussinessData.business_status=i["a"].business_status[a.bussinessData.business_status],a.bussinessData.annual_report=a.bussinessData.annual_report?"有":"无",t.formItem.demand_code=a.bussinessData.demand_code,t.$nextTick((function(){t.$refs.bizchanceInfo.formModel=a.bussinessData,a.schemeData?(t.showScheme=!0,a.schemeData.business_type=a.bussinessData.business_type,a.schemeData.annual_report=a.schemeData.annual_report?"有":"无",t.schemeStatus=a.schemeData.scheme_status,t.$refs.schemeInfo.formModel=a.schemeData):(t.showScheme=!1,t.schemeStatus=null),t.showButton(t.bizStatus,t.schemeStatus)}))):t.$Message.error("获取数据错误")}))},beforeadd:function(e,t){return t({value:!0,message:null})},beforedit:function(e,t){return t({value:!0,message:null})},beforesave:function(e,t,a){return a(t)},onexec:function(e,t){},validmethod:function(e,t,a){return a()},formatCol:function(e,t,a){return e[t]},doUpdate:function(){this.$router.push({name:"createdScheme",query:{bizId:this.$route.query.id,type:this.type,operation:"update"}})},doClose:function(){var e=Object(n["a"])(regeneratorRuntime.mark((function e(t){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Object(l["e"])({bizId:this.$route.query.id,close_reason:t});case 3:this.loading=!1,this.showModel=!1,this.$Message.success("当前操作已完成"),this.initDataSource(this.$route.query.id),e.next=14;break;case 9:e.prev=9,e.t0=e["catch"](0),this.loading=!1,this.showModel=!0,this.$Message.error(e.t0.message);case 14:case"end":return e.stop()}}),e,this,[[0,9]])})));function t(t){return e.apply(this,arguments)}return t}(),doCreate:function(){this.$router.push({name:"createdScheme",query:{bizId:this.$route.query.id,type:this.type,operation:"create"}})},showButton:function(e,t){switch(e){case"beforeSubmission":t&&"isReject"===t?(this.closeShow=!0,this.createShow=!1,this.updateShow=!0):(this.closeShow=!0,this.createShow=!0,this.updateShow=!1);break;case"beforeConfirmation":this.closeShow=!0,this.createShow=!1,this.updateShow=!1;break;case"isFinished":case"isClosed":this.closeShow=!1,this.createShow=!1,this.updateShow=!1;break}},ok:function(){var e=this;this.$refs["formItem"].validate(function(){var t=Object(n["a"])(regeneratorRuntime.mark((function t(a){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(!a){t.next=5;break}return t.next=3,e.doClose(e.formItem.close_reason);case 3:t.next=7;break;case 5:e.loading=!1,e.showModel=!0;case 7:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}())},cancel:function(){this.loading=!0,this.showModel=!1}},mounted:function(){this.initDataSource(this.$route.query.id)}},p=u,h=(a("40a0"),a("9ca4")),b=Object(h["a"])(p,s,o,!1,null,null,null);t["default"]=b.exports},"391e":function(e,t,a){"use strict";var s=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{attrs:{id:"framediv"}},[e._t("default",null,{adjustHeight:e.frameHeight})],2)},o=[],n=a("9ee1"),r=n["a"],l=a("9ca4"),i=Object(l["a"])(r,s,o,!1,null,null,null);t["a"]=i.exports},"40a0":function(e,t,a){"use strict";var s=a("d9ad"),o=a.n(s);o.a},"9ee1":function(e,t,a){"use strict";(function(e){a("163d");t["a"]={name:"pagespace_page",prop:{tweak:Number},data:function(){return{frameHeight:0,advalue:this.tweak?this.tweak:0}},components:{},mounted:function(){var t=this;this.setHeight(),e(window).resize((function(){t.setHeight()}))},methods:{setHeight:function(){var t=this;this.$nextTick((function(){var a=e("#framediv"),s=a.get()[0]||0,o=window.innerHeight-s.offsetTop-t.advalue;t.frameHeight=o,t.$emit("sizechange",t.frameHeight)}))}}}}).call(this,a("a336"))},d9ad:function(e,t,a){}}]);
\ No newline at end of file
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-c99e2bc4"],{"391e":function(e,t,a){"use strict";var i=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{attrs:{id:"framediv"}},[e._t("default",null,{adjustHeight:e.frameHeight})],2)},s=[],r=a("9ee1"),o=r["a"],n=a("9ca4"),l=Object(n["a"])(o,i,s,!1,null,null,null);t["a"]=l.exports},"455d":function(e,t,a){"use strict";a.d(t,"b",(function(){return i})),a.d(t,"d",(function(){return s})),a.d(t,"c",(function(){return r})),a.d(t,"a",(function(){return o}));a("cc57");var i=function(e,t,a){t&&t.url&&t.name?a():a(new Error("请上传文件"))},s=function(e,t,a){/^1[3456789][0-9]{9}$/.test(t)?a():a(new Error("手机号格式错误"))},r=function(e,t,a){/(^\d{15}&)|(^\d{18})|(^\d{17}(\d|X|x)$)/.test(t)?a():a(new Error("身份证格式错误"))},o=function(e,t,a){/^([0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}|[1-9]\d{14})$/.test(t)?a():a(new Error("企业信用代码格式错误"))}},"5c1d":function(e,t,a){"use strict";var i=a("8284"),s=a.n(i);s.a},"74c0":function(e,t,a){"use strict";a.r(t);var i=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("PageSpace",[a("Button",{directives:[{name:"show",rawName:"v-show",value:e.uploadMaterial,expression:"uploadMaterial"}],attrs:{type:"primary"},on:{click:e.doCollect}},[e._v("上传材料")]),a("Button",{directives:[{name:"show",rawName:"v-show",value:e.editorMaterial,expression:"editorMaterial"}],attrs:{type:"primary"},on:{click:e.doCollect}},[e._v("编辑材料")]),a("Button",{directives:[{name:"show",rawName:"v-show",value:e.downloadMaterial,expression:"downloadMaterial"}],on:{click:e.downloadMaterialFile}},[e._v("下载办理材料")]),a("Button",{directives:[{name:"show",rawName:"v-show",value:e.uploadQualification,expression:"uploadQualification"}],on:{click:function(t){e.aptitudeShow=!0}}},[e._v("上传资质信息")]),a("Button",{directives:[{name:"show",rawName:"v-show",value:e.editorQualification,expression:"editorQualification"}],on:{click:function(t){e.aptitudeShow=!0}}},[e._v("编辑资质信息")]),a("Button",{directives:[{name:"show",rawName:"v-show",value:e.addMail,expression:"addMail"}],on:{click:function(t){e.mailShow=!0}}},[e._v("添加邮寄信息")]),a("Button",{directives:[{name:"show",rawName:"v-show",value:e.uploadStatus,expression:"uploadStatus"}],on:{click:function(t){e.scheduleShow=!0}}},[e._v("更新办理进度")]),a("Button",{directives:[{name:"show",rawName:"v-show",value:e.close,expression:"close"}],on:{click:function(t){e.closeShow=!0}}},[e._v("关闭交付单")]),a("div",{staticClass:"content"},[a("div",{staticClass:"info"},[a("h3",[e._v("办理状态:")]),a("Steps",{staticClass:"steps",attrs:{current:e.current}},e._l(e.statusList,(function(e,t){return a("Step",{key:t,attrs:{title:e.title,content:e.content}})})),1)],1),a("div",{staticClass:"info"},[a("h3",[e._v("服务概况")]),a("Form",{attrs:{model:e.deliveryInfo,"label-position":"left","label-width":180}},[a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"交付单编号"}},[a("span",[e._v(e._s(e.deliveryInfo.delivery_code))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"办理状态"}},[a("span",[e._v(e._s(e.deliveryInfo.delivery_status))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"商机编号"}},[a("span",[e._v(e._s(e.deliveryInfo.demand_code||"无"))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"申请类型"}},[a("span",[e._v(e._s(e.deliveryInfo.product_name))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"公司名称"}},[a("span",[e._v(e._s(e.deliveryInfo.company))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"申请地区"}},[a("span",[e._v(e._s(e.deliveryInfo.service_address))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"联系人姓名"}},[a("span",[e._v(e._s(e.deliveryInfo.person))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"联系电话"}},[a("span",[e._v(e._s(e.deliveryInfo.phone))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"是否含有年报"}},[a("span",[e._v(e._s(e.deliveryInfo.annualReport?"是":"否"))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"备注"}},[a("span",[e._v(e._s(e.deliveryInfo.memoInfo))])])],1)],1),a("Row",[a("Col",{directives:[{name:"show",rawName:"v-show",value:"closed"===e.delivery_status,expression:"delivery_status==='closed'"}],attrs:{span:"12"}},[a("FormItem",{attrs:{label:"关闭理由"}},[a("span",[e._v(e._s(e.deliveryInfo.close_reason))])])],1)],1)],1)],1),a("div",{directives:[{name:"show",rawName:"v-show",value:["disposeing","posting","success","closed"].includes(e.delivery_status)&&e.qualification,expression:"['disposeing','posting','success','closed'].includes(delivery_status)&&qualification"}],staticClass:"info"},[a("h3",[e._v("资质信息")]),a("Form",{attrs:{model:e.qualificationData,"label-position":"left","label-width":180}},[a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"证书编号"}},[a("span",[e._v(e._s(e.qualificationData.certificateNumber))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"业务种类"}},[a("span",[e._v(e._s(e.qualificationData.businessTypes))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"证书文件"}},[a("ShowFile",{attrs:{url:e.qualificationData.file&&e.qualificationData.file.url,name:e.qualificationData.file&&e.qualificationData.file.name}})],1)],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"服务项目"}},[a("span",[e._v(e._s(e.qualificationData.serviceProject))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"发证日期"}},[a("span",[e._v(e._s(e.buildDate(e.qualificationData.startAt)))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"有效期至"}},[a("span",[e._v(e._s(e.buildDate(e.qualificationData.endAt)))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"业务覆盖范围"}},[a("span",[e._v(e._s(e.qualificationData.businessScope))])])],1)],1)],1)],1),a("div",{directives:[{name:"show",rawName:"v-show",value:["submiting","disposeing","posting","success","closed"].includes(e.delivery_status)&&e.material,expression:"['submiting','disposeing','posting','success','closed'].includes(delivery_status)&&material"}]},[a("div",{staticClass:"info"},[a("h3",[e._v("营业执照")]),a("Form",{attrs:{model:e.businessLicense,"label-position":"left","label-width":180}},[a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"公司名称"}},[a("span",[e._v(e._s(e.businessLicense.name))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"住所"}},[a("span",[e._v(e._s(e.businessLicense.address))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"成立时间"}},[a("span",[e._v(e._s(e.buildDate(e.businessLicense.createdAt)))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"公司类型"}},[a("span",[e._v(e._s(e.businessLicense.type))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"注册资本"}},[a("span",[e._v(e._s(e.businessLicense.registeredCapital)+"万人民币")])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"营业期限"}},[a("span",[e._v(e._s(e.businessLicense.businessTerm))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"企业统一社会信通代码"}},[a("span",[e._v(e._s(e.businessLicense.enterpriseCode))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"法定代表人"}},[a("span",[e._v(e._s(e.businessLicense.legalRepresentative))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"经营范围"}},[a("span",[e._v(e._s(e.businessLicense.scopeBusiness))])])],1)],1)],1)],1),a("div",{staticClass:"info"},[a("h3",[e._v("公司经营信息")]),a("Form",{attrs:{model:e.businessInformation,"label-position":"left","label-width":180}},[a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"公司性质"}},[a("span",[e._v(e._s(e.businessInformation.comapnyNature))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"公司人员规模"}},[a("span",[e._v(e._s(e.businessInformation.staffSize))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"主要办公地址"}},[a("span",[e._v(e._s(e.businessInformation.address))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"主要业务行业"}},[a("span",[e._v(e._s(e.businessInformation.bussinessDirection))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"是否上市(含新三板)"}},[a("span",[e._v(e._s(e.businessInformation.ifListed?"是":"否"))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"办公地址邮编"}},[a("span",[e._v(e._s(e.businessInformation.zipCode))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"法人类型"}},[a("span",[e._v(e._s(e.businessInformation.legalTypes))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"公司经营规模"}},[a("span",[e._v(e._s(e.businessInformation.businessScale))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"公司固定电话"}},[a("span",[e._v(e._s(e.businessInformation.fixedTelephone))])])],1)],1)],1)],1),a("div",{staticClass:"info"},[a("h3",[e._v("联系人信息")]),a("Form",{attrs:{model:e.contactInfo,"label-position":"left","label-width":180}},[a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"联系人姓名"}},[a("span",[e._v(e._s(e.contactInfo.name))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"联系人地址"}},[a("span",[e._v(e._s(e.contactInfo.email))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"联系电话"}},[a("span",[e._v(e._s(e.contactInfo.phone))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"联系人邮箱"}},[a("span",[e._v(e._s(e.contactInfo.address))])])],1)],1)],1)],1),a("div",{staticClass:"info"},[a("h3",[e._v("公司人员情况")]),a("Table",{attrs:{columns:e.principalInfoColumns,data:e.principalInfo}})],1),a("div",{staticClass:"info"},[a("h3",[e._v("股权结构")]),a("Table",{attrs:{columns:e.shareholderColumns,data:e.shareholderData}})],1),a("div",{staticClass:"info"},[a("h3",[e._v("目标用户&盈利模式")]),a("Form",{attrs:{"label-position":"left","label-width":180}},[a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"目标用户"}},[a("span",[e._v(e._s(e.targetUser))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"盈利模式"}},[a("span",[e._v(e._s(e.profitableWay))])])],1)],1)],1)],1),a("div",{staticClass:"info"},[a("h3",[e._v("网站或APP信息")]),a("Table",{attrs:{columns:e.webAppColumns,data:e.webApp}})],1),a("div",{staticClass:"info"},[a("h3",[e._v("网络与信息安全")]),a("Form",{attrs:{model:e.safetyInfo,"label-position":"left","label-width":180}},[a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"组织结构设置及工作职责"}},[a("span",{staticClass:"strengthenSpan"},[e._v(e._s(e.safetyInfo.responsibility))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"人员配备情况以及响应资源"}},[a("span",{staticClass:"strengthenSpan"},[e._v(e._s(e.safetyInfo.qualification))])])],1)],1)],1)],1),a("div",{directives:[{name:"show",rawName:"v-show",value:"EDI"===e.type,expression:"type==='EDI'"}],staticClass:"info"},[a("h3",[e._v("拟开展服务项目EDI")]),a("Table",{attrs:{columns:e.serviceProjectEdiColumns,data:e.serviceProjectEdi}})],1),a("div",{directives:[{name:"show",rawName:"v-show",value:"ICP"===e.type,expression:"type==='ICP'"}],staticClass:"info"},[a("h3",[e._v("拟开展服务项目ICP")]),a("Form",{attrs:{"label-position":"left","label-width":180}},e._l(e.serviceProjectIcp,(function(t,i){return a("Row",{key:i},e._l(t,(function(t,i){return a("Col",{key:i,attrs:{span:"12"}},[a("FormItem",{attrs:{label:t.title}},[a("span",[e._v(e._s(t.value))])])],1)})),1)})),1)],1),a("div",{directives:[{name:"show",rawName:"v-show",value:"ICP"===e.type,expression:"type==='ICP'"}],staticClass:"info"},[a("h3",[e._v("专项审批项目")]),a("Form",{attrs:{"label-position":"left","label-width":180}},e._l(e.specialApproval,(function(t,i){return a("Row",{key:i},e._l(t,(function(e,t){return a("Col",{key:t,attrs:{span:"12"}},[a("FormItem",{attrs:{label:e.title}},[a("ShowFile",{attrs:{url:e.file.url,name:e.file.name}})],1)],1)})),1)})),1)],1),a("div",{staticClass:"info"},[a("h3",[e._v("材料清单")]),a("Form",{attrs:{"label-position":"left","label-width":220}},e._l(e.otherMaterialsInfo,(function(t,i){return a("Row",{key:i},e._l(t,(function(e,t){return a("Col",{key:t,attrs:{span:"12"}},[a("FormItem",{attrs:{label:e.title}},[a("ShowFile",{attrs:{url:e.file.url,name:e.file.name}})],1)],1)})),1)})),1)],1)]),a("div",{directives:[{name:"show",rawName:"v-show",value:["posting","success","closed"].includes(e.delivery_status)&&e.material,expression:"['posting','success','closed'].includes(delivery_status)&&material"}],staticClass:"info"},[a("h3",[e._v("邮寄信息")]),a("Form",{attrs:{model:e.recipientInfo}},[a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"收件人"}},[a("span",[e._v(e._s(e.recipientInfo.name))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"邮件状态"}},[a("span",[e._v("已邮寄")])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"收件人电话"}},[a("span",[e._v(e._s(e.recipientInfo.phone))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"快递单号"}},[a("span",[e._v(e._s(e.recipientInfo.courierNumber))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"收件人邮箱"}},[a("span",[e._v(e._s(e.recipientInfo.email))])])],1),a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"物流公司"}},[a("span",[e._v(e._s(e.recipientInfo.logisticsCompany))])])],1)],1),a("Row",[a("Col",{attrs:{span:"12"}},[a("FormItem",{attrs:{label:"收件人地址"}},[a("span",[e._v(e._s(e.recipientInfo.address))])])],1)],1)],1)],1)]),a("Drawer",{attrs:{title:"资质信息",width:"720","mask-closable":!1,styles:e.drawerStyles},model:{value:e.aptitudeShow,callback:function(t){e.aptitudeShow=t},expression:"aptitudeShow"}},[a("Form",{ref:"qualificationForm",attrs:{model:e.qualificationForm,rules:e.qualificationFormRuleValidate}},[a("FormItem",{attrs:{label:"证书编号",prop:"certificateNumber"}},[a("Input",{staticStyle:{width:"500px"},attrs:{placeholder:"请输入证书编号"},model:{value:e.qualificationForm.certificateNumber,callback:function(t){e.$set(e.qualificationForm,"certificateNumber",t)},expression:"qualificationForm.certificateNumber"}})],1),a("FormItem",{attrs:{label:"业务种类",prop:"businessTypes"}},[a("Input",{staticStyle:{width:"500px"},attrs:{placeholder:"请输入业务种类"},model:{value:e.qualificationForm.businessTypes,callback:function(t){e.$set(e.qualificationForm,"businessTypes",t)},expression:"qualificationForm.businessTypes"}})],1),a("FormItem",{attrs:{label:"业务覆盖范围",prop:"businessScope"}},[a("Input",{staticStyle:{width:"500px"},attrs:{type:"textarea",autosize:{minRows:5,maxRows:10},placeholder:"请输入业务覆盖范围..."},model:{value:e.qualificationForm.businessScope,callback:function(t){e.$set(e.qualificationForm,"businessScope",t)},expression:"qualificationForm.businessScope"}})],1),a("FormItem",{attrs:{label:"服务项目",prop:"serviceProject"}},[a("Input",{staticStyle:{width:"500px"},attrs:{placeholder:"请输入服务项目"},model:{value:e.qualificationForm.serviceProject,callback:function(t){e.$set(e.qualificationForm,"serviceProject",t)},expression:"qualificationForm.serviceProject"}})],1),a("FormItem",{attrs:{label:"发证日期",prop:"startAt"}},[a("DatePicker",{staticStyle:{width:"200px"},attrs:{type:"date",placeholder:"请选择发证日期",format:"yyyy-MM-dd"},on:{"on-change":function(t){e.qualificationForm.startAt=t}},model:{value:e.qualificationForm.startAt,callback:function(t){e.$set(e.qualificationForm,"startAt",t)},expression:"qualificationForm.startAt"}})],1),a("FormItem",{attrs:{label:"有效期至",prop:"startAt"}},[a("DatePicker",{staticStyle:{width:"200px"},attrs:{type:"date",placeholder:"请选择有效期限",format:"yyyy-MM-dd"},on:{"on-change":function(t){e.qualificationForm.endAt=t}},model:{value:e.qualificationForm.endAt,callback:function(t){e.$set(e.qualificationForm,"endAt",t)},expression:"qualificationForm.endAt"}})],1),a("FormItem",{attrs:{label:"证书文件",prop:"file"}},[a("UploadImg",{attrs:{file:e.qualificationForm.file},on:{change:e.changeFile}})],1)],1),a("div",{staticClass:"demo-drawer-footer"},[a("Button",{staticStyle:{"margin-right":"8px"},on:{click:e.cancelQualification}},[e._v("取消")]),a("Button",{attrs:{type:"primary"},on:{click:e.addQualification}},[e._v("保存")])],1)],1),a("Drawer",{attrs:{title:"邮寄",width:"720","mask-closable":!1,styles:e.drawerStyles},model:{value:e.mailShow,callback:function(t){e.mailShow=t},expression:"mailShow"}},[a("Form",{ref:"recipientFromInfo",attrs:{model:e.recipientFromInfo,rules:e.recipientFromRuleValidate}},[a("FormItem",{attrs:{label:"收件人姓名",prop:"name"}},[a("Input",{staticStyle:{width:"500px"},attrs:{placeholder:"请输入收件人姓名"},model:{value:e.recipientFromInfo.name,callback:function(t){e.$set(e.recipientFromInfo,"name",t)},expression:"recipientFromInfo.name"}})],1),a("FormItem",{attrs:{label:"收件人电话",prop:"phone"}},[a("Input",{staticStyle:{width:"500px"},attrs:{placeholder:"请输入收件人电话"},model:{value:e.recipientFromInfo.phone,callback:function(t){e.$set(e.recipientFromInfo,"phone",t)},expression:"recipientFromInfo.phone"}})],1),a("FormItem",{attrs:{label:"收件人邮箱",prop:"email"}},[a("Input",{staticStyle:{width:"500px"},attrs:{placeholder:"请输入收件人邮箱"},model:{value:e.recipientFromInfo.email,callback:function(t){e.$set(e.recipientFromInfo,"email",t)},expression:"recipientFromInfo.email"}})],1),a("FormItem",{attrs:{label:"收件人地址",prop:"address"}},[a("Input",{staticStyle:{width:"500px"},attrs:{placeholder:"请输入收件人地址"},model:{value:e.recipientFromInfo.address,callback:function(t){e.$set(e.recipientFromInfo,"address",t)},expression:"recipientFromInfo.address"}})],1),a("FormItem",{attrs:{label:"快递单号",prop:"courierNumber"}},[a("Input",{staticStyle:{width:"500px"},attrs:{placeholder:"请输入快递单号"},model:{value:e.recipientFromInfo.courierNumber,callback:function(t){e.$set(e.recipientFromInfo,"courierNumber",t)},expression:"recipientFromInfo.courierNumber"}})],1),a("FormItem",{attrs:{label:"物流公司",prop:"logisticsCompany"}},[a("Input",{staticStyle:{width:"500px"},attrs:{placeholder:"请输入物流公司"},model:{value:e.recipientFromInfo.logisticsCompany,callback:function(t){e.$set(e.recipientFromInfo,"logisticsCompany",t)},expression:"recipientFromInfo.logisticsCompany"}})],1)],1),a("div",{staticClass:"demo-drawer-footer"},[a("Button",{staticStyle:{"margin-right":"8px"},on:{click:e.cancelMailInfo}},[e._v("取消")]),a("Button",{attrs:{type:"primary"},on:{click:e.addMailInfo}},[e._v("保存")])],1)],1),a("Drawer",{attrs:{title:"关闭交付单",width:"720","mask-closable":!1,styles:e.drawerStyles},model:{value:e.closeShow,callback:function(t){e.closeShow=t},expression:"closeShow"}},[a("Alert",{attrs:{type:"warning"}},[a("template",{slot:"desc"},[e._v("关闭交付单将产生费用退回,请确认是否真的需要关闭")])],2),a("Form",{ref:"closeForm",attrs:{model:e.closeForm,rules:e.closeFormValidate}},[a("FormItem",{attrs:{label:"关闭原因",prop:"close_reason"}},[a("Input",{staticStyle:{width:"600px"},attrs:{type:"textarea",autosize:{minRows:5,maxRows:10},placeholder:"请输入关闭原因..."},model:{value:e.closeForm.close_reason,callback:function(t){e.$set(e.closeForm,"close_reason",t)},expression:"closeForm.close_reason"}})],1)],1),a("div",{staticClass:"demo-drawer-footer"},[a("Button",{staticStyle:{"margin-right":"8px"},on:{click:e.cancelCloseDeliver}},[e._v("取消")]),a("Button",{attrs:{type:"primary"},on:{click:e.closeDeliver}},[e._v("保存")])],1)],1),a("Drawer",{attrs:{title:"更新办理进度",width:"720","mask-closable":!1,styles:e.drawerStyles},model:{value:e.scheduleShow,callback:function(t){e.scheduleShow=t},expression:"scheduleShow"}},[a("Alert",{attrs:{type:"warning"}},[a("template",{slot:"desc"},[e._v("状态更新为不可逆过程,请确认是否已完成该步骤工作。")])],2),a("Steps",{staticStyle:{margin:"20px 40%"},attrs:{current:e.current,direction:"vertical"}},e._l(e.statusList,(function(e,t){return a("Step",{key:t,attrs:{title:e.title,content:e.content}})})),1),a("div",{staticClass:"demo-drawer-footer"},[a("Button",{staticStyle:{"margin-right":"8px"},on:{click:function(t){e.scheduleShow=!1}}},[e._v("取消")]),a("Button",{attrs:{type:"primary"},on:{click:e.changeDeliveryStatus}},[e._v("确定下一步")])],1)],1)],1)},s=[],r=(a("5ab2"),a("f548"),a("13c1")),o=(a("b449"),a("9666")),n=(a("cc57"),a("6d57"),a("e10e"),a("391e")),l=a("db7f"),c=a("9421"),u=a("35f4"),p=a.n(u),m=a("7e1e"),d=a("455d"),f=a("57ed");function h(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,i)}return a}function v(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?h(Object(a),!0).forEach((function(t){Object(r["a"])(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):h(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}var b=Object.keys(l["a"].delivery_status),w={name:"deliveryInfo",data:function(){return{deliveryInfo:{},principalInfoColumns:[{title:"人员信息",key:"title"},{title:"姓名",key:"name"},{title:"证件类型",key:"certificateType"},{title:"证件号码",key:"certificateId"},{title:"手机号码",key:"phone"},{title:"邮箱",key:"email"},{title:"身份证照片",render:function(e,t){return e("ShowFile",{props:{name:t.row.file&&t.row.file.name||"",url:t.row.file&&t.row.file.url||""}})}}],shareholderColumns:[{title:"股东名称",key:"name"},{title:"股东性质",key:"type"},{title:"工商注册号/身份证号",key:"idNumber"},{title:"持股比例(%)",key:"holdProportion"},{title:"上级股东",key:"superiorShareholder"},{title:"身份证照片",render:function(e,t){return e("ShowFile",{props:{name:t.row.file&&t.row.file.name||"",url:t.row.file&&t.row.file.url||""}})}}],webAppColumns:[{title:"网站或APP名称",key:"name"},{title:"网站或APP域名",key:"domain"},{title:"服务器放置地址",key:"serverAddress"},{title:"网站接入服务提供单位/APP所在应用商店",key:"appStoreName"}],serviceProjectEdiColumns:[{title:"拟开展服务项目",key:"title"},{title:"项目描述",key:"describe"},{title:"操作",render:function(e,t){return e("ShowFile",{props:{name:t.row.file&&t.row.file.name||"",url:t.row.file&&t.row.file.url||""}})}}],current:0,statusList:[],delivery_status:"",type:"",aptitudeShow:!1,mailShow:!1,scheduleShow:!1,closeShow:!1,qualification:!1,material:!1,businessLicense:{},businessInformation:{},contactInfo:{},principalInfo:[],shareholderData:[],targetUser:"",profitableWay:"",webApp:[],safetyInfo:{},serviceProjectEdi:[],otherMaterialsInfo:[],serviceProjectIcp:[],specialApproval:[],recipientFromInfo:{},recipientFromRuleValidate:{name:[{required:!0,message:"请输入收件人姓名",trigger:"blur"}],phone:[{required:!0,message:"请输入收件人电话",trigger:"blur"},{validator:d["d"],trigger:"blur"}],email:[{required:!0,message:"请输入收件人邮箱",trigger:"blur"},{type:"email",message:"邮箱格式错误",trigger:"blur"}],address:[{required:!0,message:"请输入收件人地址",trigger:"blur"}],courierNumber:[{required:!0,message:"请输入快递单号",trigger:"blur"}],logisticsCompany:[{required:!0,message:"请输入物流公司",trigger:"blur"}]},recipientInfo:{},qualificationData:{},qualificationForm:{},qualificationFormRuleValidate:{certificateNumber:[{required:!0,message:"请输入证书编号",trigger:"blur"}],businessTypes:[{required:!0,message:"请输入业务种类",trigger:"blur"}],businessScope:[{required:!0,message:"请输入业务覆盖范围",trigger:"blur"}],serviceProject:[{required:!0,message:"请输入服务项目",trigger:"blur"}],startAt:[{required:!0,message:"请选择发证日期"}],endAt:[{required:!0,message:"请选择有效期限"}],file:[{required:!0,type:"object",message:"请上传文件",trigger:"change"},{validator:d["b"],trigger:"change"}]},closeForm:{close_reason:""},closeFormValidate:{close_reason:[{required:!0,message:"请输入关闭理由",trigger:"blur"}]},uploadMaterial:!1,editorMaterial:!1,downloadMaterial:!1,uploadQualification:!1,editorQualification:!1,addMail:!1,uploadStatus:!1,close:!1,drawerStyles:{height:"calc(100% - 55px)",overflow:"auto",paddingBottom:"53px",position:"static"}}},watch:{$route:function(e,t){this.initData()}},components:{PageSpace:n["a"],moreUploadImg:c["a"]},methods:{doCollect:function(){this.$router.push({name:"delivery_collect",query:{id:this.$route.query.id,type:this.type}})},changeDeliveryStatus:function(){var e=Object(o["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Object(m["d"])({id:this.$route.query.id});case 3:e.sent,this.$Message.success("更新状态成功"),this.initData(),this.scheduleShow=!1,e.next=12;break;case 9:e.prev=9,e.t0=e["catch"](0),this.$Message.error(e.t0.message);case 12:case"end":return e.stop()}}),e,this,[[0,9]])})));function t(){return e.apply(this,arguments)}return t}(),buildData:function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,a=[],i=0;i<e.length;i+=t)a.push(e.slice(i,i+t));return a},buildDate:function(e){return p()(e).format("YYYY-MM-DD")},initData:function(){var e=Object(o["a"])(regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Object(m["l"])({id:this.$route.query.id});case 3:t=e.sent,console.log(t),this.delivery_status=t.delivery_status,this.type=t.product_code,this.initStatusList(t),this.initDeliveryInfo(t),this.initMaterials(t),this.initQualification(t),this.initButton(t),e.next=17;break;case 14:e.prev=14,e.t0=e["catch"](0),this.$Message.error(e.t0.message);case 17:case"end":return e.stop()}}),e,this,[[0,14]])})));function t(){return e.apply(this,arguments)}return t}(),initStatusList:function(e){"closed"===e.delivery_status?(this.statusList=[{title:"已接单",content:p()(e.created_at).format("YYYY-MM-DD HH:mm:ss")},{title:"收集材料中",content:"1-3个工作日完成"},{title:"递交材料",content:"1个工作日内提交"},{title:"工信部处理中",content:"审核时长为20-60个工作日"},{title:"证书已邮寄",content:"证书领取后1个工作日内寄出"},{title:"服务已关闭",content:p()(e.updated_at).format("YYYY-MM-DD HH:mm:ss")}],this.current=this.statusList.length):(this.statusList=[{title:"已接单",content:p()(e.created_at).format("YYYY-MM-DD HH:mm:ss")},{title:"收集材料中",content:"1-3个工作日完成"},{title:"递交材料",content:"1个工作日内提交"},{title:"工信部处理中",content:"审核时长为20-60个工作日"},{title:"证书已邮寄",content:"证书领取后1个工作日内寄出"},{title:"服务已完成",content:"success"===e.delivery_status?p()(e.updated_at).format("YYYY-MM-DD HH:mm:ss"):""}],this.current=b.indexOf(e.delivery_status))},initDeliveryInfo:function(e){this.deliveryInfo={delivery_code:e.delivery_code,demand_code:e.demand_code,delivery_status:l["a"].delivery_status[e.delivery_status],product_name:l["a"].business_type[e.product_code],company:e.delivery_info.companyName,service_address:e.delivery_info.serviceName,phone:e.delivery_info.contactsPhone,close_reason:e.close_reason,person:e.delivery_info.contactsName,annualReport:e.delivery_info.annualReport,memoInfo:e.delivery_info.memoInfo}},initMaterials:function(e){if(e.material){this.material=!0;var t=e.material,a=t.proposerInfo,i=a.businessLicense,s=a.businessInformation,r=a.contactInfo,o=a.principalInfo,n=a.recipientInfo;this.businessLicense=i,this.businessInformation=s,this.contactInfo=r,this.principalInfo=o,this.recipientInfo=v({},n),this.recipientFromInfo=v({},n);var l=t.implementationPlanInfo,c=l.webApp,u=l.targetUser,p=l.profitableWay,m=l.specialApproval,d=l.serviceProjectEdi,f=l.serviceProjectIcp;this.targetUser=u.join(),this.profitableWay=p.join(),this.webApp=c,this.serviceProjectEdi=d.filter((function(e){return!!(e.file&&e.file.url||e.value.length>0)})).map((function(e){return{title:e.title,file:e.file||{},describe:e.value.join()}})),this.serviceProjectIcp=this.buildData(f.filter((function(e){return e.value.length>0})).map((function(e){return{title:e.title,value:e.value.join().replace(/其他/,e.otherValue)}})),2),this.specialApproval=this.buildData(m.filter((function(e){return!(!e.file||!e.file.url)})));var h=t.shareholderData,b=t.safetyInfo,w=t.otherMaterialsInfo;this.shareholderData=h,this.safetyInfo=b,this.otherMaterialsInfo=this.buildData(w,2)}else this.material=!1},initQualification:function(e){e.qualification?(this.qualification=!0,this.qualificationData=e.qualification,this.qualificationForm=v({},e.qualification)):(this.qualification=!1,this.qualificationData={},this.qualificationForm={})},initButton:function(e){switch(this.uploadMaterial=!1,this.editorMaterial=!1,this.downloadMaterial=!1,this.uploadQualification=!1,this.editorQualification=!1,this.addMail=!1,this.uploadStatus=!1,this.close=!1,this.delivery_status){case"received":break;case"collecting":this.uploadMaterial=!0,this.close=!0;break;case"submiting":this.editorMaterial=!0,this.downloadMaterial=!0,this.uploadStatus=!0;break;case"disposeing":this.editorMaterial=!0,this.downloadMaterial=!0,this.qualification?(this.editorQualification=!0,this.addMail=!0):this.uploadQualification=!0;break;case"posting":this.downloadMaterial=!0,this.uploadStatus=!0;break;case"success":this.downloadMaterial=!0;break;case"closed":break}},addQualification:function(){var e=this;try{this.$refs["qualificationForm"].validate(function(){var t=Object(o["a"])(regeneratorRuntime.mark((function t(a){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(!a){t.next=11;break}return e.qualificationForm.startAt=e.buildDate(e.qualificationForm.startAt),e.qualificationForm.endAt=e.buildDate(e.qualificationForm.endAt),t.next=5,Object(m["b"])(v({deliver_id:e.$route.query.id},e.qualificationForm));case 5:t.sent,e.$Message.success("上传资质信息成功"),e.initData(),e.aptitudeShow=!1,t.next=12;break;case 11:e.$Message.error("请完善信息!");case 12:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}())}catch(t){this.$Message.error(t.message)}},cancelQualification:function(){this.aptitudeShow=!1,this.qualificationForm=v({},this.qualificationData)},changeFile:function(e,t){switch(e){case"add":this.qualificationForm.file=t;break;case"remove":this.qualificationForm.file={};break}},addMailInfo:function(){var e=Object(o["a"])(regeneratorRuntime.mark((function e(){var t=this;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:try{this.$refs["recipientFromInfo"].validate(function(){var e=Object(o["a"])(regeneratorRuntime.mark((function e(a){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(!a){e.next=9;break}return e.next=3,Object(m["a"])({id:t.$route.query.id,recipientInfo:t.recipientFromInfo});case 3:e.sent,t.$Message.success("保存成功"),t.initData(),t.mailShow=!1,e.next=10;break;case 9:t.$Message.error("请完善信息填写");case 10:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}())}catch(a){this.$Message.error(a.message)}case 1:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}(),cancelMailInfo:function(){this.$refs["recipientFromInfo"].resetFields(),this.mailShow=!1,this.recipientFromInfo=v({},this.recipientInfo)},closeDeliver:function(){var e=Object(o["a"])(regeneratorRuntime.mark((function e(){var t=this;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:this.$refs["closeForm"].validate(function(){var e=Object(o["a"])(regeneratorRuntime.mark((function e(a){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(!a){e.next=15;break}return e.prev=1,e.next=4,Object(m["f"])({id:t.$route.query.id,close_reason:t.closeForm.close_reason});case 4:e.sent,t.$Message.success("关闭成功"),t.initData(),t.closeShow=!1,e.next=13;break;case 10:e.prev=10,e.t0=e["catch"](1),t.$Message.error(e.t0.message);case 13:e.next=16;break;case 15:t.$Message.error("请完善信息");case 16:case"end":return e.stop()}}),e,null,[[1,10]])})));return function(t){return e.apply(this,arguments)}}());case 1:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}(),cancelCloseDeliver:function(){this.closeShow=!1,this.closeForm.close_reason="",this.$refs["closeForm"].resetFields()},downloadMaterialFile:function(){var e=Object(o["a"])(regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Object(m["o"])({deliver_id:this.$route.query.id});case 3:if(t=e.sent,!t.downloadUrl){e.next=15;break}return e.prev=5,e.next=8,Object(f["a"])(t.downloadUrl,"".concat(this.deliveryInfo.company,"_").concat(this.deliveryInfo.delivery_code,"_").concat(this.type,"_材料.").concat(t.downloadUrl.substring(t.downloadUrl.lastIndexOf(".")+1)));case 8:e.next=13;break;case 10:e.prev=10,e.t0=e["catch"](5),this.$Notice.warning({title:"下载配置获取失败",desc:e.t0});case 13:e.next=16;break;case 15:this.$Message.info("请稍后下载,材料正在打包中...");case 16:e.next=21;break;case 18:e.prev=18,e.t1=e["catch"](0),this.$Message.error(e.t1.message);case 21:case"end":return e.stop()}}),e,this,[[0,18],[5,10]])})));function t(){return e.apply(this,arguments)}return t}()},created:function(){this.initData()}},y=w,_=(a("5c1d"),a("9ca4")),I=Object(_["a"])(y,i,s,!1,null,null,null);t["default"]=I.exports},8284:function(e,t,a){},9421:function(e,t,a){"use strict";var i=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("Upload",{ref:"upload",staticStyle:{display:"inline-block"},attrs:{data:e.d,"on-success":e.handleSuccess,"max-size":2048,"on-format-error":e.handleFormatError,"on-exceeded-size":e.handleMaxSize,"before-upload":e.handleBeforeUpload,format:e.uploadFormat,"show-upload-list":!1,action:e.action,multiple:""}},[a("Button",{attrs:{icon:"ios-cloud-upload-outline"}},[e._v("上传更多文件")])],1)},s=[],r=(a("b449"),a("9666")),o=(a("cc57"),a("60b7"),a("57ed")),n={name:"moreUploadImg",props:{format:Array},data:function(){return{d:{},action:"",fileObject:{},uploadFormat:this.format||["jpg","jpeg","png","pdf"]}},methods:{handleSuccess:function(e,t,a){t.url=this.fileObject[t.name],delete this.fileObject[t.name],this.$emit("changeFile","add",{url:t.url,name:t.name}),this.$Message.success("上传文件成功")},handleFormatError:function(e){this.$Notice.warning({title:"不支持此文件类型",desc:"File format of "+e.name+" is incorrect, please select jpg or png."})},handleMaxSize:function(e){this.$Notice.warning({title:"超过大小限制",desc:"File "+e.name+" is too large, no more than 2M."})},handleBeforeUpload:function(){var e=Object(r["a"])(regeneratorRuntime.mark((function e(t){var a;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Object(o["b"])(t.name);case 3:return a=e.sent,this.d={Signature:a.Authorization,"x-cos-security-token":a.XCosSecurityToken,key:a.key},this.action=a.url,this.fileObject[t.name]=a.url,e.abrupt("return",!0);case 10:return e.prev=10,e.t0=e["catch"](0),this.$Notice.warning({title:"上传配置获取失败",desc:e.t0.message}),e.abrupt("return",!1);case 14:case"end":return e.stop()}}),e,this,[[0,10]])})));function t(t){return e.apply(this,arguments)}return t}()}},l=n,c=a("9ca4"),u=Object(c["a"])(l,i,s,!1,null,null,null);t["a"]=u.exports},"9ee1":function(e,t,a){"use strict";(function(e){a("163d");t["a"]={name:"pagespace_page",prop:{tweak:Number},data:function(){return{frameHeight:0,advalue:this.tweak?this.tweak:0}},components:{},mounted:function(){var t=this;this.setHeight(),e(window).resize((function(){t.setHeight()}))},methods:{setHeight:function(){var t=this;this.$nextTick((function(){var a=e("#framediv"),i=a.get()[0]||0,s=window.innerHeight-i.offsetTop-t.advalue;t.frameHeight=s,t.$emit("sizechange",t.frameHeight)}))}}}}).call(this,a("a336"))}}]);
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
var fs = require('fs');
// function to encode file data to base64 encoded string
function base64_encode(file) {
// read binary data
var bitmap = fs.readFileSync("./imgs/sp.png");
// convert binary data to base64 encoded string
var bf=Buffer.alloc(bitmap.length,bitmap);
return bf.toString('base64');
}
// function to create file from base64 encoded string
function base64_decode(base64str, file) {
// create buffer object from base64 encoded string, it is important to tell the constructor that the string is base64 encoded
var bitmap = new Buffer(base64str, 'base64');
// write buffer to file
fs.writeFileSync(file, bitmap);
console.log('******** File created from base64 encoded string ********');
}
function getDataUrl(filepath){
var str=base64_encode(filepath);
var mime="";
if(filepath.indexOf("png")>=0){
mime="image/png";
}
if(filepath.indexOf("jpg")>=0 || filepath.indexOf("jpeg")>=0){
mime="image/jpg";
}
if(filepath.indexOf("gif")>=0){
mime="image/gif";
}
var dataurl=`data:${mime};base64,`+str;
return dataurl;
}
var str=getDataUrl("./imgs/sp.png");
console.log(str);
\ No newline at end of file
data:function(){
return {
downloadTimes : 1, // 设置检查重试次数变量,
code : '', // 下载文件的code值
}
},
methods : {
// 创建下载文件方法
exportFile() {
var self = this;
var datas = self.querydata;
if(!datas || datas.length == 0) {
that.$message.warning(`无查询结果`);
return ;
}
/* [{},{},{}]转换成[[],[],[]] 格式 */
var rows = [];
for(var dd of datas) {
var arr = [];
for(var _idx in dd) {
arr.push(dd[_idx]);
}
rows.push(arr);
}
this.code = "";
/* 生成文件 */
self.$root.postReq("/web/filedownloadCtl/download",{rows : rows}).then(function(d){
if(d.status == 0) {
setTimeout((function(){
/* d.data 返回文件标识 */
self.code = d.data;
self.downloadFile();
}), 2000);
}
});
},
/* 循环检查code, 并下载文件 */
downloadFile() {
var self = this;
self.$root.postReq("/web/filedownloadCtl/findOne",{code : self.code}).then(function(d){
if(d.status == 0) {
if(d.data && d.data.filePath) {
downloadTimes = 1;
/* 文件生成成功 */
window.open(d.data.filePath, "_blank");
} else {
/* 递归2秒一次,超过5次,下载失败 */
if(downloadTimes > 5) {
downloadTimes = 1;
/* 下载超时 */
return;
}
downloadTimes = downloadTimes + 1;
setTimeout((function(){
self.downloadFile();
}), 2000);
}
}
});
},
}
/* Element Chalk Variables */
/* Transition
-------------------------- */
$--all-transition: all .3s cubic-bezier(.645,.045,.355,1) !default;
$--fade-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default;
$--fade-linear-transition: opacity 200ms linear !default;
$--md-fade-transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default;
$--border-transition-base: border-color .2s cubic-bezier(.645,.045,.355,1) !default;
$--color-transition-base: color .2s cubic-bezier(.645,.045,.355,1) !default;
/* Colors
-------------------------- */
$--color-white: black !default;
$--color-black: #000 !default;
$--color-primary: #2c3e50 !default;
$--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */
$--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; /* 66b1ff */
$--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; /* 79bbff */
$--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; /* 8cc5ff */
$--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; /* a0cfff */
$--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; /* b3d8ff */
$--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; /* c6e2ff */
$--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; /* d9ecff */
$--color-primary-light-9: mix($--color-white, $--color-primary, 90%) !default; /* ecf5ff */
$--color-success: #67c23a !default;
$--color-warning: #e6a23c !default;
$--color-danger: #f56c6c !default;
$--color-info: #909399 !default;
$--color-success-light: mix($--color-white, $--color-success, 80%) !default;
$--color-warning-light: mix($--color-white, $--color-warning, 80%) !default;
$--color-danger-light: mix($--color-white, $--color-danger, 80%) !default;
$--color-info-light: mix($--color-white, $--color-info, 80%) !default;
$--color-success-lighter: mix($--color-white, $--color-success, 90%) !default;
$--color-warning-lighter: mix($--color-white, $--color-warning, 90%) !default;
$--color-danger-lighter: mix($--color-white, $--color-danger, 90%) !default;
$--color-info-lighter: mix($--color-white, $--color-info, 90%) !default;
$--color-text-primary: #303133 !default;
$--color-text-regular: #606266 !default;
$--color-text-secondary: #909399 !default;
$--color-text-placeholder: #c0c4cc !default;
/* Link
-------------------------- */
$--link-color: $--color-primary-light-2 !default;
$--link-hover-color: $--color-primary !default;
/* Background
-------------------------- */
$--background-color-base: #f5f7fa !default;
/* Border
-------------------------- */
$--border-width-base: 1px !default;
$--border-style-base: solid !default;
$--border-color-base: #dcdfe6 !default;
$--border-color-light: #e4e7ed !default;
$--border-color-lighter: #ebeef5 !default;
$--border-color-extra-light: #f2f6fc !default;
$--border-color-hover: $--color-text-placeholder !default;
$--border-base: $--border-width-base $--border-style-base $--border-color-base !default;
$--border-radius-base: 4px !default;
$--border-radius-small: 2px !default;
$--border-radius-circle: 100% !default;
/* Box-shadow
-------------------------- */
$--box-shadow-base: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04) !default;
$--box-shadow-dark: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .12) !default;
$--box-shadow-light: 0 2px 12px 0 rgba(0, 0, 0, 0.1) !default;
/* Fill
-------------------------- */
$--fill-base: $--color-white !default;
/* Font
-------------------------- */
$--font-path: 'fonts' !default;
$--font-size-base: 14px !default;
$--font-size-small: 13px !default;
$--font-size-large: 18px !default;
$--font-color-disabled-base: #bbb !default;
$--font-weight-primary: 500 !default;
$--font-line-height-primary: 24px !default;
/* Size
-------------------------- */
$--size-base: 14px !default;
/* z-index
-------------------------- */
$--index-normal: 1 !default;
$--index-top: 1000 !default;
$--index-popper: 2000 !default;
/* Disable base
-------------------------- */
$--disabled-fill-base: $--background-color-base !default;
$--disabled-color-base: $--color-text-placeholder !default;
$--disabled-border-base: $--border-color-light !default;
/* Icon
-------------------------- */
$--icon-color: #666 !default;
$--icon-color-base: $--color-info !default;
/* Checkbox
-------------------------- */
$--checkbox-font-size: 14px !default;
$--checkbox-font-weight: $--font-weight-primary !default;
$--checkbox-color: $--color-text-regular !default;
$--checkbox-input-height: 14px !default;
$--checkbox-input-width: 14px !default;
$--checkbox-input-border-radius: $--border-radius-small !default;
$--checkbox-input-fill: $--color-white !default;
$--checkbox-input-border: $--border-base !default;
$--checkbox-input-border-color: $--border-color-base !default;
$--checkbox-icon-color: $--color-white !default;
$--checkbox-disabled-input-border-color: $--border-color-base !default;
$--checkbox-disabled-input-fill: #edf2fc !default;
$--checkbox-disabled-icon-color: $--color-text-placeholder !default;
$--checkbox-disabled-checked-input-fill: $--border-color-extra-light !default;
$--checkbox-disabled-checked-input-border-color: $--border-color-base !default;
$--checkbox-disabled-checked-icon-color: $--color-text-placeholder !default;
$--checkbox-checked-text-color: $--color-primary !default;
$--checkbox-checked-input-border-color: $--color-primary !default;
$--checkbox-checked-input-fill: $--color-primary !default;
$--checkbox-checked-icon-color: $--fill-base !default;
$--checkbox-input-border-color-hover: $--color-primary !default;
$--checkbox-bordered-height: 40px !default;
$--checkbox-bordered-padding: 9px 20px 9px 10px !default;
$--checkbox-bordered-medium-padding: 7px 20px 7px 10px !default;
$--checkbox-bordered-small-padding: 5px 15px 5px 10px !default;
$--checkbox-bordered-mini-padding: 3px 15px 3px 10px !default;
$--checkbox-bordered-medium-input-height: 14px !default;
$--checkbox-bordered-medium-input-width: 14px !default;
$--checkbox-bordered-medium-height: 36px !default;
$--checkbox-bordered-small-input-height: 12px !default;
$--checkbox-bordered-small-input-width: 12px !default;
$--checkbox-bordered-small-height: 32px !default;
$--checkbox-bordered-mini-input-height: 12px !default;
$--checkbox-bordered-mini-input-width: 12px !default;
$--checkbox-bordered-mini-height: 28px !default;
$--checkbox-button-font-size: $--font-size-base !default;
$--checkbox-button-checked-fill: $--color-primary !default;
$--checkbox-button-checked-color: $--color-white !default;
$--checkbox-button-checked-border-color: $--color-primary !default;
/* Radio
-------------------------- */
$--radio-font-size: 14px !default;
$--radio-font-weight: $--font-weight-primary !default;
$--radio-color: $--color-text-regular !default;
$--radio-input-height: 14px !default;
$--radio-input-width: 14px !default;
$--radio-input-border-radius: $--border-radius-circle !default;
$--radio-input-fill: $--color-white !default;
$--radio-input-border: $--border-base !default;
$--radio-input-border-color: $--border-color-base !default;
$--radio-icon-color: $--color-white !default;
$--radio-disabled-input-border-color: $--disabled-border-base !default;
$--radio-disabled-input-fill: $--disabled-fill-base !default;
$--radio-disabled-icon-color: $--disabled-fill-base !default;
$--radio-disabled-checked-input-border-color: $--disabled-border-base !default;
$--radio-disabled-checked-input-fill: $--disabled-fill-base !default;
$--radio-disabled-checked-icon-color: $--color-text-placeholder !default;
$--radio-checked-text-color: $--color-primary !default;
$--radio-checked-input-border-color: $--color-primary !default;
$--radio-checked-input-fill: $--color-white !default;
$--radio-checked-icon-color: $--color-primary !default;
$--radio-input-border-color-hover: $--color-primary !default;
$--radio-bordered-height: 40px !default;
$--radio-bordered-padding: 12px 20px 0 10px !default;
$--radio-bordered-medium-padding: 10px 20px 0 10px !default;
$--radio-bordered-small-padding: 8px 15px 0 10px !default;
$--radio-bordered-mini-padding: 6px 15px 0 10px !default;
$--radio-bordered-medium-input-height: 14px !default;
$--radio-bordered-medium-input-width: 14px !default;
$--radio-bordered-medium-height: 36px !default;
$--radio-bordered-small-input-height: 12px !default;
$--radio-bordered-small-input-width: 12px !default;
$--radio-bordered-small-height: 32px !default;
$--radio-bordered-mini-input-height: 12px !default;
$--radio-bordered-mini-input-width: 12px !default;
$--radio-bordered-mini-height: 28px !default;
$--radio-button-font-size: $--font-size-base !default;
$--radio-button-checked-fill: $--color-primary !default;
$--radio-button-checked-color: $--color-white !default;
$--radio-button-checked-border-color: $--color-primary !default;
$--radio-button-disabled-checked-fill: $--border-color-extra-light !default;
/* Select
-------------------------- */
$--select-border-color-hover: $--border-color-hover !default;
$--select-disabled-border: $--disabled-border-base !default;
$--select-font-size: $--font-size-base !default;
$--select-close-hover-color: $--color-text-secondary !default;
$--select-input-color: $--color-text-placeholder !default;
$--select-multiple-input-color: #666 !default;
$--select-input-focus-background: $--color-primary !default;
$--select-input-font-size: 14px !default;
$--select-option-color: $--color-text-regular !default;
$--select-option-disabled-color: $--color-text-placeholder !default;
$--select-option-disabled-background: $--color-white !default;
$--select-option-height: 34px !default;
$--select-option-hover-background: $--background-color-base !default;
$--select-option-selected: $--color-primary !default;
$--select-option-selected-hover: $--background-color-base !default;
$--select-group-color: $--color-info !default;
$--select-group-height: 30px !default;
$--select-group-font-size: 12px !default;
$--select-dropdown-background: $--color-white !default;
$--select-dropdown-shadow: $--box-shadow-light !default;
$--select-dropdown-empty-color: #999 !default;
$--select-dropdown-max-height: 274px !default;
$--select-dropdown-padding: 6px 0 !default;
$--select-dropdown-empty-padding: 10px 0 !default;
$--select-dropdown-border: solid 1px $--border-color-light !default;
/* Alert
-------------------------- */
$--alert-padding: 8px 16px !default;
$--alert-border-radius: $--border-radius-base !default;
$--alert-title-font-size: 13px !default;
$--alert-description-font-size: 12px !default;
$--alert-close-font-size: 12px !default;
$--alert-close-customed-font-size: 13px !default;
$--alert-success-color: $--color-success-lighter !default;
$--alert-info-color: $--color-info-lighter !default;
$--alert-warning-color: $--color-warning-lighter !default;
$--alert-danger-color: $--color-danger-lighter !default;
$--alert-icon-size: 16px !default;
$--alert-icon-large-size: 28px !default;
/* Message Box
-------------------------- */
$--msgbox-width: 420px !default;
$--msgbox-border-radius: 4px !default;
$--msgbox-font-size: $--font-size-large !default;
$--msgbox-content-font-size: $--font-size-base !default;
$--msgbox-content-color: $--color-text-regular !default;
$--msgbox-error-font-size: 12px !default;
$--msgbox-padding-primary: 15px !default;
$--msgbox-success-color: $--color-success !default;
$--msgbox-info-color: $--color-info !default;
$--msgbox-warning-color: $--color-warning !default;
$--msgbox-danger-color: $--color-danger !default;
/* Message
-------------------------- */
$--message-shadow: $--box-shadow-base !default;
$--message-min-width: 380px !default;
$--message-background-color: #edf2fc !default;
$--message-padding: 15px 15px 15px 20px !default;
$--message-content-color: $--color-text-regular !default;
$--message-close-color: $--color-text-placeholder !default;
$--message-close-size: 16px !default;
$--message-close-hover-color: $--color-text-secondary !default;
$--message-success-color: $--color-success !default;
$--message-info-color: $--color-info !default;
$--message-warning-color: $--color-warning !default;
$--message-danger-color: $--color-danger !default;
/* Notification
-------------------------- */
$--notification-width: 330px !default;
$--notification-padding: 14px 26px 14px 13px !default;
$--notification-radius: 8px !default;
$--notification-shadow: $--box-shadow-light !default;
$--notification-border-color: $--border-color-lighter !default;
$--notification-icon-size: 24px !default;
$--notification-close-font-size: $--message-close-size !default;
$--notification-group-margin: 13px !default;
$--notification-font-size: $--font-size-base !default;
$--notification-color: $--color-text-regular !default;
$--notification-title-font-size: 16px !default;
$--notification-title-color: $--color-text-primary !default;
$--notification-close-color: $--color-text-secondary !default;
$--notification-close-hover-color: $--color-text-regular !default;
$--notification-success-color: $--color-success !default;
$--notification-info-color: $--color-info !default;
$--notification-warning-color: $--color-warning !default;
$--notification-danger-color: $--color-danger !default;
/* Input
-------------------------- */
$--input-font-size: $--font-size-base !default;
$--input-color: $--color-text-regular !default;
$--input-width: 140px !default;
$--input-height: 40px !default;
$--input-border: $--border-base !default;
$--input-border-color: $--border-color-base !default;
$--input-border-radius: $--border-radius-base !default;
$--input-border-color-hover: $--border-color-hover !default;
$--input-fill: $--color-white !default;
$--input-fill-disabled: $--disabled-fill-base !default;
$--input-color-disabled: $--font-color-disabled-base !default;
$--input-icon-color: $--color-text-placeholder !default;
$--input-placeholder-color: $--color-text-placeholder !default;
$--input-max-width: 314px !default;
$--input-hover-border: $--border-color-hover !default;
$--input-clear-hover-color: $--color-text-secondary !default;
$--input-focus-border: $--color-primary !default;
$--input-focus-fill: $--color-white !default;
$--input-disabled-fill: $--disabled-fill-base !default;
$--input-disabled-border: $--disabled-border-base !default;
$--input-disabled-color: $--disabled-color-base !default;
$--input-disabled-placeholder-color: $--color-text-placeholder !default;
$--input-medium-font-size: 14px !default;
$--input-medium-height: 36px !default;
$--input-small-font-size: 13px !default;
$--input-small-height: 32px !default;
$--input-mini-font-size: 12px !default;
$--input-mini-height: 28px !default;
/* Cascader
-------------------------- */
$--cascader-menu-fill: $--fill-base !default;
$--cascader-menu-font-size: $--font-size-base !default;
$--cascader-menu-radius: $--border-radius-base !default;
$--cascader-menu-border: $--border-base !default;
$--cascader-menu-border-color: $--border-color-base !default;
$--cascader-menu-border-width: $--border-width-base !default;
$--cascader-menu-color: $--color-text-regular !default;
$--cascader-menu-option-color-active: $--color-text-secondary !default;
$--cascader-menu-option-fill-active: rgba($--color-text-secondary, 0.12) !default;
$--cascader-menu-option-color-hover: $--color-text-regular !default;
$--cascader-menu-option-fill-hover: rgba($--color-text-primary, 0.06) !default;
$--cascader-menu-option-color-disabled: #999 !default;
$--cascader-menu-option-fill-disabled: rgba($--color-black, 0.06) !default;
$--cascader-menu-option-empty-color: #666 !default;
$--cascader-menu-group-color: #999 !default;
$--cascader-menu-shadow: 0 1px 2px rgba($--color-black, 0.14), 0 0 3px rgba($--color-black, 0.14) !default;
$--cascader-menu-option-pinyin-color: #999 !default;
$--cascader-menu-submenu-shadow: 1px 1px 2px rgba($--color-black, 0.14), 1px 0 2px rgba($--color-black, 0.14) !default;
/* Group
-------------------------- */
$--group-option-flex: 0 0 (1/5) * 100% !default;
$--group-option-offset-bottom: 12px !default;
$--group-option-fill-hover: rgba($--color-black, 0.06) !default;
$--group-title-color: $--color-black !default;
$--group-title-font-size: $--font-size-base !default;
$--group-title-width: 66px !default;
/* Tab
-------------------------- */
$--tab-font-size: $--font-size-base !default;
$--tab-border-line: 1px solid #e4e4e4 !default;
$--tab-header-color-active: $--color-text-secondary !default;
$--tab-header-color-hover: $--color-text-regular !default;
$--tab-header-color: $--color-text-regular !default;
$--tab-header-fill-active: rgba($--color-black, 0.06) !default;
$--tab-header-fill-hover: rgba($--color-black, 0.06) !default;
$--tab-vertical-header-width: 90px !default;
$--tab-vertical-header-count-color: $--color-white !default;
$--tab-vertical-header-count-fill: $--color-text-secondary !default;
/* Button
-------------------------- */
$--button-font-size: 14px !default;
$--button-font-weight: $--font-weight-primary !default;
$--button-border-radius: $--border-radius-base !default;
$--button-padding-vertical: 12px !default;
$--button-padding-horizontal: 20px !default;
$--button-medium-font-size: 14px !default;
$--button-medium-border-radius: $--border-radius-base !default;
$--button-medium-padding-vertical: 10px !default;
$--button-medium-padding-horizontal: 20px !default;
$--button-small-font-size: 12px !default;
$--button-small-border-radius: #{$--border-radius-base - 1} !default;
$--button-small-padding-vertical: 9px !default;
$--button-small-padding-horizontal: 15px !default;
$--button-mini-font-size: 12px !default;
$--button-mini-border-radius: #{$--border-radius-base - 1} !default;
$--button-mini-padding-vertical: 7px !default;
$--button-mini-padding-horizontal: 15px !default;
$--button-default-color: $--color-text-regular !default;
$--button-default-fill: $--color-white !default;
$--button-default-border: $--border-color-base !default;
$--button-disabled-color: $--color-text-placeholder !default;
$--button-disabled-fill: $--color-white !default;
$--button-disabled-border: $--border-color-lighter !default;
$--button-primary-border: $--color-primary !default;
$--button-primary-color: $--color-white !default;
$--button-primary-fill: $--color-primary !default;
$--button-success-border: $--color-success !default;
$--button-success-color: $--color-white !default;
$--button-success-fill: $--color-success !default;
$--button-warning-border: $--color-warning !default;
$--button-warning-color: $--color-white !default;
$--button-warning-fill: $--color-warning !default;
$--button-danger-border: $--color-danger !default;
$--button-danger-color: $--color-white !default;
$--button-danger-fill: $--color-danger !default;
$--button-info-border: $--color-info !default;
$--button-info-color: $--color-white !default;
$--button-info-fill: $--color-info !default;
$--button-hover-tint-percent: 20% !default;
$--button-active-shade-percent: 10% !default;
/* cascader
-------------------------- */
$--cascader-height: 200px !default;
/* Switch
-------------------------- */
$--switch-on-color: $--color-primary !default;
$--switch-off-color: $--border-color-base !default;
$--switch-disabled-color: $--border-color-lighter !default;
$--switch-disabled-text-color: $--color-text-placeholder !default;
$--switch-font-size: $--font-size-base !default;
$--switch-core-border-radius: 10px !default;
$--switch-width: 40px !default;
$--switch-height: 20px !default;
$--switch-button-size: 16px !default;
/* Dialog
-------------------------- */
$--dialog-background-color: $--color-primary-light-4 !default;
$--dialog-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3) !default;
$--dialog-close-hover-color: $--color-primary !default;
$--dialog-title-font-size: $--font-size-large !default;
$--dialog-font-size: 14px !default;
$--dialog-line-height: $--font-line-height-primary !default;
$--dialog-padding-primary: 20px !default;
/* Table
-------------------------- */
$--table-border-color: $--border-color-lighter !default;
$--table-border: 1px solid $--table-border-color !default;
$--table-text-color: $--color-text-regular !default;
$--table-header-color: $--color-text-secondary !default;
$--table-row-hover-background: $--background-color-base !default;
$--table-current-row-background: $--color-primary-light-9 !default;
$--table-header-background: $--color-white !default;
$--table-footer-background: $--color-text-placeholder !default;
$--table-fixed-box-shadow: 0 0 10px rgba(0, 0, 0, .12) !default;
/* Pagination
-------------------------- */
$--pagination-font-size: 13px !default;
$--pagination-fill: $--color-white !default;
$--pagination-color: $--color-text-primary !default;
$--pagination-border-radius: 3px !default;
$--pagination-button-color: $--color-text-primary !default;
$--pagination-button-width: 35.5px !default;
$--pagination-button-height: 28px !default;
$--pagination-button-disabled-color: $--color-text-placeholder !default;
$--pagination-button-disabled-fill: $--color-white !default;
$--pagination-hover-fill: $--color-primary !default;
$--pagination-hover-color: $--color-white !default;
/* Popover
-------------------------- */
$--popover-fill: $--color-white !default;
$--popover-font-size: $--font-size-base !default;
$--popover-border-color: $--border-color-lighter !default;
$--popover-arrow-size: 6px !default;
$--popover-padding: 12px !default;
$--popover-padding-large: 18px 20px !default;
$--popover-title-font-size: 16px !default;
$--popover-title-color: $--color-text-primary !default;
/* Tooltip
-------------------------- */
$--tooltip-fill: $--color-text-primary !default;
$--tooltip-color: $--color-white !default;
$--tooltip-font-size: 12px !default;
$--tooltip-border-color: $--color-text-primary !default;
$--tooltip-arrow-size: 6px !default;
$--tooltip-padding: 10px !default;
/* Tag
-------------------------- */
$--tag-padding: 0 10px !default;
$--tag-fill: rgba($--color-primary, 0.10) !default;
$--tag-color: $--color-primary !default;
$--tag-border: rgba($--color-primary, 0.20) !default;
$--tag-font-size: 12px !default;
$--tag-border-radius: 4px !default;
$--tag-info-fill: rgba($--color-info, 0.10) !default;
$--tag-info-border: rgba($--color-info, 0.20) !default;
$--tag-info-color: $--color-info !default;
$--tag-primary-fill: rgba($--color-primary, 0.10) !default;
$--tag-primary-border: rgba($--color-primary, 0.20) !default;
$--tag-primary-color: $--color-primary !default;
$--tag-success-fill: rgba($--color-success, 0.10) !default;
$--tag-success-border: rgba($--color-success, 0.20) !default;
$--tag-success-color: $--color-success !default;
$--tag-warning-fill: rgba($--color-warning, 0.10) !default;
$--tag-warning-border: rgba($--color-warning, 0.20) !default;
$--tag-warning-color: $--color-warning !default;
$--tag-danger-fill: rgba($--color-danger, 0.10) !default;
$--tag-danger-border: rgba($--color-danger, 0.20) !default;
$--tag-danger-color: $--color-danger !default;
/* Tree
-------------------------- */
$--tree-node-hover-color: $--background-color-base !default;
$--tree-text-color: $--color-text-regular !default;
$--tree-expand-icon-color: $--color-text-placeholder !default;
/* Dropdown
-------------------------- */
$--dropdown-menu-box-shadow: $--box-shadow-light !default;
$--dropdown-menuItem-hover-fill: $--color-primary-light-9 !default;
$--dropdown-menuItem-hover-color: $--link-color !default;
/* Badge
-------------------------- */
$--badge-fill: $--color-danger !default;
$--badge-radius: 10px !default;
$--badge-font-size: 12px !default;
$--badge-padding: 6px !default;
$--badge-size: 18px !default;
/* Card
--------------------------*/
$--card-border-color: $--border-color-lighter !default;
$--card-border-radius: 4px !default;
$--card-padding: 20px !default;
/* Slider
--------------------------*/
$--slider-main-background-color: $--color-primary !default;
$--slider-runway-background-color: $--border-color-light !default;
$--slider-button-hover-color: mix($--color-primary, black, 97%) !default;
$--slider-stop-background-color: $--color-white !default;
$--slider-disable-color: $--color-text-placeholder !default;
$--slider-margin: 16px 0 !default;
$--slider-border-radius: 3px !default;
$--slider-height: 6px !default;
$--slider-button-size: 16px !default;
$--slider-button-wrapper-size: 36px !default;
$--slider-button-wrapper-offset: -15px !default;
/* Steps
--------------------------*/
$--steps-border-color: $--disabled-border-base !default;
$--steps-border-radius: 4px !default;
$--steps-padding: 20px !default;
/* Menu
--------------------------*/
$--menu-item-color: $--color-text-primary !default;
$--menu-item-fill: $--color-white !default;
$--menu-item-hover-fill: $--color-primary-light-9 !default;
/* Rate
--------------------------*/
$--rate-height: 20px !default;
$--rate-font-size: $--font-size-base !default;
$--rate-icon-size: 18px !default;
$--rate-icon-margin: 6px !default;
$--rate-icon-color: $--color-text-placeholder !default;
/* DatePicker
--------------------------*/
$--datepicker-color: $--color-text-regular !default;
$--datepicker-off-color: $--color-text-placeholder !default;
$--datepicker-header-color: $--color-text-regular !default;
$--datepicker-icon-color: $--color-text-primary !default;
$--datepicker-border-color: $--disabled-border-base !default;
$--datepicker-inner-border-color: #e4e4e4 !default;
$--datepicker-inrange-color: $--border-color-extra-light !default;
$--datepicker-inrange-hover-color: $--border-color-extra-light !default;
$--datepicker-active-color: $--color-primary !default;
$--datepicker-text-hover-color: $--color-primary !default;
$--datepicker-cell-hover-color: #fff !default;
/* Loading
--------------------------*/
$--loading-spinner-size: 42px !default;
$--loading-fullscreen-spinner-size: 50px !default;
/* Scrollbar
--------------------------*/
$--scrollbar-background-color: rgba($--color-text-secondary, .3) !default;
$--scrollbar-hover-background-color: rgba($--color-text-secondary, .5) !default;
/* Carousel
--------------------------*/
$--carousel-arrow-font-size: 12px !default;
$--carousel-arrow-size: 36px !default;
$--carousel-arrow-background: rgba(31, 45, 61, 0.11) !default;
$--carousel-arrow-hover-background: rgba(31, 45, 61, 0.23) !default;
$--carousel-indicator-width: 30px !default;
$--carousel-indicator-height: 2px !default;
$--carousel-indicator-padding-horizontal: 4px !default;
$--carousel-indicator-padding-vertical: 12px !default;
$--carousel-indicator-out-color: $--border-color-hover !default;
/* Collapse
--------------------------*/
$--collapse-border-color: $--border-color-lighter !default;
$--collapse-header-height: 48px !default;
$--collapse-header-padding: 20px !default;
$--collapse-header-fill: $--color-white !default;
$--collapse-header-color: $--color-text-primary !default;
$--collapse-header-size: 13px !default;
$--collapse-content-fill: $--color-white !default;
$--collapse-content-size: 13px !default;
$--collapse-content-color: $--color-text-primary !default;
/* Transfer
--------------------------*/
$--transfer-border-color: $--border-color-lighter !default;
$--transfer-border-radius: $--border-radius-base !default;
$--transfer-panel-width: 200px !default;
$--transfer-panel-header-height: 40px !default;
$--transfer-panel-header-background: $--background-color-base !default;
$--transfer-panel-footer-height: 40px !default;
$--transfer-panel-body-height: 246px !default;
$--transfer-item-height: 30px !default;
$--transfer-item-hover-background: $--color-text-secondary !default;
$--transfer-filter-height: 32px !default;
/* Header
--------------------------*/
$--header-padding: 0 20px !default;
/* Footer
--------------------------*/
$--footer-padding: 0 20px !default;
/* Main
--------------------------*/
$--main-padding: 20px !default;
/* Break-point
--------------------------*/
$--sm: 768px !default;
$--md: 992px !default;
$--lg: 1200px !default;
$--xl: 1920px !default;
$--breakpoints: (
'xs' : (max-width: $--sm),
'sm' : (min-width: $--sm),
'md' : (min-width: $--md),
'lg' : (min-width: $--lg),
'xl' : (min-width: $--xl)
);
$--breakpoints-spec: (
'xs-only' : (max-width: $--sm - 1),
'sm-and-up' : (min-width: $--sm),
'sm-only': "(min-width: #{$--sm}) and (max-width: #{$--md} - 1)",
'sm-and-down': (max-width: $--md - 1),
'md-and-up' : (min-width: $--md),
'md-only': "(min-width: #{$--md}) and (max-width: #{$--lg } - 1)",
'md-and-down': (max-width: $--lg - 1),
'lg-and-up' : (min-width: $--lg),
'lg-only': "(min-width: #{$--lg}) and (max-width: #{$--xl } - 1)",
'lg-and-down': (max-width: $--xl - 1),
'xl-only' : (min-width: $--xl),
);
var gulp = require('gulp');
var fs = require("fs");
var tap = require('gulp-tap');
var minimist = require('minimist');
var merge = require('merge-stream');
var rename = require('gulp-rename');
var del = require("del");
var concat = require('gulp-concat');
var gulpif=require("gulp-if");
var knownOptions = {
string: 'name',
string: 'bizfile',
default: { name: process.env.NODE_ENV || 'Test' }
};
var options = minimist(process.argv.slice(2), knownOptions);
var name = options.name;
var bizfile = options.bizfile;
const BUILD_PATH = "./extra/build";
const DEST_PATH = "./extra/dest";
const CTL_PATH = "./app/base/controller/impl";
const SERVICE_PATH = "./app/base/service/impl";
const DAO_PATH = "./app/base/db/impl";
const PAGE_PATH = "./app/front/vues/pages";
const VUECOM_PATH = "./app/front/vues";
const CSS_PATH = "./app/front/entry/public/css";
const IMG_PATH = "./extra/imgs";
const DEST_IMGPATH="./app/front/entry/public/imgs";
const METABIZ_PATH = "./app/base/db/metadata/bizs/wx76a324c5d201d1a4";
gulp.task('makefile', function (done) {
// 将你的默认的任务代码放在这
del("./extra/dest/*");
var tmpName = name.toLowerCase();
var fstream = gulp.src("./extra/build/*.js")
.pipe(tap(function (file) {
var sfile = file.contents.toString('utf-8');
var rpstr = sfile.replace(/\$\{Name\}/g, name);
file.contents = new Buffer(rpstr, "utf-8");
})).pipe(
rename(function (path) {
path.basename = path.basename.replace("templ", tmpName);
})
).pipe(gulp.dest("./extra/dest"));
return fstream;
// var pageStream=gulp.src("./extra/build/page/**/*").pipe(
// gulp.dest("./extra/dest")
// );
// return merge(fstream, pageStream);
});
gulp.task('page', function (cbk) {
var tmpName = name.toLowerCase();
return gulp.src("./extra/build/page/templPage/*.*")
.pipe(
rename(function (path) {
path.basename = path.basename.replace("templ", tmpName);
})
).pipe(tap(function (file) {
var sfile = file.contents.toString();
var rpstr = sfile.replace(/\$\{COMNAME\}/g, "gsb_" + tmpName);
file.contents = new Buffer(rpstr, "utf-8");
})).pipe(
gulp.dest("./extra/dest/" + tmpName + "/")
);
});
gulp.task("cpctl", function (cbk) {
var tmpName=name.toLowerCase();
return gulp.src("./extra/dest/" + tmpName + "Ctl.js").pipe(
rename(function (path) {
path.basename=path.basename.substring(0,1).toLowerCase() + path.basename.substring(1);
})
).pipe(gulp.dest(CTL_PATH));
});
gulp.task("cpsve", function (cbk) {
var tmpName=name.toLowerCase();
return gulp.src("./extra/dest/" + tmpName + "Sve.js").pipe(
rename(function (path) {
path.basename = path.basename.substring(0, 1).toLowerCase() + path.basename.substring(1);
})
).pipe(gulp.dest(SERVICE_PATH));
});
gulp.task("cpdao", function (cbk) {
var tmpName=name.toLowerCase();
return gulp.src("./extra/dest/" + tmpName + "Dao.js").pipe(
rename(function (path) {
path.basename = path.basename.substring(0, 1).toLowerCase() + path.basename.substring(1);
})
).pipe(gulp.dest(DAO_PATH));
});
gulp.task("cppage", function (cbk) {
var tmpName=name.toLowerCase();
return gulp.src("./extra/dest/" + tmpName + "/*.*").pipe(gulp.dest(PAGE_PATH + "/" + tmpName + "/"));
});
gulp.task("cpbizfile", function (cbk) {
return gulp.src("./extra/build/page/meta.js").pipe(
rename(function (path) {
if (bizfile) {
path.basename = bizfile;
} else {
path.basename = name;
}
})
).pipe(gulp.dest(METABIZ_PATH + "/"));
});
gulp.task("simple", ['page', 'cppage', 'cpbizfile'], function (done) {
done();
});
gulp.task('all', ['makefile', 'page', 'cpctl', 'cpsve', 'cpdao', 'cppage', 'cpbizfile'], function (done) {
done();
});
var minifycss = require('gulp-minify-css')
gulp.task("pagecss",function(cbk){
function defaultcondition(file){
if(file.path.indexOf("spring")>=0){
return false;
}else if(file.path.indexOf("summer")>=0){
return false;
}else if(file.path.indexOf("autumn")>=0){
return false;
}else if(file.path.indexOf("winter")>=0){
return false;
}else{
return true;
}
}
return gulp.src(VUECOM_PATH+"/**/*/*.css").pipe(
gulpif(defaultcondition,concat("pagecom.css"))
).pipe(minifycss()).pipe(gulp.dest(CSS_PATH+"/"));
});
gulp.task("springcss",function(cbk){
function springcondition(file){
if(file.path.indexOf("spring")>=0){
return true;
}
return false;
}
return gulp.src(VUECOM_PATH+"/**/*/*.css").pipe(
gulpif(springcondition,concat("spring.css"))
).pipe(minifycss()).pipe(gulp.dest(CSS_PATH+"/"));
});
gulp.task("summercss",function(cbk){
function summercondition(file){
if(file.path.indexOf("summer")>=0){
return true;
}
return false;
}
return gulp.src(VUECOM_PATH+"/**/*/*.css").pipe(
gulpif(summercondition,concat("summer.css"))
).pipe(minifycss()).pipe(gulp.dest(CSS_PATH+"/"));
});
gulp.task("autumncss",function(cbk){
function autumncondition(file){
if(file.path.indexOf("autumn")>=0){
return true;
}
return false;
}
return gulp.src(VUECOM_PATH+"/**/*/*.css").pipe(
gulpif(autumncondition,concat("autumn.css"))
).pipe(minifycss()).pipe(gulp.dest(CSS_PATH+"/"));
});
gulp.task("wintercss",function(cbk){
function wintercondition(file){
if(file.path.indexOf("winter")>=0){
return true;
}
return false;
}
return gulp.src(VUECOM_PATH+"/**/*/*.css").pipe(
gulpif(wintercondition,concat("winter.css"))
).pipe(minifycss()).pipe(gulp.dest(CSS_PATH+"/"));
});
gulp.task("1",function(cbk){
function mobilecondition(file){
if(file.path.indexOf("mobile")>=0){
return true;
}
return false;
}
return gulp.src(VUECOM_PATH+"/**/*/*.css").pipe(
gulpif(mobilecondition,concat("mobile.css"))
).pipe(minifycss()).pipe(gulp.dest(CSS_PATH+"/"));
});
gulp.task('allcss', ['pagecss', 'springcss', 'summercss', 'autumncss', 'wintercss'], function (done) {
done();
});
gulp.task('watch', function () {
gulp.watch(VUECOM_PATH+"/**/*/*.css",gulp.series(['allcss']));
});
gulp.task("basehandle",function(cbk){
return gulp.src(VUECOM_PATH+"/base/**/*.vue").
pipe(tap(function (file) {
file.contents=new Buffer(require(file.path).replace(/\n/g,""), "utf-8");
})).pipe(gulp.dest(VUECOM_PATH+"/allie/base/"));
});
var gulp = require('gulp'),
imagemin = require('gulp-imagemin');
pngquant = require('imagemin-pngquant'),
gulp.task('testimg', function () {
del("./extra/testimgs/*");
return gulp.src(IMG_PATH+'/**/*.{png,jpg,gif,ico}')
.pipe(imagemin({
optimizationLevel: 1, //类型:Number 默认:3 取值范围:0-7(优化等级)
progressive: true, //类型:Boolean 默认:false 无损压缩jpg图片
interlaced: true, //类型:Boolean 默认:false 隔行扫描gif进行渲染
multipass: true,//类型:Boolean 默认:false 多次优化svg直到完全优化
use:[pngquant({
quality: [0.3]
})]
}))
//.pipe(gulp.dest(DEST_IMGPATH));
.pipe(gulp.dest("./extra/testimgs/"));
});
\ No newline at end of file
var http = require('http');
var express = require('express');
var app = express();
var setttings=require("./app/config/settings");
var environment = require('./app/config/environment');
// var SocketServer=require("./app/config/socket.server");
//const cluster = require('cluster');
//const numCPUs = require('os').cpus().length;
// all environments
environment(app);//初始化环境
// 错误处理中间件应当在路由加载之后才能加载
// if (cluster.isMaster) {
// console.log(`Master ${process.pid} is running`);
//
// // Fork workers.
// for (let i = 0; i < numCPUs; i++) {
// cluster.fork();
// }
// cluster.on('exit', (worker, code, signal) => {
// console.log(`worker ${worker.process.pid} died`);
// });
// }else{
// var server = http.createServer(app);
// var socketServer = new SocketServer(server);
// server.listen(setttings.port, function(){
// console.log('Express server listening on port ' + app.get('port'));
// });
// }
var server = http.createServer(app);
//var socketServer = new SocketServer(server);
server.listen(setttings.port, function(){
console.log('Express server listening on port ' + app.get('port'));
});
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"name": "icp-deliver",
"version": "1.0.0",
"description": "h5framework",
"main": "main.js",
"scripts": {
"dev": "nodemon main.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "jy",
"license": "ISC",
"dependencies": {
"@alicloud/pop-core": "^1.7.7",
"MD5": "^1.3.0",
"after": "^0.8.2",
"ali-oss": "^4.12.2",
"babel-polyfill": "^6.26.0",
"base64id": "^1.0.0",
"bluebird": "^3.5.1",
"body-parser": "^1.18.2",
"co": "^4.6.0",
"connect-history-api-fallback": "^1.6.0",
"connect-redis": "^3.3.3",
"continuation-local-storage": "^3.2.1",
"cookie-parser": "^1.4.3",
"crypto": "^1.0.1",
"crypto-js": "^3.1.9-1",
"easyimage": "^3.1.0",
"ejs": "^2.5.8",
"engine.io-parser": "^2.1.2",
"errorhandler": "^1.5.0",
"exceljs": "^1.6.3",
"exif-js": "^2.3.0",
"express": "^4.16.2",
"express-session": "^1.15.6",
"glob": "^7.1.6",
"gm": "^1.23.1",
"jsonwebtoken": "^8.5.1",
"log4js": "^2.10.0",
"method-override": "^2.3.10",
"moment": "^2.26.0",
"morgan": "^1.9.0",
"multer": "^1.3.0",
"mysql2": "^1.5.3",
"node-cron": "^2.0.1",
"node-uuid": "^1.4.8",
"pdfcrowd": "^4.2.0",
"pinyin": "^2.8.3",
"qr-image": "^3.2.0",
"sequelize": "^4.37.8",
"sequelize-cli": "^4.1.1",
"serve-favicon": "^2.4.5",
"sha1": "^1.1.1",
"socket.io": "^2.1.1",
"uuid": "^3.2.1",
"xml2js": "^0.4.19"
},
"devDependencies": {
"del": "^5.1.0",
"gulp-concat": "^2.6.1",
"gulp-if": "^3.0.0",
"gulp-imagemin": "^6.2.0",
"gulp-minify-css": "^1.2.4",
"gulp-tap": "^2.0.0",
"imagemin-pngquant": "^8.0.0",
"merge-stream": "^2.0.0"
}
}
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