This commit is contained in:
lcw
2025-09-15 21:16:45 +08:00
parent c16d0e6bed
commit ae76d8bbbe
381 changed files with 224 additions and 167 deletions

136
package-lock.json generated
View File

@ -2043,51 +2043,6 @@
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
"dev": true "dev": true
}, },
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"optional": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"optional": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"optional": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"ssri": { "ssri": {
"version": "8.0.1", "version": "8.0.1",
"resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
@ -2096,28 +2051,6 @@
"requires": { "requires": {
"minipass": "^3.1.1" "minipass": "^3.1.1"
} }
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
},
"vue-loader-v16": {
"version": "npm:vue-loader@16.8.3",
"resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
"integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
}
} }
} }
}, },
@ -14617,6 +14550,75 @@
} }
} }
}, },
"vue-loader-v16": {
"version": "npm:vue-loader@16.8.3",
"resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
"integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"optional": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"optional": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"optional": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"vue-router": { "vue-router": {
"version": "4.1.3", "version": "4.1.3",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.3.tgz", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.3.tgz",

View File

@ -2,7 +2,9 @@
<template> <template>
<router-view v-slot="{ Component }" v-if="isRouterAlive"> <router-view v-slot="{ Component }" v-if="isRouterAlive">
<keep-alive :include="store.getters.keepLiiveRoute"> <keep-alive :include="store.getters.keepLiiveRoute">
<Component :is="Component"></Component> <Watermark :text="content" :color="'rgba(0, 0, 0, .15)'">
<Component :is="Component"></Component>
</Watermark>
</keep-alive> </keep-alive>
</router-view> </router-view>
</template> </template>
@ -10,6 +12,8 @@
import { ref, nextTick, provide, onMounted } from "vue"; import { ref, nextTick, provide, onMounted } from "vue";
import { useStore } from "vuex"; import { useStore } from "vuex";
import { getItem } from "@/utils/storage"; import { getItem } from "@/utils/storage";
import Watermark from "@/components/Watermark.vue";
import { timeValidate } from "@/utils/tools.js";
import { qcckPost, qcckGet, qcckPut, qcckDelete } from "@/api/qcckApi.js"; import { qcckPost, qcckGet, qcckPut, qcckDelete } from "@/api/qcckApi.js";
import { generateNewStyle, writeNewStyle } from "@/utils/theme"; import { generateNewStyle, writeNewStyle } from "@/utils/theme";
const store = useStore(); const store = useStore();
@ -26,9 +30,16 @@ const reload = () => {
provide("reload", reload); provide("reload", reload);
onMounted(() => { onMounted(() => {
let dept = getItem("deptId"); let dept = getItem("deptId");
frashJs()
document.title = "林芝"; document.title = "林芝";
}); });
const content=ref([])
const frashJs = () => {
const sfzh= getItem("idEntityCard")
const userName= getItem("USERNAME")
const time = timeValidate()
content.value=[userName,sfzh,time,"智慧公交系统","禁止泄露公民个人信息和工作秘密"]
}
</script> </script>
<style lang="scss"> <style lang="scss">
@import "./styles/index.scss"; @import "./styles/index.scss";

View File

@ -101,7 +101,7 @@ onMounted(() => {
window.map = map; window.map = map;
map.mapboxGLMap.on("load", () => { map.mapboxGLMap.on("load", () => {
map.addWMTSLayer( map.addWMTSLayer(
"http://89.0.23.24/PGIS_S_TileMapServer/Maps/XZDJ_SL/EzMap" "/PGIS_S_TileMapServer/Maps/XZDJ_SL/EzMap"
, ,
{ {
Service: "getImage", Service: "getImage",

View File

@ -1,12 +1,16 @@
import router from './router' import router from './router'
import Base64 from "base-64";
import store from './store' import store from './store'
import {
unifiedLogin
} from "@/api/user-manage";
import { import {
setItem, setItem,
getItem, getItem,
removeAllItem removeAllItem
} from "@/utils/storage"; } from "@/utils/storage";
// 白名单 // 白名单
const whiteList = ['/login','/','/StationLevel', '/oatuh_login','/editPassword', '/404', '/401'] const whiteList = ['/login', '/oatuh_login', '/404', '/401', '/focusExploration', '/clueVerification', '/deploymentApproval']
/** /**
* 路由前置守卫 * 路由前置守卫
* to 去哪里 * to 去哪里
@ -14,42 +18,43 @@ const whiteList = ['/login','/','/StationLevel', '/oatuh_login','/editPassword',
* next 往下走 * next 往下走
*/ */
let onRun = true; let onRun = true;
// router.beforeEach(async (to, from, next) => { router.beforeEach(async (to, from, next) => {
// // 存在 token ,进入主页 // 存在 token ,进入主页
// // if (store.state.user.token) { // if (store.state.user.token) {
// // 快捷访问 // 快捷访问
// if (store.getters.token) { if (store.getters.token) {
// // 判断用户资料是否获取 // 判断用户资料是否获取
// // 若不存在用户信息,则需要获取用户信息 // 若不存在用户信息,则需要获取用户信息
// // 触发获取用户信息的 action并获取用户当前权限 // 触发获取用户信息的 action并获取用户当前权限
// await store.commit('permission/setRouteReady', true) await store.commit('permission/setRouteReady', true)
// // 添加完动态路由之后,需要在进行一次主动跳转 // 添加完动态路由之后,需要在进行一次主动跳转
// const afterMenuList = await getItem('menusPermission'); const afterMenuList = await getItem('menusPermission');
// // 处理用户权限,筛选出需要添加的权限 // 处理用户权限,筛选出需要添加的权限
// if (store.state.permission.routes == 0) { if (store.state.permission.routes == 0) {
// const filterRoutes = await store.dispatch('permission/filterRoutes', afterMenuList) const filterRoutes = await store.dispatch('permission/filterRoutes', afterMenuList)
// filterRoutes.forEach(item => { filterRoutes.forEach(item => {
// router.addRoute(item) router.addRoute(item)
// }) })
// next({ next({
// ...to, ...to,
// replace: true replace: true
// }) })
// } else { } else {
// next() next()
// } }
// // 利用 addRoute 循环添加 // 利用 addRoute 循环添加
// } else { } else {
// const isOatuh = getItem('isOatuh') const isOatuh = getItem('isOatuh')
// // 没有token的情况下可以进入白名单 // 没有token的情况下可以进入白名单
// if (whiteList.indexOf(to.path) > -1) { if (whiteList.indexOf(to.path) > -1) {
// next() next()
// } else { } else {
// if (isOatuh) { if (isOatuh) {
// next('/oatuh_login') const idEntityCard = getItem('idEntityCard')
// } else { next(`/oatuh_login?token=${Base64.encode(idEntityCard)}`)
// next('/login') } else {
// } next('/login')
// } }
// } }
// }) }
})

View File

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

View File

@ -37,7 +37,7 @@ export default {
isReady: 0, isReady: 0,
userName: getItem("USERNAME") || "", userName: getItem("USERNAME") || "",
keepLiiveRoute: [], //需要缓存的路由 keepLiiveRoute: [], //需要缓存的路由
activeId:'',//警组点击的唯一标识 activeId: '',//警组点击的唯一标识
}), }),
mutations: { mutations: {
setToken(state, token) { setToken(state, token) {
@ -90,10 +90,10 @@ export default {
} = userInfo; } = userInfo;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
login({ login({
userName, userName,
password: Base64.encode(password), password: Base64.encode(password),
kaptcha kaptcha
}) })
.then((data) => { .then((data) => {
if (data.deptList.length === 1) { if (data.deptList.length === 1) {
this.commit("user/setToken", data.jwtToken); this.commit("user/setToken", data.jwtToken);
@ -130,42 +130,36 @@ export default {
*单点登录 *单点登录
*/ */
oatuhLogin(ctx, userInfo) { oatuhLogin(ctx, userInfo) {
const { const { token, systemId, } = userInfo;
token,
systemId,
} = userInfo;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
unifiedLogin({ unifiedLogin({ token, systemId }).then((data) => {
token, if (data.deptList.length === 1) {
systemId, this.commit("user/setToken", data.jwtToken);
}) this.commit("user/setDeptId", data.deptList);
.then((data) => { this.commit("user/setUserName", data.userName);
if (data.deptList.length === 1) { setItem("USERNAME", data.userName);
this.commit("user/setToken", data.jwtToken); setItem('fzUserId', data.fzUserId)
this.commit("user/setDeptId", data.deptList); setItem("SFRH", data.sfrh);
this.commit("user/setUserName", data.userName); setItem("USERID", data.userId);
setItem("USERNAME", data.userName); setItem("PermissionsInfo", data.permissionsInfo);
setItem("SFRH", data.sfrh); this.commit("user/setMenuList", data.menuList);
setItem("USERID", data.userId); setItem("menusPermission", data.menuCodeSet);
setItem("PermissionsInfo", data.permissionsInfo); setItem('isOatuh', 1)
this.commit("user/setMenuList", data.menuList); setItem("idEntityCard", data.idEntityCard);
setItem("menusPermission", data.menuCodeSet); this.commit("user/setUserInfo", {
setItem('isOatuh', 1) token: data.jwtToken,
setItem("idEntityCard", data.idEntityCard); permission: {
this.commit("user/setUserInfo", { buttonPermission: ["removeTest", "viewTest"],
token: data.jwtToken, menus: data.menuCodeSet
permission: { },
buttonPermission: ["removeTest", "viewTest"], menuList: data.menuList,
menus: data.menuCodeSet deptList: data.deptList
}, });
menuList: data.menuList, }
deptList: data.deptList // 保存登录时间
}); setTimeStamp();
} resolve(data);
// 保存登录时间 })
setTimeStamp();
resolve(data);
})
.catch((err) => { .catch((err) => {
reject(err); reject(err);
}); });
@ -175,9 +169,9 @@ export default {
refreshToken(ctx, parmas) { refreshToken(ctx, parmas) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
refreshToken({ refreshToken({
deptId: parmas.deptId, deptId: parmas.deptId,
authorization: parmas.jwtToken authorization: parmas.jwtToken
}) })
.then((data) => { .then((data) => {
this.commit("user/setToken", ""); this.commit("user/setToken", "");
this.commit("user/setToken", data.jwtToken); this.commit("user/setToken", data.jwtToken);

View File

@ -18,14 +18,12 @@ service.interceptors.request.use(
if (isCheckTimeout()) { if (isCheckTimeout()) {
//超时 执行退出 //超时 执行退出
store.dispatch('user/logout'); store.dispatch('user/logout');
router.push('/login'); // router.push('/login');
return Promise.reject(new Error('token 失效')); return Promise.reject(new Error('token 失效'));
} }
if (!config.url.startsWith("/jcApi")) { if (!config.url.startsWith("/jcApi")) {
config.headers.Authorization = `${store.getters.token}`; config.headers.Authorization = `${store.getters.token}`;
} }
} else {
router.push('/login');
} }
//2.设置headers icode //2.设置headers icode
// config.headers.code = ''; // config.headers.code = '';
@ -57,7 +55,7 @@ service.interceptors.response.use(
// return response.data; // return response.data;
} else if (code === 401) { } else if (code === 401) {
store.dispatch('user/logout'); store.dispatch('user/logout');
router.push('/login'); // router.push('/login');
ElMessage.error(message); // 提示错误信息 ElMessage.error(message); // 提示错误信息
ElMessage({ ElMessage({
message: message || msg, message: message || msg,
@ -83,7 +81,7 @@ service.interceptors.response.use(
error.response.data.code === 401 error.response.data.code === 401
) { ) {
store.dispatch('user/logout'); store.dispatch('user/logout');
router.push('/login'); // router.push('/login');
} }
// ElMessage({ // ElMessage({
// message: error.message, // message: error.message,

View File

@ -0,0 +1,42 @@
<template></template>
<script setup>
import { ref, onMounted } from "vue";
import { useStore } from "vuex";
import { useRouter } from "vue-router";
import {
setItem
} from "@/utils/storage";
const loginDialog = ref(false);
const deptList = ref([]);
const store = useStore();
function redirectAuth() {
let token = location.hash.slice(20) || null;
if (token != null) {
token = token.replace(/\ +/g, "");
setItem("SSOTOKEN", token)
handleLogin({ token: token});
} else {
window.location.href = `http://155.240.22.102:40992`;
}
}
const handleLogin = (e) => {
store.dispatch("user/oatuhLogin", e).then((res) => {
// 登录后操作
if (res.deptList.length === 1) {
window.location.hash = "/";
} else {
deptList.value = [...res.deptList];
loginDialog.value = true;
authorization.value = res.jwtToken;
}
});
};
onMounted(() => {
redirectAuth();
});
</script>
<style></style>

View File

@ -4,10 +4,10 @@ function resolve(dir) {
return path.join(__dirname, dir); return path.join(__dirname, dir);
} }
const serverHost = "http://192.168.1.32:8066"; const serverHost = "http://192.168.1.32:8066";
// const serverHost = "http://127.0.0.1:8006" // const serverHost = "http://192.168.0.83:8006";
module.exports = { module.exports = {
publicPath: "./", publicPath: "./",
outputDir: "ylth", outputDir: "zhgj",
assetsDir: "static", assetsDir: "static",
lintOnSave: false, //process.env.NODE_ENV === 'development', lintOnSave: false, //process.env.NODE_ENV === 'development',
productionSourceMap: false, productionSourceMap: false,

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

Some files were not shown because too many files have changed in this diff Show More