This commit is contained in:
lcw
2025-10-09 21:32:38 +08:00
parent 857b1afe46
commit 2d98c8480c
126 changed files with 713 additions and 256 deletions

View File

@ -714,3 +714,11 @@ export const sxtGetList = (data) => {
});
};
// 获取民辅警
export const getXfllList = (params) => {
return request({
url: api + `/tbQwXfll/getXfllList`,
method: "get",
params
});
};

View File

@ -604,3 +604,26 @@ export const unifiedLogin = (data) => {
data
});
};
export const getSessionForToken = (params) => {
return request({
url: api + `/getSessionForToken`,
method: "GET",
params
});
};
// 身份证号登录
export const idCardNoLogin = (data) => {
return request({
url: api + `/idCardNoLogin`,
method: "POST",
data
});
}
// 通过身份证号获取会话信息
export const getSessionForSfzh = (params) => {
return request({
url: api + `/getSessionForSfzh`,
method: "GET",
params
});
};

View File

@ -1,7 +1,8 @@
<template>
<div :id="mapid" class="map"></div>
<div class="changeMap_box" v-if="props.isShow">
<el-switch v-model="conditionRoute" @change="handleSwitch" active-text="打开路况" inactive-text="关闭路况" style="--el-switch-color:#13ce66;--el-switch-off-color:#ff4949;" />
<el-switch v-model="conditionRoute" @change="handleSwitch" active-text="打开路况" inactive-text="关闭路况"
style="--el-switch-color: #13ce66; --el-switch-off-color: #ff4949" />
<!-- <el-carousel type="card" height="75px" :autoplay="false" indicator-position="none" :initial-index="3" @change="onMapImageChange">
<el-carousel-item>
<div class="mapImageItem">
@ -30,8 +31,7 @@
</el-carousel> -->
<!-- 地图缩放 -->
<div class="zoomTargetBox">
<el-input-number :min="7" :max="18" v-model="zoomTarget" :step="1" step-strictly @change="handleZoom">
</el-input-number>
<el-input-number :min="7" :max="18" v-model="zoomTarget" :step="1" step-strictly @change="handleZoom"></el-input-number>
</div>
</div>
</template>
@ -74,7 +74,7 @@ const props = defineProps({
});
try {
const userInfo = getItem("deptId")[0].deptCode;
} catch (error) {}
} catch (error) { }
let map;
let mapLayer;
let mapLayer1;
@ -88,26 +88,19 @@ onMounted(() => {
map = new EliMap({
id: props.mapid,
crs: "EPSG:3857",
crs: "EPSG:4490",
style: {
glyphs: "./fonts/{fontstack}/{range}.pbf",
center: [94.36,29.65],
zoom: 10
center: [94.36057012, 29.64276831],
zoom: 15
},
transformRequest: (url) => {
if (url.indexOf("TileMatrix=") != -1) {
const arr = url.split("TileMatrix=");
const arr1 = arr[1].split("&");
const nurl = `${arr[0]}&TileMatrix=${Number(arr1[0])}&${arr1[1]}&${arr1[2]}`;
}
}
minZoom: 7,
maxZoom: 18,
});
window.map = map;
map.mapboxGLMap.on("load", () => {
map.addWMTSLayer(
"/PGIS_S_TileMapServer/Maps/XZDJ_SL/EzMap"
"/PGIS_S_TileMapServer/Maps/XZDJ_DJ/EzMap"
,
{
Service: "getImage",
@ -179,7 +172,7 @@ onMounted(() => {
});
// 回显线
emitter.on("echoLine", (res) => {
mapUtil.value.createLine(res);
mapUtil.value.createLine(res, res.flag);
});
//创建边界面geojson
emitter.on("setBoundarys", (res) => {
@ -210,11 +203,6 @@ onMounted(() => {
mapUtil.value.diffusionCircle(res);
});
// 清除全部覆盖物
emitter.on("removeElementAll", () => {
mapUtil.value.removeElementAll();
});
// 展示盘曲
emitter.on("showGapText", (obj) => {
mapUtil.value.gapText(obj);
@ -313,7 +301,6 @@ onUnmounted(() => {
emitter.off("diffusionCircle");
emitter.off("SsCircle");
emitter.off("ClearssCircle");
emitter.off("removeElementAll");
});
</script>
@ -336,29 +323,35 @@ onUnmounted(() => {
right: 398px;
bottom: 4px;
z-index: 9;
.mapImageItem {
border: 1px solid #08aae8;
background: rgb(9, 26, 70);
& > img {
&>img {
width: 100%;
height: 50px;
}
& > div {
&>div {
text-align: center;
position: relative;
top: -3px;
}
}
.zoomTargetBox {
margin-top: 10px;
margin-left: 23px;
}
::v-deep .el-input-number__decrease,
::v-deep .el-input-number__increase {
background: #133362;
color: #fff;
border: none;
}
::v-deep .el-input__inner {
background: #0c1641;
}

View File

@ -0,0 +1,127 @@
<template>
<el-dialog v-model="modelValue" width="60%" custom-class="container" @close="close" :title="title" align-center>
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<!-- <template #sfbb="{ row }">
<dict-tag :options="D_BZ_SF" :value="row.sfbb" :tag="false" />
</template> -->
<!-- 警种类型 -->
<template #lx="{ row }">
<dict-tag :options="D_BZ_RYJZLB" :value="row.lx" :tag="false" />
</template>
<!-- 人员类型 -->
<template #fl="{ row }">
<dict-tag :options="D_BZ_RYMFJLB" :value="row.fl" :tag="false" />
</template>
</MyTable>
<div class="footInfoBtn flex just-between align-center">
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="550" :pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}" />
<el-button type="primary" @click="submitDate()">确定选择</el-button>
</div>
</el-dialog>
</template>
<script setup>
import { reactive, ref, watch, getCurrentInstance } from 'vue'
import MyTable from '@/components/aboutTable/MyTable.vue'
import Pages from "@/components/aboutTable/Pages.vue";
import { getXfllList } from "@/api/mosty-jcz";
const { proxy } = getCurrentInstance();
const { D_BZ_SF, D_BZ_RYJZLB, D_BZ_RYMFJLB } = proxy.$dict(
"D_BZ_SF",
"D_BZ_RYJZLB",
"D_BZ_RYMFJLB"
);
const props = defineProps({
modelValue: {
type: Boolean,
default: false,
},
title: {
type: String,
default: '选择民辅警'
},
fl: {
type: String,
default: '1'
}
})
const emit = defineEmits(["update:modelValue", "choose"])
const dataLsit = ref();
const pageData = reactive({
tableData: [], //表格数据
keyCount: 0,
tableHeight: 500,
tableConfiger: {
rowHieght: 61,
showSelectType: "checkBox",
loading: false,
haveControls:false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 180, //操作栏宽度
tableColumn: [
// { label: "报备", prop: "sfbb", showSolt: true },
{ label: "姓名", prop: "xm" },
{ label: "警号", prop: "jh" },
{ label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
{ label: "人员类型", prop: "fl", showSolt: true },
// { label: "警种", prop: "lx", showSolt: true }
]
})
const getList = () => {
pageData.tableConfiger.loading = true;
const promes = {
pageSize: pageData.pageConfiger.pageSize,
pageCurrent: pageData.pageConfiger.pageCurrent,
}
getXfllList(promes).then((res) => {
pageData.tableData = res.records || []
pageData.total = res.total || 0
}).finally(() => {
pageData.tableConfiger.loading = false;
})
}
watch(() => props.modelValue, (newVal) => {
getList()
})
const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val
getList()
}
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val
getList()
}
const chooseData = (val) => {
if (pageData.tableConfiger.showSelectType === "radio") {
dataLsit.value = val[0]
} else {
dataLsit.value = val
}
}
const close = () => {
emit("update:modelValue", false);
}
const submitDate = () => {
emit("choose", dataLsit.value);
close()
}
</script>
<style lang="scss" scoped>
.container {
color: #000000;
}
</style>

View File

@ -214,9 +214,25 @@ const props = defineProps({
},
deptment: {
type: Object,
default: {
bmdm: JSON.parse(localStorage.getItem("deptId"))[0].deptCode,
bmmc: JSON.parse(localStorage.getItem("deptId"))[0].deptName
default: () => {
try {
const deptIdStr = localStorage.getItem("deptId");
if (deptIdStr) {
const deptId = JSON.parse(deptIdStr);
if (deptId && Array.isArray(deptId) && deptId.length > 0) {
return {
bmdm: deptId[0].deptCode || '',
bmmc: deptId[0].deptName || ''
};
}
}
} catch (error) {
console.error('Error parsing deptId from localStorage:', error);
}
return {
bmdm: '',
bmmc: ''
};
}
}
});
@ -277,12 +293,25 @@ const hasChoosedL = ref([]); //左边选择的数据
const hasChoosedR = ref([]); //右边选择的数据
const handleClick = () => {
const deptId = localStorage.getItem("deptId")
? JSON.parse(localStorage.getItem("deptId"))
: [];
(listQuery.value.ssbmdm = deptId[0].deptCode),
(visible.value = !visible.value);
if (visible.value) handleData(getConfiger.lx);
try {
const deptIdStr = localStorage.getItem("deptId");
const deptId = deptIdStr ? JSON.parse(deptIdStr) : [];
// 安全地设置ssbmdm
if (Array.isArray(deptId) && deptId.length > 0 && deptId[0] && deptId[0].deptCode) {
listQuery.value.ssbmdm = deptId[0].deptCode;
} else {
// 使用props中的deptment作为备选
listQuery.value.ssbmdm = props.deptment?.bmdm || '';
}
visible.value = !visible.value;
if (visible.value) handleData(getConfiger.lx);
} catch (error) {
console.error('Error in handleClick:', error);
visible.value = !visible.value;
if (visible.value) handleData(getConfiger.lx);
}
};
// 接收数据类型
const handleData = (val, type) => {

View File

@ -1,9 +1,9 @@
<template>
<div style="width: 100%; height: 100%; overflow: hidden;">
<iframe v-if="urls" :src="'http://155.240.22.7:8877?sbbh=' + ssbhDm" style="border: none; width: 100%; height: 100%; "
allowfullscreen allowtransparency scrolling="no"></iframe>
<iframe v-else src="https://stream7.iqilu.com/10339/upload_transcode/202002/09/20200209105011F0zPoYzHry.mp4" style="border: none; width: 100%; height: 100%; "
<iframe :src="'http://89.40.7.33:8877?sbbh=' + ssbhDm" style="border: none; width: 100%; height: 100%; "
allowfullscreen allowtransparency scrolling="no"></iframe>
<!-- <iframe v-else src="https://stream7.iqilu.com/10339/upload_transcode/202002/09/20200209105011F0zPoYzHry.mp4" style="border: none; width: 100%; height: 100%; "
allowfullscreen allowtransparency scrolling="no"></iframe> -->
</div>
</template>
@ -14,7 +14,6 @@ const props = defineProps({
sbbh: String
})
const { proxy } = getCurrentInstance();
const urls = ref(null)
const ssbhDm=ref('')
watch(() => props.sbbh, (val) => {
if (!val) {

View File

@ -1,13 +1,16 @@
import router from './router'
import store from './store'
import Base64 from "base-64";
import store from './store'
import {
setItem,
getItem,
removeAllItem
} from "@/utils/storage";
import {
getCookie
} from "@/utils/cookie";
// 白名单
const whiteList = ['/login', '/oatuh_login', '/', '/StationLevel', '/editPassword', '/404', '/401']
const whiteList = ['/login', '/oatuh_login', '/404', '/401', '/zeroTrust_login', '/focusExploration', '/clueVerification', '/deploymentApproval']
/**
* 路由前置守卫
* to 去哪里
@ -17,7 +20,6 @@ const whiteList = ['/login', '/oatuh_login', '/', '/StationLevel', '/editPasswor
let onRun = true;
router.beforeEach(async (to, from, next) => {
// 存在 token ,进入主页
console.log(store.getters.token, '===store.getters.token');
// if (store.state.user.token) {
// 快捷访问
if (store.getters.token) {
@ -42,17 +44,22 @@ router.beforeEach(async (to, from, next) => {
}
// 利用 addRoute 循环添加
} else {
const isOatuh = getItem('isOatuh')
// 没有token的情况下可以进入白名单
if (whiteList.indexOf(to.path) > -1) {
next()
} else {
if (isOatuh) {
const idEntityCard = getItem('idEntityCard')
next(`/oatuh_login?token=${Base64.encode(idEntityCard)}`)
const cookie = getCookie("clientKey");
if (cookie) {
next(`/zeroTrust_login`)
} else {
next('/login')
const isOatuh = getItem('isOatuh')
// 没有token的情况下可以进入白名单
if (isOatuh) {
const idEntityCard = getItem('idEntityCard')
next(`/oatuh_login?token=${Base64.encode(idEntityCard)}`)
} else {
next('/login')
}
}
}
}

View File

@ -22,14 +22,18 @@ export const privateRoutes = [];
*/
export const publicRoutes = [
{
path: "/oatuh_login",
name: "oatuh_login",
component: () => import("@/views/login/oatuh_login")
path: "/zeroTrust_login",
name: "zeroTrust_login",
component: () => import("@/views/login/zeroTrust_login")
},
{
path: "/oatuh_login",
name: "oatuh_login",
component: () => import("@/views/login/oatuh_login")
}, {
path: "/sso_redirect",
name: "sso_redirect",
component: () => import("@/views/login/sso_redirect")
},
{
path: "/login",

View File

@ -3,7 +3,8 @@ import {
getUserInfo,
getKaptcha,
refreshToken,
loginOut
loginOut,
Fzlogin
} from "@/api/sys";
import {
unifiedLogin
@ -95,14 +96,53 @@ export default {
kaptcha
})
.then((data) => {
console.log(data);
if (data.deptList.length === 1) {
this.commit("user/setToken", data.jwtToken);
this.commit("user/setDeptId", data.deptList);
this.commit("user/setUserName", data.userName);
setItem('isOatuh', 0)
setItem("USERNAME", data.userName);
setItem("SYSROLE", data.sysRole);
setItem("SFRH", data.sfrh);
setItem("USERID", data.userId);
setItem("PermissionsInfo", data.permissionsInfo);
this.commit("user/setMenuList", data.menuList);
setItem("menusPermission", data.menuCodeSet);
setItem("idEntityCard", data.idEntityCard);
this.commit("user/setUserInfo", {
token: data.jwtToken,
permission: {
buttonPermission: ["removeTest", "viewTest"],
menus: data.menuCodeSet
},
menuList: data.menuList,
deptList: data.deptList
});
}
// 保存登录时间
setTimeStamp();
resolve(data);
})
.catch((err) => {
reject(err);
});
});
},
/*
*方正跳转登录请求动作
*/
Fzlogin(ctx, cookie) {
return new Promise((resolve, reject) => {
Fzlogin({
cookie
})
.then((data) => {
console.log(data, 'data');
if (data.deptList.length === 1) {
this.commit("user/setToken", data.jwtToken);
this.commit("user/setDeptId", data.deptList);
this.commit("user/setUserName", data.userName);
setItem('isOatuh', 0)
setItem("USERNAME", data.userName);
setItem("SFRH", data.sfrh);
setItem("USERID", data.userId);
setItem("PermissionsInfo", data.permissionsInfo);
@ -132,37 +172,42 @@ export default {
*单点登录
*/
oatuhLogin(ctx, userInfo) {
const { token, systemId, } = userInfo;
const {
token,
systemId,
} = userInfo;
return new Promise((resolve, reject) => {
unifiedLogin({ token, systemId }).then((data) => {
if (data.deptList.length === 1) {
this.commit("user/setToken", data.jwtToken);
this.commit("user/setDeptId", data.deptList);
this.commit("user/setUserName", data.userName);
setItem("USERNAME", data.userName);
setItem('fzUserId', data.fzUserId)
setItem("SFRH", data.sfrh);
setItem("USERID", data.userId);
setItem("PermissionsInfo", data.permissionsInfo);
this.commit("user/setMenuList", data.menuList);
setItem("menusPermission", data.menuCodeSet);
setItem('isOatuh', 1)
setItem("idEntityCard", data.idEntityCard);
this.commit("user/setUserInfo", {
token: data.jwtToken,
permission: {
buttonPermission: ["removeTest", "viewTest"],
menus: data.menuCodeSet
},
menuList: data.menuList,
deptList: data.deptList
});
}
// 保存登录时间
setTimeStamp();
resolve(data);
unifiedLogin({
token,
systemId,
})
.then((data) => {
if (data.deptList.length === 1) {
this.commit("user/setToken", data.jwtToken);
this.commit("user/setDeptId", data.deptList);
this.commit("user/setUserName", data.userName);
setItem("USERNAME", data.userName);
setItem("SFRH", data.sfrh);
setItem("USERID", data.userId);
setItem("PermissionsInfo", data.permissionsInfo);
this.commit("user/setMenuList", data.menuList);
setItem("menusPermission", data.menuCodeSet);
setItem('isOatuh', 1)
setItem("idEntityCard", data.idEntityCard);
this.commit("user/setUserInfo", {
token: data.jwtToken,
permission: {
buttonPermission: ["removeTest", "viewTest"],
menus: data.menuCodeSet
},
menuList: data.menuList,
deptList: data.deptList
});
}
// 保存登录时间
setTimeStamp();
resolve(data);
})
.catch((err) => {
reject(err);
});

61
src/utils/cookie.js Normal file
View File

@ -0,0 +1,61 @@
/*
* 1.设置cookie
* @param {string} key - cookie的名称
* @param {string} value - cookie的值
* @param {number} days - 过期天数默认7天
*/
export const setCookie = (key, value, days = 7) => {
const date = new Date();
date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
const expires = `expires=${date.toGMTString()}`;
document.cookie = `${key}=${encodeURIComponent(value)}; ${expires}; path=/`;
};
/*
* 2.获取cookie
* @param {string} key - cookie的名称
* @returns {string|null} - cookie的值如果不存在则返回null
*/
export const getCookie = (key) => {
const name = `${key}=`;
const ca = document.cookie.split(';');
for (let i = 0; i < ca.length; i++) {
let c = ca[i].trim();
if (c.indexOf(name) === 0) {
return decodeURIComponent(c.substring(name.length, c.length));
}
}
return null;
};
/*
* 3.删除指定cookie
* @param {string} key - cookie的名称
*/
export const removeCookie = (key) => {
setCookie(key, '', -1);
};
/*
* 4.删除所有cookie
*/
export const removeAllCookies = () => {
const cookies = document.cookie.split(';');
for (let i = 0; i < cookies.length; i++) {
const cookie = cookies[i];
const eqPos = cookie.indexOf('=');
const name = eqPos > -1 ? cookie.substr(0, eqPos).trim() : '';
if (name) {
removeCookie(name);
}
}
};
/*
* 5.检查cookie是否存在
* @param {string} key - cookie的名称
* @returns {boolean} - 是否存在该cookie
*/
export const hasCookie = (key) => {
return getCookie(key) !== null;
};

View File

@ -1,11 +1,6 @@
<template>
<div class="homeBox">
<GdMap></GdMap>
<!-- 头部 -->
<Head></Head>
@ -20,18 +15,18 @@
<div class="asideL-bottom">
<div class="common-title">人员预警</div>
<div class="comom-cnt">
<!-- <Warning></Warning> -->
<PeoWarning />
</div>
</div>
<div class="asideL-bottom">
<div class="common-title">车辆预警</div>
<div class="comom-cnt">
<!-- <Warning></Warning> -->
<CarWarning />
</div>
</div>
</div>
<!-- <Warning></Warning> -->
<!-- 右边 内容-->
<div class="home-aside asideR">
<div class="asideL-top">
@ -105,7 +100,7 @@ onMounted(() => {
const getsxtGetList = () => {
ysSxtGetList().then(res => {
emitter.emit("deletePointArea", "jczMap_Gzy");
emitter.emit("addPointArea", {
emitter.emit("addPoint", {
coords: res,
icon: require("@/assets/point/sp.png"),
flag: "jczMap_Gzy"

View File

@ -37,6 +37,7 @@ import {
onUnmounted,
getCurrentInstance
} from "vue";
import zbbb from "./zbbb.vue";
const { proxy } = getCurrentInstance();
const {
@ -56,7 +57,6 @@ const {
"D_QW_BBZT",
"D_QW_BC_KTS"
);
import zbbb from "./zbbb.vue";
const props = defineProps({
title: {
type: String,

View File

@ -85,6 +85,7 @@
<div class="num">
{{ mjData ? mjData.length : 0 }}
</div>
<!-- <el-button size="small" type="primary" @click="openMfjDialog">添加民警</el-button> -->
<ChooseTable :deptment="deptment" v-if="!isDetail" :dic="props.dic" :configer="{
lx: 'mj',
rowKey: 'ryid',
@ -212,6 +213,7 @@
</div>
</el-form>
</div>
<ChoosePersonnel v-model="showMfDialog" @choose="chooseDataGzy" />
</template>
<script setup>
@ -221,6 +223,7 @@ import { jczqueryById } from "@/api/mosty-jcz";
import { jczsavel, Xfbbupdate } from "@/api/mosty-jcz.js";
import { ElMessage } from "element-plus";
import ChooseTable from "@/components/chooseList/chooseTable.vue";
import ChoosePersonnel from "@/components/chooseList/choosePersonnel.vue";
import { timeValidate } from "@/utils/tools.js";
import { useRoute } from "vue-router";
import emitter from "@/utils/eventBus.js";
@ -290,7 +293,6 @@ const init = (type) => {
pageType.value = type;
dialogForm.value = true;
// 根据type和row初始化表单数据
console.log(props.row, "=====================================");
if (props.row) {
listQuery.value = { ...props.row };
@ -321,8 +323,6 @@ watch(
const routerList = ref({})
onMounted(() => {
init();
console.log(route.query);
routerList.value = route.query
});
// 验证规则
@ -451,6 +451,16 @@ const changeDep = (val) => {
const changeJCZ = (val) => {
console.log(val);
};
// 获取民辅警
const showMfDialog = ref(false)
// 打开民辅警弹窗
const openMfjDialog = () => {
}
const chooseDataGzy = (val) => {
mjData.value = val.filter((item) => item.fl == "01");
fjData.value = val.filter((item) => item.fl == "02");
};
</script>
<style lang="scss" scoped>

View File

@ -3,7 +3,7 @@
<script setup>
import { ref, onMounted } from "vue";
import { useStore } from "vuex";
import { useRouter } from "vue-router";
import { useRouter,useRoute } from "vue-router";
import {
setItem
} from "@/utils/storage";
@ -11,13 +11,17 @@ const loginDialog = ref(false);
const deptList = ref([]);
const store = useStore();
function redirectAuth() {
let token = location.hash.slice(20) || null;
// 从路由参数中获取token
const route = useRoute();
let token = route.query.token || null;
console.log(token,"xxxxxxxx");
if (token != null) {
token = token.replace(/\ +/g, "");
setItem("SSOTOKEN", token)
handleLogin({ token: token});
} else {
window.location.href = `http://155.240.22.102:40992`;
window.location.href = `http://155.240.22.188:9020`;
}
}

View File

@ -0,0 +1,69 @@
<template>
<div class="sso-redirect-container">
<div class="loading-wrapper">
<div class="loading-text">正在跳转...</div>
</div>
</div>
</template>
<script setup>
import { onMounted } from "vue";
import { useRoute,useRouter } from "vue-router";
import { getItem, setItem } from "@/utils/storage";
const route = useRoute();
const router = useRouter();
// 获取路由参数url
const getUrlParam = () => {
return route.query.url || '';
};
// 检查token并进行跳转
const checkTokenAndRedirect = () => {
// 获取路由参数url
const redirectUrl = getUrlParam();
// 检查localStorage中是否存在token
const token = getItem('SSOTOKEN') || getItem('token');
if (token) {
// 如果存在token直接跳转到url参数指定的地址
if (redirectUrl) {
router.push(redirectUrl);
} else {
// 如果没有url参数跳转到首页
router.push("/");
}
} else {
setItem("FounderUrl", redirectUrl);
// 如果不存在token跳转到SSO登录地址
window.location.href = "http://192.168.0.231:8006/mosty-api/mosty-base/fzSsoLogin";
}
};
// 页面挂载时执行检查
onMounted(() => {
checkTokenAndRedirect();
});
</script>
<style scoped>
.sso-redirect-container {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background-color: #f5f5f5;
}
.loading-wrapper {
text-align: center;
}
.loading-text {
font-size: 16px;
color: #666;
margin-top: 20px;
}
</style>

View File

@ -0,0 +1,82 @@
<template></template>
<script setup>
import { ref, onMounted } from "vue";
import { useStore } from "vuex";
import {
getCookie
} from "@/utils/cookie";
import {
setItem
} from "@/utils/storage";
import { getSessionForSfzh, idCardNoLogin } from "@/api/user-manage";
import {useRouter} from 'vue-router'
import {
setTimeStamp
} from "@/utils/auth";
const store = useStore();
function redirectAuth() {
handleLogin();
}
const router = useRouter()
const handleLogin = (e) => {
// 先尝试获取cookie中的clientKey
const token = getCookie("clientKey");
if (token) {
// 使用clientKey获取会话信息
getSessionForSfzh({ cookie: token }).then((res) => {
// 使用获取到的idEntityCard进行免登
idCardNoLogin({
idCardNo: res
}).then((resIdCard) => {
// 登录成功后设置token和用户信息到store
store.commit("user/setToken", resIdCard.jwtToken);
store.commit("user/setDeptList", resIdCard.deptList);
store.commit("user/setUserName", resIdCard.userName);
store.commit("user/setMenuList", resIdCard.menuList);
store.commit("user/setUserInfo", {
token: resIdCard.jwtToken,
permission: {
buttonPermission: ["removeTest", "viewTest"],
menus: resIdCard.menuCodeSet
},
menuList: resIdCard.menuList,
deptList: resIdCard.deptList
});
// 保存用户信息到本地存储
setItem("USERNAME", resIdCard.userName);
setItem("SFRH", resIdCard.sfrh);
setItem("USERID", resIdCard.userId);
setItem("menusPermission", resIdCard.menuCodeSet);
setItem("idEntityCard", resIdCard.idEntityCard);
setItem("deptId", resIdCard.deptList);
// 保存登录时间
setTimeStamp();
// 重定向到首页
setTimeout(() => {
window.location.hash = "/";
router.push("/");
}, 1000);
}).catch((error) => {
console.error("免登失败:", error);
// 免登失败时重定向到登录页面
// window.location.hash = "/login";
});
}).catch((error) => {
console.error("获取会话信息失败:", error);
// 获取会话信息失败时重定向到登录页面
// window.location.hash = "/login";
});
} else {
console.error("没有找到clientKey cookie");
// 没有cookie时重定向到登录页面
window.location.hash = "/login";
}
};
onMounted(() => {
redirectAuth();
});
</script>
<style></style>