diff --git a/public/sxyz.ico b/public/sxyz.ico new file mode 100644 index 0000000..1e72d0f Binary files /dev/null and b/public/sxyz.ico differ diff --git a/src/api/gzaiBox/dict.js b/src/api/gzaiBox/dict.js new file mode 100644 index 0000000..3709f22 --- /dev/null +++ b/src/api/gzaiBox/dict.js @@ -0,0 +1,25 @@ +import request from '@/utils/requestOthers' + +const getDict = (dictName) => { + let key = 'dict_' + dictName; + let obj = window.jhcaches[key]; + if (obj && obj.length > 0) { + return new Promise((resolve) => { + resolve(obj); + }) + } else { + return new Promise(async (resolve) => { + let data = await request({ + url: `/publics/aiBox/dicts`, + method: 'get' + }); + let obj = data.data || []; + if (obj && obj.length > 0) { + window.jhcaches[key] = obj; + } + resolve(obj); + }); + } +} + +export default getDict; \ No newline at end of file diff --git a/src/api/gzaiBox/index.js b/src/api/gzaiBox/index.js new file mode 100644 index 0000000..6391775 --- /dev/null +++ b/src/api/gzaiBox/index.js @@ -0,0 +1,29 @@ +import request from '@/utils/requestOthers' + +const listView=(deptId,projectId)=> { + return request({ + url: `/publics/aiBox/v1/listView?deptId=${deptId||0}&projectId=${projectId||0}&pageSize=20&pageNum=1`, + method: 'get' + }) +} + +const list=(data,pageNum,pageSize)=> { + return request({ + url: `/publics/aiBox/list?pageNum=${pageNum}&pageSize=${pageSize}`, + data:data, + method: 'post' + }) +} + +const groupCountByAlarmType=(deptId,projectId,now)=> { + return request({ + url: `/publics/aiBox/groupCountByAlarmType?deptId=${deptId||0}&projectId=${projectId||0}&now=${now}`, + method: 'get' + }) +} + +export default{ + list, + listView, + groupCountByAlarmType +} \ No newline at end of file diff --git a/src/api/index.js b/src/api/index.js index 18e85fb..e76138e 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -20,6 +20,8 @@ import standard from './standard/index' import flow from './flow/index' import video from './video/index' import aiBoxVideo from './video/aiBoxVideo' +import gzAiBoxVideo from './gzaiBox/index' +import gzDict from './gzaiBox/dict' import plan from './plan/index' import periodical from './periodical/index' import engin from './engin' @@ -51,5 +53,7 @@ export default { flow, plan, downFile:download, - engin + engin, + gzAiBoxVideo, + gzDict } \ No newline at end of file diff --git a/src/pages/gzaiBox/index.vue b/src/pages/gzaiBox/index.vue index 08dab74..6c899bd 100644 --- a/src/pages/gzaiBox/index.vue +++ b/src/pages/gzaiBox/index.vue @@ -1,34 +1,490 @@ - - - \ No newline at end of file +} +.project-aivideo { + .chart-overview-gif { + top: 37px !important; + left: 93px; + } + + .tb-list1 { + margin: 12px; + width: calc(100% - 24px); + border-collapse: collapse; + border: solid 1px #ffffff52; + + th { + font-size: 14px; + border: solid 1px #ffffff52; + line-height: 60px; + } + + td { + font-size: 12px; + text-align: center; + border: solid 1px #ffffff52; + line-height: 40px; + } + } + .ai-list { + padding: 0px 24px 8px; + .ai-item { + display: inline-flex; + margin: 12px 12px 0px 0px; + width: calc(33% - 12px); + color: #ccc; + line-height: 24px; + .item-right { + padding-left: 12px; + } + } + } + .data-list { + .ai-list { + .ai-item { + margin-bottom: 8px; + } + } + } + .ai-nav { + padding: 12px; + .nav-item { + display: inline-block; + margin-left: 12px; + text-align: center; + padding: 0px 8px; + &:first-child { + margin-left: 0px; + } + } + } +} + diff --git a/src/permission.js b/src/permission.js index d93826f..ca7d157 100644 --- a/src/permission.js +++ b/src/permission.js @@ -8,7 +8,7 @@ import { isRelogin } from '@/utils/request' NProgress.configure({ showSpinner: false }) -const whiteList = ['/yanZhu_GZAI'] +const whiteList = ['/yanZhuGZAI'] router.beforeEach((to, from, next) => { NProgress.start() diff --git a/src/router/index.js b/src/router/index.js index d8d3535..1d73365 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -121,9 +121,8 @@ const routes = [ component: () => import(/* webpackChunkName: "video" */ '../pages/photography.vue') }, { - path: '/yanZhu_GZAI', - name: 'yanZhu_GZAI', - meta:{nav:63,}, + path: '/yanZhuGZAI', + name: 'yanZhuGZAI', component: () => import(/* webpackChunkName: "gzaiBox" */ '../pages/gzaiBox/index.vue') } ] diff --git a/src/utils/requestOthers.js b/src/utils/requestOthers.js new file mode 100644 index 0000000..e0e2760 --- /dev/null +++ b/src/utils/requestOthers.js @@ -0,0 +1,143 @@ +import axios from 'axios' +import { Notification, Message, Loading } from 'element-ui' +import { getToken } 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 }; + +axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' +// 创建axios实例 +const service = axios.create({ + // axios中请求配置有baseURL选项,表示请求URL公共部分 + baseURL: "http://62.234.3.186:8087/YanZhuGZAI", + // 超时 + timeout: 200000 +}) + +// request拦截器 +service.interceptors.request.use(config => { + // 是否需要设置 token + const isToken = (config.headers || {}).isToken === false + // 是否需要防止数据重复提交 + const isRepeatSubmit = (config.headers || {}).repeatSubmit === false + if (getToken() && !isToken) { + config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义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_data,requestObj.data,s_url) + 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 => { + // 未设置状态码则默认成功状态 + 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) { + Message({ message: "权限不足,请登录后重试!", type: 'error' }) + return Promise.reject('error') + } else if (code === 500) { + if(msg.indexOf('重复提交')==-1){ + Message({ message: msg, type: 'error' }) + } + return Promise.reject(new Error(msg)) + } else if (code === 601) { + if(msg.indexOf('重复提交')==-1){ + Message({ message: msg, type: 'warning' }) + } + return Promise.reject('error') + } else if (code !== 200) { + if(msg.indexOf('重复提交')==-1){ + Notification.error({ title: msg }) + } + return Promise.reject('error') + } else { + return res.data + } + }, + error => { + console.log('err' + error) + let { message } = error; + if (message == "Network Error") { + message = "后端接口连接异常"; + } else if (message.includes("Request failed with status code")) { + message = "系统接口" + message.substr(message.length - 3) + "异常"; + } + if(message.indexOf('重复提交')==-1){ + 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 axios({ + url:url, + method:"get", + params:params||{}, + 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 { axios,service} +export default service