可能写的有些乱,大家包含
后端给了我一个代理啥的,重定向路由。
请添加图片描述
请添加图片描述
根据自己电脑打开 windows_64文件,cmd运行 .\ding.exe -config=.\ding.cfg -subdomain=ip(根据后台给的来) 端口(80,根据自己项目启动的端口来)
运行成功后是这样的
在这里插入图片描述
这里启动好以后就需要去前端配置了

由于pc和手机 登录返回值不一样
点击专有钉钉
浏览器头部是这样的
在这里插入图片描述
拿到auth_code 后用于请求接口
pc接口返回值:
在这里插入图片描述

手机端返回值
在这里插入图片描述
这里可以看到手机返回值和pc返回值不一样,手机上是code。
拿到code后,请求接口
手机接口返回值:
在这里插入图片描述

这一步是在路由里截取url参数的
先看一下项目结构
在这里插入图片描述
再看一下处理代码
分为pc端处理和手机端处理
pc端处理:
在这里插入图片描述
手机处理:
在这里插入图片描述

方法代码:

// 导航守卫,渲染动态路由
router.beforeEach(async (to, from, next) => {
	console.log(to);
	console.log(from);
	var str = JSON.stringify(to)
	if (to.path == "/") {
		let codeObj;
		let browerType = getBrowerType()
		if (browerType == 'pc') {
			const { auth_code } = to.query;
			if (auth_code) {
				const params = {
					grantType: "zwdd",
					authCode: auth_code
				}
				const result = await AvoidLoginApi(params)
				console.log('result',result)
				const { code, msg, data } = result
				setToken(data.token);
				localStorage.setItem("SET_USERRES", data.refreshToken);
				localStorage.setItem("SET_USERID", data.userId);
				// document.cookie = "Admin-Token=" + data.token
				if (code == -10) {
					Dialog.alert({
						message: msg
					}).then(() => {
						next({ path: '/login' })
						NProgress.done()
					})
				} else if (code == 40010) {
					const { openid } = result.extra
					Dialog.alert({
						message: msg
					}).then(() => {
						next({ path: '/login?openid=' + openid })
						NProgress.done()
					})
				} else {
					next({ path: '/ZHpaishui' })
				}
			} else {
				next();
			}
		} else {
			dd.getAuthCode({}).then((result) => {
				if (result) {
					console.log(JSON.stringify(result));
					let gouzei = JSON.stringify(result)
					// alert(JSON.stringify(gouzei))
					const { code } = result
					// alert(JSON.stringify(code))
					const params = {
						grantType: "zwdd",
						authCode: code
					}
					return new Promise((resolve, reject) => {
						AvoidLoginApi(params)
							.then(res => {
								const { code, msg, data } = res
								// alert(JSON.stringify(res))
								if (code == -10) {
									Dialog.alert({
										message: msg
									}).then(() => {
										next({ path: '/login' })
										NProgress.done()
									})
								} else if (code == 40010) {
									const { openid } = data.extra
									Dialog.alert({
										message: msg
									}).then(() => {
										next({ path: '/login?openid=' + openid })
										NProgress.done()
									})
								} else {
									// next()
									next({ path: '/ZHpaishui' })
								}

							})
							.catch(error => {
								reject(error);
							});
					});
				}
			})
			next();
		}
	} else {
		next();
	}
})

dd.getAuthCode 是钉钉内部方法,可以参考管网 浙政钉-H5&小程序应用采集开发手册
AvoidLoginApi 是登录请求方法
setToken 是把token存浏览器的方法

暂时可以分享的就这么多吧。
小伙伴们如果有想线上讨论的可以进QQ群(687706476)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐