当前位置: 首页 > news >正文

口红做网站多少钱网站建设甲方给乙方的需求方案

口红做网站多少钱,网站建设甲方给乙方的需求方案,wordpress第一个版本,百度指数特点书接上回,本文主要分享 企业内部系统集成钉钉官方OA审批流程的步骤 的第二部分。 前端代码集成钉钉免登JSAPI: 前端通过corpid 获得钉钉临时访问码code,再通过临时访问码code调用此接口返回当前用户的姓名、userid、 钉钉用户id、 系统工号、 钉钉部门…

书接上回,本文主要分享 企业内部系统集成钉钉官方OA审批流程的步骤 的第二部分。

前端代码集成钉钉免登JSAPI:

前端通过corpid 获得钉钉临时访问码code,再通过临时访问码code调用此接口返回当前用户的姓名、userid、 钉钉用户id、  系统工号、 钉钉部门id列表、 业务系统访问token 等信息,然后将 token 存储到 localStorage。

前端框架使用 react

操作 localStorage 的基础代码

export function getToken(){return localStorage.getItem("token") as string
}export function setToken(token:string){localStorage.setItem("token",token)
}export function removeToken(){localStorage.removeItem("token")
}

判断字段是否包含指定的字符串 

export function containsStr(str:string, target:string): boolean{str = str === null ? 'str' : str;target = target === null ? 'target' : target;if(str.indexOf(target) !== -1){// 字段str包含指定的字符串return true;} else {// 字段str不包含指定的字符串return false;}
}

钉钉免登录插件

export class checkLoginPlugin extends Middleware {async handler(ctx: MiddlewareContext<{}>, next: () => Promise<any>): Promise<void> {// 判断是否获取到了tokenvar token = getToken()const base_url = import.meta.env.BASE_URL;localStorage.setItem("base_url", base_url);if (token) {// token有值axios({method: 'get',baseURL: '/sale',url: '/api/checkToken?token=' + token,headers: {'Content-Type': 'application/json',},}).then((res: AxiosResponse) => {if (res.data.code == 200) {// token有效,打开应用localStorage.setItem("dingUserId", res.data.dingUserId);localStorage.setItem("dingDeptIds", res.data.dingDeptId);// 检查当前登录人的角色中是否包含 MANAGER 可以辅助实现数据权限校验var role_no = localStorage.getItem("role_no") as string;if (containsStr(role_no, "MANAGER")) {localStorage.setItem("manager", "true");} else {localStorage.setItem("manager", "false");}next()} else {               // token无效,钉钉重新获取token,不是钉钉,直接提示未登录if (dd.env.platform !== "notInDingTalk") {// 钉钉打开应用,重新获取code及tokenconst corpid = import.meta.env.CORPIDdd.ready(() => {dd.runtime.permission.requestAuthCode({corpId: corpid,}).then((result) => {const { code } = result;axios({method: 'get',baseURL: '/sale',url: '/dd/login?code=' + code,headers: {'Content-Type': 'application/json'},}).then((res: AxiosResponse) => {localStorage.setItem("token", res.data.data.token);localStorage.setItem("dingUserId", res.data.data.dingUserId);localStorage.setItem("dingDeptIds", res.data.data.dingDeptIds);localStorage.setItem("user_info", res.data.data.user_info);localStorage.setItem("userno", res.data.data.user_no);localStorage.setItem("user_id", res.data.data.user_id);// 检查当前登录人的角列表是否包含 MANAGER 可以辅助实现数据权限校验var role_no = localStorage.getItem("role_no") as string;if (containsStr(role_no, "MANAGER")) {localStorage.setItem("manager", "true");} else {localStorage.setItem("manager", "false");}token = res.data.data.token;// 可以继续访问应用资源next()return res.data.data}).catch(err => {router.navigate("/check")  //登录页return Promise.reject(err)})},).catch(err => {// 出现异常,跳转到登录页router.navigate("/checkLogin")});});} else {// 从钉钉外打开应用,跳转到登录页router.navigate("/checkLogin")}}}).catch(err => {// 出现异常,跳转到登录页router.navigate("/checkLogin")return Promise.reject(err)})} else {// token没有值if (dd.env.platform !== "notInDingTalk") {// 钉钉打开应用,重新获取钉钉临时code及tokenconst corpid = import.meta.env.CORPIDdd.ready(() => {dd.runtime.permission.requestAuthCode({corpId: corpid,}).then((result) => {const { code } = result;axios({method: 'get',baseURL: '/sale',url: '/dd/login?code=' + code,headers: {'Content-Type': 'application/json'},}).then((res: AxiosResponse) => {localStorage.setItem("usertoken", res.data.data.token);localStorage.setItem("dingtalkUserId", res.data.data.dingtalkUserId);localStorage.setItem("dingtalkDeptIds", res.data.data.dingtalkDeptIds);localStorage.setItem("user_info", res.data.data.user_info);localStorage.setItem("userno", res.data.data.user_no);localStorage.setItem("user_id", res.data.data.user_id);// 检查当前登录人的角色中是否包含 MANAGER 可以辅助实现数据权限校验var role_no = localStorage.getItem("role_no") as string;if (containsStr(role_no, "MANAGER")) {localStorage.setItem("manager", "true");} else {localStorage.setItem("manager", "false");}token = res.data.data.token;next()return res.data.data}).catch(err => {// 出现异常,跳转到登录页router.navigate("/checkLogin")return Promise.reject(err)})},).catch(err => {// 出现异常,跳转到登录页router.navigate("/checkLogin")});});} else {    // 从钉钉外打开应用,跳转到登录页router.navigate("/checkLogin")}}}}

http://www.yayakq.cn/news/438481/

相关文章:

  • 网站的空间什么意思微营销实战技巧全集
  • fms 视频网站建设自适应网站ui做几套
  • 大型网站开发经典框架全网关键词优化公司哪家好
  • 南宁手机做网站公司新手做网站服务器用什么
  • 网站轮播图怎么做烟台正规网站建设
  • 利用模板如何制作网站农业推广项目
  • 义乌互联网公司微信搜索seo优化
  • 烟台网站建设科技公司专业网站设计力荐亿企邦
  • 济宁网站建设 中企动力临沂手机网站翻页底时自动链接
  • 怎么做招投标网站线上推广策划方案
  • o2o免费网站建设山东住房和建设庭网站
  • 吉林省建设监理检测网站自己做网站出口
  • 提供服务的网站做我韩国连续剧网站
  • 网站开发商业机密做个网站需要多钱
  • 马鞍山网站建设电话苏州知名网站建设定制
  • 广州好的网站设计公司网站建设 海豚弯
  • 动画制作精灵南宁seo平台费用
  • 武威建设厅网站公司官网建设哪家好
  • 新郑建设局网站营销型网站建设公司哪家好哪个好
  • 设计 网站万万州州微微网站网站建建设设
  • 长沙h5网站建设律师个人网站源码
  • 邵武网站建设江都住房和建设局网站
  • 网站开发与管理专业炫酷的移动端网站设计
  • 做国产免费视频网站八戒影视
  • 有一个网站自己做链接获取朋友位置北京工装设计公司排名
  • 哈尔滨制作网站9377游戏盒子
  • 傻瓜式一键建站系统wordpress模板下载失败
  • 如何自己弄网站Pdf书籍网站建设
  • 做字体特效的网站网站 建设 外包
  • 西部网站域名出售网站做视频播放占用cpu吗