Appearance
管理视图
平台应用支持开发商自定义多种形式的管理视图,用于平台首页链接接入,如应用提供档案和统计等功能视图,点击首页相应部分直接跳转相应模块个性化展示,丰富应用各种展示形式。
原理: 用户点击应用时平台服务目录时自动追加stoken/sroute/sobject
参数,对接应用通过接口解析用户信息,路由信息、对象信息,自行设置本应用登录状态并跳转相应的视图页面。
登录用户stoken
参数通过 “2.3.1用户信息接口” 进行解析并设置登录状态;
视图路由sroute
参数通过约定标识自行处理页面路由,如:fwez/rwez
等;
数据对象sobject
参数通过将必要的参数转码后传递,转码规则如下:
对象转密文方法:btoa(encodeURIComponent(JSON.stringify(sobject)))
密文转对象方法:JSON.parse(decodeURIComponent(atob(sobject)))
- 通过应用配置获取应用地址并追加相应参数;
- 前端接收参数设置登录状态并跳转对应页面;
- 后端接收参数并提供登录等相关服务的接口。
http
https://www.app.com?stoken=xxxx&sroute=#view_code#&sobject=xxxx
vue
<template>
<v-app>
<v-overlay opacity="0">加载中......</v-overlay>
</v-app>
</template>
<script>
import Request from "@/commons/request";
import Storage from "@/commons/storage";
export default {
name: "App",
data: () => ({ valid: null, note: "授权登录中..." }),
async mounted() {
// 1.授权用户登录
let stoken = this.GetQueryString("stoken");
await this.UserLoginByData(stoken);
// 2.解析服务对象
let sobject = this.GetQueryString("sobject");
let jobject = JSON.parse(decodeURIComponent(atob(sobject)));
Storage.set("sobject", jobject);
// 3.跳转对应页面
let sroute = this.GetQueryString("sroute");
switch (sroute) {
case "#view_code_1#": this.$router.push("/service/view_code_1"); break;
case "#view_code_2#": this.$router.push("/service/view_code_2"); break;
case "#view_code_3#": this.$router.push("/service/view_code_3"); break;
default: this.$router.push("/service/index");
}
},
methods: {
async UserLoginByData(stoken) {
if (!stoken) {
this.valid = false;
this.note = "授权登录错误,用户令牌不能为空,请关闭页面后重试!";
return;
}
Request.postJson('/admin/login', { stoken: stoken }).then((res) => {
if (res.meta.success && res.data) {
//1.获取用户信息成功
Storage.set("token", res.data.token);
this.valid = true;
this.note = "授权登录成功,正在跳转请稍后...";
} else {
//2.获取用户信息失败
this.valid = false;
this.note = "授权登录失败,请关闭页面后重试!";
}
});
},
GetQueryString(name) {
var reg = new RegExp("[?&]" + name + "=([^&^#^/]*)", "i");
var res = window.location.href.match(reg);
return res != null ? unescape(res[1]) : "";
},
},
};
</script>
<style>
body { background-size: cover; }
</style>
java
package cn.liangthink.xxx.service.impl;
import java.util.Date;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import cn.liangthink.xxx.service.AcisService;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
public class AcisServiceImpl implements AcisService {
private RestTemplate rest = new RestTemplate();
private String mp = "https://xxxxxx/";
private String ak = "xxxxxx";
private String sk = "xxxxxx";
@Override
public String token() {
String uri = mp + "/sure/oauth/access_token";
MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
long ts = (new Date()).getTime();
String si = String.format("AK:%s/TS:%s/SK:%s", ak, ts, sk);
params.add("client_id", ak);
params.add("timestamp", ts);
params.add("signature", DigestUtils.md5DigestAsHex(si.getBytes()));
JSONObject json = rest.postForObject(uri, params, JSONObject.class);
return json.getJSONObject("data").getString("access_token");
}
@Override
public Object userinfo(String userinfo) {
JSONObject result = new JSONObject();
String uri = mp + "/open/api/acis/udsa/userbytoken";
MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
params.add("stoken", JSON.parseObject(userinfo).getString("stoken"));
params.add("access_token", this.token());
JSONObject json = rest.postForObject(uri, params, JSONObject.class);
log.debug(json.toJSONString());
JSONObject user = json.getJSONObject("data");
if (user == null) {
return result.fluentPut("meta", false).fluentPut("data", "获取失败!");
}
return result.fluentPut("meta", true).fluentPut("data", user);
}
}
1.视图定义
管理视图需要通过自建应用进行配置,详见“2.2.2 展示视图”章节。管理视图分为图标、图片、框架、组件四种方式,通过配置视图代码来区分进入系统时展示页面(视图代码未做全局唯一校验,请保持同一系统中唯一,禁止使用fwez/rwez
等保留代码)
2.视图接入
视图(页面)是智慧助残在治理端为用户提供统一个性化展示方式,支持电脑版和手机版,采集操作时平台将stoken/sroute/sobject
参数在地址栏带入应用中,应用处理后跳转视图页面,完成特定内容的展示。视图代码:应用视图设置中。
http
https://www.app.com?stoken=xxxx&sroute=#view_code#&sobject=xxxx