Skip to content

管理视图

平台应用支持开发商自定义多种形式的管理视图,用于平台首页链接接入,如应用提供档案和统计等功能视图,点击首页相应部分直接跳转相应模块个性化展示,丰富应用各种展示形式。
原理: 用户点击应用时平台服务目录时自动追加stoken/sroute/sobject参数,对接应用通过接口解析用户信息,路由信息、对象信息,自行设置本应用登录状态并跳转相应的视图页面。
登录用户stoken参数通过 “2.3.1用户信息接口” 进行解析并设置登录状态;
视图路由sroute参数通过约定标识自行处理页面路由,如:fwez/rwez等;
数据对象sobject参数通过将必要的参数转码后传递,转码规则如下:
对象转密文方法:btoa(encodeURIComponent(JSON.stringify(sobject)))
密文转对象方法:JSON.parse(decodeURIComponent(atob(sobject)))


  1. 通过应用配置获取应用地址并追加相应参数;
  2. 前端接收参数设置登录状态并跳转对应页面;
  3. 后端接收参数并提供登录等相关服务的接口。
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