575 lines
13 KiB
Vue
575 lines
13 KiB
Vue
<template>
|
|
<view class="operation-body">
|
|
<uni-nav-bar @clickLeft="goBack()" class="nav-bar" height="110rpx" leftWidth="200rpx" leftText="作业信息"
|
|
leftIcon="left" border backgroundColor="#2cade8" color="#fff" fixed statusBar shadow></uni-nav-bar>
|
|
<view class="form-info">
|
|
<view class="form-left-text">
|
|
<text class="star">*</text>
|
|
<text>作业简介</text>
|
|
</view>
|
|
<textarea class="apply-reason-text" v-model="formData.name" maxlength="250" placeholder="请输入" />
|
|
</view>
|
|
<view class="form-info">
|
|
<view class="form-content ">
|
|
<view class="form-item border-bottom">
|
|
<view class="form-left">
|
|
<!-- <text class="star">*</text> -->
|
|
<text class="form-left-text">具体地点</text>
|
|
</view>
|
|
<view class="form-right">
|
|
<input type="text" v-model="formData.place" maxlength="50" placeholder="请输入" />
|
|
</view>
|
|
</view>
|
|
<view class="form-item border-bottom">
|
|
<view class="form-left">
|
|
<text class="star">*</text>
|
|
<text class="form-left-text">作业时间</text>
|
|
</view>
|
|
<view class="form-right form-date">
|
|
<view class="form-right form-date">
|
|
<uni-datetime-picker
|
|
v-model="datetimerange"
|
|
type="datetimerange"
|
|
rangeSeparator="至"
|
|
:hide-second="true"
|
|
/>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="form-item border-bottom">
|
|
<view class="form-left">
|
|
<text class="star">*</text>
|
|
<text class="form-left-text">生产状态</text>
|
|
</view>
|
|
<view class="form-right">
|
|
<uni-data-select v-model="formData.state_work" :localdata="stateRange">
|
|
</uni-data-select>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="form-item border-bottom">
|
|
<view class="form-left">
|
|
<text class="star">*</text>
|
|
<text class="form-left-text">作业区域</text>
|
|
</view>
|
|
<view class="form-right">
|
|
<uni-data-select v-model="formData.area" :localdata="range" @change="areaChange">
|
|
</uni-data-select>
|
|
</view>
|
|
</view>
|
|
<view class="form-item border-bottom">
|
|
<view class="form-left">
|
|
<text class="form-left-text">监控相机</text>
|
|
</view>
|
|
<view class="form-right">
|
|
<uni-data-select v-model="formData.vchannel" :localdata="vchannelOptions">
|
|
</uni-data-select>
|
|
</view>
|
|
</view>
|
|
<view class="form-item border-bottom">
|
|
<view class="form-left">
|
|
<text class="star">*</text>
|
|
<text class="form-left-text">属地部门</text>
|
|
</view>
|
|
<view class="form-right">
|
|
<uni-data-picker placeholder="请选择属地部门" popup-title="请选择属地部门" :localdata="depRange"
|
|
v-model="formData.dept_ter" @change="onchange" @nodeclick="onnodeclick"
|
|
@popupopened="onpopupopened" @popupclosed="onpopupclosed">
|
|
</uni-data-picker>
|
|
</view>
|
|
</view>
|
|
<view class="form-item border-bottom">
|
|
<view class="form-left">
|
|
<text class="star">*</text>
|
|
<text class="form-left-text">业务部门</text>
|
|
</view>
|
|
<view class="form-right">
|
|
<uni-data-picker placeholder="请选择业务部门" popup-title="请选择业务部门" :localdata="depRange"
|
|
v-model="formData.dept_bus" >
|
|
</uni-data-picker>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="form-item border-bottom">
|
|
<view class="form-left" @click="selectUser">
|
|
<text class="star">*</text>
|
|
<text class="form-left-text">部门协调员</text>
|
|
</view>
|
|
<view class="form-right">
|
|
<uni-data-select v-model="formData.coordinator" :localdata="userRange">
|
|
</uni-data-select>
|
|
</view>
|
|
</view>
|
|
<view class="btn" v-if="showBtns">
|
|
<button type="primary" class="save-btn" @click="saveSubmit">下一步</button>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
var that;
|
|
import nonNullCheck from '../../../utils/nonNullCheck.js';
|
|
export default {
|
|
name: "operation",
|
|
data() {
|
|
return {
|
|
|
|
formData: {
|
|
name: '', //作业简述
|
|
// state: '', //作业状态
|
|
place: '', //具体地点
|
|
start_time: '', //作业开始时间
|
|
end_time: '', //作业结束时间
|
|
state_work: '', //生产状态
|
|
area: null, //作业区域
|
|
dept_ter: '', //属地部门
|
|
dept_bus: '', //业务部门
|
|
coordinator: '', //业务部门协调员
|
|
},
|
|
datetimerange: [],
|
|
userRange: [],
|
|
vchannelOptions: [],
|
|
//作业区域
|
|
range: [],
|
|
//生产状态
|
|
stateRange: [{
|
|
value: '运行',
|
|
text: "运行"
|
|
},
|
|
{
|
|
value: '停机',
|
|
text: "停机"
|
|
},
|
|
{
|
|
value: '检修',
|
|
text: "检修"
|
|
},
|
|
],
|
|
//部门
|
|
depRange: [],
|
|
}
|
|
},
|
|
watch: {
|
|
datetimerange(newval) {
|
|
this.formData.start_time = this.datetimerange[0]
|
|
this.formData.end_time = this.datetimerange[1]
|
|
},
|
|
},
|
|
onLoad(params) {
|
|
debugger;
|
|
if(params.operationId){
|
|
this.operationId = params.operationId;
|
|
this.type = params.type;
|
|
this.getOperation();
|
|
if(params.type==='edit'){
|
|
this.showBtns = true;
|
|
}else{
|
|
this.showBtns = false;
|
|
}
|
|
}else{
|
|
this.showBtns = true;
|
|
}
|
|
},
|
|
onShow() {
|
|
|
|
this.getdept();
|
|
this.getRange();
|
|
this.getUserRange();
|
|
this.range = [];
|
|
},
|
|
methods: {
|
|
areaChange(val) {
|
|
this.getVchannelOptions(val)
|
|
this.getAreaDept(val)
|
|
},
|
|
getVchannelOptions(val) {
|
|
if(val==null || val==''){
|
|
return
|
|
}
|
|
this.$u.api.tdevice({area: val, type: 60, page: 0}).then(res=>{
|
|
let vchannelOptions = [];
|
|
let obj = {};
|
|
res.forEach(item => {
|
|
obj = {
|
|
value: null,
|
|
text: ''
|
|
};
|
|
obj.value = item.id;
|
|
obj.text = item.name;
|
|
vchannelOptions.push(obj);
|
|
})
|
|
this.vchannelOptions = vchannelOptions
|
|
})
|
|
},
|
|
getAreaDept(val){
|
|
if(val==null || val==''){
|
|
return
|
|
}
|
|
this.$u.api.areaDetail(val).then(res=>{
|
|
this.formData.dept_ter = res.belong_dept
|
|
})
|
|
},
|
|
//获取工作operation
|
|
getOperation() {
|
|
debugger;
|
|
let that = this;
|
|
that.$u.api.operationItem(that.operationId).then((res) => {
|
|
that.formData.id = res.id; //
|
|
that.formData.state = res.state;
|
|
that.formData.name = res.name; //
|
|
that.formData.place = res.place; //
|
|
that.formData.state_work = res.state_work; //
|
|
that.formData.area = res.area; //
|
|
that.getVchannelOptions(res.area)
|
|
that.formData.dept_bus = res.dept_bus; //
|
|
that.formData.coordinator = res.coordinator; //
|
|
that.formData.dept_ter = res.dept_ter; //
|
|
that.formData.start_time = res.start_time; //作业开始时间
|
|
that.formData.end_time = res.end_time; //作业结束时间
|
|
if(res.vchannels){
|
|
that.formData.vchannel = res.vchannels[0]
|
|
}
|
|
that.operationName = res.name; //作业
|
|
that.datetimerange = [res.start_time, res.end_time]
|
|
});
|
|
},
|
|
saveSubmit() {
|
|
let that = this;
|
|
if (!that.paramsCheck()) {
|
|
return;
|
|
} else {
|
|
if(this.formData.vchannel){
|
|
this.formData.vchannels = [this.formData.vchannel]
|
|
}
|
|
if(this.formData.id){
|
|
if(this.formData.state!=10){
|
|
uni.navigateTo({
|
|
url: '/pages/workSpace/operation/oplCate?operationId='+this.formData.id
|
|
})
|
|
}else{
|
|
|
|
this.$u.api.operationUpdate(this.formData.id,this.formData).then(res => {
|
|
let params = `?operationId=${res.id}`;
|
|
uni.navigateTo({
|
|
url: '/pages/workSpace/operation/oplCate'+params
|
|
})
|
|
})
|
|
}
|
|
}else{
|
|
this.$u.api.operationCreat(this.formData).then(res => {
|
|
let params = `?operationId=${res.id}`;
|
|
uni.navigateTo({
|
|
url: '/pages/workSpace/operation/oplCate'+params
|
|
})
|
|
})
|
|
}
|
|
|
|
}
|
|
},
|
|
//获取dept
|
|
getdept() {
|
|
let that = this;
|
|
that.$u.api.deptList({page: 0}).then(res => {
|
|
that.depRange = that.redata(res);
|
|
})
|
|
},
|
|
//获取作业区域
|
|
getRange() {
|
|
this.$u.api.areaLists({page: 0}).then(res => {
|
|
let range = [];
|
|
let obj = {};
|
|
res.forEach(item => {
|
|
obj = {value: null,text: ''};
|
|
obj.value = item.id;
|
|
obj.text = item.name;
|
|
range.push(obj);
|
|
})
|
|
this.range = range
|
|
})
|
|
},
|
|
//获取用户
|
|
getUserRange() {
|
|
this.$u.api.userList({page: 0}).then(res => {
|
|
let user = [];
|
|
let obj = {};
|
|
res.forEach(item => {
|
|
obj = {value: null,text: ''};
|
|
obj.value = item.id;
|
|
obj.text = item.name;
|
|
user.push(obj);
|
|
})
|
|
this.userRange = user
|
|
})
|
|
},
|
|
|
|
|
|
redata(postList) {
|
|
let posts = [];
|
|
postList.forEach((item) => {
|
|
let obj = new Object();
|
|
obj = {
|
|
...item
|
|
};
|
|
obj.value = item.id;
|
|
obj.text = item.name;
|
|
obj.parentId = item.parent;
|
|
posts.push(obj);
|
|
});
|
|
let obj = posts.reduce((res, v) => ((res[v.id] = v), res), {}); //Object
|
|
let arr = [];
|
|
for (let item of posts) {
|
|
if (item.parentId == null) {
|
|
arr.push(item);
|
|
continue;
|
|
}
|
|
let parent = obj[item.parentId];
|
|
parent.children = parent.children ? parent.children : [];
|
|
parent.children.push(item);
|
|
}
|
|
return arr;
|
|
},
|
|
|
|
/* 参数验证 */
|
|
paramsCheck() {
|
|
if (!nonNullCheck(this.formData.name)) {
|
|
uni.showToast({
|
|
title: '请填写作业简介',
|
|
icon: "none"
|
|
})
|
|
return false;
|
|
}
|
|
if (!nonNullCheck(this.formData.start_time)) {
|
|
uni.showToast({
|
|
title: '请选择开始时间',
|
|
icon: "none"
|
|
})
|
|
return false;
|
|
}
|
|
|
|
if (!nonNullCheck(this.formData.end_time)) {
|
|
uni.showToast({
|
|
title: '请选择结束时间',
|
|
icon: "none"
|
|
})
|
|
return false;
|
|
}
|
|
|
|
if (!nonNullCheck(this.formData.state_work)) {
|
|
uni.showToast({
|
|
title: '请选择生产状态',
|
|
icon: "none"
|
|
})
|
|
return false;
|
|
}
|
|
if (!nonNullCheck(this.formData.area)) {
|
|
uni.showToast({
|
|
title: '请选择作业区域',
|
|
icon: "none"
|
|
})
|
|
return false;
|
|
}
|
|
if (!nonNullCheck(this.formData.dept_bus)) {
|
|
uni.showToast({
|
|
title: '请选择业务部门',
|
|
icon: "none"
|
|
})
|
|
return false;
|
|
}
|
|
if (!nonNullCheck(this.formData.coordinator)) {
|
|
uni.showToast({
|
|
title: '请选择部门协调员',
|
|
icon: "none"
|
|
})
|
|
return false;
|
|
}
|
|
if (!nonNullCheck(this.formData.dept_ter)) {
|
|
uni.showToast({
|
|
title: '请选择属地部门',
|
|
icon: "none"
|
|
})
|
|
return false;
|
|
}
|
|
/* if (phoneRegular.test(this.formData.contactNumber) === false) {
|
|
uni.showToast({
|
|
title: '联系电话格式不对,请重新填写',
|
|
icon: "none"
|
|
})
|
|
return false;
|
|
} */
|
|
return true;
|
|
},
|
|
goBack() {
|
|
uni.navigateBack({
|
|
delta: 1
|
|
})
|
|
},
|
|
selectUser(){
|
|
uni.navigateTo({
|
|
url: '/pages/home/employeeSelect'
|
|
})
|
|
},
|
|
onnodeclick(e) {
|
|
console.log(e);
|
|
},
|
|
onpopupopened(e) {
|
|
console.log('popupopened');
|
|
},
|
|
onpopupclosed(e) {
|
|
console.log('popupclosed');
|
|
},
|
|
onchange(e) {
|
|
console.log('onchange:', e);
|
|
},
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
/* 主体 */
|
|
>>>.uni-navbar__header,
|
|
>>>.uni-status-bar {
|
|
background-image: linear-gradient(90deg, #164cc3 0%, #2c6fd9 100%), linear-gradient(#e60012, #e60012) !important;
|
|
}
|
|
.operation-body {
|
|
background-color: #f3fbff;
|
|
padding-bottom: 20rpx;
|
|
}
|
|
.operation-body>>>uni-input {
|
|
/* height: 100%; */
|
|
font-size: 30rpx;
|
|
}
|
|
|
|
>>>.uni-navbar-btn-text text {
|
|
font-size: 32rpx !important;
|
|
}
|
|
|
|
.form-info {
|
|
width: 720upx;
|
|
margin: 0 auto;
|
|
background-color: #FFFFFF;
|
|
border-radius: 10rpx;
|
|
padding: 25rpx 32rpx;
|
|
box-sizing: border-box;
|
|
margin-top: 24rpx;
|
|
}
|
|
|
|
.border-bottom {
|
|
border-bottom: 1rpx solid #eeeeee;
|
|
}
|
|
|
|
.top-title-text {
|
|
padding-left: 24rpx;
|
|
position: relative;
|
|
font-family: PingFang-SC-Medium;
|
|
font-size: 34rpx;
|
|
line-height: 72rpx;
|
|
color: #383838;
|
|
}
|
|
|
|
.top-title-text::before {
|
|
content: "";
|
|
width: 6rpx;
|
|
height: 29rpx;
|
|
background-image: linear-gradient(90deg, #164cc3 0%, #2c6fd9 100%);
|
|
border-radius: 3rpx;
|
|
display: block;
|
|
position: absolute;
|
|
left: -4rpx;
|
|
top: 22rpx;
|
|
}
|
|
|
|
.form-item {
|
|
font-family: PingFang-SC-Medium;
|
|
font-size: 30rpx;
|
|
height: 200rpx;
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
}
|
|
|
|
.form-left-text {
|
|
color: #212121;
|
|
margin-bottom: 33rpx;
|
|
}
|
|
|
|
.form-left {
|
|
width: 100%;
|
|
}
|
|
|
|
.form-right {
|
|
margin-left: 20rpx;
|
|
flex: 1;
|
|
color: #414141;
|
|
}
|
|
|
|
.form-right input {
|
|
font-size: 30rpx;
|
|
}
|
|
|
|
.form-date>>>.uni-date__x-input {
|
|
height: 97rpx;
|
|
font-size: 30rpx;
|
|
}
|
|
|
|
.form-date>>>.uni-icons {
|
|
display: none;
|
|
}
|
|
|
|
|
|
.apply-reason-text {
|
|
width: 653rpx;
|
|
height: 179rpx;
|
|
background-color: #f6f8fc;
|
|
border: solid 1rpx #e5e5e5;
|
|
margin-top: 21rpx;
|
|
padding: 14rpx 24rpx;
|
|
font-size: 26rpx;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.apply_require {
|
|
margin-top: 0rpx !important;
|
|
}
|
|
|
|
.form-right {
|
|
flex: 1;
|
|
color: #414141;
|
|
}
|
|
|
|
/*部门*/
|
|
uni-data-picker {
|
|
width: 100%;
|
|
border: none !important;
|
|
}
|
|
|
|
|
|
.title {
|
|
font-size: 14px;
|
|
font-weight: bold;
|
|
margin: 20px 0 5px 0;
|
|
}
|
|
|
|
.data-pickerview {
|
|
height: 400px;
|
|
border: 1px #e5e5e5 solid;
|
|
}
|
|
|
|
.popper__arrow {
|
|
top: -6px;
|
|
left: 50%;
|
|
margin-right: 3px;
|
|
border-top-width: 0;
|
|
border-bottom-color: #EBEEF5;
|
|
}
|
|
|
|
.popper__arrow {
|
|
top: -6px;
|
|
left: 50%;
|
|
margin-right: 3px;
|
|
border-top-width: 0;
|
|
border-bottom-color: #EBEEF5;
|
|
}
|
|
</style>
|