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 @@