lcw
This commit is contained in:
@ -714,3 +714,11 @@ export const sxtGetList = (data) => {
|
||||
});
|
||||
};
|
||||
|
||||
// 获取民辅警
|
||||
export const getXfllList = (params) => {
|
||||
return request({
|
||||
url: api + `/tbQwXfll/getXfllList`,
|
||||
method: "get",
|
||||
params
|
||||
});
|
||||
};
|
||||
|
||||
@ -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
|
||||
});
|
||||
};
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
127
src/components/chooseList/choosePersonnel.vue
Normal file
127
src/components/chooseList/choosePersonnel.vue
Normal 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>
|
||||
@ -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) => {
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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
61
src/utils/cookie.js
Normal 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;
|
||||
};
|
||||
@ -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"
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
69
src/views/login/sso_redirect.vue
Normal file
69
src/views/login/sso_redirect.vue
Normal 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>
|
||||
82
src/views/login/zeroTrust_login.vue
Normal file
82
src/views/login/zeroTrust_login.vue
Normal 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>
|
||||
Reference in New Issue
Block a user