From 4fdd200dd82db579057ecd2047c339bb5dbc79c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=BF=94=E5=AE=87-=E6=97=85=E7=AE=A1=E5=AE=B6?= <153298343@qq.com> Date: Sun, 17 Apr 2022 23:32:22 +0800 Subject: [PATCH] up --- package.json | 1 + src/api/accident/index.js | 8 - src/api/risk/hazardindex.js | 45 ++++ src/api/risk/hiddendangerindex.js | 0 src/api/risk/riskindex.js | 0 src/api/system/dictionary.js | 11 + src/api/training/index.js | 49 ++++ src/api/training/record.js | 49 ++++ src/main.js | 5 +- src/utils/common.js | 272 ++++++++++++++++++++ src/views/accident/index.vue | 362 ++++++++++++++++++++------- src/views/risk/hazardindex.vue | 8 + src/views/risk/hiddendangerindex.vue | 8 + src/views/risk/riskindex.vue | 8 + src/views/system/dictionary.vue | 10 +- 15 files changed, 731 insertions(+), 105 deletions(-) create mode 100644 src/api/risk/hazardindex.js create mode 100644 src/api/risk/hiddendangerindex.js create mode 100644 src/api/risk/riskindex.js create mode 100644 src/api/training/index.js create mode 100644 src/api/training/record.js create mode 100644 src/utils/common.js create mode 100644 src/views/risk/hazardindex.vue create mode 100644 src/views/risk/hiddendangerindex.vue create mode 100644 src/views/risk/riskindex.vue diff --git a/package.json b/package.json index 7c8c520..1e4491b 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "core-js": "3.6.5", "element-ui": "2.13.2", "js-cookie": "2.2.0", + "moment": "^2.29.2", "normalize.css": "7.0.0", "nprogress": "0.2.0", "path-to-regexp": "2.4.0", diff --git a/src/api/accident/index.js b/src/api/accident/index.js index cf2ebcd..f51bcf1 100644 --- a/src/api/accident/index.js +++ b/src/api/accident/index.js @@ -4,14 +4,6 @@ import request from '@/utils/request' - -export function listaccidentparameters(params) { - return request({ - url: '/api/admin/accident/parameters', - method: 'get', - params:params - }) -} export function listaccident(params) { return request({ url: '/api/admin/accident/index', diff --git a/src/api/risk/hazardindex.js b/src/api/risk/hazardindex.js new file mode 100644 index 0000000..ca7783b --- /dev/null +++ b/src/api/risk/hazardindex.js @@ -0,0 +1,45 @@ +import request from '@/utils/request' + +export function listtask(params) { + return request({ + url: '/api/admin/task/index', + method: 'get', + params:params + }) +} + +export function store(data) { + return request({ + url: '/api/admin/task/store', + method: 'post', + data + }) +} + +export function save(data) { + return request({ + url: '/api/admin/task/save', + method: 'post', + data + }) +} + +export function del(safety_task_id) { + return request({ + url: '/api/admin/task/destroy', + method: 'get', + params: { + safety_task_id + } + }) +} + +export function get(safety_task_id) { + return request({ + url: '/api/admin/task/show', + method: 'get', + params: { + safety_task_id + } + }) +} diff --git a/src/api/risk/hiddendangerindex.js b/src/api/risk/hiddendangerindex.js new file mode 100644 index 0000000..e69de29 diff --git a/src/api/risk/riskindex.js b/src/api/risk/riskindex.js new file mode 100644 index 0000000..e69de29 diff --git a/src/api/system/dictionary.js b/src/api/system/dictionary.js index 0519f9a..5b434e2 100644 --- a/src/api/system/dictionary.js +++ b/src/api/system/dictionary.js @@ -23,6 +23,17 @@ export function getparameter(param) { }) } +export function getparameteritem(number) { + + return request({ + url: '/api/admin/parameter/show', + method: 'get', + params: { + number: number + } + }) +} + export function listparameter(param) { return request({ url: '/api/admin/parameter/index', diff --git a/src/api/training/index.js b/src/api/training/index.js new file mode 100644 index 0000000..858bea4 --- /dev/null +++ b/src/api/training/index.js @@ -0,0 +1,49 @@ +import request from '@/utils/request' + + + + + +export function listtrain(params) { + return request({ + url: '/api/admin/train/index', + method: 'get', + params:params + }) +} + +export function store(data) { + return request({ + url: '/api/admin/train/store', + method: 'post', + data + }) +} + +export function save(data) { + return request({ + url: '/api/admin/train/save', + method: 'post', + data + }) +} + +export function del(id) { + return request({ + url: '/api/admin/train/destroy', + method: 'get', + params: { + id + } + }) +} + +export function get(id) { + return request({ + url: '/api/admin/train/show', + method: 'get', + params: { + id + } + }) +} diff --git a/src/api/training/record.js b/src/api/training/record.js new file mode 100644 index 0000000..2fa5647 --- /dev/null +++ b/src/api/training/record.js @@ -0,0 +1,49 @@ +import request from '@/utils/request' + + + + + +export function listtrainlog(params) { + return request({ + url: '/api/admin/train-log/index', + method: 'get', + params:params + }) +} + +export function store(data) { + return request({ + url: '/api/admin/train-log/store', + method: 'post', + data + }) +} + +export function save(data) { + return request({ + url: '/api/admin/train-log/save', + method: 'post', + data + }) +} + +export function del(id) { + return request({ + url: '/api/admin/train-log/destroy', + method: 'get', + params: { + id + } + }) +} + +export function get(id) { + return request({ + url: '/api/admin/train-log/show', + method: 'get', + params: { + id + } + }) +} diff --git a/src/main.js b/src/main.js index e918037..27987fc 100644 --- a/src/main.js +++ b/src/main.js @@ -34,7 +34,10 @@ Vue.use(ViewUI); // 如果想要中文版 element-ui,按如下方式声明 Vue.use(ElementUI) -Vue.config.productionTip = false +Vue.config.productionTip = false; +import moment from "moment" +Vue.prototype.$moment = moment; +Vue.prototype.base = base; new Vue({ el: '#app', diff --git a/src/utils/common.js b/src/utils/common.js new file mode 100644 index 0000000..6a7e618 --- /dev/null +++ b/src/utils/common.js @@ -0,0 +1,272 @@ +let base = { + isPhone (val) { + return /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(val) + }, + isDecimal (val) { + return /(^[\-0-9][0-9]*(.[0-9]+)?)$/.test(val) + }, + isNumber (val) { + return /(^[\-0-9][0-9]*([0-9]+)?)$/.test(val) + }, + isMail (val) { + return /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/.test(val) + }, + isUrl (url) { + return this.checkUrl(url) + }, + checkUrl (url) { + // url= 协议://(ftp的登录信息)[IP|域名](:端口号)(/或?请求参数) + var strRegex = + '^((https|http|ftp)://)?' + // (https或http或ftp):// 可有可无 + "(([\\w_!~*'()\\.&=+$%-]+: )?[\\w_!~*'()\\.&=+$%-]+@)?" + // ftp的user@ 可有可无 + '(([0-9]{1,3}\\.){3}[0-9]{1,3}' + // IP形式的URL- 3位数字.3位数字.3位数字.3位数字 + '|' + // 允许IP和DOMAIN(域名) + '(localhost)|' + // 匹配localhost + "([\\w_!~*'()-]+\\.)*" + // 域名- 至少一个[英文或数字_!~*\'()-]加上. + '\\w+\\.' + // 一级域名 -英文或数字 加上. + '[a-zA-Z]{1,6})' + // 顶级域名- 1-6位英文 + '(:[0-9]{1,5})?' + // 端口- :80 ,1-5位数字 + '((/?)|' + // url无参数结尾 - 斜杆或这没有 + "(/[\\w_!~*'()\\.;?:@&=+$,%#-]+)+/?)$" // 请求参数结尾- 英文或数字和[]内的各种字符 + var re = new RegExp(strRegex, 'i') // i不区分大小写 + // 将url做uri转码后再匹配,解除请求参数中的中文和空字符影响 + if (re.test(encodeURI(url))) { + return true + } + return false + }, + matchUrlIp (url, ip) { // url使用是否使用的当前ip + if (!url || !ip) { + return false + } + return url.indexOf(ip.replace('https://', '').replace('http://', '')) >= 0 + }, + getImgSrc (src, httpUrl) { + if (this.isUrl(src)) { + return src + } + if (httpUrl) { + return httpUrl + src + } + return src + }, + previewImg (src, httpUrl) { // 图片预览,目前只支持单图片预览 + if (src && !this.isUrl(src) && httpUrl) { + if (src.substr(0, 1) == '/' && httpUrl.substr(httpUrl.length - 1, 1) == '/') { + src = src.substr(1) + } + src = (httpUrl + src) + } + let id = 'vol-preview' + let $div = document.getElementById(id) + if (!$div) { + $div = document.createElement('div') + $div.setAttribute('id', 'vol-preview') + let $mask = document.createElement('div') + $mask.style.position = 'absolute' + $mask.style.width = '100%' + $mask.style.height = '100%' + $mask.style.background = 'black' + $mask.style.opacity = '0.6' + $div.appendChild($mask) + $div.style.position = 'fixed' + $div.style.width = '100%' + $div.style.height = '100%' + // $div.style.overflow = "scroll"; + $div.style.top = 0 + $div.style['z-index'] = 9999999 + let $img = document.createElement('img') + $img.setAttribute('class', 'vol-preview-img') + $img.style.position = 'absolute' + $img.style.top = '50%' + $img.style.left = '50%' + $img.style['max-width'] = '90%' + $img.style['max-height'] = '90%' + $img.style.transform = 'translate(-50%,-50%)' + // $img.src = src; + $img.setAttribute('src', src) + $div.appendChild($img) + $div.addEventListener('click', function () { + this.style.display = 'none' + }) + document.body.appendChild($div) + return + } + let $img1 = document.body.appendChild($div).querySelector('.vol-preview-img') + // img.src = src; + $img1.setAttribute('src', src) + $div.style.display = 'block' + }, + // 下载文件 $element 标签, url完整url, fileName 文件名, header 以key/value传值 + // backGroundUrl 后台url,如果后台url直接从后台下载,其他全部通过点击a标签下载 + dowloadFile (url, fileName, header, backGroundUrl) { + if (!url) return alert('此文件没有url不能下载') + if (!this.isUrl(url)) { + url = backGroundUrl + url + } + window.open(url) + + // let $element = document.getElementById('dowonloadfile-a'); + // if (!$element) { + // $element = document.createElement('a'); + // $element.setAttribute("id", "dowonloadfile-a"); + // document.body.append($element); + // } + // //url为一个完整的地址,并且不是后台api的地址,直接点击a标签下载 + // // if (this.isUrl(url) && !this.matchUrlIp(url, backGroundUrl)) { + // // $element.href = url; + // // $element.click(); + // // return; + // // } + + // if (!this.isUrl(url)) { + // if (!this.isUrl(backGroundUrl + url)) { + // console.log("文件路径不正确"); + // alert('文件路径不正确') + // return; + // } + // url = backGroundUrl + url; + // } + // $element.href = url; + // $element.click(); + + // //通过后台api服务器下载 + // if (!this.isUrl(url)) { + // if (!this.isUrl(backGroundUrl + url)) { + // alert('当前下载的文件url【' + url + '】不正确') + // return; + // } + // url = backGroundUrl + url; + // } + // let xmlResquest = new XMLHttpRequest(); + // xmlResquest.open("GET", url, true); + // xmlResquest.setRequestHeader("Content-type", "application/json"); + // if (header && typeof header == 'object') { + // for (const key in header) { + // xmlResquest.setRequestHeader( + // key, + // header[key] + // ); + // } + // } + + // xmlResquest.responseType = "blob"; + // xmlResquest.onload = function (oEvent) { + // if (xmlResquest.status != 200) { + // return alert('没有下载到此文件的信息') + // } + // let content = xmlResquest.response; + // $element.download = fileName; + // let blob = new Blob([content]); + // $element.href = URL.createObjectURL(blob); + // $element.click(); + // }; + // xmlResquest.send(); + }, + downloadImg (data) { + if (!data.url || !data.callback || typeof data.callback !== 'function') { + return + } + // url, backGroundUrl, header, callback + if (this.isUrl(data.url) && !this.matchUrlIp(data.url, data.backGroundUrl)) { + return data.url + } + // 通过后台api服务器下载 + if (!this.isUrl(data.url)) { + if (!this.isUrl(data.backGroundUrl + data.url)) { + return + } + data.url = data.backGroundUrl + data.url + } + var xmlResquest = new XMLHttpRequest() + xmlResquest.open('get', data.url, true) + xmlResquest.responseType = 'blob' + xmlResquest.setRequestHeader('Content-Type', 'application/json') + if (data.header && typeof data.header === 'object') { + for (const key in data.header) { + xmlResquest.setRequestHeader( + key, + data.header[key] + ) + } + } + xmlResquest.onload = function () { + if (this.status == 200) { + var blob = this.response + callback(window.URL.createObjectURL(blob)) + } + } + xmlResquest.send() + }, + // 2020.06.01增加通用方法,将普通对象转换为tree结构 + // data数据格式[ + // { name: 'tree1', id: 1, parentId: 0 }, + // { name: 'tree2', id: 2, parentId: 0 }] + + // 1、id与parentId这两个字段必须有 + // 2、树形tree需要注意Id与parentId循环依赖的问题 + // 3、callback每次生成一新的节点的时回调的方法 + + convertTree (data, callback) { + var treeIds = [] + var root_data = [] + data.forEach(x => { + if (!x.children) { + x.children = [] + } + if (!x.hidden && x.id !== undefined && x.id !== x.parentId && !data.some(s => { + return x.parentId == s.id + })) { + x.isRoot = true + callback && callback(x, data, true, treeIds) + root_data.push(x) + getTree(x.id, x, data, callback, treeIds) + } + }) + var exceptionNodes = data.filter(f => { + return treeIds.indexOf(f.id) == -1 && !f.hidden + }) + + root_data.push(...exceptionNodes) + return root_data + }, + getTreeAllParent (id, data) { // 获取某个节点的所有父节点信息2020.11.01 + var nodes = [] + if (!(data instanceof Array)) { + return nodes + } + + var _child = data.find(x => { return x.id === id }) + if (!_child) { + return [] + } + nodes.push(_child) + var _parentIds = [_child.parentId] + for (let index = 0; index < _parentIds.length; index++) { + var _node = data.find(x => { return x.id === _parentIds[index] && x.id !== x.parentId }) + if (!_node) { + return nodes + } + _parentIds.push(_node.parentId) + nodes.unshift(_node) + } + return nodes + } + +} +export default base + +// 2020.06.01增加通用方法,将普通对象转换为tree结构 +function getTree (id, node, data, callback, treeIds) { + if (treeIds.indexOf(id) == -1) { + treeIds.push(id) + } + data.forEach(x => { + if (!x.hidden && x.parentId == id) { + if (!node.children) node.children = [] + callback && callback(x, node, false) + node.children.push(x) + getTree(x.id, x, data, callback, treeIds) + } + }) +} diff --git a/src/views/accident/index.vue b/src/views/accident/index.vue index 0553f12..f2046e3 100644 --- a/src/views/accident/index.vue +++ b/src/views/accident/index.vue @@ -8,32 +8,33 @@
- + + +
-
- - - +
+ + +