jy-safe-app/pages/apply/subPages/SCWB/WB031.vue
2025-10-14 15:17:30 +08:00

614 lines
20 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- WB013 外包工程危险作业申请编辑 -->
<template>
<view class="todo-page">
<view class="background"></view>
<view class="card" v-if="stepsPageList === 0">
<!-- <uni-card margin="0" :is-shadow="true"> -->
<u--form labelPosition="left" labelWidth="auto" labelAlign="center" :model="model" :rules="rules" ref="wForm" errorType="border-bottom" class="demo-ruleForm">
<!-- <u-form-item label="驳回理由" prop="AUDIT_OPINION" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.AUDIT_OPINION" border="none"
inputAlign="right"></u--input>
</u-form-item> -->
<view style="position: relative;">
<view style="position: absolute;left: -10px;color: #3d4b70;top: -3px;">*</view>
</view>
<view style="font-size: 15px; font-weight: bold;color: #3d4b70;margin-bottom: 10px;">基本信息填写</view>
<u-form-item label="检查时间" prop="CHECK_TIME" borderBottom>
<u--input v-if="model.Nav_Task&&model.Nav_Task.CHECK_TIME" disabledColor="#fff" disabled v-model="model.Nav_Task.CHECK_TIME" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="检查类型" prop="Nav_CheckType" borderBottom>
<u--input v-if="model.Nav_Task&&model.Nav_Task.Nav_CheckType" disabledColor="#fff" disabled v-model="model.Nav_Task.Nav_CheckType.NAME" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="检查区域" prop="Nav_ListArea" borderBottom>
<u--input disabledColor="#fff" disabled v-model="model.Nav_ListAreas" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="检查人员" borderBottom>
<u--input disabledColor="#fff" disabled v-model="model.CHECKUSERS" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
</u--form>
<!-- </uni-card> -->
</view>
<view style="padding: 10px 16px;" v-if="stepsPageList === 0" class="bottom-button">
<u-button type="primary" :disabled="isLoadOK" @click="stepAdd" color="#3d4b70">下一步</u-button>
</view>
<view class="card" v-if="stepsPageList === 1">
<u--form labelPosition="left" labelWidth="auto" labelAlign="center" errorType="border-bottom" ref="sForm" class="sub-form">
<uni-collapse :border="false" accordion>
<view v-for="(item, index) in model.Nav_Details.filter(i => !i.IS_DELETED)" :key="index">
<uni-collapse-item title-border="none" :border="false" :open="true">
<template v-slot:title>
<view class="uni-collapse-item__title-box">
<view class="uni-collapse-item__title-text">
{{index+1+'.'+item.Nav_Area.AREA}}
</view>
<view @click.stop>
<u-icon @click="handleDelRowBefore(item)" name="trash" color="#ff4d4f" size="21" style="margin-right: 10px;"></u-icon>
<!-- <u-icon name="arrow-down" size="12"></u-icon> -->
</view>
</view>
</template>
<view class="content" style="margin: 0px 10px;">
<u-form-item label="生产单元:" prop="MineType" @click="handleChange(item,'minetype')" borderBottom>
<u--input disabledColor="#fff" disabled placeholder="请选择生产单元" v-model="item.MineTypes" border="none" inputAlign="right" fontSize="14px"></u--input>
<u-icon style="margin-left: 4px;" name="arrow-down" size="12"></u-icon>
</u-form-item>
<u-form-item required label="检查区域" prop="Nav_ListArea" borderBottom @click="handleShowSheetForArea(item,{title: '检查区域', name: 'Sub_Nav_ListArea'})">
<u--input disabledColor="#fff" placeholder="请选择检查区域" v-model="item.Nav_Area.AREA" border="none" inputAlign="right" fontSize="14px"></u--input>
<u-icon style="margin-left: 4px;" name="arrow-down" size="12"></u-icon>
</u-form-item>
<u-form-item label="检查内容" borderBottom>
<u--input disabledColor="#fff" placeholder="请填写检查内容" v-model="item.CHECK_CONTENT" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="检查依据" borderBottom>
<u--input disabledColor="#fff" placeholder="请填写检查依据" v-model="item.CHECK_BASIS" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="是否异常" required prop="ISORNOTShow" borderBottom @click="handleChange( item,'ISORNOT')">
<u--input disabled disabledColor="#fff" v-model="item.ISORNOTShow" border="none" inputAlign="right" fontSize="14px"></u--input>
<u-icon style="margin-left: 4px;" name="arrow-down" size="12"></u-icon>
</u-form-item>
<u-form-item label="问题描述" borderBottom>
<u--input disabledColor="#fff" placeholder="请填写问题描述" v-model="item.REMARK" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="隐患地点" borderBottom>
<u--input disabledColor="#fff" placeholder="请填写隐患地点" v-model="item.ADRESS" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="整改期限" prop="CHECK_TIME" borderBottom @click="showCheckDate(item)">
<u--input disabledColor="#fff" disabled v-model="item.END_TIME" placeholder="请选择检查时间" border="none" inputAlign="right" fontSize="14px"></u--input>
<u-icon style="margin-left: 4px;" name="arrow-down" size="12"></u-icon>
</u-form-item>
<u-form-item label="整改责任单位" prop="Nav_Project.NAME" borderBottom @click="handleShowSheetForArea(item,{title: '整改责任单位', name: 'ProjectName'})">
<u--input disabledColor="#fff" v-model="item.Nav_Project.UNIT_NAME" placeholder="请选择整改责任单位" border="none" inputAlign="right" fontSize="14px"></u--input>
<u-icon style="margin-left: 4px;" name="arrow-down" size="12"></u-icon>
</u-form-item>
<view class="upload-title">附件</view>
<full-upload v-model="item.Nav_Files" :isShowBtn='true' :listProp='listPropUpload' :listPropVal='listPropValUpload'></full-upload>
</view>
</uni-collapse-item>
</view>
</uni-collapse>
<u-button text="新增" type="primary" @click="handleAdd"></u-button>
</u--form>
</view>
<query-selector :multiple="selectorInfo.isMultiple" :show="selectorInfo.showPopup" :title="selectorInfo.title" :lists="selectorInfo.dataLists" :defaultChecked="selectorInfo.defaultChecked" @search="handleSearch"
@select="handleSelected" @close="selectorInfo.showPopup=false" :total="selectorInfo.totalCount" />
<u-datetime-picker :show="dateTimePickerInfo.showCheckDate" v-model='dateTimePickerInfo.defaultDateTime' @confirm="handleCheckDate" @close="dateTimePickerInfo.showCheckDate = false"
@cancel="dateTimePickerInfo.showCheckDate = false" mode="date"></u-datetime-picker>
<u-picker :show="comPickerInfo.showSheet" :columns="comPickerInfo.columns" @confirm="onConfirmPicker" @close="comPickerInfo.showSheet=false" @cancel="comPickerInfo.showSheet=false" keyName="NAME"></u-picker>
<view style="padding: 10px 16px;display: flex;flex-direction: row;" v-if="stepsPageList === 1" class="bottom-button">
<u-button type="primary" @click="stepReduce" color="#3d4b70" :plain="true" style="margin-right: 5px;">上一步</u-button>
<u-button type="primary" @click="submit" color="#3d4b70" style="margin-left: 5px;">提交</u-button>
</view>
</view>
</template>
<script>
import {
mapState,
mapMutations
} from 'vuex'
import {
extendFilterGroup,
extendGroupRule,
extendInclude,
extendOrder,
extendRule,
guid,
initFilter,
initFilterGroup,
getProductionUnitValue,
getRealIndex
} from '../../../../utils/common'
import {
FMProductionUnits,
} from '../../../../utils/enums.js'
import {
getRequest,
} from '../../../../services/apply/FOServices/FOServices';
import {
WBSCTRecFull,
OrderEntitiesJobSafeMeasureEnum,
ProjectInputDangerApply,
WBSafeCheckTask,
CheckTypeApply,
CheckAreaEnumApply,
CheckUseful,
WBSCTRecGet
} from '../../../../services/apply/subPages/scWB';
import {
getEnum
} from '../../../../services/common';
import config from '../../../../config/common'
export default {
data() {
return {
tableKey: '0',
TaskID: '',
ORG_ID: uni.getStorageSync('orgId'),
isLoadOK: true,
stepsPageList: 0,
listISORNOT: [], //是否涉及
listISORNOTText: [],
listPropUpload: ['PARENT_ID'],
listPropValUpload: [],
checkboxValue1: [],
checkboxList1: [{
NAME: '全公司'
}, {
NAME: '选矿厂'
}, {
NAME: '尾矿库'
}, {
NAME: '露天矿'
}, {
NAME: '地下矿'
}],
indexShow: 0,
UnitLists: [],
model: {
ID: '',
ORG_ID: '',
TaskID: null,
PROJECT_ID: '',
Nav_Project: {
NAME: ''
},
Nav_CheckType: {
NAME: ''
},
Nav_ListArea: [],
Nav_ListArea: '',
Nav_ListAreasID: '',
MineTypes: [],
Nav_Details: [{
MineTypes: [],
Nav_User: {
NAME: ''
},
ID: '',
ORG_ID: '',
}]
},
rules: {
},
comPickerInfo: {
showSheet: false,
dataItem: {},
columns: [],
title: '',
dataIndex: undefined,
formIndex: undefined,
name: ''
},
selectorInfo: {
name: 'user',
isMultiple: false,
showPopup: false,
totalCount: 0,
title: '考核结果选择',
dataItem: {},
index: 0,
columns: [],
dataLists: [],
defaultText: '',
defaultChecked: []
},
dateTimePickerInfo: {
showCheckDate: false,
dataIndex: undefined,
defaultDateTime: uni.$u.timeFormat(new Date(), 'yyyy-mm-dd'),
value: '',
name: ''
},
}
},
onLoad(option) {
// this.TaskID = option.taskID ? option.taskID : '';
// this.model.ID = option.ID ? option.ID : '';
// this.JOBID = option.ID ? option.ID : '';
// this.tableKey = option.tableKey ? option.tableKey : '0'
// this.loadData();
this.model.ID = option.ID
this.TaskID = option.taskID
this.tableKey = option.tableKey
if (option.taskID != null && option.taskID != '')
this.model.TaskID = option.taskID
this.getEnums()
// this.loadData()
},
methods: {
getEnums() {
var dataParm = {
'name': "ISORNOT"
}
getEnum(dataParm).then(res => {
this.listISORNOT = res
this.listISORNOTText = []
this.listISORNOT.forEach(e => {
e.name = e.NAME
e.code = e.ID
this.listISORNOTText.push(e.NAME)
})
this.loadData()
})
},
checkboxChange(e, name, index) {
let result = '';
const map = {
'全公司': '0',
'选矿厂': '10',
'尾矿库': '20',
'露天矿': '30',
'地下矿': '40'
};
e.forEach((item, index) => {
if (index === 0) {
result += `_${map[item]}_`;
} else {
result += `${map[item]}_`;
}
});
if (name == 'sub') {
this.model.Nav_Details[index].MineType = result
} else {
this.model.MineType = result
}
},
handleDelRowBefore(item) {
item.IS_DELETED = true
let indexNotDel = 1
this.model.Nav_Details.forEach((e, i) => {
if (!e.IS_DELETED) {
e.ROW_NO = indexNotDel
indexNotDel++
}
})
this.$forceUpdate()
},
stepAdd() {
this.stepsPageList = this.stepsPageList + 1
},
stepReduce() {
this.stepsPageList = this.stepsPageList - 1
},
loadData() {
let json = initFilter(this.ORG_ID);
extendRule(json, 'ID', 1, this.model.ID);
extendInclude(json, 'Nav_Task')
extendInclude(json, 'Nav_Task.Nav_CheckType')
extendInclude(json, 'Nav_Task.Nav_ListArea.Nav_CheckArea')
extendInclude(json, 'Nav_Details')
extendInclude(json, 'Nav_Details.Nav_Project')
extendInclude(json, 'Nav_Details.Nav_Area')
extendInclude(json, 'Nav_Details.Nav_Files.Nav_ImgFile')
WBSCTRecGet(json).then(ret => {
this.isLoadOK = false
this.model = ret
// this.initializeMissingFields();
let arr = ''
this.model.Nav_Task.Nav_ListArea.map(item => {
arr += item.Nav_CheckArea.AREA
})
this.model.Nav_ListAreas = arr
this.model.Nav_Details.map(item => {
let MineTypeName = {
0: '全公司',
10: '选矿厂',
20: '尾矿库',
30: '露天矿',
40: '地下矿',
}
item.MineTypes = MineTypeName[item.MineType]
item.ISORNOTShow = item.ISORNOT == 1 ? '是' : '否'
})
this.listPropValUpload.push(this.model.ID)
})
},
//显示时间控件
showCheckDate(dataIndex) {
this.dateTimePickerInfo.showCheckDate = true
this.dateTimePickerInfo = {
showCheckDate: true,
dataIndex: dataIndex,
}
},
//隐藏控件 显示时间
handleCheckDate(e) {
// let v = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')
// const {
// name,
// dataIndex
// } = this.dateTimePickerInfo
const realIndex = getRealIndex(this.dateTimePickerInfo.dataIndex, this.model.Nav_Details)
this.dateTimePickerInfo.showCheckDate = false
this.model.Nav_Details[realIndex].END_TIME = uni.$u.timeFormat(e.value,
'yyyy-mm-dd')
},
handleShowSheetForArea(item, todo) {
const validDetails = this.model.Nav_Details.filter(i => !i.IS_DELETED);
const index = validDetails.indexOf(item);
this.handleShowSheet({
title: todo.title,
name: todo.name,
index: index
});
},
async handleShowSheet(p) {
const orgId = uni.getStorageSync('orgId')
const json = initFilter(orgId, "", "", 0, p.pageIndex ?? 1)
// const json = initFilter(this.ORG_ID, "", "", 0, p.pageIndex ?? 1)
let dataSelect = []
var defaultChecked = []
this.selectorInfo.isMultiple = false
if (p.val) {
extendRule(json, 'NAME', 9, p.val);
}
json.Limit = 20
if (p.pageIndex) {
json.Start = (p.pageIndex - 1) * json.Limit;
}
json.Sort = 'NAME'
// json.Sort = "NAME"
// json.Order = 1
if (p.name == 'ProjectName') { //项目名称
dataSelect = await ProjectInputDangerApply(json).then(res => {
this.selectorInfo.totalCount = res.TotalCount
if (res != undefined && res.Data.length > 0) {
for (let i = 0; i < res.Data.length; i++) {
res.Data[i].name = res.Data[i].NAME
res.Data[i].code = res.Data[i].UNIT_NAME
}
}
return res.Data
})
} else if (p.name == 'Sub_Nav_ListArea') {
dataSelect = await CheckAreaEnumApply(json).then(res => {
this.selectorInfo.totalCount = res.TotalCount
if (res != undefined && res.Data.length > 0) {
for (let i = 0; i < res.Data.length; i++) {
res.Data[i].name = res.Data[i].AREA
res.Data[i].NAME = res.Data[i].AREA
}
}
return res.Data
})
if (this.model.Nav_ListArea && this.model.Nav_ListArea.length > 0) {
this.model.Nav_ListArea.map(item => {
let newId = item.Nav_CheckArea.ID;
// 创建一个新对象ID 为 item.LAW_ID其他属性和 item 相同
let newItem = {
...item,
ID: newId
};
// 将新对象添加到 this.defaultChecked 数组中
defaultChecked.push(newItem);
})
} else {
defaultChecked = []
}
}
if (defaultChecked == null)
defaultChecked = []
if (dataSelect.length) {
this.selectorInfo = {
itemData: p.itemData != undefined ? p.itemData : this.selectorInfo
.itemData, //itemData: p.itemData, 搜索的时候 p.itemData为空 赋值修改 为 她自己本身 this.selectorInfo.itemData
isMultiple: this.selectorInfo.isMultiple,
totalCount: this.selectorInfo.totalCount,
showPopup: true,
title: p.title,
name: p.name,
dataLists: dataSelect,
defaultChecked: defaultChecked,
index: p.index
}
} else {
// 暂无数据
}
},
//数据加载
handleSearch(val, pageIndex) {
var p = {
name: this.selectorInfo.name,
title: this.selectorInfo.title,
val: val,
pageIndex: pageIndex,
index: this.selectorInfo.index
}
this.handleShowSheet(p)
},
handleSelected(e) {
this.selectorInfo.showPopup = false
const validDetails = this.model.Nav_Details.filter(i => !i.IS_DELETED);
const index = this.selectorInfo.index;
const realIndex = this.model.Nav_Details.findIndex(item => item === validDetails[index]);
if (this.selectorInfo.name == 'ProjectName') { //项目名称
this.model.Nav_Details[realIndex].Nav_Project = e;
this.model.Nav_Details[realIndex].PROJECT_ID = e.ID;
} else if (this.selectorInfo.name == 'Sub_Nav_ListArea') {
this.model.Nav_Details[realIndex].Nav_Area = e;
this.model.Nav_Details[realIndex].AREA_ID = e.ID;
}
},
closePicker() {
this.comPickerInfo = {
showSheet: false,
columns: [],
title: '',
name: '',
formIndex: undefined
}
},
submit() {
this.modelEdit = JSON.parse(JSON.stringify(this.model))
delete this.modelEdit.Nav_Task
delete this.modelEdit.Nav_ListAreas
if (this.TaskID == null || this.TaskID == '') {
this.modelEdit.TaskID = '00000000-0000-0000-0000-000000000000'
} else {
this.modelEdit.TaskID = this.TaskID
}
if (this.modelEdit.ORG_ID == null || this.modelEdit.ORG_ID == '')
this.modelEdit.ORG_ID = this.ORG_ID
this.modelEdit.Nav_Details.forEach(e => {
if (e.Nav_Area != null)
delete e.Nav_Area
if (e.Nav_Project != null)
delete e.Nav_Project
})
this.modelEdit.PUBLISH = 'SaveAndNotify'
WBSCTRecFull(this.modelEdit).then(res => {
uni.$showMsgFunc('操作成功!', () => {
uni.navigateBack()
}, 'success', 1000)
})
},
handleAdd() {
if (this.model.Nav_Details == null) {
this.model.Nav_Details = []
}
var ROW_NO = 1;
if (this.model.Nav_Details.length > 0) {
this.model.Nav_Details.forEach(e => {
if (e.IS_DELETED == undefined || e.IS_DELETED == false)
ROW_NO++
})
}
var modelAdd = {
ID: guid(),
ORG_ID: this.ORG_ID,
PARENT_ID: this.model.ID,
MineType: 0,
MineTypes: '',
Nav_Area: {
AREA: ''
},
CHECK_CONTENT: '',
CHECK_BASIS: '',
ISORNOT: 0,
ISORNOTShow: '否',
REMARK: '',
ADRESS: '',
END_TIME: '',
Nav_Project: {
UNIT_NAME: ''
},
Nav_Files: [],
IS_DELETED: false,
}
this.model.Nav_Details.push(modelAdd)
this.indexShow = ROW_NO
},
handleChange(item, name) {
let arr = name == 'minetype' ? FMProductionUnits : this.listISORNOTText
this.comPickerInfo = {
showSheet: true,
columns: [arr],
dataItem: item,
name: name
}
},
onConfirmPicker(e) {
const codeMapping = {
'全公司': 0,
'选矿厂': 10,
'尾矿库': 20,
'露天矿': 30,
'地下矿': 40
};
this.comPickerInfo = {
showSheet: false,
dataItem: this.comPickerInfo.dataItem,
columns: [],
title: '',
name: this.comPickerInfo.name,
formIndex: undefined
}
if (this.comPickerInfo.name == 'minetype') {
this.comPickerInfo.dataItem.MineType = codeMapping[e.value]
this.comPickerInfo.dataItem.MineTypes = String(e.value)
} else {
this.comPickerInfo.dataItem.ISORNOTShow = e.value[0]
this.comPickerInfo.dataItem.ISORNOT = this.listISORNOT[e.indexs[0]].code
}
// this.model.Nav_Details[this.comPickerInfo.dataItem.index].MineType = codeMapping[e.value]
// this.model.Nav_Details[this.comPickerInfo.dataItem.index].MineTypes = String(e.value)
}
}
}
</script>
<style scoped>
@import url("../../../../style/css/newTemplate.css");
/* @import url("../../../../style/css/editTemplate.css"); */
/* .todo-page {
padding: 16px 16px 70px;
} */
</style>