integrated_traffic_uniapp/pages/application/blindboard/blindboard-measures/blindboard-measures-detail.vue

478 lines
17 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view >
<cu-custom bgColor="bg-gradual-blueness" :isBack="true" >
<block slot="backText">返回</block>
<block slot="content">选择安全措施确认人</block>
</cu-custom>
<scroll-view scroll-y="false" >
<view class="form">
<detail v-if="pd.BLINDBOARD_ID" :blindboardId="pd.BLINDBOARD_ID" :showMeasures="false"></detail>
<view class="wui-form-list">
<view class="cu-form-textarea">
<view class="cu-form-title">盲板抽堵位置及安全措施</view>
</view>
<view class="cu-bar">
<view class="action" >
盲板抽堵位置图
</view>
</view>
<view class="cu-form-group">
<view class="grid col-4 grid-square flex-sub">
<view class="bg-img" v-for="(item,index) in conimgList" :key="index" @tap="viewImage(index,'conimgList')">
<image :src="baseImgPath + item.filePath" mode="aspectFill"></image>
<view class="cu-tag bg-red" @tap.stop="delImgs" data-type="2" :data-index="index">
<text class='cuIcon-close'></text>
</view>
</view>
<view class="solids" @tap="chooseImages()">
<text class='cuIcon-cameraadd'></text>
</view>
</view>
</view>
</view>
<view class="wui-form-list" style="padding-top: 20upx;">
<view class="wui-title" style="margin-left: 20upx;">
<text class="text-semi">安全防护措施</text>
</view>
<view class="wui-table" style="padding: 0 20upx;">
<uni-table name='measuresList' border stripe emptyText="暂无更多数据" >
<!-- 表头行 -->
<uni-tr>
<uni-th align="center" style="font-weight: bold;">主要安全措施</uni-th>
</uni-tr>
<template v-for="(item,index) in measuresList">
<uni-tr>
<uni-td>
<view style="margin-bottom: 20upx;">
{{item.PROTECTIVE_MEASURES}}
</view>
<view class="cu-form-group" >
<view class="title">确认单位:</view>
<view class="picker-tree-box">
<view class="picker-tree" @tap="showDeptTree(index)">{{measuresList[index].DEPARTMENT_NAME?measuresList[index].DEPARTMENT_NAME:'请选择'}}</view>
</view>
<tki-tree :ref="'tkiTree'+index"
:selectParent=true
:range="treeNode"
rangeKey="name"
@confirm="deptTreeConfirm($event,index)"
@cancel="deptTreeCancel($event,index)"></tki-tree>
</view>
<view class="cu-form-group" >
<view class="title">确认人</view>
<picker @change="pickerUser($event,index)" :value="item.userIndex" :range="item.userList" range-key="NAME" :disabled="item.userList.length == 0" @click="isBlankList(index)">
<view class="picker">
{{measuresList[index].USER_NAME?measuresList[index].USER_NAME:'请选择'}}
</view>
</picker>
</view>
</uni-td>
</uni-tr>
</template>
</uni-table>
</view>
<view class="wui-sign" >
<view class="title"></view>
<button class="cu-btn bg-green shadow" @tap="showModal" data-target="Modal">手写签字</button>
</view>
<view class="wui-sign-box" v-show="imgList && imgList.length > 0">
<view class="sign-title">
签字照片:
</view>
<view class="wui-sign-cotent">
<view class="sign-img" v-for="(item,index) in imgList" :key="index" @tap="ViewImage" data-type="0" :data-url="imgList[index].filePath">
<image :src="imgList[index].filePath" mode="aspectFit"></image>
</view>
</view>
</view>
<view class="cu-modal" :class="modalName=='Modal'?'show':''">
<writing-board @confirm="subCanvas" @cancel="hideModal"></writing-board>
</view>
</view>
</view>
<view class="cu-bar btn-group" style="margin-top: 30upx;">
<button class="cu-btn bg-red margin-tb-sm lg" @click="$noMultipleClicks(goSubmit,'-1')">打 回</button>
<button class="cu-btn bg-green margin-tb-sm lg" @click="$noMultipleClicks(goSubmit,'1')">通 过</button>
</view>
<view class="padding flex flex-direction">
</view>
</scroll-view>
</view>
</template>
<script>
import {
basePath,corpinfoId,deptId,loginUser,formatDate,loginSession,baseImgPath
} from '@/common/tool.js';
import tkiTree from "@/components/select-tree/select-tree.vue"
import writingBoard from "@/components/writing-board/writing-board.vue"
import gcoord from '@/common/gcoord.js'
import ruiDatePicker from '@/components/rattenking-dtpicker/rattenking-dtpicker.vue';
import detail from '@/pages/application/blindboard/blindboard-detail/index'
export default {
components: {
tkiTree,ruiDatePicker,writingBoard,detail
},
data() {
return {
baseImgPath:baseImgPath,
buttonloading: false,
noClick:true,
treeNode:[],//部门下拉数据
pd:{},// 数据
measuresList:[],
modalName:null,
imgList:[],
conimgList: [],
}
},
onLoad(event){
this.pd.BLINDBOARD_ID = event.BLINDBOARD_ID;
this.getData();
// 初始化现场作业负责人
this.getDept();
this.getMeasures();
loginSession();
},
methods: {
delImgs(e) {
var _this = this;
uni.showModal({
title: '秦安双控',
content: '确定要删除这张图片吗?',
cancelColor: "#000000",
cancelText: '取消',
confirmText: '确定',
success: res => {
if (res.confirm) {
uni.request({
url: basePath+'/app/eightwork/deleteFile',
method: 'POST',
dataType: 'json',
header: {
'Content-type':'application/x-www-form-urlencoded'
},
data: {
FILE_PATH:_this.conimgList[e.currentTarget.dataset.index].filePath
},
success: (res) => {
uni.showToast({
icon: 'none',
title: '删除成功',
duration: 1500
});
this.conimgList.splice(e.currentTarget.dataset.index, 1)
},
fail: (err) => {
uni.showModal({
content: "删除失败",
showCancel: false
});
}
})
}
}
})
},
chooseImages() {
uni.chooseImage({
count: 1, //默认9
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['camera', 'album'], //从相册选择
success: (res) => {
uni.uploadFile({
url: basePath+'/app/eightwork/saveFile',
filePath: res.tempFilePaths[0],
name: 'file',
formData: {
CORPINFO_ID:loginUser.CORPINFO_ID,
},
success: ({data}) => {
let img = {};
img.filePath = JSON.parse(data).FILE_PATH;
this.conimgList.push(img)
console.log(this.conimgList)
},
fail: (err) => {
uni.showModal({
content: "图片上传失败",
showCancel: false
});
}
})
}
});
},
getData() {
var _this = this;
uni.showLoading({
title: '请稍候'
})
uni.request({
url: basePath + '/app/blindboard/findById',
method: 'POST',
header: {
'Content-type': 'application/x-www-form-urlencoded'
},
data: {
BLINDBOARD_ID: _this.pd.BLINDBOARD_ID,
CORPINFO_ID:loginUser.CORPINFO_ID,
USER_ID:loginUser.USER_ID,
},
success: (res) => {
if ("success" == res.data.result) {
uni.hideLoading();
_this.pd = res.data.pd; //参数map
} else if ("exception" == data.result) {
uni.showToast({
title: '错误',
duration: 2000
});
}
}
});
},
goSubmit(APPLY_STATUS){
var _this = this;
uni.showLoading({
title: '请稍候'
})
if (_this.imgList.length <= 0) {
uni.showToast({
icon: 'none',
title: '请签字',
duration: 1500
});
return;
}
if(APPLY_STATUS == 1){
for (let i = 0; i < this.measuresList.length; i++) {
const measures = this.measuresList[i]
if(!measures.USER_ID){
uni.showToast({
icon: 'none',
title: '第'+(i+1)+'项未设置确认人',
duration: 1500
});
return;
}
}
if(_this.conimgList.length <= 0){
uni.showToast({
icon: 'none',
title: '请上传盲板抽堵位置图',
duration: 1500
});
return;
}
}
const formData={}
var files = [];
var signtime = [];
const signers = this.measuresList.map(item => {
return {
BUS_BLINDBOARD_MEASURES_ID: item.BUS_BLINDBOARD_MEASURES_ID,
USER_ID: item.USER_ID
}
})
this.uploadImgFaults(files,signtime)
formData.BLINDBOARD_ID = _this.pd.BLINDBOARD_ID
formData.SIGNTIME = signtime.join(",")
formData.USER_ID = loginUser.USER_ID
formData.APPLY_STATUS = APPLY_STATUS
formData.PREPARERS = JSON.stringify(signers)
formData.CONIMG_PATH = this.conimgList.map(item => {
return item.filePath
}).join(",")
uni.uploadFile({
url: basePath+'app/blindboard/nextStep',
files: files,
formData:formData,
success: (res) => {
uni.showToast({
icon:'none',
title: '保存成功',
duration: 2000
});
_this.goback()
},
fail: (err) => {
uni.hideLoading();
uni.showModal({
content: err.errMsg,
showCancel: false
});
}
})
},
uploadImgFaults(files,signtime) {
this.imgList.map((item,index) => {
var img = {}
img.name = 'file'+index
img.uri = item.filePath
files.push(img)
signtime.push(item.SIGNER_TIME)
})
},
getMeasures(){
var _this = this;
uni.request({
method: 'POST',
dataType: 'json',
header: {
'Content-type': 'application/x-www-form-urlencoded'
},
url: basePath + '/app/blindboard/listAllMeasures?tm=' + new Date().getTime(),
data: {
CORPINFO_ID:loginUser.CORPINFO_ID,
USER_ID:loginUser.USER_ID,
},
success: function (res) {
_this.measuresList = res.data.measuresList.map((item,index)=>{
item.userList = []
item.userIndex = -1
return item
})
}
});
},
getDept() {
var _this = this;
uni.request({
url: basePath + '/app/sys/listTree',//部门下拉接口
method: 'POST',
dataType: 'json',
header: {
'Content-type':'application/x-www-form-urlencoded'
},
data: {
CORPINFO_ID:loginUser.CORPINFO_ID,
USER_ID:loginUser.USER_ID,
},
success: (res) => {
if("success" == res.data.result){
_this.treeNode=eval(res.data.zTreeNodes);
} else {
uni.showToast({
title: res.data.message,
duration: 2000
});
}
}
});
},
showDeptTree(index) {
this.isUps=true
this.$refs['tkiTree'+index][0]._show();
},
deptTreeConfirm(e,i) {
this.isUps=false;
this.measuresList[i].DEPARTMENT_ID=e[0].id;
this.measuresList[i].DEPARTMENT_NAME=e[0].name;
this.measuresList[i].USER_ID = ''
this.measuresList[i].USER_NAME = ''
this.getUserList(e[0].id,i);
},
deptTreeCancel(e) {
this.isUps=false;
},
pickerUser(e,i) {
this.measuresList[i].userIndex = e.detail.value;
this.measuresList[i].USER_ID=this.measuresList[i].userList[e.detail.value].USER_ID;
this.measuresList[i].USER_NAME=this.measuresList[i].userList[e.detail.value].NAME;
this.$forceUpdate();//强制刷新
},
isBlankList(i) {
if (this.measuresList[i].userList.length == 0) {
uni.showToast({
icon: 'none',
title: '请先选择确认单位',
duration: 1500
})
}
},
//获取人员列表
getUserList(dept,i){
//发送 post 请求
var _this=this
uni.request({
method: 'POST',
dataType: 'json',
header: {
'Content-type':'application/x-www-form-urlencoded'
},
url: basePath+'/app/sys/listUser',
data: {
DEPARTMENT_ID:dept,
tm:new Date().getTime(),
CORPINFO_ID:loginUser.CORPINFO_ID,
USER_ID:loginUser.USER_ID,
},
success: function(res){
if("success" == res.data.result){
_this.measuresList[i].userList = res.data.userList;
}else{
uni.showToast({
title: res.data.message,
duration: 2000
});
}
}
})
},
/*
*手写板
*/
showModal(e) {
this.modalName = e.currentTarget.dataset.target
},
hideModal(e) {
this.modalName = null
},
//完成
subCanvas(e) {
e.SIGNER_TIME = formatDate(new Date(), 'yyyy-MM-dd hh:mm')
this.imgList.splice(0,this.imgList.length);
this.imgList.push(e);
this.hideModal()
},
ViewImage(e) {
let files =[];
files.push(e.currentTarget.dataset.url)
uni.previewImage({
urls: files,
current: e.currentTarget.dataset.url
});
},
goback(){
var pages = getCurrentPages(); // 获取当前页面栈
var prePage = pages[pages.length - 2]; // 上二级页面
prePage.$vm.initflag = true; // A 页面 init方法 为true
uni.navigateBack({delta: 1});
uni.hideLoading();
},
}
}
</script>
<style>
</style>