feat: code save

liujun0703-新项目开发
DESKTOP-2ESM03N\zcloud 2024-07-23 14:48:41 +08:00
commit 06f842b97f
31 changed files with 838 additions and 195 deletions

View File

@ -6,28 +6,28 @@ module.exports = {
"postcss-url": {},
// to edit target browsers: use "browserslist" field in package.json
"autoprefixer": {},
'postcss-px-to-viewport': {
// options
unitToConvert: 'px',//(String) 需要转换的单位,默认为"px"
viewportWidth: 1920, // (Number) 设计稿的视口宽度一般是750
unitPrecision: 3, // (Number) 单位转换后保留的精度(很多时候无法整除)
viewportUnit: 'vw', // (String) 希望使用的视口单位
selectorBlackList: ['.ignore', '.hairlines'],
/*(Array) CSS使px
如果传入的值为字符串的话只要选择器中含有传入值就会被匹配
例如 selectorBlackList ['body'] 的话 那么 .body-class 就会被忽略
如果传入的值为正则表达式的话那么就会依据CSS选择器是否匹配该正则
例如 selectorBlackList [/^body$/] , 那么 body 会被忽略 .body 不会*/
minPixelValue: 1, // (Number) 设置最小的转换数值如果为1的话只有大于1的值会被转换
mediaQuery: false, // (Boolean) 媒体查询里的单位是否需要转换单位
exclude: [/^node_modules$/],// (Array or Regexp) 忽略某些文件夹下的文件或特定文件,例如 'node_modules' 下的文件
include: [/BI/],
/*(Array or Regexp) include 'src/mobile'
如果值是一个正则表达式将包含匹配的文件否则将排除该文件
如果传入的值是一个数组那么数组里的值必须为正则
注意exclude和include是可以一起设置的将取两者规则的交集*/
landscapeUnit: 'vw', //横屏时使用的单位
landscapeWidth: 750,// 横屏时使用的视口宽度
}
// 'postcss-px-to-viewport': {
// // options
// unitToConvert: 'px',//(String) 需要转换的单位,默认为"px"
// viewportWidth: 1920, // (Number) 设计稿的视口宽度一般是750
// unitPrecision: 3, // (Number) 单位转换后保留的精度(很多时候无法整除)
// viewportUnit: 'vw', // (String) 希望使用的视口单位
// selectorBlackList: ['.ignore', '.hairlines'],
// /*(Array) 需要忽略的CSS选择器不会转为视口单位使用原有的px等单位
// 如果传入的值为字符串的话,只要选择器中含有传入值就会被匹配
// 例如 selectorBlackList 为 ['body'] 的话, 那么 .body-class 就会被忽略
// 如果传入的值为正则表达式的话,那么就会依据CSS选择器是否匹配该正则
// 例如 selectorBlackList 为 [/^body$/] , 那么 body 会被忽略,而 .body 不会*/
// minPixelValue: 1, // (Number) 设置最小的转换数值如果为1的话只有大于1的值会被转换
// mediaQuery: false, // (Boolean) 媒体查询里的单位是否需要转换单位
// exclude: [/^node_modules$/],// (Array or Regexp) 忽略某些文件夹下的文件或特定文件,例如 'node_modules' 下的文件
// include: [/BI/],
// /*(Array or Regexp) 如果设置了include那将只有匹配到的文件才会被转换例如只转换 'src/mobile' 下的文件
// 如果值是一个正则表达式,将包含匹配的文件,否则将排除该文件
// 如果传入的值是一个数组,那么数组里的值必须为正则
// 注意exclude和include是可以一起设置的将取两者规则的交集*/
// landscapeUnit: 'vw', //横屏时使用的单位
// landscapeWidth: 750,// 横屏时使用的视口宽度
// }
}
}

View File

@ -17,6 +17,7 @@
"dependencies": {
"@jiaminghi/data-view": "^2.10.0",
"@riophae/vue-treeselect": "^0.4.0",
"autofit.js": "^3.1.1",
"axios": "^0.21.1",
"dayjs": "^1.11.10",
"echarts": "^5.3.1",
@ -26,11 +27,11 @@
"jspdf": "^2.5.1",
"moment": "^2.29.3",
"motion": "^10.16.4",
"throttle-debounce": "^5.0.0",
"mqtt": "4.2.1",
"normalize.css": "^8.0.1",
"nprogress": "^0.2.0",
"relation-graph": "^1.1.0",
"throttle-debounce": "^5.0.0",
"video.js": "^7.19.2",
"vue": "^2.5.2",
"vue-baidu-map": "^0.21.22",

Binary file not shown.

After

Width:  |  Height:  |  Size: 1002 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

View File

@ -11,38 +11,56 @@
<div class="right-menu-item hover-effect">
<span style="font-weight: bold">姓名{{ userForm.NAME }}</span>
</div>
<div class="right-menu-item hover-effect" @click="gotoBI()">
<svg-icon icon-class="dashboard" />
<span>可视化</span>
</div>
<div class="right-menu-item hover-effect" @click="gotoMap()">
<svg-icon icon-class="dashboard" />
<span>地图</span>
</div>
<div class="right-menu-item hover-effect" @click="setShowModel('prevention')">
<svg-icon icon-class="dashboard" />
<span>双重预防</span>
</div>
<div class="right-menu-item hover-effect" @click="setShowModel('relatedParties')">
<svg-icon icon-class="dashboard" />
<span>相关方</span>
</div>
<div class="right-menu-item hover-effect" @click="setShowModel('educationAndTraining')">
<!-- <div class="right-menu-item hover-effect" @click="gotoBI()">-->
<!-- <svg-icon icon-class="dashboard" />-->
<!-- <span>可视化</span>-->
<!-- </div>-->
<!-- <div class="right-menu-item hover-effect" @click="gotoMap()">-->
<!-- <svg-icon icon-class="dashboard" />-->
<!-- <span>地图</span>-->
<!-- </div>-->
<!-- <div class="right-menu-item hover-effect" @click="setShowModel('prevention')">-->
<!-- <svg-icon icon-class="dashboard" />-->
<!-- <span>双重预防</span>-->
<!-- </div>-->
<!-- <div class="right-menu-item hover-effect" @click="setShowModel('relatedParties')">-->
<!-- <svg-icon icon-class="dashboard" />-->
<!-- <span>相关方</span>-->
<!-- </div>-->
<!-- <div class="right-menu-item hover-effect" @click="setShowModel('educationAndTraining')">-->
<!-- <svg-icon icon-class="example" />-->
<!-- <span>教育培训</span>-->
<!-- </div>-->
<!-- <div class="right-menu-item hover-effect" @click="setShowModel('highRisk')">-->
<!-- <svg-icon icon-class="example" />-->
<!-- <span>高危作业管理</span>-->
<!-- </div>-->
<!-- <div class="right-menu-item hover-effect" @click="setShowModel('monitor')">-->
<!-- <svg-icon icon-class="example" />-->
<!-- <span>监测预警</span>-->
<!-- </div>-->
<!-- <div class="right-menu-item hover-effect" @click="setShowModel('comprehensive')">-->
<!-- <svg-icon icon-class="example" />-->
<!-- <span>综合管理</span>-->
<!-- </div>-->
<div class="right-menu-item hover-effect" @click="$router.push({path:'/guide'})">
<svg-icon icon-class="example" />
<span>教育培训</span>
</div>
<div class="right-menu-item hover-effect" @click="setShowModel('highRisk')">
<svg-icon icon-class="example" />
<span>高危作业管理</span>
</div>
<div class="right-menu-item hover-effect" @click="setShowModel('monitor')">
<svg-icon icon-class="example" />
<span>监测预警</span>
</div>
<div class="right-menu-item hover-effect" @click="setShowModel('comprehensive')">
<svg-icon icon-class="example" />
<span>综合管理</span>
<span>首页</span>
</div>
<el-dropdown class="right-menu-item" trigger="click">
<div style="cursor:pointer;">
<svg-icon icon-class="guide" />
<span>更多</span>
<i class="el-icon-arrow-down el-icon--right"/>
</div>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item v-for="(item,index) in menuList" :key="index" @click.native="item.click">
{{ item.text }}
</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<!-- <template v-if="device!=='mobile'">
<screenfull id="screenfull" class="right-menu-item hover-effect" />
@ -163,6 +181,7 @@ import Screenfull from '@/components/Screenfull'
import SizeSelect from '@/components/SizeSelect'
import { requestFN } from '@/utils/request'
import { upload } from '@/utils/upload'
import { menuList } from '@/views/newBI/menuList'
export default {
components: {
Breadcrumb,
@ -285,7 +304,8 @@ export default {
dialogImageUrl: '',
dialogVisible: false,
DEPARTMENT_NAME: '',
FFILE: {}
FFILE: {},
menuList
}
},
computed: {

View File

@ -99,6 +99,18 @@ export const constantRoutes = [
name: 'map',
hidden: true,
component: () => import('@/views/map/index')
},
{
path: '/guide',
name: 'guide',
hidden: true,
component: () => import('@/views/newBI/index'),
children: [
{
path: '',
component: () => import('@/views/newBI/guide')
}
]
}
]
const createRouter = () => new Router({

View File

@ -15,7 +15,7 @@
</ul>
</menu>
<div class="right">
<div class="iconfont icon-tuichu" @click="$router.push('/index')"/>
<div class="iconfont icon-tuichu" @click="$router.push('/guide')"/>
<div
:class="['iconfont', !isFullScreen ? 'icon-full-screen' : 'icon-tuichuquanping']"
@click="handleFullScreen(undefined)"/>

View File

@ -22,7 +22,7 @@
@click="handleFullScreen(undefined)">
<span>全屏</span>
</div>
<div class="iconfont icon-tuichu color058" @click="$router.push('/index')">
<div class="iconfont icon-tuichu color058" @click="$router.push('/guide')">
<span>退出</span>
</div>
</div>

View File

@ -22,7 +22,7 @@
@click="handleFullScreen(undefined)">
<span>全屏</span>
</div>
<div class="iconfont icon-tuichu" @click="$router.push('/index')">
<div class="iconfont icon-tuichu" @click="$router.push('/guide')">
<span>退出</span>
</div>
</div>

View File

@ -34,6 +34,11 @@
<el-table-column prop="EVENT_TYPE" label="事件类型" show-overflow-tooltip="true" />
<el-table-column prop="REPORT_TIME" label="接报时间" show-overflow-tooltip="true" />
<el-table-column prop="OCCURRENCE_TIME" label="发生时间" show-overflow-tooltip="true" />
<el-table-column prop="RESCUE_SITUATION" label="救援情况" show-overflow-tooltip="true">
<template slot-scope="scope">
{{ scope.row.RESCUE_SITUATION === '1' ? '已发起' : (scope.row.RESCUE_SITUATION === '2' || scope.row.RESCUE_SITUATION === null ? '未发起' : '') }}
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="500">
<template slot-scope="{row}">
<el-button type="primary" size="mini" @click="handleRescue(row.ID)"></el-button>
@ -715,7 +720,8 @@ export default {
this.dialogRescueVisible = true
this.rescueForm = {
FIRERESERVEPLAN_ID: '',
HIERARCHICALRESPONSE_ID: ''
HIERARCHICALRESPONSE_ID: '',
REGISTRATION_ID: id
}
},
confirmRescue() {
@ -723,13 +729,15 @@ export default {
if (valid) {
this.dialogRescueVisible = false
//
this.sendSMS(this.rescueForm.FIRERESERVEPLAN_ID, this.rescueForm.HIERARCHICALRESPONSE_ID)
this.sendSMS(this.rescueForm.FIRERESERVEPLAN_ID, this.rescueForm.HIERARCHICALRESPONSE_ID, this.rescueForm.REGISTRATION_ID)
.finally(() => {
this.getList()
})
}
})
},
sendSMS(planId, responseId) {
requestFN('/major/registration/sendSMS', { planId, responseId }).then((response) => {
})
sendSMS(planId, responseId, registrationId) {
return requestFN('/major/registration/sendSMS', { planId, responseId, registrationId })
},
handleRegionChange(value) {
const selectedRegion = this.regionData.find(region => region.DICTIONARIES_ID === value)
@ -934,7 +942,7 @@ export default {
this.form.LONGITUDE = this.LONGITUDE
},
//* *************************************************
getList(queryParams) {
getList(queryParams = {}) {
this.listLoading = true
requestFN(
'/major/registration/list?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,

View File

@ -214,7 +214,7 @@ export default {
},
getDetail(Id) {
const params = { Id }
requestFN('/major/registration/detail', params).then((response) => {
requestFN('/major/registration/detailLog', params).then((response) => {
const data = response.msg
this.form = {
REPORT_UNIT: data.REPORT_UNIT,

View File

@ -22,7 +22,6 @@
<el-table-column prop="CREATETIME" label="通知时间" show-overflow-tooltip="true" />
<el-table-column label="操作" align="center" width="300">
<template slot-scope="{ row }">
<el-button type="primary" icon="el-icon-download" size="mini" @click="confirmExport(row.ID)"></el-button>
<el-button type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(row.ID, row.NAME)">删除</el-button>
</template>
</el-table-column>
@ -41,8 +40,6 @@
<script>
import Pagination from '@/components/Pagination'
import { requestFN } from '@/utils/request'
import { MessageBox, Message } from 'element-ui'
export default {
components: { Pagination },
data() {
@ -80,46 +77,6 @@ export default {
this.NAME = ''
this.getQuery()
},
confirmExport(id) {
MessageBox.confirm('确定要导出数据吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.getExportExcel(id)
})
},
getExportExcel(id) {
const params = { Id: id }
requestFN('/major/dutylog/ExportExcel', params).then((response) => {
Message({
type: 'success',
message: '导出成功'
})
}).catch((e) => {
Message({
type: 'error',
message: '导出失败'
})
console.error('导出数据失败', e)
})
},
getDetail(id) {
const params = { Id: id }
requestFN('/major/dutylog/detail', params).then((response) => {
const data = response.msg
this.form = {
Id: data.ID,
NAME: data.NAME,
ORDER_CONTENT: data.ORDER_CONTENT,
PHONE: data.PHONE,
PLAN_ID: data.PLAN_ID,
RESPONSE_ID: data.RESPONSE_ID
}
}).catch((e) => {
console.error('获取详情数据失败', e)
})
},
handleDelete(id, NAME) {
this.$confirm('确定要删除[' + NAME + ']吗?', {
confirmButtonText: '确定',
@ -127,7 +84,7 @@ export default {
type: 'warning'
}).then(() => {
this.listLoading = true
requestFN('/major/dutylog/delete', { id }).then((data) => {
requestFN('/major/notification/delete', { id }).then((data) => {
if (data.result === 'success') {
this.listLoading = false
this.getList()
@ -154,7 +111,7 @@ export default {
type: 'warning'
}).then(() => {
this.listLoading = true
requestFN('/major/dutylog/deleteAll', { ids }).then(() => {
requestFN('/major/notification/deleteAll', { ids }).then(() => {
this.listLoading = false
this.getList()
}).catch((e) => {
@ -162,7 +119,6 @@ export default {
})
}).catch(() => { })
},
getList() {
this.listLoading = true
requestFN('/major/notification/list?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,

View File

@ -0,0 +1,264 @@
<template>
<div>
<div class="app-container">
<div class="level-title">
<h1>事故详情</h1>
</div>
<div class="mb-20">
<table class="table-ui">
<tr>
<td class="tbg">事件标题</td>
<td>{{ form.EVENT_NAME }}</td>
<td class="tbg">呼入电话</td>
<td>{{ form.INCOMING_PHONE }}</td>
</tr>
<tr>
<td class="tbg">机主姓名</td>
<td>{{ form.OWNER_NAME }}</td>
<td class="tbg">主叫地址</td>
<td>{{ form.CALLER_ADDRESS }}</td>
</tr>
<tr>
<td class="tbg">接入方式</td>
<td>{{ form.ACCESS_MODE }}</td>
<td class="tbg">事件类型</td>
<td>{{ form.EVENT_TYPE }}</td>
</tr>
<tr>
<td class="tbg">姓名</td>
<td>{{ form.NAME }}</td>
<td class="tbg">联系电话</td>
<td>{{ form.CONTACT_PHONE }}</td>
</tr>
<tr>
<td class="tbg">单位名称</td>
<td>{{ form.UNIT_NAME }}</td>
<td class="tbg">所在区域</td>
<td>{{ form.REGION }}</td>
</tr>
<tr>
<td class="tbg">单位地址</td>
<td>{{ form.UNIT_ADDRESS }}</td>
<td class="tbg">行业类型</td>
<td>{{ form.INDUSTRY_TYPE }}</td>
</tr>
<tr>
<td class="tbg">经济类型</td>
<td>{{ form.ECONOMIC_TYPE }}</td>
<td class="tbg">重大危险源</td>
<td>{{ form.MAJOR_HAZARD }}</td>
</tr>
<tr>
<td class="tbg">接报时间</td>
<td>{{ form.REPORT_TIME }}</td>
<td class="tbg">发生时间</td>
<td>{{ form.OCCURRENCE_TIME }}</td>
</tr>
<tr>
<td class="tbg">所在地址</td>
<td>{{ form.LOCATION_ADDRESS }}</td>
<td class="tbg">经度</td>
<td>{{ form.LONGITUDE }}</td>
</tr>
<tr>
<td class="tbg">纬度</td>
<td>{{ form.LATITUDE }}</td>
<td class="tbg">接报类型</td>
<td>{{ form.REPORT_TYPE }}</td>
</tr>
<tr>
<td class="tbg">事故标题</td>
<td>{{ form.ACCIDENT_TITLE }}</td>
<td class="tbg">事故级别</td>
<td>{{ form.ACCIDENT_LEVEL }}</td>
</tr>
<tr>
<td class="tbg">伤害类型</td>
<td>{{ form.INJURY_TYPE }}</td>
<td class="tbg">事故类型</td>
<td>{{ form.ACCIDENT_TYPE }}</td>
</tr>
<tr>
<td class="tbg">被困人数</td>
<td>{{ form.TRAPPED_PEOPLE_COUNT }}</td>
<td class="tbg">失踪人数</td>
<td>{{ form.MISSING_PEOPLE_COUNT }}</td>
</tr>
<tr>
<td class="tbg">死亡人数</td>
<td>{{ form.DEATH_PEOPLE_COUNT }}</td>
<td class="tbg">重伤人数</td>
<td>{{ form.SERIOUS_INJURY_PEOPLE_COUNT }}</td>
</tr>
<tr>
<td class="tbg">轻伤人数</td>
<td>{{ form.MINOR_INJURY_PEOPLE_COUNT }}</td>
<td class="tbg">中毒人数</td>
<td>{{ form.POISONING_PEOPLE_COUNT }}</td>
</tr>
<tr>
<td class="tbg">直接经济损失万元</td>
<td>{{ form.DIRECT_ECONOMIC_LOSS }}</td>
</tr>
<tr>
<td class="tbg">简要经过</td>
<td colspan="3">{{ form.BRIEF_PROCESS }}</td>
</tr>
<tr>
<td class="tbg">处置情况</td>
<td colspan="3">{{ form.DISPOSAL_SITUATION }}</td>
</tr>
<tr>
<td class="tbg">事件标题</td>
<td>{{ form.EVENT_NAME }}</td>
<td class="tbg">呼入电话</td>
<td>{{ form.INCOMING_PHONE }}</td>
</tr>
<tr v-for="order in orderInfoList" :key="order.id">
<td class="tbg">指令名称</td>
<td>{{ order.name }}</td>
<td class="tbg">指令内容</td>
<td>{{ order.order_CONTENT }}</td>
</tr>
<tr v-for="order in orderInfoList" :key="order.id">
<td class="tbg">响应级别</td>
<td>{{ order.response_NAME }}</td>
<td class="tbg">预案名称</td>
<td>{{ order.plan_NAME }}</td>
</tr>
<tr v-for="order in orderInfoList" :key="order.id">
<td class="tbg">联系电话</td>
<td>{{ order.phone }}</td>
<td class="tbg">备注</td>
<td>{{ order.remark }}</td>
</tr>
</table>
</div>
</div>
<div class="ui-height" />
<div class="ui-foot">
<el-button type="primary" @click="goBack"></el-button>
</div>
</div>
</template>
<script>
import { requestFN } from '@/utils/request'
export default {
data() {
return {
form: {
EVENT_NAME: '',
INCOMING_PHONE: '',
OWNER_NAME: '',
CALLER_ADDRESS: '',
ACCESS_MODE: '',
EVENT_TYPE: '',
NAME: '',
CONTACT_PHONE: '',
UNIT_NAME: '',
REGION: '',
UNIT_ADDRESS: '',
INDUSTRY_TYPE: '',
ECONOMIC_TYPE: '',
MAJOR_HAZARD: '',
REPORT_TIME: '',
OCCURRENCE_TIME: '',
LOCATION_ADDRESS: '',
LONGITUDE: '',
LATITUDE: '',
REPORT_TYPE: '',
ACCIDENT_TITLE: '',
ACCIDENT_LEVEL: '',
INJURY_TYPE: '',
ACCIDENT_TYPE: '',
TRAPPED_PEOPLE_COUNT: '',
MISSING_PEOPLE_COUNT: '',
DEATH_PEOPLE_COUNT: '',
SERIOUS_INJURY_PEOPLE_COUNT: '',
MINOR_INJURY_PEOPLE_COUNT: '',
POISONING_PEOPLE_COUNT: '',
DIRECT_ECONOMIC_LOSS: '',
BRIEF_PROCESS: '',
ORDER_CONTENT: '',
PLAN_NAME: '',
RESPONSE_NAME: '',
DISPOSAL_SITUATION: ''
},
Id: ''
}
},
created() {
if (this.$parent.CASE_ID) {
this.Id = this.$parent.CASE_ID
this.RegistrationId = this.$parent.REGISTRATION_ID
this.getDetail(this.Id)
}
},
methods: {
goBack() {
this.$parent.activeName = 'list'
},
getDetail(Id) {
const params = { Id }
requestFN('/major/registration/detailLog', params).then((response) => {
const data = response.msg
this.form = {
EVENT_NAME: data.EVENT_NAME,
INCOMING_PHONE: data.INCOMING_PHONE,
OWNER_NAME: data.OWNER_NAME,
CALLER_ADDRESS: data.CALLER_ADDRESS,
ACCESS_MODE: data.ACCESS_MODE,
EVENT_TYPE: data.EVENT_TYPE,
NAME: data.NAME,
CONTACT_PHONE: data.CONTACT_PHONE,
UNIT_NAME: data.UNIT_NAME,
REGION: data.REGION,
UNIT_ADDRESS: data.UNIT_ADDRESS,
INDUSTRY_TYPE: data.INDUSTRY_TYPE,
ECONOMIC_TYPE: data.ECONOMIC_TYPE,
MAJOR_HAZARD: data.MAJOR_HAZARD,
REPORT_TIME: data.REPORT_TIME,
OCCURRENCE_TIME: data.OCCURRENCE_TIME,
LOCATION_ADDRESS: data.LOCATION_ADDRESS,
LONGITUDE: data.LONGITUDE,
LATITUDE: data.LATITUDE,
REPORT_TYPE: data.REPORT_TYPE,
ACCIDENT_TITLE: data.ACCIDENT_TITLE,
ACCIDENT_LEVEL: data.ACCIDENT_LEVEL,
INJURY_TYPE: data.INJURY_TYPE,
ACCIDENT_TYPE: data.ACCIDENT_TYPE,
TRAPPED_PEOPLE_COUNT: data.TRAPPED_PEOPLE_COUNT,
MISSING_PEOPLE_COUNT: data.MISSING_PEOPLE_COUNT,
DEATH_PEOPLE_COUNT: data.DEATH_PEOPLE_COUNT,
SERIOUS_INJURY_PEOPLE_COUNT: data.SERIOUS_INJURY_PEOPLE_COUNT,
MINOR_INJURY_PEOPLE_COUNT: data.MINOR_INJURY_PEOPLE_COUNT,
POISONING_PEOPLE_COUNT: data.POISONING_PEOPLE_COUNT,
DIRECT_ECONOMIC_LOSS: data.DIRECT_ECONOMIC_LOSS,
BRIEF_PROCESS: data.BRIEF_PROCESS,
DISPOSAL_SITUATION: data.DISPOSAL_SITUATION,
RESPONSE_NAME: data.RESPONSE_NAME,
PLAN_NAME: data.PLAN_NAME,
ORDER_CONTENT: data.ORDER_CONTENT,
Id: data.ID
}
this.orderInfoList = data.orderInfoList
}).catch((e) => {
console.error('获取详情数据失败', e)
})
}
}
}
</script>
<style lang="sass" scoped>
.table-ui
td
line-height: 34px
.tbg
width: 200px
.ui-foot
text-align: center
margin-top: 20px
</style>

View File

@ -0,0 +1,158 @@
<template>
<div class="app-container">
<div class="filter-container">
<el-form inline>
<el-form-item label="姓名:" prop="NAME">
<el-input v-model="NAME" placeholder="姓名" class="filter-item" style="width: 200px;" />
</el-form-item>
<el-form-item>
<el-button class="filter-item" type="primary" icon="el-icon-search" @click="getQuery"></el-button>
<el-button class="filter-item" type="default" icon="el-icon-refresh" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
</div>
<el-table ref="multipleTable" :data="varList" :header-cell-style="{'font-weight': 'bold','color': '#000'}" tooltip-effect="dark" border fit highlight-current-row>
<el-table-column type="selection" width="55" align="center" />
<el-table-column type="index" label="序号" width="50" align="center" />
<el-table-column prop="EVENT_NAME" label="事件标题" width="180" />
<el-table-column prop="INCOMING_PHONE" label="接入电话" show-overflow-tooltip="true" />
<el-table-column prop="OWNER_NAME" label="机主姓名" show-overflow-tooltip="true" />
<el-table-column prop="ACCESS_MODE" label="接入方式" show-overflow-tooltip="true" />
<el-table-column prop="EVENT_TYPE" label="事件类型" show-overflow-tooltip="true" />
<el-table-column prop="CALLER_ADDRESS" label="主叫地址" show-overflow-tooltip="true" />
<el-table-column label="操作" align="center" width="300">
<template slot-scope="{ row }">
<el-button type="primary" icon="el-icon-document" size="mini" @click="goList('detail', row.ID, '1')">查看</el-button>
<el-button type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(row.ID, row.NAME)">删除</el-button>
</template>
</el-table-column>
</el-table>
<div class="page-btn-group">
<div>
<template>
<el-button type="danger" icon="el-icon-delete" plain @click="makeAll('0')"></el-button>
</template>
</div>
<pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
</div>
</div>
</template>
<script>
import Pagination from '@/components/Pagination'
import { requestFN } from '@/utils/request'
export default {
components: { Pagination },
data() {
return {
listLoading: false,
dialogFormShow: false,
dialogType: 'add',
NAME: '',
form: {
ID: '',
NAME: '',
PHONE: '',
PLAN_ID: '',
RESPONSE_ID: ''
},
total: 0,
varList: [],
KEYWORDS_NAME: '',
listQuery: {
page: 1,
limit: 10
}
}
},
created() {
this.getList()
},
methods: {
getQuery() {
this.$refs.multipleTable.clearSelection()
this.getList()
},
resetQuery() {
this.NAME = ''
this.getQuery()
},
goList(page, CASE_ID, ticketType) {
this.$parent.activeName = page
this.$parent.CASE_ID = CASE_ID
this.$parent.ticketType = ticketType
},
getDetail(id) {
const params = { Id: id }
requestFN('/major/dutylog/detail', params).then((response) => {
const data = response.msg
this.form = {
Id: data.ID,
NAME: data.NAME,
PHONE: data.PHONE,
PLAN_ID: data.PLAN_ID,
RESPONSE_ID: data.RESPONSE_ID
}
}).catch((e) => {
console.error('获取详情数据失败', e)
})
},
handleDelete(id, NAME) {
this.$confirm('确定要删除[' + NAME + ']吗?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.listLoading = true
requestFN('/major/dutylog/delete', { id }).then((data) => {
if (data.result === 'success') {
this.listLoading = false
this.getList()
}
}).catch((e) => {
this.listLoading = false
})
}).catch(() => { })
},
makeAll() {
const _selectData = this.$refs.multipleTable.selection
if (!_selectData || _selectData.length === 0) {
this.$message({
message: '请选中要删除的项...',
type: 'error'
})
return false
}
const ids = _selectData.map(item => item.ID).join(',')
this.$confirm('确定要删除选中的数据吗?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.listLoading = true
requestFN('/major/dutylog/deleteAll', { ids }).then(() => {
this.listLoading = false
this.getList()
}).catch((e) => {
this.listLoading = false
})
}).catch(() => { })
},
getList() {
this.listLoading = true
requestFN('/major/registration/listLog?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
{
name: this.NAME
}
).then((data) => {
this.listLoading = false
this.varList = data.varList
this.total = data.page.totalResult
}).catch((e) => {
this.listLoading = false
})
}
}
}
</script>

View File

@ -0,0 +1,19 @@
<template>
<div>
<list v-show="activeName=='list'" ref="list" />
<detail v-if="activeName=='detail'"/>
</div>
</template>
<script>
import list from './components/list.vue'
import detail from './components/detail.vue'
export default {
components: { list, detail },
data() {
return {
activeName: 'list',
CASE_ID: ''
}
}
}
</script>

View File

@ -102,19 +102,6 @@
</el-form-item>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="所属区域" prop="ADMINISTRATIVE_REGION">
<Treeselect
:options="treeData"
:normalizer="normalizer"
v-model="form.REGION"
:disable-branch-nodes="true"
placeholder="请选择所属区域"
no-options-text="暂无数据"
no-children-text="暂无数据"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属单位" prop="SUPERVISING_AGENCY">
<Treeselect
@ -248,7 +235,6 @@ export default {
},
yjrescueEquipData: [],
treeData: [],
DepartmentData: [],
normalizer(node) {
return {
@ -304,19 +290,9 @@ export default {
console.error('获取主管单位数据失败', e)
})
},
getTreeList() {
const params = {
PARENT_ID: '5a5d2809ed644aa6ba97a5240ff35484'
}
requestFN('/dictionaries/listTree', params).then((data) => {
this.treeData = JSON.parse(data.zTreeNodes)
}).catch((e) => {
console.error('获取树形数据失败', e)
})
},
getyjrescueEquipDataList() {
const params = {
PARENT_ID: '73e875a1123443b69956cf6761f943de'
PARENT_ID: 'd80b53993f8e46cca18bc98e1ad9304e'
}
requestFN('/dictionaries/listTree', params).then((data) => {
this.yjrescueEquipData = JSON.parse(data.zTreeNodes)

View File

@ -35,14 +35,8 @@
<tr>
<td class="tbg">企业名称</td>
<td>{{ form.COMPANY }}</td>
<td class="tbg">所属区域</td>
<td>{{ form.REGION_NAME }}</td>
</tr>
<tr>
<td class="tbg">采集单位</td>
<td>{{ form.AFFILIATEDUNIT_NAME }}</td>
<td class="tbg"/>
<td/>
</tr>
</table>
</div>

View File

@ -49,10 +49,6 @@
no-children-text="暂无数据"
/>
</el-form-item>
<el-form-item label="所在位置" prop="LOCATION">
<el-input v-model="form.LOCATION" placeholder="请输入所在位置..." />
</el-form-item>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item :key="form.LONGITUDE" label="经度" prop="LONGITUDE">
@ -177,7 +173,6 @@ export default {
},
data() {
return {
//
CORPINFO_ID: this.$parent.CORPINFO_ID,
clientHeight: 600,
@ -193,7 +188,6 @@ export default {
dialogFormMap: false,
LATITUDE: '',
LONGITUDE: '',
listQuery: {
page: 1,
limit: 10
@ -227,8 +221,6 @@ export default {
//
CONTACT_MOBILE_TOW_PHONE: '',
//
LOCATION: '',
//
OVERVIEW: '',
//
@ -284,7 +276,7 @@ export default {
getyjEquipmentFacilitiesDataList() {
const params = {
PARENT_ID: 'd2d163a49a1842a99b28067eee05884b'
PARENT_ID: 'd80b53993f8e46cca18bc98e1ad9304e'
}
requestFN('/dictionaries/listTree', params).then((data) => {
this.yjEquipmentFacilitiesData = JSON.parse(data.zTreeNodes)
@ -476,8 +468,6 @@ export default {
//
CONTACT_MOBILE_TOW_PHONE: data.CONTACT_MOBILE_TOW_PHONE,
//
LOCATION: data.LOCATION,
//
OVERVIEW: data.OVERVIEW,
//

View File

@ -12,18 +12,12 @@
<td class="tbg">设备类型</td>
<td>{{ form.TYPE_NAME }}</td>
</tr>
<tr>
<td class="tbg">所在位置</td>
<td colspan="3">{{ form.LOCATION }}</td>
</tr>
<tr>
<td class="tbg">经度</td>
<td>{{ form.LONGITUDE }}</td>
<td class="tbg">纬度</td>
<td>{{ form.LATITUDE }}</td>
</tr>
<tr>
<td class="tbg">联系人</td>
<td>{{ form.CONTACT_PERSON }}</td>

View File

@ -102,19 +102,6 @@
</el-form-item>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="所属区域" prop="ADMINISTRATIVE_REGION">
<Treeselect
:options="treeData"
:normalizer="normalizer"
v-model="form.REGION"
:disable-branch-nodes="true"
placeholder="请选择所属区域"
no-options-text="暂无数据"
no-children-text="暂无数据"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="采集单位" prop="SUPERVISING_AGENCY">
<Treeselect
@ -248,7 +235,6 @@ export default {
},
yjrescueSuppliesData: [],
treeData: [],
DepartmentData: [],
normalizer(node) {
return {
@ -304,19 +290,9 @@ export default {
console.error('获取主管单位数据失败', e)
})
},
getTreeList() {
const params = {
PARENT_ID: '5a5d2809ed644aa6ba97a5240ff35484'
}
requestFN('/dictionaries/listTree', params).then((data) => {
this.treeData = JSON.parse(data.zTreeNodes)
}).catch((e) => {
console.error('获取树形数据失败', e)
})
},
getyjrescueSuppliesDataList() {
const params = {
PARENT_ID: '73e875a1123443b69956cf6761f943de'
PARENT_ID: 'd80b53993f8e46cca18bc98e1ad9304e'
}
requestFN('/dictionaries/listTree', params).then((data) => {
this.yjrescueSuppliesData = JSON.parse(data.zTreeNodes)

View File

@ -12,14 +12,12 @@
<td class="tbg">物资类别</td>
<td>{{ form.TYPE_NAME }}</td>
</tr>
<tr>
<td class="tbg">经度</td>
<td>{{ form.LONGITUDE }}</td>
<td class="tbg">纬度</td>
<td>{{ form.LATITUDE }}</td>
</tr>
<tr>
<td class="tbg">联系人</td>
<td>{{ form.CONTACT_PERSON }}</td>
@ -35,14 +33,8 @@
<tr>
<td class="tbg">企业物资名称</td>
<td>{{ form.COMPANY }}</td>
<td class="tbg">所属区域</td>
<td>{{ form.REGION_NAME }}</td>
</tr>
<tr>
<td class="tbg">所属单位</td>
<td>{{ form.AFFILIATEDUNIT_NAME }}</td>
<td class="tbg"/>
<td/>
</tr>
</table>
</div>

View File

@ -284,7 +284,7 @@ export default {
if (data.result === 'success') {
sessionStorage.setItem('user', JSON.stringify(data))
sessionStorage.setItem('loginCount', '0')
this.$router.push({ path: '/index' })
this.$router.push({ path: '/guide' })
this.loading = false
this.flag = false
this.getWorkTask(data.USER_ID)

View File

@ -1582,7 +1582,7 @@ export default {
this.destroyConnection()
this.onePerLocArr = []
this.$router.push('/index')
this.$router.push('/guide')
} else if (index === 1) {
this.handleFullScreen(undefined)
} else if (index === 2) {
@ -2849,7 +2849,7 @@ export default {
}
.title {
background-image: linear-gradient(bottom, #5bb4f7, #ffffff);
background-image: linear-gradient(to bottom, #5bb4f7, #ffffff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
font-size: 34px;

159
src/views/newBI/guide.vue Normal file
View File

@ -0,0 +1,159 @@
<template>
<div id="guide">
<div class="header">
<div class="title">秦港某公司安全监管平台</div>
</div>
<div class="container">
<div class="menu">
<template v-for="(item, index) in menuList">
<div
v-if="index < 7"
:key="index"
:style="{'--x': position[index].x + 'px', '--y': position[index].y + 'px'}"
class="item left"
@click="item.click"
>
<div class="text">{{ item.text }}</div>
<img src="../../assets/images/enterprise/jiantou_left.png" alt="">
</div>
<div
v-else
:key="index"
:style="{'--x': position[index - 7].x + 'px', '--y': position[index - 7].y + 'px'}"
class="item right"
@click="item.click"
>
<img src="../../assets/images/enterprise/jiantou_right.png" alt="">
<div class="text">{{ item.text }}</div>
</div>
</template>
</div>
</div>
</div>
</template>
<script>
import autofit from 'autofit.js'
import { menuList } from './menuList'
export default {
data() {
return {
position: [
{ x: -100, y: 92 },
{ x: -160, y: 192 },
{ x: -200, y: 292 },
{ x: -240, y: 392 },
{ x: -220, y: 492 },
{ x: -200, y: 592 },
{ x: -160, y: 692 }
],
menuList
}
},
mounted() {
autofit.init({
dh: 1080,
dw: 1920,
el: '#guide',
resize: true
})
},
beforeDestroy() {
autofit.off()
}
}
</script>
<style scoped lang="scss">
#guide {
width: 100vw;
height: 100vh;
background-image: url("../../assets/images/enterprise/bg.png");
background-repeat: no-repeat;
background-size: 100% 100%;
position: relative;
.header {
width: 100%;
height: 125px;
background-image: url("../../assets/images/enterprise/titbg.png");
background-repeat: no-repeat;
background-size: 100% 100%;
position: absolute;
top: 0;
left: 0;
.title {
max-width: 800px;
height: 52px;
text-align: center;
position: absolute;
top: 20px;
left: 50%;
transform: translateX(-50%);
font-weight: bold;
background-image: linear-gradient(to bottom, #00a2ff, #fff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
font-size: 44px;
}
}
.container {
width: 991px;
height: 954px;
background-image: url("../../assets/images/enterprise/img1.png");
background-repeat: no-repeat;
background-size: 100% 100%;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
.menu {
font-size: 15px;
color: #fff;
.item {
display: flex;
align-items: center;
position: absolute;
top: var(--y);
width: 177px;
height: 53px;
cursor: pointer;
background-repeat: no-repeat;
background-size: 100% 100%;
&.left {
background-image: url("../../assets/images/enterprise/navbg_left.png");
left: var(--x);
.text {
margin-left: 30px;
margin-right: 15px;
}
}
&.right {
background-image: url("../../assets/images/enterprise/navbg_right.png");
right: var(--x);
img {
margin-left: 30px;
}
.text {
margin-left: 15px;
}
}
.text {
font-weight: bold;
}
}
}
}
}
</style>

12
src/views/newBI/index.vue Normal file
View File

@ -0,0 +1,12 @@
<script>
export default {
}
</script>
<template>
<router-view/>
</template>
<style scoped>
</style>

112
src/views/newBI/menuList.js Normal file
View File

@ -0,0 +1,112 @@
import store from '@/store/index'
import router from '@/router/index'
export const menuList = [
{
text: '管理员驾驶舱',
click: () => {
router.push({ path: '/monitoringCenter' })
}
},
{
text: '物联网+地图',
click: () => {
router.push({ path: '/map' })
}
},
{
text: '企业信息管理',
model: 'enterpriseInformation',
click: () => {
store.dispatch('permission/setShowModel', 'enterpriseInformation')
router.push({ path: '/corpInfo/information/info' })
}
},
{
text: '法律法规管理',
model: 'regulations',
click: () => {
store.dispatch('permission/setShowModel', 'regulations')
router.push({ path: '/threeSystems/safetyOperationRegulations' })
}
},
{
text: '安全目标管理',
model: 'safetyObjectives',
click: () => {
store.dispatch('permission/setShowModel', 'safetyObjectives')
router.push({ path: '/security_commitment/promise_book' })
}
},
{
text: '安全教育管理',
model: 'educationTraining',
click: () => {
store.dispatch('permission/setShowModel', 'educationTraining')
router.push({ path: '/archives/user' })
}
},
{
text: '双重预防管理',
model: 'doublePrevention',
click: () => {
store.dispatch('permission/setShowModel', 'doublePrevention')
router.push({ path: '/risk/riskunit' })
}
},
{
text: '相关方管理',
model: 'relatedParties',
click: () => {
store.dispatch('permission/setShowModel', 'relatedParties')
router.push({ path: '/relevantunits/insert' })
}
},
{
text: '消防安全管理',
model: 'fireSafety',
click: () => {
store.dispatch('permission/setShowModel', 'fireSafety')
router.push({ path: '/firefighting/qualifiedphotos' })
}
},
{
text: '危险作业管理',
model: 'dangerousOperations',
click: () => {
store.dispatch('permission/setShowModel', 'dangerousOperations')
router.push({ path: '/specialType/InterestedParties' })
}
},
{
text: '作业现场管理',
model: 'workSiteManagement',
click: () => {
store.dispatch('permission/setShowModel', 'workSiteManagement')
router.push({ path: '/keyprojects/units' })
}
},
{
text: '绩效考评管理',
model: 'performanceAssessment',
click: () => {
store.dispatch('permission/setShowModel', 'performanceAssessment')
router.push({ path: '/statistics/branch' })
}
},
{
text: '应急管理',
model: 'emergency',
click: () => {
store.dispatch('permission/setShowModel', 'emergency')
router.push({ path: '/emergency/plan' })
}
},
{
text: '科技创新',
model: 'innovation',
click: () => {
store.dispatch('permission/setShowModel', 'innovation')
router.push({ path: '/oneCompany/alarmList' })
}
}
]