feat: 安全环保检查管理,新添加被检查人签字/申辩的菜单模块

mengfanliang-dev-pitfall
mengfanliang 2024-09-03 15:37:46 +08:00
parent 65e5d50625
commit 63606632aa
9 changed files with 1417 additions and 79 deletions

View File

@ -340,6 +340,75 @@ export const initiateList = [
},
];
export const inspectedList = [
{
ISDELETE: "0",
INSPECTION_TYPE_NAME: "季度安全检查",
INSPECTED_SITEUSER_ID: "440d55fb769d4ce08a022c42a06c8435",
INSPECTION_ORIGINATOR_ID: "1",
INSPECTION_ORIGINATOR_NAME: "系统管理员",
INSPECTION_SUBJECT: "安全",
INSPECTED_EXPLAIN: "",
INSPECTION_ID: "4e906353c6904706bfae27b63a245b68",
INSPECTION_TYPE: "INSPECTION_TYPE001",
CREATOR: "1",
INSPECTION_TYPE_OTHER: "",
INSPECTION_USER_NAME: "齐老零",
INSPECTED_SITEUSER_SIGN_TIME: "",
INSPECTION_USER_ID: "1,440d55fb769d4ce08a022c42a06c8435",
OPERATTIME: "2024-07-10 17:29:14",
INSPECTED_DEPARTMENT_ID: "a0975250f26344e0b61a3b44242a0301",
INSPECTION_TIME_START: "2024-07-10 00:00",
INSPECTED_CORPINFO_ID_NAME: "唐山曹妃甸煤炭港务有限公司",
INSPECTION_SOURCE: "4",
INSPECTED_DEPARTMENT_NAME: "测试厂队部门",
INSPECTION_LEADDEPARTMENT_ID: "a0975250f26344e0b61a3b44242a0301",
INSPECTION_LEADDEPARTMENT_NAME: "测试厂队部门",
INSPECTION_PLACE: "测试07101726",
CORPINFO_ID: "6aa255d41602497fa0f934a822820df4",
INSPECTED_SITEUSER_SIGN_IMG: "",
INSPECTION_TIME_END: "2024-07-12 00:00",
SHOW_INSPECTION_USER_NAME: "系统管理员18788888888,曹煤炭测试人员0",
INSPECTION_STATUS: "0",
OPERATOR: "1",
INSPECTED_SITEUSER_NAME: "齐老零",
CREATTIME: "2024-07-10 17:29:14",
},
{
ISDELETE: "0",
INSPECTION_TYPE_NAME: "季度检查",
INSPECTED_SITEUSER_ID: "440d55fb769d4ce08a022c42a06c8435",
INSPECTION_ORIGINATOR_ID: "1",
INSPECTION_ORIGINATOR_NAME: "系统管理员",
INSPECTION_SUBJECT: "安全",
INSPECTED_EXPLAIN: "",
INSPECTION_ID: "4aa2d6a115424d27bf26cc4cafddb203",
INSPECTION_TYPE: "INSPECTION_TYPE005",
CREATOR: "1",
INSPECTION_TYPE_OTHER: "",
INSPECTION_USER_NAME: "齐老零0",
INSPECTED_SITEUSER_SIGN_TIME: "",
INSPECTION_USER_ID: "1,440d55fb769d4ce08a022c42a06c8435",
OPERATTIME: "2024-07-10 17:11:40",
INSPECTED_DEPARTMENT_ID: "a0975250f26344e0b61a3b44242a0301",
INSPECTION_TIME_START: "2024-07-10 00:00",
INSPECTED_CORPINFO_ID_NAME: "唐山曹妃甸煤炭港务有限公司",
INSPECTION_SOURCE: "4",
INSPECTED_DEPARTMENT_NAME: "测试厂队部门",
INSPECTION_LEADDEPARTMENT_ID: "a0975250f26344e0b61a3b44242a0301",
INSPECTION_LEADDEPARTMENT_NAME: "测试厂队部门",
INSPECTION_PLACE: "测试07101711",
CORPINFO_ID: "6aa255d41602497fa0f934a822820df4",
INSPECTED_SITEUSER_SIGN_IMG: "",
INSPECTION_TIME_END: "2024-07-11 00:00",
SHOW_INSPECTION_USER_NAME: "系统管理员18788888888,曹煤炭测试人员0",
INSPECTION_STATUS: "0",
OPERATOR: "1",
INSPECTED_SITEUSER_NAME: "齐老零0",
CREATTIME: "2024-07-10 17:11:40",
},
];
export const exPlainList = [
{
OPERATTIME: "2024-03-30 17:38:00",
@ -402,3 +471,110 @@ export const exPlainList = [
CREATTIME: "2024-03-30 17:39:09",
},
];
export const inspectedFormData = {
ISDELETE: "0",
INSPECTION_TYPE_NAME: "月度安全检查",
INSPECTED_SITEUSER_ID: "fbf52b408e354169a4d112c700528e4d",
INSPECTION_ORIGINATOR_ID: "fbf52b408e354169a4d112c700528e4d",
INSPECTION_ORIGINATOR_NAME: "齐老零",
INSPECTION_SUBJECT: "安全",
INSPECTED_EXPLAIN: "",
INSPECTION_ID: "ab2d8779b2b749018d6daddda04db2fb",
INSPECTED_DEPARTMENT_NAMES: "分公司级测试部门",
INSPECTION_TYPE: "INSPECTION_TYPE002",
CREATOR: "fbf52b408e354169a4d112c700528e4d",
situationList: [
{
OPERATTIME: "2024-09-02 14:15:42",
ISDELETE: "0",
INSPECTION_ID: "ab2d8779b2b749018d6daddda04db2fb",
OPERATOR: "fbf52b408e354169a4d112c700528e4d",
SITUATION: "毫无变化",
CREATOR: "fbf52b408e354169a4d112c700528e4d",
INSPECTION_SITUATION_ID: "42e511306368476eb43a827f08efa613",
CORPINFO_ID: "13cf0f4ec77e4d98ae8cdd9c3386ae0c",
CREATTIME: "2024-09-02 14:15:42",
},
],
inspectorList: [
{
INSPECTION_USER_ID: "fbf52b408e354169a4d112c700528e4d",
OPERATTIME: "2024-09-02 14:15:42",
ISDELETE: "0",
CORPINFO_ID: "13cf0f4ec77e4d98ae8cdd9c3386ae0c",
INSPECTION_DEPARTMENT_ID: "16579f1de79743198884a56350c113cc",
INSPECTION_USER_OPINION: "无意间",
INSPECTION_USER_SIGN_IMG:
"/uploadFiles/file/13cf0f4ec77e4d98ae8cdd9c3386ae0c/20240902/7001ac7f8ff144d481130d1a6f40dc59.jpeg",
INSPECTION_ID: "ab2d8779b2b749018d6daddda04db2fb",
OPERATOR: "fbf52b408e354169a4d112c700528e4d",
CREATOR: "fbf52b408e354169a4d112c700528e4d",
INSPECTION_INSPECTOR_ID: "3b1fee08cde547f88a3b310671d6163f",
INSPECTION_DEPARTMENT_NAME: "分公司级测试部门",
INSPECTION_USER_SIGN_TIME: "2024-09-02 14:15:42",
INSPECTION_USER_NAME: "齐老零",
CREATTIME: "2024-09-02 14:15:42",
},
],
INSPECTION_USER_NAME: "齐老零",
INSPECTED_SITEUSER_SIGN_TIME: "",
INSPECTION_USER_ID: "fbf52b408e354169a4d112c700528e4d",
OPERATTIME: "2024-09-02 14:15:41",
INSPECTED_DEPARTMENT_ID: "16579f1de79743198884a56350c113cc",
INSPECTION_TIME_START: "2024-09-30 23:59",
INSPECTION_SOURCE: "5",
INSPECTED_DEPARTMENT_NAME: "分公司级测试部门",
INSPECTION_LEADDEPARTMENT_ID: "16579f1de79743198884a56350c113cc",
INSPECTION_LEADDEPARTMENT_NAME: "分公司级测试部门",
INSPECTION_PLACE: "环境变量",
CORPINFO_ID: "13cf0f4ec77e4d98ae8cdd9c3386ae0c",
INSPECTED_SITEUSER_SIGN_IMG: "",
INSPECTION_TIME_END: "2024-10-31 23:59",
INSPECTION_STATUS: "2",
OPERATOR: "fbf52b408e354169a4d112c700528e4d",
INSPECTED_SITEUSER_NAME: "齐老零",
CREATTIME: "2024-09-02 14:15:41",
hiddenList: [
// {
// HIDDEN_ID: '19cspifijsodi202302',
// HIDDENDESCR: '根本不懂',
// HIDDENPART: '没有部位',
// HIDDENPART_NAME: '特别的多事儿',
// HIDDENLEVEL: '特级隐患',
// ISRELEVANT: '0',
// CREATOR: '9fisu2mkd92m32sasdfs23423adg780',
// CREATOR_NAME: '力战',
// HIDDENLEVEL_NAME: '就放过啦',
// HIDDENTYPE_NAME: '特级隐患',
// LONGITUDE: '12.0921',
// LATITUDE: '34.30293',
// DISCOVERYTIME: '2024-09-03',
// POSITIONDESC: '隐患能有啥详情的描述信息的呢,组壁咚',
// hiddenImgs: [
// {
// IMGFILES_ID: 'fasdfaevcxz34r4',
// FILEPATH: 'https://cdn.uviewui.com/uview/album/1.jpg'
// },
// {
// IMGFILES_ID: 'fasdfaevcxz34rjgfj4',
// FILEPATH: 'https://uviewui.com/common/logo.png'
// },
// {
// IMGFILES_ID: 'fasdfaevfasdfasdfcxz34r4',
// FILEPATH: 'https://img.zcool.cn/community/010d5c5b9d17c9a8012099c8781b7e.jpg@1280w_1l_2o_100sh.jpg'
// },
// {
// IMGFILES_ID: 'fas5353452dfaevcxz34r4',
// FILEPATH: 'https://img0.baidu.com/it/u=3422287847,344441285&fm=253&fmt=auto&app=138&f=JPEG?w=604&h=500'
// }
// ],
// hiddenVideos: [
// {
// IMGFILES_ID: '12312342342341234sdfserf',
// FILEPATH: 'http://vjs.zencdn.net/v/oceans.mp4'
// }
// ]
// }
],
};

View File

@ -0,0 +1,169 @@
<template>
<view v-if="visibleSync" :class="{ 'uni-drawer--visible': showDrawer }" class="uni-drawer"
@touchmove.stop.prevent="clear">
<view class="uni-drawer__mask" :class="{ 'uni-drawer__mask--visible': showDrawer && mask }" @tap="close('mask')" />
<view class="uni-drawer__content"
:class="{ 'uni-drawer--right': rightMode, 'uni-drawer--left': !rightMode, 'uni-drawer__content--visible': showDrawer }"
:style="[{ width: drawerWidth + 'px' }, { top: statusBar + 'px' }]">
<slot />
</view>
</view>
</template>
<script>
/**
* Drawer 抽屉
* @description 抽屉侧滑菜单
* @tutorial https://ext.dcloud.net.cn/plugin?id=26
* @property {Boolean} mask = [true | false] 是否显示遮罩
* @property {Boolean} maskClick = [true | false] 点击遮罩是否关闭
* @property {Boolean} mode = [left | right] Drawer 滑出位置
* @value left 从左侧滑出
* @value right 从右侧侧滑出
* @property {Number} width 抽屉的宽度 vue 页面生效
* @event {Function} close 组件关闭时触发事件
*/
export default {
name: 'UniDrawer',
props: {
/**
* 显示模式只在初始化生效
*/
mode: {
type: String,
default: ''
},
/**
* 蒙层显示状态
*/
mask: {
type: Boolean,
default: true
},
/**
* 遮罩是否可点击关闭
*/
maskClick: {
type: Boolean,
default: true
},
/**
* 抽屉宽度
*/
width: {
type: Number,
default: 300
}
},
data() {
return {
statusBar: 0,
visibleSync: false,
showDrawer: false,
rightMode: false,
watchTimer: null,
drawerWidth: 300
}
},
created() {
// #ifndef APP-NVUE
this.drawerWidth = this.width
// #endif
this.rightMode = this.mode === 'right'
},
methods: {
clear() { },
close(type) {
// fixed by mehaotian
if ((type === 'mask' && !this.maskClick) || !this.visibleSync) return
this._change('showDrawer', 'visibleSync', false)
},
open() {
// fixed by mehaotian
if (this.visibleSync) return
this._change('visibleSync', 'showDrawer', true)
},
_change(param1, param2, status) {
this[param1] = status
if (this.watchTimer) {
clearTimeout(this.watchTimer)
}
this.watchTimer = setTimeout(() => {
this[param2] = status
this.$emit('change', status)
}, status ? 50 : 300)
}
}
}
</script>
<style scoped>
.uni-drawer {
/* #ifndef APP-NVUE */
display: block;
/* #endif */
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
overflow: hidden;
z-index: 999;
}
.uni-drawer__content {
/* #ifndef APP-NVUE */
display: block;
/* #endif */
position: absolute;
/* top: 0; */
bottom: 0;
background-color: #ffffff;
transition: transform 0.3s ease;
}
.uni-drawer--left {
left: 0;
/* #ifdef APP-NVUE */
transform: translateX(-220px);
/* #endif */
/* #ifndef APP-NVUE */
transform: translateX(-100%);
/* #endif */
}
.uni-drawer--right {
right: 0;
/* #ifdef APP-NVUE */
transform: translateX(220px);
/* #endif */
/* #ifndef APP-NVUE */
transform: translateX(100%);
/* #endif */
}
.uni-drawer__content--visible {
transform: translateX(0px);
}
.uni-drawer__mask {
/* #ifndef APP-NVUE */
display: block;
/* #endif */
opacity: 0;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
background-color: rgba(0, 0, 0, 0.4);
transition: opacity 0.3s;
}
.uni-drawer__mask--visible {
/* #ifndef APP-NVUE */
display: block;
/* #endif */
opacity: 1;
}
</style>

View File

@ -34,7 +34,7 @@ export default {
title: '被检查人签字/申辩',
url: '/safetyEnvirSubPackages/pages/inspected/list',
vector: '2',
NUM: 100
NUM: 0
},
{
title: '隐患指派及验收',

View File

@ -122,3 +122,6 @@ export const getInspectedList = (params) =>
post(
`/app/safetyenvironmentalexplain/list?showCount=${params.showCount}&currentPage=${params.currentPage}`
);
/** 获取被检查人签字/申辩确认前的详情记录 */
export const getInspectedItemGoShow = (params) => post("/app/safetyenvironmental/goShow", params);

View File

@ -3,33 +3,871 @@
<view class="card">
<u-cell-group :border="false">
<u-cell>
<view slot="title" class="title required">检查标题</view>
<view slot="value">
<view>{{form.INSPECTION_SUBJECT}}现场检查记录</view>
<view slot="title" class="title">检查标题</view>
<view slot="value" class="value">
<view>{{ form.INSPECTION_SUBJECT }}现场检查记录</view>
</view>
</u-cell>
<u-cell>
<view slot="title" class="title required">被检查单位</view>
<view>{{ form.INSPECTED_DEPARTMENT_NAMES }}</view>
<view slot="title" class="title">被检查单位</view>
<view slot="value" class="value">
<view>{{ form.INSPECTED_DEPARTMENT_NAMES || '1' }}</view>
</view>
</u-cell>
<u-cell v-if="!form.INSPECTED_DEPARTMENT_NAME">
<view slot="title" class="title">被检查单位现场负责人</view>
<view slot="value" class="value">
<view> {{ form.INSPECTED_SITEUSER_NAME }} </view>
</view>
</u-cell>
<u-cell>
<view slot="title" class="title">检查场所</view>
<view slot="value" class="value">
<view> {{ form.INSPECTION_PLACE }} </view>
</view>
</u-cell>
<u-cell>
<view slot="title" class="title">检查类型</view>
<view slot="value" class="value">
<view> {{ form.INSPECTION_TYPE_NAME }} </view>
</view>
</u-cell>
<u-cell>
<view slot="title" class="title">检查开始时间</view>
<view slot="value" class="value">
<view> {{ form.INSPECTION_TIME_START }} </view>
</view>
</u-cell>
<u-cell>
<view slot="title" class="title">检查结束时间</view>
<view slot="value" class="value">
<view> {{ form.INSPECTION_TIME_END }} </view>
</view>
</u-cell>
<u-cell>
<view slot="title" class="title">记录填写时间</view>
<view slot="value" class="value">
<view>{{ form.CREATTIME }}</view>
</view>
</u-cell>
</u-cell-group>
</view>
<view class="card" style="margin-top: 20upx;">
<view class="title check">检查情况</view>
<view v-show="form.situationList && form.situationList.length > 0" class="ace-content">
<view class="add_pard_item" v-for="(item, index) of form.situationList" :key="'SITUATION' + index">
<view class="cu-form-textarea">
<textarea style="height: 140upx;" disabled v-model="item.SITUATION"></textarea>
</view>
</view>
</view>
</view>
<view class="card" style="margin-top: 20upx;">
<view class="title check">检查人员</view>
<view v-if="form.inspectorList && form.inspectorList.length > 0">
<view v-for="(item, index) of form.inspectorList" :key="'INSPECTOR' + index" class="add_pard_item">
<view class="cu-form-group">
<view class="title" style="height: auto;">
<view>{{ index + 1 }}.检查人员单位</view>
</view>
<text>{{ item.INSPECTION_DEPARTMENT_NAME }}</text>
</view>
<view class="cu-form-group">
<view class="title">{{ index + 1 }}.检查人员</view>
<text>
{{ item.INSPECTION_USER_NAME }}
</text>
</view>
</view>
</view>
</view>
<view class="card" style="margin-top: 20upx;">
<view class="title check">发现问题</view>
<view style="padding: 20upx">
<uni-table border stripe emptyText="暂无更多数据">
<uni-tr>
<uni-th align="center" style="font-weight: bold;width: 100upx">序号</uni-th>
<uni-th align="center" style="font-weight: bold">隐患部位</uni-th>
<uni-th align="center" style="font-weight: bold">隐患描述</uni-th>
<uni-th align="center" style="font-weight: bold;width: 180upx">操作</uni-th>
</uni-tr>
<uni-tr v-for="(item, index) in form.hiddenList" :key="item.HIDDEN_ID">
<uni-td>{{ index + 1 }}</uni-td>
<uni-td>{{ item.HIDDENPART_NAME ? item.HIDDENPART_NAME : item.HIDDENPART }}</uni-td>
<uni-td>{{ item.HIDDENDESCR }}</uni-td>
<uni-td style="text-align: center;">
<icon type="info" size="26" @tap="showHidden(item, index)" />
</uni-td>
</uni-tr>
</uni-table>
</view>
</view>
<view class="card" style="margin-top: 20upx;">
<view class="title check">检查人员核实结果</view>
<view v-for="item in form.inspectorList" :key="item.INSPECTION_INSPECTOR_ID"
style="border-top: 1px solid #eee; padding-top: 10px;">
<view class="cu-form-textarea">
<view style="margin-left: 24upx;">检查人意见:</view>
<textarea style="margin: 24upx 0 0 24upx; height: 140upx;" v-model="item.INSPECTION_USER_OPINION" disabled
placeholder="请输入作业负责人意见"></textarea>
</view>
<view class="cu-form-group">
<view class="title">检查人签字</view>
<view>
<view>
<image :src="$store.state.filePath + '/' + item.INSPECTION_USER_SIGN_IMG"
style="width: 180upx;height: 100upx">
</image>
</view>
<view style="text-align: center">{{ item.INSPECTION_USER_SIGN_TIME }}</view>
</view>
</view>
</view>
</view>
<view class="card" style="margin-top: 20upx;">
<view class="cu-form-group">
<view class="title">被检查单位现场负责人意见</view>
<radio-group @change="changeRadioGroup($event)">
<label class="radio">
<radio value="3" :checked="inspectedForm.INSPECTION_STATUS === '3'" />同意
</label>
<label v-if="form.hiddenList && form.hiddenList.length > 0" class="radio">
<radio value="-2" :checked="inspectedForm.INSPECTION_STATUS === '-2'" />申辩
</label>
</radio-group>
</view>
<view class="cu-form-textarea" v-show="inspectedForm.INSPECTION_STATUS === '-2'">
<view class="cu-form-title text-hui">申辩说明</view>
<textarea maxlength="-1" v-model="inspectedForm.INSPECTED_EXPLAIN" placeholder="检查人意见(有异议时必填)"></textarea>
</view>
<view class="cu-form-group" style="border: none;">
<view class="title">签字</view>
<view><u-button class="bg-green shadow" @tap="modalShow = true" data-target="Modal">手写签字</u-button></view>
</view>
<view style="margin-left: 30upx;" v-show="signImgList && signImgList.length > 0">
<view class="action">
签字照片
</view>
</view>
<view v-show="signImgList && signImgList.length > 0">
<view v-for="(item, index) in signImgList" :key="index" @tap="ViewImage" data-type="1"
:data-url="signImgList[index].filePath">
<u--image width="330upx" height="170upx" :src="signImgList[index].filePath" mode="aspectFill" />
<view class="cu-tag" @tap.stop="delImg" data-type="0" :data-index="index">
<text class='cuIcon-close'></text>
</view>
</view>
</view>
<view class="cu-modal" :class="{ 'show': modalShow }">
<sign @confirm="subCanvas" @cancel="modalShow = false" :signShow="true" />
</view>
</view>
<view class="bottom-btn-group">
<view v-if="forbidEdit" style="width: 80%;">
<u-button class="bg-blue" @click="goSubmit" :throttleTime="1400">提交</u-button>
</view>
<view v-if="!forbidEdit" style="width: 80%;">
<u-button class="bg-green" @click="goback"></u-button>
</view>
</view>
<view class="padding flex flex-direction"></view>
<uni-drawer ref="showHiddenWindow" mode="right" :mask-click="true" @change="change($event, 'showHiddenWindow')">
<scroll-view scroll-y="true" style="height: 93vh;">
<view class="de-drawer">
<view class="cu-bar bg-white pad">
<view>
隐患照片
</view>
<view>
{{ hiddenForm.hiddenImgs.length }}/4
</view>
</view>
<view class="cu-form-group">
<view class="grid-square">
<view class="box-img" v-for="item in hiddenForm.hiddenImgs" :key="item.IMGFILES_ID">
<!-- 这里因为还未接入到网络接口,因此没有详细的图片url路径地址,选用模拟数据的图片url做临时展示 -->
<!-- <u--image :showLoading="true" :src="$store.state.filePath + item.FILEPATH" mode="aspectFill"></u--image> -->
<u--image :showLoading="true" :src="item.FILEPATH" mode="aspectFill" width="160upx" height="160upx"
style="border-radius: 12upx;" @click="viewImage(item.FILEPATH)" />
</view>
</view>
</view>
<view class="cu-bar bg-white pad">
<view>
隐患视频
</view>
<view>
{{ hiddenForm.hiddenVideos.length }}/1
</view>
</view>
<view class="cu-form-group" style="margin-bottom: 16upx;">
<view class="grid-square">
<view class="box-img" v-for="item in hiddenForm.hiddenVideos" data-type="0" :data-url="item.FILEPATH"
:key="item.IMGFILES_ID"
style="background-color: #8a8a8a; display: flex; align-items: center; justify-content: center;"
@tap="playVideo">
<u--image src="../../../static/video.png" mode="aspectFill"
:data-src="$store.state.filePath + item.FILEPATH" width="40upx" height="40upx" />
</view>
</view>
</view>
<u-line />
<view class="cu-form-textarea">
<view class="cu-bar bg-white pad">隐患描述</view>
<textarea maxlength="-1" style="margin-left: 30upx; height: 140upx;" :disabled="true"
v-model="hiddenForm.HIDDENDESCR" placeholder="请对隐患进行详细描述(必填项)"></textarea>
</view>
<u-line style="margin-top: 16upx;" />
<view class="flex-between">
<view class="cu-bar bg-white pad">隐患部位</view>
<text class="text-color">{{ hiddenForm.HIDDENPART_NAME ? hiddenForm.HIDDENPART_NAME : hiddenForm.HIDDENPART
}}</text>
</view>
<u-line />
<view class="cu-form-textarea">
<view class="cu-bar bg-white pad">隐患位置描述</view>
<textarea maxlength="-1" style="margin-left: 30upx; height: 140upx;" :disabled="true"
v-model="hiddenForm.POSITIONDESC" placeholder="隐患位置描述进行详细描述(必填项)"></textarea>
</view>
<u-line />
<view class="flex-between">
<view class="cu-bar bg-white pad">隐患级别</view>
<text class="text-color">{{ hiddenForm.HIDDENLEVEL_NAME }}</text>
</view>
<u-line />
<view class="flex-between">
<view class="cu-bar bg-white pad">隐患类型</view>
<text class="text-color">{{ hiddenForm.HIDDENTYPE_NAME }}</text>
</view>
<u-line />
<view class="flex-between">
<view class="cu-bar bg-white pad">是否相关方</view>
<text class="text-color">{{ hiddenForm.ISRELEVANT == '1' ? '是' : '否' }}</text>
</view>
<u-line />
<view class="flex-between">
<view class="cu-bar bg-white pad">隐患发现时间</view>
<text class="text-color">{{ hiddenForm.DISCOVERYTIME }}</text>
</view>
<u-line />
<view class="flex-between">
<view class="cu-bar bg-white pad">隐患上报位置</view>
</view>
<u-line />
<view class="flex-between" style="border-bottom: 2upx solid #eee;"
v-if="hiddenForm.LONGITUDE && hiddenForm.LONGITUDE !== 'undefined'">
<view class="cu-bar bg-white pad">经度</view>
<text class="text-color">{{ hiddenForm.LONGITUDE }}</text>
</view>
<view class="flex-between" style="border-bottom: 2upx solid #eee;"
v-if="hiddenForm.LATITUDE && hiddenForm.LATITUDE !== 'undefined'">
<view class="cu-bar bg-white pad">纬度</view>
<text class="text-color">{{ hiddenForm.LATITUDE }}</text>
</view>
<view class="flex-between">
<view class="cu-bar bg-white pad">隐患发现人</view>
<text class="text-color">
{{ hiddenForm.CREATOR_NAME }}
</text>
</view>
<view class="de-drawer-bottom">
<u-button type="primary" text="返回" @click="cancelHidden" />
</view>
</view>
</scroll-view>
</uni-drawer>
<view class="cu-modal box-video-modal" :class="{ 'show': modalShowVideo }" v-if="modalShowVideo">
<view class="box-video-container">
<view class="box-video-title">
<view class="text-center">播放视频</view>
<view class="right-close" @tap="modalShowVideo = false">
<text class="cuIcon-close text-red"></text>
</view>
</view>
<video class="video-source" :src="videoSrc" :autoplay="true" />
<view class="vide-btn-close">
<u-button type="primary" style="width: 50%; border-radius: 12upx;" color="#39b54a" text="关闭"
@click="modalShowVideo = false" />
</view>
</view>
</view>
</view>
</template>
<script>
import { formatDate } from '@/utils/tools';
import { getInspectedItemGoShow } from '../../api';
import sign from '@/components/sign/sign.vue';
import uniDrawer from '@/components/uni-drawer/uni-drawer.vue';
import { inspectedFormData } from '@/Mock/safetyEnvirData';
export default {
components: { sign, uniDrawer },
data() {
return {
msg: 'add',
/** 禁止修改 */
forbidEdit: true,
/** 签字照片的图片列表 */
signImgList: [],
/** 当天日期 */
todayDate: '',
/** 手写签字的弹框 */
modalShow: false,
/** 隐患责任人下拉数据 */
creatorList: [],
/** 隐患添加窗口显隐态, 默认为关闭状态 */
showHiddenWindow: false,
/** 视频播放弹框态 */
modalShowVideo: false,
/** 视频播放路径地址 */
videoSrc: '',
form: {
/** 检查ID */
INSPECTION_ID: '',
/** 现场检查记录 */
INSPECTION_SUBJECT: '',
/** 被检查单位 */
INSPECTED_DEPARTMENT_ID: '',
INSPECTED_DEPARTMENT_NAME: '',
/** 被检查单位现场负责人 */
INSPECTED_DEPARTMENT_NAMES: '',
}
/** 检查场所 */
INSPECTION_PLACE: '',
/** 检查类型 */
INSPECTION_TYPE_NAME: '',
/** 检查开始时间 */
INSPECTION_TIME_START: '',
/** 检查结束时间 */
INSPECTION_TIME_END: '',
/** 记录填写时间 */
CREATTIME: '',
/** 检查情况 */
situationList: [],
/** 检查人员 */
inspectorList: [],
/** 发现问题 */
hiddenList: [],
/** 检查人员核实结果 */
inspectorList: []
},
inspectedForm: {
/** 安全环保检查人员主键ID */
INSPECTION_EXPLAIN_ID: '',
/** 被检查单位现场负责人意见 */
INSPECTION_STATUS: '3',
/** 安全环保检查ID */
INSPECTION_ID: '',
/** 申辩内容 */
INSPECTED_EXPLAIN: '',
/** 申辩附件名称 */
INSPECTED_EXPLAIN_FILENAME: '',
/** 被检查单位现场负责人签字 */
INSPECTED_SITEUSER_SIGN_IMG: '',
/** 被检查单位现场负责人签字的时间 */
INSPECTED_SITEUSER_SIGN_TIME: ''
},
//
hiddenForm: {
/** 隐患ID */
HIDDEN_ID: '',
/** 隐患描述 */
HIDDENDESCR: '',
/** 隐患部位 */
HIDDENPART: '',
/** 隐患名称 */
HIDDENPART_NAME: '',
/** 隐患级别 */
HIDDENLEVEL: '',
/** 隐患级别的回显名称文案 */
HIDDENLEVEL_NAME: '',
/** 隐患类型 1 */
HIDDENTYPE: '',
/** 隐患类型 1 的回显文案 */
HIDDENTYPE_NAME: '',
/** 隐患类型 2 */
HIDDENTYPE2: '',
/** 隐患类型 2 的回显文案 */
HIDDENTYPE2_NAME: '',
/** 隐患位置经度 */
LONGITUDE: '',
/** 隐患位置纬度 */
LATITUDE: '',
/** 隐患发现时间 */
DISCOVERYTIME: '',
/** 隐患发现部门(隐患责任人部门) */
HIDDENFINDDEPT: '',
/** 隐患发现部门(隐患责任人部门)的回显文案 */
HIDDENFINDDEPT_NAME: '',
/** 发现人(隐患责任人) */
CREATOR: '',
/** 发现人(隐患责任人)索引 */
CREATOR_INDEX: '',
/** 发现人(隐患责任人)回显文案 */
CREATOR_NAME: '',
/** 隐患来源 */
SOURCE: '5',
/** 隐患位置描述 */
POSITIONDESC: '',
/** 是否为相关方 */
ISRELEVANT: '',
/** 隐患图片 */
hiddenImgs: [],
/** 隐患视频 */
hiddenVideos: []
},
}
},
onLoad(options) {
this.form.INSPECTION_ID = options.INSPECTION_ID;
this.todayDate = formatDate(new Date(), 'yyyy-MM-dd hh:mm');
this.msg = "edit";
this.fnGetData();
},
methods: {
/**
* 读取详情数据
*/
async fnGetData() {
var _this = this;
uni.showLoading({
title: '请稍候'
})
try {
_this.form = inspectedFormData;
setTimeout(() => {
uni.hideLoading();
}, 500);
// const responseData = await getInspectedItemGoShow({
// INSPECTION_ID: _this.form.INSPECTION_ID,
// })
// if (responseData.data.result === 'success') {
// uni.hideLoading();
// // _this.form = res.data.pd;
// for (let i = 0; i < _this.form.inspectorList.length; i++) {
// _this.inspectorList.push([])
// _this.getUserList('inspectorList', _this.form.inspectorList[i].INSPECTION_DEPARTMENT_ID, i)
// }
// if (Number(_this.form.INSPECTION_STATUS) < 1) {
// _this.forbidEdit = false;
// }
// } else if ("exception" == data.result) {
// uni.hideLoading();
// uni.showToast({
// title: '',
// duration: 2000
// });
// }
} catch (err) {
uni.hideLoading();
uni.showToast({
title: '错误',
duration: 2000
});
}
},
/**
* 完成手写签字事件处理
*/
subCanvas(e) {
this.signImgList.splice(0, this.signImgList.length);
this.signImgList.push(e);
this.$set(this.inspectedForm, 'INSPECTED_SITEUSER_SIGN_TIME', formatDate(new Date(), 'yyyy-MM-dd hh:mm'))
this.modalShow = false;
},
/**
* 删除手写签名的图片
*/
delImg(e) {
var _this = this;
let i = e.currentTarget.dataset.index
uni.showModal({
title: '秦港-双基双控',
content: '确定要删除这张图片吗?',
cancelColor: "#000000",
cancelText: '取消',
confirmText: '确定',
success: res => {
if (res.confirm) {
_this.signImgList.splice(i, 1)
}
}
})
},
/**
* 显示隐患信息弹窗弹出
*/
showHidden(item, index) {
this.resetHidden();
this.creatorList = [];
this.form.inspectorList.forEach(item => {
this.creatorList.push({
USER_ID: item.INSPECTED_USER_ID,
NAME: item.INSPECTION_USER_NAME
})
});
this.hiddenForm = item;
this.$refs['showHiddenWindow'].open()
this.showHiddenWindow = true;
},
/**
* 取消添加隐患信息弹窗
*/
cancelHidden() {
this.$refs['showHiddenWindow'].close();
this.showHiddenWindow = false;
},
/**
* 抽屉状态发生变化触发
*/
change(e, type) {
this[type] = e;
},
/**
* 图片预览处理
*/
viewImage(url) {
let files = [];
for (var i = 0; i < this.hiddenForm.hiddenImgs.length; i++) {
files.push(this.hiddenForm.hiddenImgs[i].FILEPATH);
// files.push(this.$store.state.filePath + this.hiddenForm.hiddenImgs[i].FILEPATH); // ,使 mock url
}
uni.previewImage({
urls: files,
current: this.$store.state.filePath + url
});
},
/**
* 播放视频处理
*/
playVideo(evt) {
this.videoSrc = evt.currentTarget.dataset.url;
this.modalShowVideo = true;
},
/**
* 提交逻辑处理
*/
goSubmit() { },
/**
* 返回逻辑处理
*/
goback() {
let pages = getCurrentPages(); //
let prePage = pages[pages.length - 2]; //
// prePage.$vm.initflag = true; // A init true
uni.navigateBack({ delta: 1 });
uni.hideLoading();
},
/**
* 重置隐患键入表单
*/
resetHidden() {
this.hiddenForm = {
HIDDEN_ID: '',
HIDDENDESCR: '',
HIDDENPART: '',
HIDDENPART_NAME: '',
HIDDENLEVEL: '',
HIDDENLEVEL_NAME: '',
HIDDENTYPE: '',
HIDDENTYPE_NAME: '',
HIDDENTYPE2: '',
HIDDENTYPE2_NAME: '',
LONGITUDE: '',
LATITUDE: '',
DISCOVERYTIME: '',
HIDDENFINDDEPT: '',
HIDDENFINDDEPT_NAME: '',
CREATOR: '',
CREATOR_INDEX: '',
CREATOR_NAME: '',
SOURCE: '5',
hiddenImgs: [],
hiddenVideos: []
}
},
}
}
</script>
<style scoped lang="scss"></style>
<style scoped lang="scss">
.title {
min-width: 200upx;
width: max-content;
font-weight: bold;
color: #000000;
font-size: 28upx;
}
.value {
color: #808080;
font-size: 28upx
}
.check {
padding-left: 30upx;
padding-bottom: 24upx;
}
.ace-content {
padding: 20upx;
border-top: 2upx solid #F1F1F1;
}
.cu-form-textarea uni-textarea {
color: #808080;
}
.add_pard_item {
border: 2upx dashed #dfdfdf;
margin: 0 30upx;
margin-top: 30upx;
position: relative
}
.cu-form-group {
background-color: #ffffff;
padding: 2upx 30upx;
display: flex;
align-items: center;
min-height: 100upx;
justify-content: space-between
}
.cu-form-group+.cu-form-group {
border-top: 2upx solid #eee;
}
.bg-blue,
.bg-green {
color: #ffffff;
border-radius: 14upx;
}
// 绿
.bg-green {
background-color: #39b54a;
}
//
.bg-blue {
background-color: #0081ff;
}
.shadow {
box-shadow: 6upx 6upx 8upx rgba(48, 156, 63, 0.2);
}
.padding {
padding: 30upx;
}
.flex-direction {
flex-direction: column;
}
.flex {
display: flex;
}
.cu-tag {
background: rgba(0, 0, 0, .5);
color: #ffffff;
font-size: 24upx;
vertical-align: middle;
position: relative;
right: -280upx;
top: -174upx;
display: inline-flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
padding: 0upx 16upx;
width: 50upx;
height: 40upx;
border-bottom-left-radius: 10upx;
font-family: Helvetica Neue, Helvetica, sans-serif;
white-space: nowrap;
}
.grid.grid-square .cu-tag {
position: absolute;
right: 0;
top: 0;
border-bottom-left-radius: 6upx;
padding: 6upx 12upx;
height: auto;
background-color: rgba(0, 0, 0, 0.5);
}
.cu-tag[class*="line-"]::after {
content: " ";
width: 200%;
height: 200%;
position: absolute;
top: 0;
left: 0;
border: 1upx solid currentColor;
transform: scale(0.5);
transform-origin: 0 0;
box-sizing: border-box;
border-radius: inherit;
z-index: 1;
pointer-events: none;
}
.cu-tag.radius[class*="line"]::after {
border-radius: 12upx;
}
.cu-tag.round[class*="line"]::after {
border-radius: 1000upx;
}
.cu-tag[class*="line-"]::after {
border-radius: 0;
}
.cu-tag+.cu-tag {
margin-left: 10upx;
}
.cu-tag.sm {
font-size: 20upx;
padding: 0upx 12upx;
height: 32upx;
}
.cuIcon-close:before {
font-family: "cuIcon";
content: "\e646";
}
.bottom-btn-group {
margin-top: 20upx;
padding: 26upx;
display: flex;
align-items: center;
justify-content: center;
}
// ======================================
//
// ======================================
.de-drawer {
box-sizing: border-box;
padding: 0 0;
font-size: 30upx;
}
.bg-white {
background-color: #ffffff;
color: #666666;
}
.cu-bar {
display: flex;
position: relative;
align-items: center;
justify-content: space-between;
min-height: 100upx;
}
.pad {
padding: 0 30upx;
}
.text-color {
margin-right: 16upx;
color: #808080;
}
.grid-square {
display: flex;
flex-wrap: wrap;
overflow: hidden;
gap: 24upx;
flex: 1;
.box-img {
border: 1px solid #eee;
width: 160upx;
height: 160upx;
overflow: hidden;
object-fit: cover;
border-radius: 12upx;
}
}
.box-video-modal {
background: rgba(0, 0, 0, .8);
color: #fff;
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
.box-video-container {
box-sizing: border-box;
width: 646upx;
height: 746upx;
background-color: #fff;
color: #000;
border-radius: 20upx;
.box-video-title {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 80upx;
.text-center {
transform: translateX(28upx);
flex: 1;
}
.text-red {
margin-right: 24upx;
color: red;
}
.right-close {
z-index: 999;
}
}
.video-source {
margin-top: 24upx;
}
.vide-btn-close {
width: 100%;
display: flex;
height: 160upx;
justify-content: center;
align-items: center;
}
}
}
.de-drawer-bottom {
display: flex;
width: 100%;
position: fixed;
bottom: 0;
height: 80upx;
}
</style>

View File

@ -13,7 +13,7 @@
<list :list="list" @scrollToLower="scrollToLower">
<template #default="{ item }">
<view class="flex-between main-title">
<text>{{ item.INSPECTION_SUBJECT }}现场安全检查记录</text>
<text style="font-size: 30upx; color: #000;">{{ item.INSPECTION_SUBJECT }}现场安全检查记录</text>
</view>
<view class="flex-between main-title">
<text>
@ -46,7 +46,7 @@
import { getInspectedList } from "../../api";
import keyWordSearchInput from "@/components/keyWordSearchInput/index.vue";
import List from "@/components/list/list.vue";
import { initiateList } from "../../../Mock/safetyEnvirData";
import { inspectedList } from "../../../Mock/safetyEnvirData";
export default {
components: { keyWordSearchInput, List },
@ -98,8 +98,8 @@ export default {
// mock
setTimeout(() => {
this.list = initiateList;
this.totalPage = initiateList.length;
this.list = inspectedList;
this.totalPage = inspectedList.length;
uni.hideLoading();
}, 400);
},
@ -112,6 +112,11 @@ export default {
showPicker() {
this.show = true;
},
confirmPicker(e) {
this.INSPECTION_STATUS = e.value[0].id;
this.show = false;
this.resetList();
},
/**
* 申辩处理按钮事件
*/
@ -139,4 +144,9 @@ export default {
}
</script>
<style scoped lang="scss"></style>
<style scoped lang="scss">
.main-title {
font-size: 26upx;
color: #888;
}
</style>

BIN
static/video.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

File diff suppressed because one or more lines are too long

26
utils/tools.js Normal file
View File

@ -0,0 +1,26 @@
export function formatDate(date, fmt) {
if(null != JSON.stringify(date) && 'null' != JSON.stringify(date) && undefined != JSON.stringify(date) && 'undefined' != JSON.stringify(date) && JSON.stringify(date) != '' && JSON.stringify(date).length > 0){
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
}
let o = {
'M+': date.getMonth() + 1,
'd+': date.getDate(),
'h+': date.getHours(),
'm+': date.getMinutes(),
's+': date.getSeconds()
}
for (let k in o) {
if (new RegExp(`(${k})`).test(fmt)) {
let str = o[k] + ''
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str))
}
}
return fmt
} else {
return ''
}
}
function padLeftZero(str) {
return ('00' + str).substr(str.length)
}