Commit 5cb49587 by 刘泽奇

Merge branch 'bigdata' of gitlab.gongsibao.com:jiangyong/zhichan into bigdata

parents a6a17374 3ae75610
node_modules/
\ No newline at end of file
...@@ -127,8 +127,26 @@ class AccessAuthAPI extends APIBase { ...@@ -127,8 +127,26 @@ class AccessAuthAPI extends APIBase {
var opencode = super.getUUID(); var opencode = super.getUUID();
var authUrl = req.app.authUrl + "?opencode=" + opencode; var authUrl = req.app.authUrl + "?opencode=" + opencode;
await this.cacheManager["OpenCodeCache"].cache(opencode, ruser, 30); await this.cacheManager["OpenCodeCache"].cache(opencode, ruser, 30);
return system.getResultSuccess({ auth_url: authUrl, opencode: opencode, open_user_id: ruser.id }); return system.getResultSuccess({ auth_url: authUrl, opencode: opencode, open_user_id: ruser.id, account_id: ruser.account_id });
} }
async modifyPassword(pobj, qobj, req) {
if (!pobj.account_id) {
return system.getResult(null, "用户名不能为空");
}
if (!pobj.password) {
return system.getResult(null, "密码不能为空");
}
var param = {
account_id: pobj.account_id,
password: pobj.password,
}
await this.userSve.modifyPassword(param);
return system.getResultSuccess();
}
async login(pobj, qobj, req) { async login(pobj, qobj, req) {
if (!pobj.userName) { if (!pobj.userName) {
return system.getResult(null, "用户名不能为空"); return system.getResult(null, "用户名不能为空");
...@@ -150,6 +168,154 @@ class AccessAuthAPI extends APIBase { ...@@ -150,6 +168,154 @@ class AccessAuthAPI extends APIBase {
await this.cacheManager["OpenCodeCache"].cache(opencode, ruser, 120); await this.cacheManager["OpenCodeCache"].cache(opencode, ruser, 120);
return system.getResultSuccess({ auth_url: authUrl, opencode: opencode }); return system.getResultSuccess({ auth_url: authUrl, opencode: opencode });
} }
async loginByMobileWithoutReg(pobj, qobj, req) {
if (!pobj.mobile) {
return system.getResult(null, "电话不能为空");
}
var param = {
app_id: req.app.id,
mobile: pobj.mobile,
}
var ruser = await this.userSve.getUserByUserMobile(param);
if (!ruser) {
return system.getResult(null,"查无此用户");
}
var opencode = super.getUUID();
var authUrl = req.app.authUrl + "?opencode=" + opencode;
await this.cacheManager["OpenCodeCache"].cache(opencode, ruser, 120);
return system.getResultSuccess({ auth_url: authUrl, opencode: opencode });
}
//根据openid查询是否与用户绑定
async checkWxBind(p,q,req){
var openid=p.openid;
if (!openid) {
return system.getResult(null, "openid不能为空");
}
var param = {
app_id: req.app.id,
openid: openid,
}
var ruser = await this.userSve.checkWxBind(param);
if(!ruser){
return system.getResult(null, "用户未绑定微信");
}
return system.getResult(ruser);
}
//根据openid登录
async loginByOpenId(p,q,req){
var openid=p.openid;
if (!openid) {
return system.getResult(null, "openid不能为空");
}
var param = {
app_id: req.app.id,
openid: openid,
}
var ruser = await this.userSve.checkWxBind(param);
if(!ruser){
return system.getResult(null, "用户未绑定微信");
}
var opencode = super.getUUID();
var authUrl = req.app.authUrl + "?opencode=" + opencode;
await this.cacheManager["OpenCodeCache"].cache(opencode, ruser, 120);
return system.getResultSuccess({ auth_url: authUrl, opencode: opencode });
}
//wxbind
async wxBind(pobj, qobj, req) {
var appkey = req.app.appkey;
if (!pobj.mobile) {
return system.getResult(null, "电话号码不能未空.");
}
if (!pobj.vcode) {
return system.getResult(null, "验证码不能未空.");
}
if (!pobj.openid) {
return system.getResult(null, "openid不能未空.");
}
var cacheCode = await this.cacheManager["VCodeCache"].cache(appkey + "_" + pobj.mobile, null);
if (pobj.vcode != cacheCode.vcode) {
return system.getResult(system.verifyVCodeFail, "验证码校验不成功,请重新获取验证码验证.");
}
var param = {
app_id: req.app.id,
mobile: pobj.mobile,
openid:pobj.openid
}
var ruser = await this.userSve.wxBind(param);
if (!ruser) {
param = {
app_id: req.app.id,
userName: pobj.mobile,
nickName:pobj.mobile,
mobile: pobj.mobile,
password: pobj.mobile,
wxopenid:pobj.openid
}
ruser = await this.userSve.register(param);
}
var opencode = super.getUUID();
var authUrl = req.app.authUrl + "?opencode=" + opencode;
await this.cacheManager["OpenCodeCache"].cache(opencode, ruser, 120);
return system.getResultSuccess({ auth_url: authUrl, opencode: opencode });
}
//wxbind
async wxBindWithoutVCode(pobj, qobj, req) {
var appkey = req.app.appkey;
if (!pobj.mobile) {
return system.getResult(null, "电话号码不能未空.");
}
if (!pobj.openid) {
return system.getResult(null, "openid不能未空.");
}
var param = {
app_id: req.app.id,
mobile: pobj.mobile,
openid:pobj.openid
}
var ruser = await this.userSve.wxBind(param);
if (!ruser) {
param = {
app_id: req.app.id,
userName: pobj.mobile,
nickName:pobj.mobile,
mobile: pobj.mobile,
password: pobj.mobile,
wxopenid:pobj.openid
}
ruser = await this.userSve.register(param);
}
var opencode = super.getUUID();
var authUrl = req.app.authUrl + "?opencode=" + opencode;
await this.cacheManager["OpenCodeCache"].cache(opencode, ruser, 120);
return system.getResultSuccess({ auth_url: authUrl, opencode: opencode });
}
async loginByMobileWithReg(pobj, qobj, req) {
if (!pobj.mobile) {
return system.getResult(null, "电话不能为空");
}
var param = {
app_id: req.app.id,
mobile: pobj.mobile,
}
var ruser = await this.userSve.getUserByUserMobile(param);
if (!ruser) {
param = {
app_id: req.app.id,
userName: pobj.mobile,
nickName:pobj.mobile,
mobile: pobj.mobile,
password: pobj.mobile
}
ruser = await this.userSve.register(param);
}
var opencode = super.getUUID();
var authUrl = req.app.authUrl + "?opencode=" + opencode;
await this.cacheManager["OpenCodeCache"].cache(opencode, ruser, 120);
return system.getResultSuccess({ auth_url: authUrl, opencode: opencode });
}
async loginByMd5Password(pobj, qobj, req) { async loginByMd5Password(pobj, qobj, req) {
if (!pobj.userName) { if (!pobj.userName) {
return system.getResult(null, "用户名不能为空"); return system.getResult(null, "用户名不能为空");
...@@ -398,6 +564,34 @@ class AccessAuthAPI extends APIBase { ...@@ -398,6 +564,34 @@ class AccessAuthAPI extends APIBase {
rtnType: "json object{auth_url: xxxxx/auth?opencode=xxxxx }),详细见后面示例" rtnType: "json object{auth_url: xxxxx/auth?opencode=xxxxx }),详细见后面示例"
}, },
{ {
methodDesc: "验证码登录,访问地址:http://......../api/auth/accessAuth/loginByMobileWithReg,访问token需要放置到后续API方法调用的请求头中",
methodName: "loginByVCode",
paramdescs: [
{
paramDesc: "手机号码",
paramName: "mobile",
paramType: "string",
defaultValue: "",
},
],
rtnTypeDesc: "返回JSON对象字符串",
rtnType: "json object{auth_url: xxxxx/auth?opencode=xxxxx }),详细见后面示例"
},
{
methodDesc: "验证码登录,访问地址:http://......../api/auth/accessAuth/loginByMobileWithoutReg,访问token需要放置到后续API方法调用的请求头中",
methodName: "loginByVCode",
paramdescs: [
{
paramDesc: "手机号码",
paramName: "mobile",
paramType: "string",
defaultValue: "",
},
],
rtnTypeDesc: "返回JSON对象字符串",
rtnType: "json object{auth_url: xxxxx/auth?opencode=xxxxx }),详细见后面示例"
},
{
methodDesc: "按照opencode获取用户信息,访问地址:http://......../api/auth/accessAuth/authByCode,访问token需要放置到后续API方法调用的请求头中", methodDesc: "按照opencode获取用户信息,访问地址:http://......../api/auth/accessAuth/authByCode,访问token需要放置到后续API方法调用的请求头中",
methodName: "authByCode", methodName: "authByCode",
paramdescs: [ paramdescs: [
...@@ -438,6 +632,60 @@ class AccessAuthAPI extends APIBase { ...@@ -438,6 +632,60 @@ class AccessAuthAPI extends APIBase {
rtnType: "json object{status:-1,data:2030),验证码错误,成功:{status:0,...}" rtnType: "json object{status:-1,data:2030),验证码错误,成功:{status:0,...}"
}, },
{ {
methodDesc: "按照微信openid检查是否绑定,访问地址:http://......../api/auth/accessAuth/checkWxBind,访问token需要放置到后续API方法调用的请求头中",
methodName: "checkWxBind",
paramdescs: [
{
paramDesc: "微信openid",
paramName: "openid",
paramType: "string",
defaultValue: "",
}
],
rtnTypeDesc: "返回绑定后的用户",
rtnType: "成功:{status:0,data:{}),未绑定:{status:-1}"
},
{
methodDesc: "按照手机号、验证码,微信ID,绑定账号,访问地址:http://......../api/auth/accessAuth/wxBind,访问token需要放置到后续API方法调用的请求头中",
methodName: "wxBind",
paramdescs: [
{
paramDesc: "手机号",
paramName: "mobile",
paramType: "string",
defaultValue: "",
},
{
paramDesc: "验证码",
paramName: "vcode",
paramType: "string",
defaultValue: "",
},
{
paramDesc: "微信openid",
paramName: "openid",
paramType: "string",
defaultValue: "",
}
],
rtnTypeDesc: "返回绑定后的获取用户的code",
rtnType: "成功:{status:0,data:{auth_url: xxxxx/auth?opencode=xxxxx,opencode:yyyy})"
},
{
methodDesc: "按照微信ID进行登录,访问地址:http://......../api/auth/accessAuth/loginByOpenId,访问token需要放置到后续API方法调用的请求头中",
methodName: "loginByOpenId",
paramdescs: [
{
paramDesc: "微信openid",
paramName: "openid",
paramType: "string",
defaultValue: "",
}
],
rtnTypeDesc: "返回绑定后的获取用户的code",
rtnType: "成功:{status:0,data:{auth_url: xxxxx/auth?opencode=xxxxx,opencode:yyyy})"
},
{
methodDesc: "按照手机号、验证码修改密码,访问地址:http://......../api/auth/accessAuth/modiPasswordByUserName,访问token需要放置到后续API方法调用的请求头中", methodDesc: "按照手机号、验证码修改密码,访问地址:http://......../api/auth/accessAuth/modiPasswordByUserName,访问token需要放置到后续API方法调用的请求头中",
methodName: "modiPasswordByUserName", methodName: "modiPasswordByUserName",
paramdescs: [ paramdescs: [
......
...@@ -7,6 +7,7 @@ const logCtl = system.getObject("web.common.oplogCtl"); ...@@ -7,6 +7,7 @@ const logCtl = system.getObject("web.common.oplogCtl");
class OrgCtl extends CtlBase{ class OrgCtl extends CtlBase{
constructor(){ constructor(){
super("auth",CtlBase.getServiceName(OrgCtl)); super("auth",CtlBase.getServiceName(OrgCtl));
this.compSvr=system.getObject("service.common.companySve");
} }
//检查是否已经存在主要岗位 //检查是否已经存在主要岗位
async checkMainPosition(p,q,req){ async checkMainPosition(p,q,req){
...@@ -19,6 +20,7 @@ class OrgCtl extends CtlBase{ ...@@ -19,6 +20,7 @@ class OrgCtl extends CtlBase{
return system.getResult(rtn); return system.getResult(rtn);
} }
async create(p,q,req){ async create(p,q,req){
return super.create(p,q,req); return super.create(p,q,req);
} }
async delete(p,q,req){ async delete(p,q,req){
...@@ -28,7 +30,11 @@ class OrgCtl extends CtlBase{ ...@@ -28,7 +30,11 @@ class OrgCtl extends CtlBase{
return super.update(p,q,req); return super.update(p,q,req);
} }
async initOrgs(p,q,req){ async initOrgs(p,q,req){
var tocompany=req.session.tocompany; 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); var rtn=await this.service.initOrgs(tocompany,req.appid);
......
...@@ -37,6 +37,12 @@ class CompanyCtl extends CtlBase { ...@@ -37,6 +37,12 @@ class CompanyCtl extends CtlBase {
req.session.tocompany=cmpfind; req.session.tocompany=cmpfind;
return system.getResult(cmpfind.apps); return system.getResult(cmpfind.apps);
} }
async giveupApp(p,q,req){
var comid=p.compid;
var appid=p.appid;
var rtn=await this.service.giveupApp(comid,appid);
return system.getResult(rtn);
}
//设置当前用户选择的公司为当前公司 //设置当前用户选择的公司为当前公司
async settocompany(p,q,req){ async settocompany(p,q,req){
p.isCurrent=true; p.isCurrent=true;
...@@ -52,6 +58,7 @@ class CompanyCtl extends CtlBase { ...@@ -52,6 +58,7 @@ class CompanyCtl extends CtlBase {
var rtntmp={ var rtntmp={
id:cmp.id, id:cmp.id,
name:cmp.name, name:cmp.name,
companykey:cmp.companykey,
description:cmp.description, description:cmp.description,
logoUrl:cmp.logoUrl, logoUrl:cmp.logoUrl,
isCurrent:cmp.usercompany.isCurrent, isCurrent:cmp.usercompany.isCurrent,
......
...@@ -74,6 +74,18 @@ class AppDao extends Dao { ...@@ -74,6 +74,18 @@ class AppDao extends Dao {
} }
} }
async findAndCountAll(qobj, t) {
if(qobj.codepath.indexOf("comapps")>=0){
var rtn={};
var comp=await this.db.models.company.findOne({where:{companykey:qobj.search.companykey}});
var apps=await comp.getApps();
rtn.results={rows:apps,count:apps.length};
rtn.aggresult={};
return rtn;
}else{
return super.findAndCountAll(qobj, t);
}
}
extraWhere(obj, w, qc, linkAttrs) { extraWhere(obj, w, qc, linkAttrs) {
if (obj.codepath && obj.codepath != "") { if (obj.codepath && obj.codepath != "") {
if (obj.codepath.indexOf("pmgmyapps") > 0) {//说明是应用管理员的查询 if (obj.codepath.indexOf("pmgmyapps") > 0) {//说明是应用管理员的查询
......
...@@ -7,6 +7,39 @@ module.exports = { ...@@ -7,6 +7,39 @@ module.exports = {
"label": "paas", "label": "paas",
"children": [ "children": [
{ {
"code": "opcenter",
"label": "运维中心",
"icon":"fa fa-jpy",
"isSubmenu": true,
"isleft": true,
"children": [
{
"code": "opmanage", "isGroup": true, "label": "运维管理", "children": [
{
"code": "crontasks",
"label": "定时任务",
"bizCode": "crontasks",
"isMenu": true,
"bizConfig": null,
"path": "",
"isleft":true,
},
{
"code": "batchtasks",
"label": "批量任务",
"bizCode": "batchtasks",
"isMenu": true,
"bizConfig": null,
"path": "",
"isleft":true,
},
]
},
],
},
{
"code": "pmgcenter", "code": "pmgcenter",
"label": "平台中心", "label": "平台中心",
"icon":"fa fa-jpy", "icon":"fa fa-jpy",
...@@ -34,7 +67,8 @@ module.exports = { ...@@ -34,7 +67,8 @@ module.exports = {
"isleft":true, "isleft":true,
}, },
] ],
}, },
], ],
}, },
...@@ -128,6 +162,33 @@ module.exports = { ...@@ -128,6 +162,33 @@ module.exports = {
"isleft":true, "isleft":true,
}, },
{ {
"code": "comapps",
"label": "公司租用",
"bizCode": "comapps",
"isMenu": false,
"bizConfig": null,
"path": "",
"isleft":true,
},
{
"code": "comorgs",
"label": "组织结构",
"bizCode": "comorgs",
"isMenu": false,
"bizConfig": null,
"path": "",
"isleft":true,
},
{
"code": "comusers",
"label": "公司员工",
"bizCode": "comusers",
"isMenu": false,
"bizConfig": null,
"path": "",
"isleft":true,
},
{
"code": "pmgmyapps", "code": "pmgmyapps",
"label": "我的应用", "label": "我的应用",
"isMenu": true, "isMenu": true,
...@@ -207,6 +268,9 @@ module.exports = { ...@@ -207,6 +268,9 @@ module.exports = {
"organization": {"title": "用户", "config": null, "path": "/organization", "comname": "organization"}, "organization": {"title": "用户", "config": null, "path": "/organization", "comname": "organization"},
"allapps": {"title": "所有APP", "config": null, "path": "/allapps", "comname": "apps"}, "allapps": {"title": "所有APP", "config": null, "path": "/allapps", "comname": "apps"},
"pmgmyapps": {"title": "我的APP", "config": null, "path": "/pmgmyapps", "comname": "apps"}, "pmgmyapps": {"title": "我的APP", "config": null, "path": "/pmgmyapps", "comname": "apps"},
"comapps": {"title": "公司租用", "config": null, "path": "/comapps", "comname": "apps"},
"comorgs": {"title": "公司组织结构", "config": null, "path": "/comorgs", "comname": "comorgs"},
"comusers": {"title": "公司用户", "config": null, "path": "/comusers", "comname": "users"},
"myappinfo": {"title": "应用信息", "config": null, "path": "/myappinfo", "comname": "myappinfo"}, "myappinfo": {"title": "应用信息", "config": null, "path": "/myappinfo", "comname": "myappinfo"},
"cachsearches": { "title": "缓存档案", "config": null, "path": "/cachsearches", "comname": "cachsearches" }, "cachsearches": { "title": "缓存档案", "config": null, "path": "/cachsearches", "comname": "cachsearches" },
"companyinfo": {"title": "应用信息", "config": null, "path": "/companyinfo", "comname": "companyinfo"}, "companyinfo": {"title": "应用信息", "config": null, "path": "/companyinfo", "comname": "companyinfo"},
......
module.exports={
"bizName":"comapps",
"list":{
columnMetaData:[
{"width":"200","label":"应用KEY","prop":"appkey","isShowTip":true,"isTmpl":false},
{"width":"100","label":"应用名称","prop":"name","isShowTip":true,"isTmpl":false},
{"width":"200","label":"应用密钥","prop":"secret","isShowTip":true,"isTmpl":false},
{"width":"200","label":"是否启用","prop":"isEnabled","isShowTip":true,"isTmpl":false},
{"width":"null","label":"操作","name":"null","isShowTip":false,"isTmpl":true,"isBtns":"true"},
]
},
"form":[
{
"title":"应用控制",
"colnum":1,
"ctls":[
{"type":"switch","label":"是否启用","prop":"isEnabled","acText":"启用","inactText":"停用","placeHolder":"","style":""},
{"type":"switch","label":"是否私有","prop":"isPublish","acText":"否","inactText":"是","placeHolder":"","style":""},
{ "type": "select", "label": "应用类型", "dicKey": "app_type", "prop": "appType", "labelField": "label", "valueField": "value", "placeHolder": "请选择支付类型", "style": "" },
]
},
{
"title":"概要介绍",
"colnum":1,
"ctls":[
{ "type": "textarea", "label": "简介", "prop": "description", "placeHolder": "请输入产品简介", "style": "width:600px" }
]
},
{
"title":"基本信息",
"colnum":3,
"ctls":[
{"type":"input","label":"应用KEY","prop":"appkey","disabled":true,"placeHolder":"","style":""},
{"type":"input","label":"应用名称","prop":"name","placeHolder":"应用名称","style":""},
{"type":"input","label":"应用密钥","prop":"secret","disabled":false,"placeHolder":"","style":""},
{"type":"input","label":"域名","prop":"domainName","disabled":false,"placeHolder":"","style":""},
{"type":"input","label":"首页","prop":"homePage","disabled":false,"placeHolder":"","style":""},
{"type":"input","label":"认证URL","prop":"authUrl","disabled":false,"placeHolder":"","style":""},
{"type":"input","label":"文档URL","prop":"docUrl","disabled":false,"placeHolder":"","style":""},
{"type":"input","label":"配置URL","prop":"uiconfigUrl","disabled":false,"placeHolder":"","style":""},
{"type":"input","label":"缓存操作URL","prop":"opCacheUrl","disabled":false,"placeHolder":"","style":""},
{"type":"input","label":"接受API调用计数URL","prop":"notifyCacheCountUrl","disabled":false,"placeHolder":"","style":""},
]
},
{
"title":"个性化信息",
"colnum":2,
"ctls":[
{"type":"upload","label":"logo","prop":"logoUrl","disabled":false,"placeHolder":"","style":""},
{"type":"upload","label":"背景图","prop":"bkimageUrl","placeHolder":"应用名称","style":""},
{"type":"upload","label":"缩略图","prop":"showimgUrl","disabled":false,"placeHolder":"","style":"width:100px;height:100px"},
{"type":"upload","label":"细节图","prop":"domainName","disabled":false,"placeHolder":"","style":""},
]
},
],
"search":[
{
"title":"基本查询",
ctls:[
{"type":"input","label":"应用名称","prop":"name","placeHolder":"应用名称","style":""},
]
},
],
"auth":{
"add":[
],
"edit":[
{"icon":"el-icon-edit","title":"弃租","type":"default","key":"giveup","isInRow":true},
],
"delete":[
],
"common":[
],
}
}
module.exports={
"list":{
columnMetaData:[
]
},
"form":[
{
"title":"基本信息",
"colnum":1,
ctls:[
{"type":"input","label":"编码","prop":"code","placeHolder":"输入组织编码","style":"",rules:[ { "required": true, "message": ' ', "trigger": 'blur' },]},
{"type":"input","label":"名称","prop":"name","placeHolder":"输入组织名称","style":"",rules:[ { "required": true, "message": ' ', "trigger": 'blur' },]},
// {"type":"switch","label":"是否岗位","targetprop":"Roles,isMain","prop":"isPosition","acText":"是","inactText":"否","placeHolder":"","style":""},
// {"type":"select","refModel":"auth.role","defaultHide":true,"isMulti":true,"label":"角色","prop":"Roles","labelField":"name","valueField":"id","style":""},
// {"type":"switch","label":"是否负责人岗","defaultHide":true,"prop":"isMain","acText":"是","inactText":"否","placeHolder":"","style":""},
{"type":"btn","label":"保存","prop":"btnLogin","placeHolder":"保存","style":{"width":"150px","margin-left":"100px","margin-top":"20px"},"face":"warning"},
]
}
],
"search":[
],
"auth":{
"add":[
{"icon":"el-icon-plus","title":"新增","type":"default","key":"new","isOnGrid":true},
{"icon":"el-icon-save","title":"保存","type":"default","key":"save","isOnForm":true},
],
"edit":[
{"icon":"el-icon-edit","title":"修改","type":"default","key":"edit","isInRow":true},
{"icon":"el-icon-edit","title":"数据授权","type":"default","key":"datapriv","isInRow":true},
],
"delete":[
{"icon":"el-icon-remove","title":"删除","type":"default","key":"delete","isInRow":true},
{"icon":"el-icon-edit","title":"停用","type":"default","key":"stopUser","isInRow":true,"boolProp":"isEnabled","falseText":"启用"},
],
"common":[
{"icon":"el-icon-cancel","title":"取消","type":"default","key":"cancel","isOnForm":true},
],
}
}
...@@ -35,6 +35,8 @@ module.exports={ ...@@ -35,6 +35,8 @@ module.exports={
], ],
"edit":[ "edit":[
{"icon":"el-icon-edit","title":"设置为当前","type":"default","key":"setcurrent","isInRow":true}, {"icon":"el-icon-edit","title":"设置为当前","type":"default","key":"setcurrent","isInRow":true},
{"icon":"el-icon-edit","title":"组织结构","type":"default","key":"comorgs","isInRow":true},
{"icon":"el-icon-edit","title":"租用列表","type":"default","key":"comapps","isInRow":true},
], ],
"delete":[ "delete":[
{"icon":"el-icon-remove","title":"删除","type":"default","key":"delete","isInRow":true}, {"icon":"el-icon-remove","title":"删除","type":"default","key":"delete","isInRow":true},
......
module.exports={
"list":{
columnMetaData:[
{"width":"100","label":"应用","prop":"app.name","isShowTip":true,"isTmpl":false},
{"width":"100","label":"昵称","prop":"nickName","isShowTip":true,"isTmpl":false},
{"width":"100","label":"登录账号","prop":"userName","isShowTip":true,"isTmpl":false},
{"width":"100","label":"角色","prop":"Roles","isShowTip":true,"isTmpl":false},
{"width":"100","label":"管理员","prop":"isAdmin","isShowTip":true,"isTmpl":false},
{"width":"80","label":"状态","prop":"isEnabled","isShowTip":true,"isTmpl":false},
{"width":"null","label":"操作","name":"null","isShowTip":false,"isTmpl":true,"isBtns":true},
]
},
"form":[
{
"title":"控制信息",
ctls:[
{"type":"switch","prop":"isAdmin","acText":"是管理员","inactText":"否","placeHolder":"请输入单次使用消耗的宝币数","style":""},
// {"type":"select","refModel":"pmproduct","isMulti":false,"label":"所属产品","prop":"pmproduct_id","labelField":"name","valueField":"id","style":""},
]
},
{
"title":"基本信息",
ctls:[
{"type":"input","label":"账号","prop":"userName","placeHolder":"登录账号","style":"",rules:[ { "required": true, "message": ' ', "trigger": 'blur' },]},
{"type":"input","label":"昵称","prop":"nickName","placeHolder":"昵称","style":"",rules:[ { "required": true, "message": ' ', "trigger": 'blur' },]},
{"type":"input","label":"电话","prop":"mobile","placeHolder":"请输入电话","style":"",rules:[ { "validator":"validatex","trigger": 'blur' },{ "required": true, "message": ' ', "trigger": 'blur' },]},
// {"type":"select","refModel":"auth.role","isMulti":true,"label":"角色","prop":"roles","labelField":"name","valueField":"id","style":""},
]
}
],
"search":[
{
"title":"基本查询",
ctls:[
{"type":"input","label":"昵称","prop":"nickName","placeHolder":"请输入昵称","style":""},
]
},
],
"auth":{
"add":[
// {"icon":"el-icon-plus","title":"新增","type":"default","key":"new","isOnGrid":true},
// {"icon":"el-icon-save","title":"保存","type":"default","key":"save","isOnForm":true},
],
"edit":[
// {"icon":"el-icon-edit","title":"修改","type":"default","key":"edit","isInRow":true},
],
"delete":[
// {"icon":"el-icon-remove","title":"删除","type":"default","key":"delete","isInRow":true},
// {"icon":"el-icon-edit","title":"停用","type":"default","key":"stopUser","isInRow":true,"boolProp":"isEnabled","falseText":"启用"},
],
"common":[
{"icon":"el-icon-cancel","title":"取消","type":"default","key":"cancel","isOnForm":true},
],
}
}
...@@ -34,6 +34,7 @@ module.exports = (db, DataTypes) => { ...@@ -34,6 +34,7 @@ module.exports = (db, DataTypes) => {
type:DataTypes.BOOLEAN, type:DataTypes.BOOLEAN,
defaultValue: false defaultValue: false
}, },
wxopenid:DataTypes.STRING,
app_id:DataTypes.INTEGER, app_id:DataTypes.INTEGER,
account_id:DataTypes.INTEGER, account_id:DataTypes.INTEGER,
isEnabled:{ isEnabled:{
......
...@@ -34,6 +34,7 @@ class OrgService extends ServiceBase{ ...@@ -34,6 +34,7 @@ class OrgService extends ServiceBase{
} }
async update(p,q,req){ async update(p,q,req){
var self=this; var self=this;
var cmkey=p.comkey;//如果是来自租户界面的修改
return this.db.transaction(async function (t) { return this.db.transaction(async function (t) {
p.isLeaf=p.isPosition; p.isLeaf=p.isPosition;
var orgupdate=await self.dao.model.findOne({where:{id:p.id},transaction:t}); var orgupdate=await self.dao.model.findOne({where:{id:p.id},transaction:t});
...@@ -48,7 +49,7 @@ class OrgService extends ServiceBase{ ...@@ -48,7 +49,7 @@ class OrgService extends ServiceBase{
await ud.save({transaction:t}); await ud.save({transaction:t});
} }
//} //}
if(p.Roles){ if(p.Roles && !cmkey){//如果不是来自租户界面的修改
var roles=await self.db.models.role.findAll({where:{id:{[self.db.Op.in]:p.Roles}}}); var roles=await self.db.models.role.findAll({where:{id:{[self.db.Op.in]:p.Roles}}});
await orgupdate.setRoles(roles,{transaction:t}); await orgupdate.setRoles(roles,{transaction:t});
//同时要给这个岗位下的user,更新角色 todo //同时要给这个岗位下的user,更新角色 todo
...@@ -110,12 +111,20 @@ class OrgService extends ServiceBase{ ...@@ -110,12 +111,20 @@ class OrgService extends ServiceBase{
} }
async create(p,q,req){ async create(p,q,req){
var self=this; var self=this;
var cmkey=p.comkey;
return this.db.transaction(async function (t) { 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}}}); var roles=await self.db.models.role.findAll({where:{id:{[self.db.Op.in]:p.Roles}}});
p.isLeaf=p.isPosition; p.isLeaf=p.isPosition;
p.app_id=req.appid; p.app_id=null;
var orgnew=await self.dao.model.create(p,{transaction:t}); var orgnew=await self.dao.model.create(p,{transaction:t});
await orgnew.setRoles(roles,{transaction:t}); if(roles && roles.length>0){
await orgnew.setRoles(roles,{transaction:t});
}
var orgparent=await self.dao.model.findOne({ var orgparent=await self.dao.model.findOne({
order:[["code","ASC"]], order:[["code","ASC"]],
where:{id:orgnew.org_id},transaction:t, where:{id:orgnew.org_id},transaction:t,
...@@ -152,7 +161,8 @@ class OrgService extends ServiceBase{ ...@@ -152,7 +161,8 @@ class OrgService extends ServiceBase{
return this.db.transaction(async function (t) { return this.db.transaction(async function (t) {
var org=await self.dao.model.findOne({ var org=await self.dao.model.findOne({
order:[["code","ASC"]], order:[["code","ASC"]],
where:{name:company.name,company_id:company.id,app_id:appid},transaction:t, //where:{name:company.name,company_id:company.id,app_id:appid},transaction:t,
where:{name:company.name,company_id:company.id},transaction:t,
include:[ 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.org,as:"orgs",order:[["code","ASC"]],include:[ {model:self.db.models.org,as:"orgs",order:[["code","ASC"]],include:[
...@@ -173,7 +183,7 @@ class OrgService extends ServiceBase{ ...@@ -173,7 +183,7 @@ class OrgService extends ServiceBase{
isMain:false, isMain:false,
orgpath:"/", orgpath:"/",
company_id:company.id, company_id:company.id,
app_id:appid app_id:null,
},{transaction:t}); },{transaction:t});
return root; return root;
} }
......
...@@ -285,6 +285,20 @@ class UserService extends ServiceBase { ...@@ -285,6 +285,20 @@ class UserService extends ServiceBase {
} }
}); });
} }
async modifyPassword(p) {
p.password = await super.getEncryptStr(p.password);
var setObj = {
password: p.password
};
var whereObj = {
where: {account_id: p.account_id}
};
await this.dao.updateByWhere(setObj, whereObj);
return system.getResultSuccess();
}
async getUserByUserNamePwdForApi(u) { async getUserByUserNamePwdForApi(u) {
//勇于从别的应用中,点击页面连接,跳转到平台应用中进行管理 //勇于从别的应用中,点击页面连接,跳转到平台应用中进行管理
u.password = await super.getEncryptStr(u.password); u.password = await super.getEncryptStr(u.password);
...@@ -309,6 +323,10 @@ class UserService extends ServiceBase { ...@@ -309,6 +323,10 @@ class UserService extends ServiceBase {
} }
return user; return user;
} }
async checkWxBind(u){
var user = await this.dao.model.findOne({where: {wxopenid: u.openid, app_id: u.app_id}});
return user;
}
async getUserByUserNamePwd(u) { async getUserByUserNamePwd(u) {
//勇于从别的应用中,点击页面连接,跳转到平台应用中进行管理 //勇于从别的应用中,点击页面连接,跳转到平台应用中进行管理
if(!u.isNavto){ if(!u.isNavto){
...@@ -337,6 +355,20 @@ class UserService extends ServiceBase { ...@@ -337,6 +355,20 @@ class UserService extends ServiceBase {
} }
return user; return user;
} }
async wxBind(u) {
var self=this;
return this.db.transaction(async function (t) {
var user = await self.dao.model.findOne({where: { mobile: u.mobile,app_id: u.app_id }});
if(!user){
return null;
}else{
user.wxopenid=u.openid;
await user.save();
return user;
}
});
}
async getUserByUserMobile(u) { async getUserByUserMobile(u) {
//勇于从别的应用中,点击页面连接,跳转到平台应用中进行管理 //勇于从别的应用中,点击页面连接,跳转到平台应用中进行管理
var user = await this.dao.model.findOne({ var user = await this.dao.model.findOne({
......
...@@ -34,6 +34,22 @@ class CompanyService extends ServiceBase { ...@@ -34,6 +34,22 @@ class CompanyService extends ServiceBase {
return rtn; return rtn;
}); });
} }
async giveupApp(comid,appid){
var self=this;
return this.db.transaction(async function (t){
//检查当前company_id下面是否有用户存在,如果已经存在就不要删除了
var c=await self.db.models.user.count({where:{owner_id:comid}});
if(c>1){
return null;
}else{
if(c==1){
await self.db.models.user.destroy({where:{owner_id:comid},force: true});
}
await self.db.models.companyapp.destroy({where:{company_id:comid,app_id:appid}});
return {};
}
});
}
async buyApp(p,cmid,user){ async buyApp(p,cmid,user){
var self=this; var self=this;
var appid=p.id; var appid=p.id;
......
# apiVersion: v1
# kind: Service
# metadata:
# name: konga
# spec:
# type: NodePort
# ports:
# - name: konga
# port: 1337
# targetPort: 1337
# protocol: TCP
# selector:
# app: konga
# ---
# apiVersion: extensions/v1beta1
# kind: Deployment
# metadata:
# name: konga
# spec:
# replicas: 1
# template:
# metadata:
# labels:
# name: konga
# app: konga
# spec:
# containers:
# - name: konga
# image: pantsel/konga:0.14.1
# env:
# - name: DB_DATABASE
# value: k8s_konga
# - name: DB_USER
# valueFrom:
# configMapKeyRef:
# name: zhichan-config
# key: DB_USER
# - name: DB_PASSWORD
# valueFrom:
# configMapKeyRef:
# name: zhichan-config
# key: DB_PWD
# - name: DB_PORT
# valueFrom:
# configMapKeyRef:
# name: zhichan-config
# key: DB_PORT
# - name: DB_ADAPTER
# value: mysql
# - name: DB_HOST
# valueFrom:
# configMapKeyRef:
# name: zhichan-config
# key: DB_HOST
# - name: NODE_ENV
# value: production
# - name: TOKEN_SECRET
# value: testtoken
# ports:
# - name: konga
# containerPort: 1337
# protocol: TCP
apiVersion: v1
kind: Service
metadata:
name: kong-dashboard
namespace: kong
spec:
type: NodePort
ports:
- name: kong-dashboard
port: 80
targetPort: 8080
protocol: TCP
selector:
app: dashboard
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: dashboard
namespace: kong
spec:
template:
metadata:
labels:
name: dashboard
app: dashboard
spec:
containers:
- name: kong-dashboard
args:
- start
- --kong-url http://kong-ingress-controller:8001
- --basic-auth admin=admin
image: pgbi/kong-dashboard:latest
ports:
- name: http
containerPort: 8080
protocol: TCP
apiVersion: v1
kind: Service
metadata:
name: kong-admin
namespace: kong
spec:
ports:
- name: kongadmin
port: 8001
protocol: TCP
targetPort: 8001
selector:
app: ingress-kong
curl -v -H "Host: webshell.com" 123.57.217.203:1880
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
deleteMethod="delete" deleteMethod="delete"
initMethod="initNewInstance" initMethod="initNewInstance"
isDataAuto="true" isDataAuto="true"
isLazy="true"
:headStyle="headStyle" :headStyle="headStyle"
:colFormatter="onColFormater" :colFormatter="onColFormater"
:isSingleSelect="isSingleSelect" :isSingleSelect="isSingleSelect"
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
return callback(); return callback();
}; };
return { return {
selCompanyid:'',
bizCode:'', bizCode:'',
currow:null, currow:null,
adminExist:false, adminExist:false,
...@@ -46,14 +47,21 @@ ...@@ -46,14 +47,21 @@
} }
}, },
mounted:function(){ mounted:function(){
var cmpid=this.$router.history.current.query.compid;
this.selCompanyid=cmpid;
this.$refs.cgrid.linkInInitQuery("companykey",cmpid);
}, },
created:function(){ created:function(){
if(this.codePath.indexOf("myapps")>=0){ if(this.codePath.indexOf("myapps")>=0){
this.bizCode="pmgmyapps"; this.bizCode="pmgmyapps";
}else{ }
if(this.codePath.indexOf("allapps")>=0){
this.bizCode="allapps"; this.bizCode="allapps";
} }
if(this.codePath.indexOf("comapps")>=0){
this.bizCode="comapps";
}
}, },
methods:{ methods:{
async fetchvcode(){ async fetchvcode(){
...@@ -149,6 +157,18 @@ ...@@ -149,6 +157,18 @@
path:"/appconfig" path:"/appconfig"
}); });
} }
if(key=="giveup"){
var d= await this.$root.postReq("/web/common/companyCtl/giveupApp", {compid: this.selCompanyid,appid:row.id});
if(d.status==0){
this.$refs.cgrid.linkInInitQuery("company_id",this.selCompanyid);
}else{
this.$message({
type: 'warning',
message: '应用已经产生数据,不能解除应用'
});
}
}
this.currow=row; this.currow=row;
} }
......
<gsb-pagecard class="organization">
<div slot="content">
<gsb-tree
ref="orgtree"
@initheight="initheight"
@initdata="initdata"
node_title="组织信息"
bizCode="comorgs"
@loadforminfo="loadforminfo"
:fetchNodeData="fetchtreedata"
children_name="orgs"
label_name="name"
leaf_name="isLeaf"
@remove="remove"
@onsel="onsel"
>
<el-tag>当前选择:{{currentPath?currentPath:"/"}}</el-tag>
<gsb-grid2
ref="userGrid"
bizCode="comusers"
spaceHeight="100"
groupName="auth"
modelName="user"
listMethod="findAndCountAll"
deleteMethod="delete"
initMethod="initNewInstance"
isDataAuto="true"
:headStyle="headStyle"
:colFormatter="onColFormater"
:isSingleSelect="isSingleSelect"
@rowclick="onRowClick"
:validateformmethod="validateformmethod"
:beforesave="beforesave">
</gsb-grid2>
<gsb-form ref="orgform" @btnclick="saveclick" style="width:500px" @onswitchchange="switchchange" slot="treeform" :metaData="formMetaData"></gsb-form>
</gsb-tree>
<el-dialog
title="岗位变更"
:visible.sync="positonChange"
width="350px"
center>
<gsb-select cssStyle="width:300px" refModel="auth.org" modelName="org" v-model="orgidchageto" labelField="orgpath" :refwhere2="refwhereorg" valueField="id"></gsb-select>
<span slot="footer" class="dialog-footer">
<el-button @click="positonChange = false">取 消</el-button>
<el-button type="primary" @click="changeok">确 定</el-button>
</span>
</el-dialog>
</div>
</gsb-pagecard>
\ No newline at end of file
{
template:'${tmpl}',
data:function(){
return {
multipleSelection: [],
isSingleSelect:false,
ldms:[],
orgs:[],
dialogFormVisible:false,
formMetaData:[],
currentPath:null,
positonChange:false,
orgidchageto:null,
refwhereorg:{isPosition:true},
crow:null,
selCompanyKey:null,
}
},
mounted:function(){
$("#treelist").css("min-height",(this.$root.outheight-60)+"px");
$("#empdiv").css("min-height",(this.$root.outheight-60)+"px");
},
created:function(){
var cmpid=this.$router.history.current.query.compid;
this.selCompanyKey=cmpid;
},
methods:{
beforesave(model){
var currentData=this.$refs.orgtree.currentData;
console.log(JSON.stringify(currentData));
if(!currentData || !currentData.isPosition){
this.$alert("增加人员前,请先选择岗位节点","提示");
return false;
}else{
if(model){
model.org_id=currentData.id;
}
return true;
}
},
async saveclick(fm,prop){
var self=this;
var fm=this.$refs.orgform.getFormModel();
this.$refs.orgform.overBtnLoading(prop);
var currentData=self.$refs.orgtree.currentData;
var currentNode=self.$refs.orgtree.currentNode;
var parentdata=currentNode.parent.data;
this.$refs.orgform.validate(async function(v){
if(v){
if(self.$refs.orgtree.isEdit){
if(currentData.code=="root"){
fm.orgpath=currentData.orgpath+fm.name;
}else{
fm.orgpath=parentdata.orgpath+"/"+fm.name;
fm.org_id=parentdata.id;
}
fm.comkey=self.selCompanyKey;
var porgs=await self.$root.postReq("/web/auth/orgCtl/update",fm);
if(porgs.status==0 && porgs.data){
self.formatroles(porgs.data);
self.$refs.orgtree.updateKeyChildren(parentdata.id,porgs.data);
self.$refs.orgtree.hidedlg();
}
}else{
if(currentData.code.indexOf("root")>=0){
fm.orgpath=currentData.orgpath+fm.name;
}else{
fm.orgpath=currentData.orgpath+"/"+fm.name;
}
fm.org_id=currentData.id;
fm.comkey=self.selCompanyKey;
var porgs=await self.$root.postReq("/web/auth/orgCtl/create",fm);
if(porgs.status==0 && porgs.data){
self.formatroles(porgs.data);
self.$refs.orgtree.updateKeyChildren(currentData.id,porgs.data);
self.$refs.orgtree.hidedlg();
}else{
alert("保存失败");
}
}
}
});
},
async remove(node,data,cbk){
var orgid=data.id;
var currentNode=node;
var parentdata=currentNode.parent.data;
/*按照id去删除组织*/
if(data.orgs && data.orgs.length>0){
this.$alert("不能删除含有字元素的节点", '提示', {
confirmButtonText: '确定',
callback: action => {
}
});
return;
}
var rmdata=await this.$root.postReq("/web/auth/orgCtl/delete",{id:orgid});
if(rmdata.status==0 && rmdata.data){
this.formatroles(rmdata.data);
this.$refs.orgtree.updateKeyChildren(parentdata.id,rmdata.data);
this.$refs.orgtree.hidedlg();
}else{
alert("删除失败");
}
},
formatroles(orgs){
for(var org of orgs){
if(org.roles && org.roles.length>0){
org["Roles"]=[];
org.roles.forEach((role)=>{
org["Roles"].push(role.id);
});
}
if(org.orgs && org.orgs.length>0){
this.formatroles(org.orgs);
}else{
continue;
}
}
},
async fetchtreedata(node, resolve,expandkeys){
if (node.level === 0) {
var orgroot=await this.$root.postReq("/web/auth/orgCtl/initOrgs",{comkey:this.selCompanyKey});
this.formatroles([orgroot.data]);
expandkeys.push(orgroot.data.id);
this.$refs.userGrid.linkInInitQuery("opath","/");
return resolve([orgroot.data]);
}else{
console.log(node.level,node.id);
console.log("dddddddddddddddddd");
if(node.data.orgs && node.data.orgs.length){
this.formatroles(node.data.orgs);
console.log(JSON.stringify(node.data.orgs));
resolve(node.data.orgs);
}else{
var idorg=await this.$root.postReq("/web/auth/orgCtl/findOrgById",{id:node.data.id});
if(idorg.status==0 && idorg.data){
this.formatroles(idorg.data);
console.log(JSON.stringify(idorg.data));
return resolve(idorg.data);
}else{
return resolve([]);
}
}
return
}
},
async switchchange(srcprop,toprop,fm,ctlvisable){
/*当前节点是否有子节点,如果有提示不能打开,设置为岗位*/
var currentData=this.$refs.orgtree.currentData;
var isedit=this.$refs.orgtree.isEdit;
if(srcprop=="isPosition"){
if(isedit && fm["isPosition"] && currentData.orgs && currentData.orgs.length>0){
this.$alert("具有子部门的节点不能设置为岗位","提示");
setTimeout(()=>{
fm.isPosition=false;
fm.isMain=false;
},500);
return false;
}
var toprops=toprop.split(",");
if(fm[srcprop]){
toprops.forEach((p)=>{
ctlvisable[p]=true;
});
}else{
toprops.forEach((p)=>{
ctlvisable[p]=false;
});
}
}else{
var ismaindata=await this.$root.postReq("/web/auth/orgCtl/checkMainPosition",{org_id:currentData.id});
if(ismaindata.status<0){
this.$alert("当前节点下已经设置了负责人岗位,不能重复设置","提示");
setTimeout(()=>{
fm.isMain=false;
},500);
}else{
setTimeout(()=>{
fm.isMain=true;
},500);
}
}
},
onsel(node,data){
this.$refs.userGrid.linkInInitQuery("opath",data.orgpath);
this.currentPath=data.orgpath;
this.$refs.orgtree.isEdit=false;
},
loadforminfo(forminfo){
console.log("forminfoforminfoforminfoforminfo");
this.formMetaData=forminfo;
var currentData=this.$refs.orgtree.currentData;
this.currentPath=currentData.orgpath;
setTimeout(()=>{
if(!this.$refs.orgtree.isEdit){
var fm=this.$refs.orgform.getFormModel();
fm.id="";
fm.code="";
fm.name="";
fm.isPosition=false;
fm.isMain=false;
fm.Roles=[];
this.$refs.orgform.ctlVisable["Roles"]=false;
this.$refs.orgform.ctlVisable["isMain"]=false;
}else{
this.$refs.orgform.setInitData(currentData);
this.$refs.orgform.ctlVisable["Roles"]=currentData.isPosition;
this.$refs.orgform.ctlVisable["isMain"]=currentData.isPosition;
}
},10);
},
initheight(lh,rh){
$(lh).css("min-height",(this.$root.outheight-60)+"px");
},
async initdata(orgs){
orgs.push();
this.orgs=orgs;
},
validmethod:function (rule,value,callback) {
console.log("code validdate");
var self=this;
var fm=this.currentFrm.getFormModel();
return callback("ddddd");
},
validateformmethod(rule,value,cbk){
if(rule.field=="mobile"){
if(/^1[23456789]\d{9}$/.test(value) == false){
return cbk("请检查号码格式!");
}
}
return cbk();
},
onColFormater(row,column,cellvalue,index){
if(column.property=="isEnabled"){
if(row["isEnabled"]){
return "正常";
}else{
return "停用";
}
}
if(column.property=="isAdmin"){
if(row["isAdmin"]){
return "是";
}else{
return "否";
}
}
if(column.property=="Roles"){
var tmp=[];
var ids=[];
row["Roles"].forEach(s=>{
tmp.push(s.name);
ids.push(s.id);
});
row.roles=ids;
return tmp.join(",");
}
return cellvalue;
},
handleSelectionChange:function(val){
this.multipleSelection = val;
console.log(val);
},
async changeok(){
if(this.orgidchageto){
var u=await this.$root.postReq("/web/auth/orgCtl/changePos",{orgid:this.orgidchageto,uid:this.crow.id});
if(u.status==0){
this.positonChange=false;
this.orgidchageto=null;
this.crow=null;
this.$refs.userGrid.linkInInitQuery("opath",this.currentPath);
}
}
},
onRowClick(row,key,e){
console.log("................////////////////////////////");
if(key=="stopUser"){
this.modelName="user";
var url="/web/auth/userCtl/update";
row.isEnabled=!row.isEnabled;
this.$root.postReq(url,row).then(rd=>{
console.log("................////////////////////////////");
if(rd.status==0){
this.$refs.userGrid.fetchData();
}
});
}
if(key=="datapriv"){
this.$router.push({path:"/datapriv",query:{
uid:row.id,
nickname:row.nickName,
}});
}
if(key=="positionChange"){
this.crow=row;
this.positonChange=true;
}
}
},
computed: Vuex.mapState({
headStyle:function(){
return {"background-color":"white"};
}
}),
vname:"gsb-comorgs"
}
...@@ -41,6 +41,13 @@ ...@@ -41,6 +41,13 @@
} }
} }
if(key=="comapps"){
this.$router.push({path:"/comapps",query:{"compid":row.companykey}});
}
if(key=="comorgs"){
this.$router.push({path:"/comorgs",query:{"compid":row.companykey}});
}
}, },
onColFormater(row,column,cellvalue,index){ onColFormater(row,column,cellvalue,index){
if(column.property=="isSystem"){ if(column.property=="isSystem"){
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
<div v-for="(item,key) in myapps" :key="key" class="app-child" :style="bgimg(item)" @click="goapplogin(item)" > <div v-for="(item,key) in myapps" :key="key" class="app-child" :style="bgimg(item)" @click="goapplogin(item)" >
<img :src="item.logoUrl" alt=""> <img :src="item.logoUrl" alt="">
<div>{{item.name}}</div> <div>{{item.name}}</div>
<span @click.stop="systemsetting(item)" v-if="currentUser && currentUser.roles.indexOf(\'common\')>=0" style="position: absolute;left:5px;top: 10px;font-size:20px;color:red;padding: 5px;cursor: pointer;"><i class="el-icon-setting"></i></span> <span @click.stop="systemsetting(item)" v-if="currentUser && currentUser.roles.indexOf(\'common\')>=0" style="position: absolute;left:5px;top: 10px;font-size:20px;color:#fff;padding: 5px;cursor: pointer;"><i class="el-icon-setting"></i></span>
</div> </div>
</div> </div>
</div> </div>
\ No newline at end of file
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
"colnum":1, "colnum":1,
ctls:[ ctls:[
{"type":"input","label":"账号","prop":"userName","placeHolder":"请输入登录账号","style":"width:230px",rules:[ { "required": true, "message": ' ', "trigger": 'blur' },,]}, {"type":"input","label":"账号","prop":"userName","placeHolder":"请输入登录账号","style":"width:230px",rules:[ { "required": true, "message": ' ', "trigger": 'blur' },,]},
{"type":"input","label":"密码","prop":"password","placeHolder":"请输入登录密码","style":"width:230px",rules:[ { "required": true, "message": ' ', "trigger": 'blur' },]}, {"type":"password","label":"密码","prop":"password","placeHolder":"请输入登录密码","style":"width:230px",rules:[ { "required": true, "message": ' ', "trigger": 'blur' },]},
{"type":"btn","label":"开始登录","prop":"btnLogin","placeHolder":"请输入手机号","style":{"width":"150px","margin-left":"45px","margin-top":"20px"},"face":"warning"}, {"type":"btn","label":"开始登录","prop":"btnLogin","placeHolder":"请输入手机号","style":{"width":"150px","margin-left":"45px","margin-top":"20px"},"face":"warning"},
] ]
}, },
......
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="keywords" content="知产建站,<%=company.sitename%>,商标建站,专利建站,软著建站,财税建站">
<meta name="baidu-site-verification" content="lATAxZAm8y" />
<meta name="viewport" content="width=device-width, initial-scale=0.8, maximum-scale=0.8, user-scalable=1">
<title id="idtitle"><%=company.sitename%></title>
<link rel="stylesheet" href="/css/loaders.css">
<link rel="stylesheet" href="/css/ele/index_2.5.4.css">
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/pagecom.css">
<link rel="stylesheet" href="/css/igirl.css">
<link rel="stylesheet" href="/css/fontawesome/css/font-awesome.min.css">
<link rel="stylesheet" href="/css/fontawesome/css/toolicon-style.css">
<link rel="stylesheet" href="/css/fontface-timely.css">
<link rel="stylesheet" href="/css/cropper.css">
<!-- <script src="/js/vue/browser.min.js"></script> -->
<!-- <script src="/js/vue/polyfill.min.js"></script> -->
<script src="/js/vue/vue.min_2.6.10.js"></script>
<script src="/js/vue/vue-router.min.js"></script>
<script src="/js/vue/vuex.min.js"></script>
<script src="/js/ele/index_2.5.4.js"></script>
<script src="/js/vue/axios.min.js"></script>
<script>
//缓存当前域名对应的公司信息,公司、页脚、银行账号---全局变量
var companyinfo = JSON.parse(decodeURIComponent('<%=companyinfo%>'));
//缓存当前的基础组件列表
var basecomp = JSON.parse(unescape('<%=basecom%>'));
// 缓存当前的路由路径,
var routePath = JSON.parse(unescape('<%=routePath%>'));
//缓存当前的产品
var productLst = JSON.parse(unescape('<%=productLst%>'));
//缓存当前的产品
var global_rsconfig = JSON.parse(unescape('<%=rsconfig%>'));
//缓存当前的轮播
var loopplays = JSON.parse(unescape('<%=loopplays%>'));
// footerinfo:footerinfo,
// bankAccount:bankAccount}
</script>
<style>
body {
padding: 0px;
margin: 0px;
background: white;
}
.loading {
position: fixed;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
background-color: #080534;
z-index: 9999;
}
.loading-img {
box-sizing: border-box;
display: flex;
flex: 0 1 auto;
flex-direction: column;
flex-grow: 1;
flex-shrink: 0;
flex-basis: 25%;
max-width: 25%;
height: 200px;
align-items: center;
justify-content: center;
perspective: 500px;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
}
.app-main {
position: absolute;
width: 100%;
height: 100%;
margin: 0px;
padding: 0px;
overflow-y: auto;
overflow-x: hidden;
background-color: #ffffff
}
.app-header {
height: 60px;
width: 100%;
left: 0px;
top: 0px;
}
.headtransparent {
background-color: transparent !important;
position: absolute;
left: 0px;
top: 0px;
z-index: 9999;
}
.menutransparent {
/* position: absolute; */
/* z-index:9999 */
position: relative;
/* z-index:9000; */
}
.app-stage {
position: relative;
width: 100%;
}
.app-stage .el-tabs {
width: 100%;
height: 100%;
}
.app-footer {
background-color: #31373b;
width: 100%;
color: #eee;
font-size: 12px;
height: 310px;
padding-top: 40px;
border-bottom: none;
box-sizing: border-box;
overflow: hidden;
}
.app-footer1 {
width: 100%;
color: #eee;
font-size: 12px;
border-bottom: none;
box-sizing: border-box;
overflow: hidden;
visibility: visible;
height: 46px;
background: rgb(35, 41, 64);
margin-top: 60px;
display: block;
}
.app-footer-left {
float: left;
width: 35%;
}
.app-footer-right {
float: right;
width: 56%;
display: flex;
}
.app-footer-right>.app-footer-right-item {
flex: 2;
}
.app-footer-right-item>.itemtext {
color: #f5f5f5;
font-size: 16px;
line-height: 48px;
font-family: CTCuHeiSJ;
font-weight: 400;
}
.app-footer-bottom {
margin-top: 20px;
width: 100%;
text-align: center;
font-size: 12px;
font-family: MicrosoftYaHei;
font-weight: 400;
color: rgba(200, 200, 200, 1);
line-height: 48px;
letter-spacing: 1px;
}
.app-footer-bottom1 {
width: 100%;
text-align: center;
font-size: 12px;
font-family: MicrosoftYaHei;
font-weight: 400;
color: rgba(200, 200, 200, 1);
line-height: 48px;
letter-spacing: 1px;
}
.app-footer-shu {
float: left;
width: 1px;
height: 164px;
background: rgba(146, 146, 146, 1);
}
.app-header .el-button {
color: white
}
#pane-home {
padding: 0px;
margin: -18px;
}
.el-tabs--border-card>.el-tabs__content {
/* height: 100%; */
}
/* tab的自定义定位类 */
.spechorizotal {}
.home-search-pos {
width: 820px;
height: 74px;
margin: 0 auto;
border-radius: 8px;
background: hsla(0, 0%, 100%, .2);
}
.home-search-pos .el-input__inner {
line-height: 54px;
height: 54px;
}
.home-search-pos .el-input-group__append {
background: #108EE9;
border: 1px solid #108EE9;
color: white;
}
.el-tabs--border-card>.el-tabs__header {
border-bottom: none;
}
.el-tabs--border-card {
border: none;
box-shadow: none !important;
}
.el-tab-pane {
height: 100%;
border-top: none;
}
.el-tabs__content {
padding: 0px;
/* background-color: #EFF0F7; */
}
.el-loading-mask {
background-color: transparent;
}
.el-card__header {
padding: 0px;
}
.pcpagetitle {
font-size: 23px;
font-style: weight;
padding-top: 30px;
text-align: center
}
.productList:hover {
-webkit-box-shadow: 0 0 10px rgba(0, 204, 92, 0.5);
-moz-box-shadow: 0 0 10px rgba(0, 204, 204, .5);
box-shadow: 0 0 10px rgba(0, 204, 204, .5);
}
#leftmenudiv .spechorizotal .nav_color {
color: black;
}
.roleview-title {
color: #666;
}
.bytmmonittab {}
.bycdirectsearch {}
#header_row {
border-bottom: none;
padding: 0px;
}
.braMenu {
z-index: 2;
transition: all .28s ease-out;
/* margin-top:0px;
border:none;
height:100%;
background-color: #F9F9F9 */
}
.braMenuContent {
width: 180px;
height: 100%;
transition: all .28s ease-out;
border-radius: 0;
background-color: #535680;
/* margin:15px;margin-top:2px;width: 200px */
}
.qiantai {
width: 1200px;
margin: 0 auto;
background-color: transparent;
}
.houtai {
background-color: #383A52;
}
.selectsubsystem {
width: 180px;
height: 79px;
color: #fff;
padding: 20px;
box-sizing: border-box;
background: rgba(83, 86, 128, 1);
cursor: pointer;
}
.selectsubsystem>span {
display: inline-block;
width: 100%;
height: 100%;
line-height: 46px;
background: #313356;
text-align: center;
font-size: 16px;
color: #dbd8be;
}
.leftmenu .el-submenu__title:hover {
background-color: #37AAFF !important;
color: #fff !important;
}
.leftmenu .el-menu-item:hover {
background-color: #37AAFF !important;
color: #fff !important;
}
.el-popper-hover {
background: #333333;
border: none;
width: 167px;
height: 167px;
display: flex;
}
/* xinban header */
#app-header {
width: 100%;
height: 46px;
line-height: 46px;
background: rgba(15, 13, 35, 1);
font-size: 14px;
font-family: Microsoft YaHei;
font-weight: 400;
color: rgba(255, 255, 255, 1);
}
.header-main {
width: 1200px;
height: 100%;
margin: 0 auto;
}
.header-main-houtai {
width: 100%;
height: 100%;
padding: 0px 15px;
box-sizing: border-box;
}
.header-main-title {
float: left;
cursor: pointer;
}
.header-main-title1 {
float: left;
width: 68px;
cursor: pointer;
background: rgba(26, 45, 78, 1);
text-align: center;
}
.header-main-right {
float: right;
position: relative;
}
.header-main-right::before {
content: '';
position: absolute;
left: 0px;
top: 13px;
width: 1px;
height: 12px;
background: rgba(221, 221, 221, 1);
opacity: 0.25;
}
.header-main-right>span {
padding-right: 15px;
cursor: pointer;
}
.header-main-right>img {
width: 18px;
height: 18px;
vertical-align: middle;
margin-bottom: 2px;
margin-left: 15px;
}
.header-main-tool {
float: right;
cursor: pointer;
color: #fff;
}
.header-main-tool>span {
padding: 0px 5px;
}
.header-main-tool>i {
color: #fff;
margin-right: 10px;
}
.el-popover {
left: 396px !important;
background: rgba(26, 45, 78, 1) !important;
border: 1px solid #1A2D4E !important;
}
.el-popper[x-placement^=bottom] .popper__arrow::after {
border: none !important;
border-bottom-color: rgba(26, 45, 78, 1) !important;
}
.el-popper[x-placement^=bottom] .popper__arrow {
border: none !important;
border-bottom-color: rgba(26, 45, 78, 1) !important;
}
.popover-title {
font-size: 12px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: rgba(255, 255, 255, 1);
}
.popover-list {
margin-top: 20px;
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(175, 190, 215, 1);
line-height: 17px;
}
.popover-list>div {
display: inline-block;
border-left: 3px solid #128EE9;
padding-left: 10px;
line-height: 12px;
margin-right: 17px;
}
.popover-list>span {
cursor: pointer;
}
.popover-list>span:hover {
color: #128EE9;
}
</style>
</head>
<body ondragstart="return false">
<div id="app" v-loading="loading" class="app-main" style="visibility: hidden" @mouseover="hidePanel($event)">
<div id="app-header">
<div :class="isfront ? 'header-main' : 'header-main-houtai'">
<div class="header-main-title" @click="backhome">智能化知识产权服务平台</div>
<div class="header-main-title1" style="margin-left:11px;"
v-if="companyinfo.company.siteTheme == 'policy'">
<el-popover placement="bottom-start" width="511" trigger="hover">
<div>
<div class="popover-title">全部省份</div>
<div class="popover-list" v-for="(item,key) in areaArr"
:key="key">
<div>{{item.name}}</div>
<span v-for="(list,index) in item.lists"
@click="areachoice(list)">{{list}}</span>
</div>
<div style="height:10px;"></div>
</div>
<span slot="reference"><i class="el-icon-location-outline"
style="margin-right:8px;"></i>{{areaName}}</span>
</el-popover>
</div>
<div v-if="!currentUser" class="header-main-login header-main-right">
<span @click="onselect('login')">登录</span>
<span @click="onselect('register')">免费注册</span>
</div>
<div v-else class="header-main-right">
<el-dropdown style="float: right;" @command="backstageHandleCommand">
<div class="header-main-right" style="color: #fff;">
<img src="/imgs/normal/backstage.png" alt="">
<span>{{ currentUser.nickName }}</span><i
class="el-icon-caret-bottom"></i></div>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="管理后台">管理后台</el-dropdown-item>
<el-dropdown-item command="退出">退出</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<!-- <span @click="goadmin">管理后台</span>
<span @click="onselect('exit')">退出</span> -->
</div>
<div class="header-main-right"><img src="/imgs/normal/icon-public.png" alt="">
<span>公众号</span></div>
<div class="header-main-right"><img src="/imgs/normal/icon-phone.png" alt="">
<span>APP</span></div>
<div style="float: left;margin-left: 135px;"
v-if="companyinfo.company.siteTheme == 'policy'">
<el-dropdown style="float: left;" @command="handleCommand">
<div class="header-main-tool" @click="onselect('policybigdata')"><span>政策大数据</span></div>
</el-dropdown>
<el-dropdown style="float: left;" @command="handleCommand">
<div class="header-main-tool" @click="onselect('declare')"><span>政策资讯</span><i
class="el-icon-caret-bottom"></i></div>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-for="item in titles" :command="item.title">{{item.name}}</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
<div style="float: right;" v-else>
<el-dropdown style="float: right;" @command="handleCommand">
<div class="header-main-tool"><span>智能工具</span><i
class="el-icon-caret-bottom"></i></div>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-for="item in rsData" :command="item"
v-if="mnufunc(item.codePath)">{{item.label}}
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</div>
</div>
<!-- 第一版 -->
<div class="popups clearfix">
<div class="popups-zhanwei"></div>
<div class="popups-kailong">
<span></span>
</div>
<div class="popups-left">
<div v-for="(item,key) in popupsData"
:class="pDataKey == key ? 'popups-left-item-cla' : 'popups-left-item'"
@mouseenter="popupsList(item,key)">
<span>
{{item.itemTypeName}}
</span>
</div>
</div>
<div class="popups-right">
<div v-for="list in popupsDataList" class="popups-right-item">
<div class="popups-right-title">{{list.serviceSmallClassTypeName}}</div>
<div class="clearfix">
<div class="popups-right-it" v-for="it in list.productList"
@click="goServiceDetails(it)">
{{it.name}}
</div>
</div>
</div>
</div>
</div>
<!-- 第二版 -->
<!-- <div class="popups-two" v-if="isdefault && isfront && popupsType">
<div class="popups-two-main" @mouseleave="popupsLeave">
<div class="popups-two-main-left">
<div v-for="(item,key) in popupsData" v-if="key < 6" :style="popupslineHeight" :class="pTowDataKey == key ? 'popups-two-left-item-cla' : 'popups-two-left-item'" @mouseenter="popupsList(item,key)" >
<span class="popups-two-left-item-span" :style="pTowDataKey == key ? 'border-bottom: none;' : ''">
{{item.itemTypeName}} <i class="el-icon-arrow-right" style="float: right;margin-top: 22px;"></i>
</span>
</div>
</div>
<div class="popups-two-right" v-if="pTowDataKey != null">
<div v-for="list in popupsDataList">
<div class="clearfix" style="padding-top: 18px;padding-bottom: 4px;border-bottom:1px solid rgba(225,225,225,1);">
<div class="popups-tow-right-title">{{list.serviceSmallClassTypeName}}<i class="el-icon-arrow-right" style="float: right;margin-top:3px;color: #1a1a1a;"></i></div>
<div class="popups-tow-right-lists">
<div class="popups-tow-right-it" v-for="it in list.productList" @click="goServiceDetails(it)">
{{it.name}}
</div>
</div>
</div>
</div>
</div>
</div>
</div> -->
<!-- 结束 -->
<div id="stage" class="app-stage" style="padding: 0px;">
<div v-if="isfront && stageType" id="#serviceemp"
style="padding-top: 3px;text-align:center;font-size: 20px;position: fixed;right:10px;bottom:160px;z-index:10001;width:60px;height:180px;">
<a :href="serviceqq" target="_blank" @mouseenter="leyuhover">
<!-- <i style="color:white;" class="el-icon-service"></i> -->
<img v-if="isleyu"
style="width:28px;height:40px;vertical-align: top;box-sizing:border-box;padding:10px 5px;background:#333333;"
src="/imgs/kefu.png" alt="">
<img v-else
style="width:28px;height:40px;vertical-align: top;box-sizing: border-box;padding:10px 5px;background:#2F95FC;"
src="/imgs/kefu.png" alt="">
</a>
<div @mouseenter="phonehover" @mouseleave="phoneleave" style="cursor:pointer">
<div style="font-size:12px;background:#333333;color:#fff;line-height:38px;width:130px;height:38px; position: absolute;right:50px;top:45px;"
v-if="showPhoneNum">
<div
style="border:4px solid rgba(0,0,0,0); border-left: 4px solid #333333;position: absolute;top:17px;right:-8px;">
</div>
电话:{{servicetel}}
</div>
<!-- <i style="color:white;" class="el-icon-phone-outline"></i> -->
<img v-if="isphone"
style="width:28px;height:40px;vertical-align: top;box-sizing:border-box;padding:10px 5px;background:#2F95FC;"
src="/imgs/dianh.png" alt="">
<img v-else
style="width:28px;height:40px;vertical-align: top;box-sizing:border-box;padding:10px 5px;background:#333333;"
src="/imgs/dianh.png" alt="">
</div>
<div @mouseenter="rwmhover" @mouseleave="rwmover" style="cursor:pointer">
<div class='el-popper-hover' style="position: absolute;right:50px;top:50px;"
v-if="showWxrm">
<div
style="border:4px solid rgba(0,0,0,0); border-left: 4px solid #333333;position: absolute;top:50px;right:-8px;">
</div>
<img style="width:100%;height:100%;background: #333333;margin: auto;"
:src="footerInfo?footerInfo.wxQrCodeUrl:''" alt="">
</div>
<img v-if="iswx" slot="reference"
style="width:28px;height:40px;vertical-align: top;box-sizing:border-box;padding:10px 5px;background:#2F95FC;"
src="/imgs/erweima.png" alt="">
<img v-else slot="reference"
style="width:28px;height:40px;vertical-align: top;box-sizing:border-box;padding:10px 5px;background:#333333;"
src="/imgs/erweima.png" alt="">
</div>
<div @mouseenter="tophover" style="cursor:pointer" @click="$('#app').scrollTop(0);">
<img v-if="istop"
style="width:28px;height:40px;vertical-align: top;box-sizing:border-box;padding:10px 5px;background:#2F95FC;"
src="/imgs/wangs.png" alt="">
<img v-else
style="width:28px;height:40px;vertical-align: top;box-sizing:border-box;padding:10px 5px;background:#333333;"
src="/imgs/wangs.png" alt="">
</div>
</div>
<div style="clear:both"></div>
<div style="min-width: 800px;height:auto;display:flex;">
<div id="leftmenudiv" class="braMenu" v-if="isShowMenu && currentUser">
<!-- <el-select style="margin-left:15px;width: 89%;margin-top:20px;margin-right:15px" placeholder="请输入功能关键字搜索"></el-select> -->
<gsb-leftmenu class="braMenuContent" bkcolor="white" ref="leftmenu"
key="leftmenu" formatprop="formatItem" @menuselect="onMenuSelect">
</gsb-leftmenu>
</div>
<div style="width:calc(100% - 180px);flex-grow:5;border:none;">
<el-tabs class="maintab" style="margin-top:0px" v-model="editableTabsValue2"
type="border-card" style="border-top:none" @tab-remove="removetab"
@tab-click="tabclick" edit closable>
<el-tab-pane v-for="(item, index) in editableTabs2" :key="item.name"
:name="item.name">
<span slot="label"><i class="el-icon-date"></i>
{{ item.title}}</span>
<transition name="slide-fade">
<div class="loading" v-if="loadingHome">
<div class="loading-img">
<div
class="loader-inner ball-pulse-rise">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
</div>
<router-view :name="item.name" :key="item.name">
</router-view>
</transition>
</el-tabs>
</div>
</div>
</div>
<!-- <div id="footer" class="app-footer" style="visibility: hidden;display: none;">
<div style="width:1200px;margin: 0 auto;overflow: hidden;">
<div class="app-footer-left">
<img :src="footerInfo?footerInfo.picUrl:''" alt="">
<div class="companyname"><%=company.name%></div>
<div class="other">地址:<%=footerinfo.address%></div>
</div>
<div class="app-footer-shu"></div>
<div class="app-footer-right">
<div class="app-footer-right-item">
<div class="itemtext">联系我们</div>
<div class="other">
客服电话:<%=footerinfo.serviceTel?footerinfo.serviceTel:"4006-798-999"%>
</div>
<div class="other">
商务合作:<%=footerinfo.cooperationTel?footerinfo.cooperationTel:"4006-798-999"%>
</div>
<div class="other"
v-if="currentCompany && currentCompany.id==1 && !currentUser"
@click="siteapply">站点申请</div>
</div>
<div class="app-footer-right-item">
<div class="itemtext">友情链接</div>
<div class="other" style="cursor:pointer"
@click="window.open('http://www.sipo.gov.cn')">国家知识产权局</div>
<div class="other" style="cursor:pointer"
@click="window.open('http://sbj.cnipa.gov.cn')">国家商标局</div>
<div class="other" style="cursor:pointer"
@click="window.open('http://www.ncac.gov.cn')">国家版权局</div>
<div class="other" style="cursor:pointer"
@click="window.open('http://www.sipo.gov.cn/xglj/201310/t20131025_870731.html')">
地方知识产权局</div>
</div>
<div class="app-footer-right-item" style="flex: 1;">
<div class="itemtext">客服二维码</div>
<img style="width: 80px" src="<%=footerinfo.wxQrCodeUrl%>" alt="">
</div>
</div> -->
<!-- <div style="float:right">
<el-row class="companyname">{{footerInfo?footerInfo.companyName:"创知厚德(北京)科技有限公司"}}</el-row>
<el-row class="other">
<el-col :span="5">客服电话:{{footerInfo?footerInfo.serviceTel:"4006-798-999"}}</el-col>
<el-col :span="5">商务合作:{{footerInfo?footerInfo.cooperationTel:"4006-798-999"}}</el-col>
</el-row>
<el-row class="other">地址:{{footerInfo?footerInfo.address:"北京市朝阳区朝来高科技产业园10号楼102号"}}</el-row>
<el-row class="other" style="margin-top:10px;">
<el-col :span="5" class="aboutus"><div @click="aboutus">关于我们</div></el-col>
<el-col :span="5" class="aboutus" v-if="currentCompany && currentCompany.id==1 && !currentUser"><div @click="siteapply">站点申请</div></el-col>
</el-row>
</div> -->
<!-- </div>
<div class="app-footer-bottom">
{{footerInfo?footerInfo.icpNum+footerInfo.icpCard:"Copyright © 2017-2018 gongsibao All Rights Reserved 版权所有:汉唐信通(北京)科技有限公司 京ICP证150505号 京ICP备14043829号-2"}}
</div>
</div> -->
<div id="footer" class="app-footer1" style="visibility: hidden;display: none;">
<div class="app-footer-bottom1">
{{footerInfo?footerInfo.icpNum+footerInfo.icpCard:"Copyright 2017-2019 gongsibao All Rights Reserved 版权所有:北京创知厚德科技有限公司 京ICP备14043829号-2京ICP证150505号"}}
</div>
</div>
</div>
<script src="/js/vue/jquery.min.js"></script>
<script src="/js/cropper/index.js"></script>
<script src="/js/vue/base64.js"></script>
<script src="/js/htmleditor/htmleditor.js"></script>
<script src="/js/htmleditor/htmleditorreg.js"></script>
<script src="/js/index.js"></script>
<script src="/js/echarts/echarts.min.js"></script>
<script src="/js/echarts/echarts-wordcloud.min.js"></script>
<script src="/js/echarts/echarts-wordcloud.js"></script>
<script>
var _hmt = _hmt || [];
(function () {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?c9f6643866bd94d26ff54175fd18d60f";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
(function () {
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
} else {
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>
</body>
</html>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment