From 17648ba5bec77641b31f264a625c542a6dc8c691 Mon Sep 17 00:00:00 2001 From: TiaStars Date: Fri, 12 Jan 2024 17:42:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=8D=A2=E5=9C=B0=E5=9D=80=EF=BC=8C?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 5 +- .env.production | 12 +- src/api/bigScreenApi/eventApi.js | 29 - src/api/bigScreenApi/index.js | 33 ++ src/api/bigScreenApi/robot.js | 65 +++ src/assets/font/font.css | 4 +- src/permission.js | 43 +- src/utils/auth.js | 11 +- src/utils/request.js | 12 +- src/utils/request1.js | 180 ++++++ src/utils/request2.js | 13 +- .../bigScreen/components/mapLeftContent.vue | 5 +- src/views/bigScreen/map/index.vue | 73 ++- src/views/components/dialog/index.vue | 19 +- src/views/components/mapRight/index.vue | 4 +- src/views/components/newEvent/index.vue | 516 +++++++++++++----- src/views/components/personageTask/index.vue | 252 +++++++++ .../components/shop/components/TabOne.vue | 52 +- src/views/components/shop/index.vue | 6 +- vue.config.js | 2 +- 20 files changed, 1092 insertions(+), 244 deletions(-) create mode 100644 src/api/bigScreenApi/robot.js create mode 100644 src/utils/request1.js create mode 100644 src/views/components/personageTask/index.vue diff --git a/.env.development b/.env.development index dcd99ef..e6e0f88 100644 --- a/.env.development +++ b/.env.development @@ -2,7 +2,7 @@ # @Author: 张涛 # @Date: 2023-11-09 18:29:41 # @LastEditors: JC9527 - # @LastEditTime: 2024-01-06 10:41:10 + # @LastEditTime: 2024-01-12 09:30:34 # @FilePath: \JiangningUrbanManagePc\.env.development ### # 页面标题 @@ -13,7 +13,8 @@ ENV = 'development' # 若依管理系统/开发环境 # /dev-api -VUE_APP_BASE_API = 'http://39.101.188.84:9037' +# VUE_APP_BASE_API = 'http://39.101.188.84:9037' +VUE_APP_BASE_API = 'https://t-jn-bjh-admin-server.jsszkd.com' VUE_APP_BASE_API1 = 'https://t-kd-process-server.jsszkd.com' VUE_APP_BASE_API2 = 'https://t-jn-development-manager-server.jsszkd.com/api/webapp' # VUE_APP_BASE_API = 'http://192.168.0.108:9037' diff --git a/.env.production b/.env.production index cbf1eef..8407eda 100644 --- a/.env.production +++ b/.env.production @@ -1,3 +1,11 @@ +### + # @Descripttion: + # @version: + # @Author: JC9527 + # @Date: 2024-01-09 23:08:15 + # @LastEditors: JC9527 + # @LastEditTime: 2024-01-12 09:27:18 +### # 页面标题 VUE_APP_TITLE = 城市精细化管理监测主题 @@ -5,5 +13,7 @@ VUE_APP_TITLE = 城市精细化管理监测主题 ENV = 'production' # 若依管理系统/生产环境 -VUE_APP_BASE_API = 'http://39.101.188.84:9037' +# VUE_APP_BASE_API = 'http://39.101.188.84:9037' +VUE_APP_BASE_API = 'https://t-jn-bjh-admin-server.jsszkd.com' VUE_APP_BASE_API1 = 'https://t-kd-process-server.jsszkd.com' +VUE_APP_BASE_API2 = 'https://t-jn-development-manager-server.jsszkd.com/api/webapp' \ No newline at end of file diff --git a/src/api/bigScreenApi/eventApi.js b/src/api/bigScreenApi/eventApi.js index d98f41b..15e9b8a 100644 --- a/src/api/bigScreenApi/eventApi.js +++ b/src/api/bigScreenApi/eventApi.js @@ -10,25 +10,6 @@ export function getTrend(params) { }) } -// 事件列表查询 -export function getQueryViewListPage(params,data) { - return request({ - url: "/api/eform/engine/viewEngine/queryViewListPage", - method:'post', - params, - data - }) -} - -// 自动提交事件---保存事件数据 -export function eventSaveData(params,data) { - return request({ - url: "/api/eform/engine/formEngine/saveData", - method:'post', - params, - data - }) -} // 事件概况统计 export function summarystat() { @@ -47,13 +28,3 @@ export function tasksummarystat() { method:'get', }) } - -// 自动提交事件流程 -export function formEnginesaveData(data) { - return request({ - baseURL: process.env.VUE_APP_BASE_API2, - url: "/api/eform/engine/formEngine/saveData", - method:'post', - data - }) -} \ No newline at end of file diff --git a/src/api/bigScreenApi/index.js b/src/api/bigScreenApi/index.js index dc5c676..0d2caf7 100644 --- a/src/api/bigScreenApi/index.js +++ b/src/api/bigScreenApi/index.js @@ -118,4 +118,37 @@ export function getAccesstoken(params){ method: "get", params }) +} +// 获取用户信息 +export function getUserinfo(params){ + return request({ + url:"/jn/single/getUserByaccessToken", + method: "get", + params, + // headers:{ + // isToken:false, + // } + }) +} + +// 事件列表查询 +export function getQueryViewListPage(params,data) { + return request({ + baseURL: process.env.VUE_APP_BASE_API2, + url: "/api/eform/engine/viewEngine/queryViewListPage", + method:'post', + params, + data + }) +} + +// 自动提交事件---保存事件数据 +export function eventSaveData(params,data) { + return request({ + baseURL: process.env.VUE_APP_BASE_API2, + url: "/api/eform/engine/formEngine/saveData", + method:'post', + params, + data + }) } \ No newline at end of file diff --git a/src/api/bigScreenApi/robot.js b/src/api/bigScreenApi/robot.js new file mode 100644 index 0000000..c8b5b49 --- /dev/null +++ b/src/api/bigScreenApi/robot.js @@ -0,0 +1,65 @@ +/* + * @Descripttion: + * @version: + * @Author: JC9527 + * @Date: 2024-01-11 23:19:29 + * @LastEditors: JC9527 + * @LastEditTime: 2024-01-12 12:39:16 + */ +import request from "@/utils/request1" + +// 自动提交事件流程 +export function eventSaveData(params,data) { + return request({ + url: "/api/eform/engine/formEngine/saveData", + method:'post', + params, + data + }) +} +// 模拟登录 +export function robotLogin(data){ + return request({ + url: "/api/system/robotLogin", + method:'post', + data + }) +} +// 事件列表 +export function ViewListPage(params,data){ + return request({ + url: "/api/eform/engine/viewEngine/queryViewListPage", + method:'post', + params, + data + }) +} +/** + * + * 任务派发流程 + */ +// 任务派发流程 +export function autoSubmit(data){ + return request({ + url: "/api/bpm/bpm-front/operateRest/autoSubmit/v1", + method:'put', + data + }) +} +// 任务派至城管队长----获取流程权限 +export function getBpmOperateVo(params){ + return request({ + url: "/api/bpm/bpm-front/displayRest/getBpmOperateVo/v1", + method:'get', + params + }) +} +// 任务派至城管队长----保存业务数据 +export function distributeSaveData(params,data){ + return request({ + url: "/api/eform/engine/formEngine/saveData", + method:'post', + params, + data + }) +} \ No newline at end of file diff --git a/src/assets/font/font.css b/src/assets/font/font.css index 236fe93..accea53 100644 --- a/src/assets/font/font.css +++ b/src/assets/font/font.css @@ -1,4 +1,4 @@ -@font-face { +/* @font-face { font-family: 'YouSheBiaoTiHei'; src: url('http://www.jichuanglanhai.com/demo/font-file/YouSheBiaoTiHei-2.ttf'); } @@ -13,7 +13,7 @@ @font-face { font-family: 'Regular'; src: url('http://www.jichuanglanhai.com/demo/font-file/Alibaba-PuHuiTi-Regular.otf'); -} +} */ @font-face { font-family: 'Source Han Sans CN-Regular'; src: url('./SourceHanSansCN-Regular.otf'); diff --git a/src/permission.js b/src/permission.js index 7eb3742..db35df0 100644 --- a/src/permission.js +++ b/src/permission.js @@ -1,28 +1,51 @@ +/* + * @Descripttion: + * @version: + * @Author: JC9527 + * @Date: 2024-01-09 23:08:15 + * @LastEditors: JC9527 + * @LastEditTime: 2024-01-12 10:52:53 + */ import router from './router' import store from './store' import { Message } from 'element-ui' import NProgress from 'nprogress' import 'nprogress/nprogress.css' -import { getToken, setAccessToken } from '@/utils/auth' +import { setToken, getToken, setAccessToken } from '@/utils/auth' import { isRelogin } from '@/utils/request' -import { getAccesstoken } from "@/api/bigScreenApi/index" +import { getAccesstoken, getUserinfo } from "@/api/bigScreenApi/index" NProgress.configure({ showSpinner: false }) const whiteList = ['/login', '/register', '/bigScreen'] router.beforeEach((to, from, next) => { + NProgress.start() // console.log('tototo',to.path); - if (window.location.href.includes("code=")) { - var reg = new RegExp(/[?&]code=([^&#]+)/); - var c = window.location.href.match(reg); - const code = c && c[1]; - getAccesstoken({code:code}).then(res=>{ - setAccessToken(res.data.accessToken) - }) - NProgress.start() + if(localStorage.getItem('accessToken') && localStorage.getItem('robotToken')) { next() + NProgress.done() + } else { + if (window.location.href.includes("code=")) { + var reg = new RegExp(/[?&]code=([^&#]+)/); + var c = window.location.href.match(reg); + const code = c && c[1]; + getAccesstoken({code:code}).then(res=>{ + console.log(res,"res") + // setAccessToken(res.data.accessToken) + localStorage.setItem('accessToken',res.data.accessToken) + next() + NProgress.done() + // return getUserinfo({accessToken:res.data.accessToken}) + }) + // .then(res=>{ + // localStorage.setItem('AuserInfo', JSON.stringify(el.data)) + + // }) + } } + next() + // if (getToken()) { // to.meta.title && store.dispatch('settings/setTitle', to.meta.title) // /* has token*/ diff --git a/src/utils/auth.js b/src/utils/auth.js index e5cdf20..648d1c0 100644 --- a/src/utils/auth.js +++ b/src/utils/auth.js @@ -4,7 +4,8 @@ const TokenKey = 'Admin-Token' const AccessToken = 'X-Access-Token' -Cookies.set(AccessToken,'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDMwOTkxMTYsInVzZXJuYW1lIjoi6LW15YWtIn0.GwJMwZTBCtjTbG0K-cTV72OJXBxI4VsrSgeBaCCjQM4') +const robot = 'robotToken' + export function getAccessToken() { return Cookies.get(AccessToken) } @@ -13,6 +14,14 @@ export function setAccessToken(token) { return Cookies.set(AccessToken,token) } +export function getRobotToken() { + return Cookies.get(robot) +} + +export function setRobotToken(token) { + return Cookies.set(robot,token) +} + export function getToken() { return Cookies.get(TokenKey) } diff --git a/src/utils/request.js b/src/utils/request.js index 7ff4a85..158cc0f 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -1,7 +1,7 @@ import axios from 'axios' import { Notification, MessageBox, Message, Loading } from 'element-ui' import store from '@/store' -import { getToken, setToken } from '@/utils/auth' +import { getToken, setToken, getEventToken } from '@/utils/auth' import errorCode from '@/utils/errorCode' import { tansParams, blobValidate } from "@/utils/ruoyi"; import cache from '@/plugins/cache' @@ -32,7 +32,8 @@ service.interceptors.request.use(config => { // 是否需要防止数据重复提交 const isRepeatSubmit = (config.headers || {}).repeatSubmit === false if (getToken() && !isToken) { - config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 + // config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 + config.headers['X-Access-Token'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 } // get请求映射params参数 if (config.method === 'get' && config.params) { @@ -86,9 +87,10 @@ service.interceptors.response.use(res => { isRelogin.show = true; MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => { isRelogin.show = false; - store.dispatch('LogOut').then(() => { - location.href = '/#/login'; - }) + // store.dispatch('LogOut').then(() => { + // location.href = '/#/login'; + // }) + location.href = "https://t-jn-bjh-admin.jsszkd.com/" }).catch(() => { isRelogin.show = false; }); diff --git a/src/utils/request1.js b/src/utils/request1.js new file mode 100644 index 0000000..8233dac --- /dev/null +++ b/src/utils/request1.js @@ -0,0 +1,180 @@ +import axios from 'axios' +import { Notification, MessageBox, Message, Loading } from 'element-ui' +import store from '@/store' +import { getRobotToken, setToken } from '@/utils/auth' +import errorCode from '@/utils/errorCode' +import { tansParams, blobValidate } from "@/utils/ruoyi"; +import cache from '@/plugins/cache' +import { saveAs } from 'file-saver' + +let downloadLoadingInstance; +// 是否显示重新登录 +export let isRelogin = { show: false }; + +// 是否正在刷新的标记 +let isRefreshing = false +//重试队列 +let requests = [] + +axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' +// 创建axios实例 +const service = axios.create({ + // axios中请求配置有baseURL选项,表示请求URL公共部分 + // baseURL: process.env.NODE_ENV === "production" ? location.origin : process.env.VUE_APP_BASE_API1, + baseURL: process.env.VUE_APP_BASE_API1, + // 超时 + timeout: 10000 +}) + +// request拦截器 +service.interceptors.request.use(config => { + // 是否需要设置 token + const isToken = (config.headers || {}).isToken === false + // 是否需要防止数据重复提交 + const isRepeatSubmit = (config.headers || {}).repeatSubmit === false + if (localStorage.getItem('robotToken') && !isToken) { + // config.headers['Authorization'] = 'Bearer ' + getAccessToken() // 让每个请求携带自定义token 请根据实际情况自行修改 + config.headers['X-Access-Token'] = localStorage.getItem('robotToken') // 让每个请求携带自定义token 请根据实际情况自行修改 + } + // get请求映射params参数 + if (config.method === 'get' && config.params) { + let url = config.url + '?' + tansParams(config.params); + url = url.slice(0, -1); + config.params = {}; + config.url = url; + } + if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) { + const requestObj = { + url: config.url, + data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data, + time: new Date().getTime() + } + const sessionObj = cache.session.getJSON('sessionObj') + if (sessionObj === undefined || sessionObj === null || sessionObj === '') { + cache.session.setJSON('sessionObj', requestObj) + } else { + const s_url = sessionObj.url; // 请求地址 + const s_data = sessionObj.data; // 请求数据 + const s_time = sessionObj.time; // 请求时间 + const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交 + if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) { + const message = '数据正在处理,请勿重复提交'; + console.warn(`[${s_url}]: ` + message) + return Promise.reject(new Error(message)) + } else { + cache.session.setJSON('sessionObj', requestObj) + } + } + } + return config +}, error => { + console.log(error) + Promise.reject(error) +}) + +// 响应拦截器 +service.interceptors.response.use(res => { + // console.log(res,'resres'); + // 未设置状态码则默认成功状态 + const code = res.data.code || 200; + // 获取错误信息 + const msg = errorCode[code] || res.data.msg || errorCode['default'] + // 二进制数据则直接返回 + if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { + return res.data + } + if (code === 401) { + if (!isRelogin.show){ + isRelogin.show = true; + MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => { + isRelogin.show = false; + // store.dispatch('LogOut').then(() => { + // location.href = '/#/login'; + // }) + location.href = "http://39.101.188.84:9999/demo/JiangNingUmaleWeb/#/index" + }).catch(() => { + isRelogin.show = false; + }); + // TODO:无感刷新token暂缺少不需验证码登录接口 + // const loginForm = { + // username: "admin", + // password: "admin123", + // } + // store.dispatch("NoCodeLogin", loginForm).then(() => { + // isRelogin.show = false; + // res.headers.Authorization = getToken(); + // requests.forEach((cb) => cb(getToken())) + // requests = [] // 重新请求完清空 + // return service(res.config) + // }).catch(() => { + // isRelogin.show = false; + // }); + } else { + return new Promise(resolve => { + // 用函数形式将 resolve 存入,等待刷新后再执行 + requests.push(token => { + res.headers.Authorization = `${token}` + resolve(service(res.config)) + }) + }) + } + // return Promise.reject('无效的会话,或者会话已过期,请重新登录。') + } else if (code === 500) { + Message({ message: msg, type: 'error' }) + return Promise.reject(new Error(msg)) + } else if (code === 601) { + Message({ message: msg, type: 'warning' }) + return Promise.reject('error') + } else if (code !== 200) { + Notification.error({ title: msg }) + return Promise.reject('error') + } else { + return res.data + } + }, + error => { + console.log('err' + error) + let { message } = error; + const originalRequest = error.config; + // console.log(originalRequest,'originalRequest'); + // console.log(error.response.status,'error.response.status'); + if (message == "Network Error") { + message = "后端接口连接异常"; + } else if (message.includes("timeout")) { + message = "系统接口请求超时"; + } else if (message.includes("Request failed with status code")) { + message = "系统接口" + message.substr(message.length - 3) + "异常"; + } + Message({ message: message, type: 'error', duration: 5 * 1000 }) + return Promise.reject(error) + } +) + +// 通用下载方法 +export function download(url, params, filename, config) { + downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", }) + return service.post(url, params, { + transformRequest: [(params) => { return tansParams(params) }], + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + responseType: 'blob', + ...config + }).then(async (data) => { + const isBlob = blobValidate(data); + if (isBlob) { + const blob = new Blob([data]) + saveAs(blob, filename) + } else { + const resText = await data.text(); + const rspObj = JSON.parse(resText); + const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] + Message.error(errMsg); + } + downloadLoadingInstance.close(); + }).catch((r) => { + console.error(r) + Message.error('下载文件出现错误,请联系管理员!') + downloadLoadingInstance.close(); + }) +} + +export default service diff --git a/src/utils/request2.js b/src/utils/request2.js index 3d3c0c2..347a8ca 100644 --- a/src/utils/request2.js +++ b/src/utils/request2.js @@ -21,7 +21,7 @@ axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' const service = axios.create({ // axios中请求配置有baseURL选项,表示请求URL公共部分 // baseURL: process.env.NODE_ENV === "production" ? location.origin : process.env.VUE_APP_BASE_API1, - baseURL: process.env.VUE_APP_BASE_API1, + baseURL: process.env.VUE_APP_BASE_API2, // 超时 timeout: 10000 }) @@ -32,9 +32,9 @@ service.interceptors.request.use(config => { const isToken = (config.headers || {}).isToken === false // 是否需要防止数据重复提交 const isRepeatSubmit = (config.headers || {}).repeatSubmit === false - if (getAccessToken() && !isToken) { + if (localStorage.getItem('accessToken') && !isToken) { // config.headers['Authorization'] = 'Bearer ' + getAccessToken() // 让每个请求携带自定义token 请根据实际情况自行修改 - config.headers['X-Access-Token'] = getAccessToken() // 让每个请求携带自定义token 请根据实际情况自行修改 + config.headers['X-Access-Token'] = localStorage.getItem('accessToken') // 让每个请求携带自定义token 请根据实际情况自行修改 } // get请求映射params参数 if (config.method === 'get' && config.params) { @@ -88,9 +88,10 @@ service.interceptors.response.use(res => { isRelogin.show = true; MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => { isRelogin.show = false; - store.dispatch('LogOut').then(() => { - location.href = '/#/login'; - }) + // store.dispatch('LogOut').then(() => { + // location.href = '/#/login'; + // }) + location.href = "https://t-jn-bjh-admin.jsszkd.com/" }).catch(() => { isRelogin.show = false; }); diff --git a/src/views/bigScreen/components/mapLeftContent.vue b/src/views/bigScreen/components/mapLeftContent.vue index 04e41ee..4297aaf 100644 --- a/src/views/bigScreen/components/mapLeftContent.vue +++ b/src/views/bigScreen/components/mapLeftContent.vue @@ -4,7 +4,7 @@ * @Author: JC9527 * @Date: 2023-08-15 09:44:13 * @LastEditors: JC9527 - * @LastEditTime: 2024-01-06 17:14:03 + * @LastEditTime: 2024-01-11 10:10:12 -->