监管端八项作业支持
31
api/index.js
|
@ -108,3 +108,34 @@ export const getPromiseView = (params) => post("/app/corppromise/goEdit", params
|
|||
export const setPromiseIsRead = (params) => post("/app/corppromise/editIsRead", params); // 承诺书设置阅读状态
|
||||
export const editHiddenIspunish = (params) => post("/app/keyprojectcheck/editHiddenIspunish", params); // 修改隐患信息
|
||||
export const getPERSONNELMANAGEMENTID = (params) => post("/app/keyProjects/goEdit", params); // 重点工程默认回显负责人
|
||||
// 以下接口八项作业流程使用
|
||||
export const getCorpList = (params) => post("/app/util/getCorp", params) //获取公司列表
|
||||
export const getConfinedSpaceSelectList = (params) => post("/app/csSpe/getSpace", params) //获取受限空间名称选择列表
|
||||
export const getConfinedSpaceGasInfo = (params) => post("/app/csSpe/getGasInfo",params) //获取受限空间气体检测详情
|
||||
export const setConfinedSpaceGasInfoSave = (params) => post("/app/csSpe/initGas", params) //受限空间气体检测详情保存
|
||||
export const setConfinedSpaceGasDelete = (params) => post("/app/csSpe/deleteGas", params) //保存受限空间气体检测删除
|
||||
export const getHotWorkGasAll = (params) => post("/app/elSpe/getAll", params) // 获取动火作业的所有受限空间气体检测数据
|
||||
export const getHotWorkGasInfo = (params) => post("/app/elSpe/getInfo", params) //获取动火作业的受限空间气体检测详情
|
||||
export const getHotWorkGasInfoSave = (params) => post("/app/elSpe/init", params) //获取动火作业的受限空间气体检测详情保存
|
||||
export const getHotWorkGasDelete = (params) => post("/app/elSpe/delete", params) // 动火作业的受限空间气体检测删除
|
||||
export const setHotWorkRecord = (params) => post("/app/deHw/initRecord", params) // 动火作业延迟监火保存记录
|
||||
export const deleteHotWorkRecord = (params) => post("/app/deHw/deleteRecord", params) //获取动火作业的受限空间气体检测详情
|
||||
export const getHotWorkRecord = (params) => post("/app/deHw/getRecords", params) //获取动火作业的受限空间气体检测详情保存
|
||||
export const getOtherAssignmentsSelectList = (params) => post("/app/Task/getAllUnEndList", params) //关联的其他特殊作业及安全作业票编号选择列表
|
||||
export const getRiskIdentificationResultsSelectList = (params) => post("/app/eightWork/getInfo", params) //风险辨识结果选择列表
|
||||
export const getHotWorkMethodSelectList = (params) => post("/app/util/getDicList", params) // 动火方法选择列表
|
||||
export const getQyDicList = (params) => post("/app/util/otherSysDic", params) // 动火方法选择列表
|
||||
export const setTaskSave = (params) => post("/app/Task/init", params) //八项作业、隐患整改、安全环保检查任务保存更新接口
|
||||
export const getCurrentNextOperation = (params) => post("/app/Task/getSupplementInfo", params) //获取当前任务的下一步操作
|
||||
export const addFormInfo = (params) => post("/app/Task/addSupplementInfo", params) //审批过程中添加其他信息
|
||||
export const getDepartmentTree = (params) => post("/app/util/getDepartmentTree", params) //获取部门树
|
||||
export const getUserList = (params) => post("/app/util/getUserList", params) //获取人员
|
||||
export const getToDoTaskList = (params) => post("/app/Task/getAllList", params) //获取待办列表
|
||||
export const getTaskTechnologicalProcess = (params) => post("/app/Task/getAgencyList", params) //获取流程
|
||||
export const getTaskInfo = (params) => post("/app/Task/getInfo", params) //查看信息
|
||||
export const setTaskFile = (params) => upload("/app/util/uploadFile", params) //上传文件
|
||||
export const setTaskSign = (params) => post("/app/Task/sign", params) //审批意见签字提交
|
||||
export const setSecurityMeasuresSave = (params) => post("/app/Task/setQues", params) //安全措施提交
|
||||
export const setOtherSecurityMeasuresSave = (params) => post("/app/Task/setOtherQues", params) //其它安全措施提交
|
||||
export const getHistoricalApprovalRecords = (params) => post("/app/Task/getHis", params); // 历史审批记录
|
||||
// 结束
|
||||
|
|
|
@ -0,0 +1,125 @@
|
|||
<template>
|
||||
<u-popup :show="visible" mode="center">
|
||||
<scroll-view scroll-y style="width: 100vw;height: 100vh;">
|
||||
<view class="container">
|
||||
<u-checkbox-group v-model="selectValue" placement="column">
|
||||
<u-checkbox :customStyle="{marginBottom: '8px'}" v-for="(item, index) in list" :key="index"
|
||||
:label="type === 'assignments' ? item.TYPE_NAME : item.NAME"
|
||||
:name="type === 'assignments' ? item.TYPE_NAME : item.NAME">
|
||||
</u-checkbox>
|
||||
</u-checkbox-group>
|
||||
<view class="button_group_placeholder"></view>
|
||||
<view class="button_group">
|
||||
<u-button type="primary" text="确定" @click="determine" :customStyle="{width:'48%'}"></u-button>
|
||||
<u-button text="关闭" @click="close" :customStyle="{width:'48%'}"></u-button>
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
</u-popup>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
getOtherAssignmentsSelectList,
|
||||
getRiskIdentificationResultsSelectList,
|
||||
getQyDicList,
|
||||
getUserList
|
||||
} from '@/api'
|
||||
|
||||
export default {
|
||||
props: {
|
||||
visible: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
},
|
||||
value: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
type: {
|
||||
type: String,
|
||||
required: true,
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
list: [],
|
||||
selectValue: [],
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
visible: {
|
||||
handler(newValue) {
|
||||
if (newValue) {
|
||||
this.selectValue = this.value.split(',')
|
||||
this.getData()
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async getData() {
|
||||
if (this.type === 'assignments') {
|
||||
const resData = await getOtherAssignmentsSelectList()
|
||||
this.list = resData.list
|
||||
} else if (this.type === 'identification') {
|
||||
const resData = await getRiskIdentificationResultsSelectList({
|
||||
vectors: JSON.stringify(['accidentType'])
|
||||
})
|
||||
this.list = resData.accidentType
|
||||
} else if (this.type === 'hotWorkMethod') {
|
||||
const resData = await getQyDicList({
|
||||
DICTIONARIES_ID: "63cf39931a89467594efc441bf67f6dd",
|
||||
});
|
||||
this.list = resData.list
|
||||
} else if (this.type === 'userNameSelect') {
|
||||
const resData = await getUserList({
|
||||
DEPARTMENT_ID: this.$store.state.userInfo.DEPARTMENT_ID,
|
||||
TYPE: 2
|
||||
});
|
||||
this.list = resData.list.list
|
||||
}
|
||||
},
|
||||
close() {
|
||||
this.selectValue = []
|
||||
this.$emit('update:visible', false)
|
||||
},
|
||||
determine() {
|
||||
// const value = []
|
||||
// for (let i = 0; i < this.selectValue.length; i++) {
|
||||
// if (this.value.indexOf(this.selectValue[i]) === -1) {
|
||||
// value.push(this.selectValue[i])
|
||||
// }
|
||||
// }
|
||||
// this.value && value.unshift(this.value)
|
||||
// const emitValue = value.join(',')
|
||||
const emitValue = this.selectValue.join(',')
|
||||
this.$emit('input', emitValue)
|
||||
this.close()
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.container {
|
||||
padding: 30upx;
|
||||
|
||||
.button_group_placeholder {
|
||||
height: 100upx;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.button_group {
|
||||
background-color: #fff;
|
||||
display: flex;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
padding: 20upx 5%;
|
||||
width: 90%;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,367 @@
|
|||
<template>
|
||||
<view class="content" style="margin-left: 10px">
|
||||
<view class="card">
|
||||
<u-form labelPosition="left" :model="form" :rules="rules" ref="formRef" labelWidth="140px">
|
||||
<u-form-item label="申请单位" prop="APPLY_DEPARTMENT_NAME" borderBottom required>
|
||||
<u-input v-model="form.APPLY_DEPARTMENT_NAME" border="none" readonly />
|
||||
</u-form-item>
|
||||
<u-form-item label="申请人" prop="APPLY_USER_NAME" borderBottom required>
|
||||
<u-input v-model="form.APPLY_USER_NAME" border="none" readonly />
|
||||
</u-form-item>
|
||||
<u-form-item label="作业分公司" prop="CORP_NAME" borderBottom required>
|
||||
<u-input v-model="form.CORP_NAME" border="none" readonly />
|
||||
</u-form-item>
|
||||
<u-form-item label="作业类别" prop="WORK_TYPE_NAME" borderBottom required
|
||||
@click="fnSingleChoiceClick('WORK_TYPE_NAME')">
|
||||
<u-input v-model="form.WORK_TYPE_NAME" border="none" readonly />
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="设备管道名称" prop="NAME" borderBottom required>
|
||||
<u-input v-model="form.NAME" border="none" />
|
||||
</u-form-item>
|
||||
<u-form-item label="实际作业开始时间" prop="BOARD_INSTALL_TIME" borderBottom required
|
||||
@click="fnDateTimePickerClick('BOARD_INSTALL_TIME')">
|
||||
<u-input v-model="form.BOARD_INSTALL_TIME" border="none" readonly />
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业结束时间" prop="WORK_END_DATE" borderBottom required
|
||||
@click="fnDateTimePickerClick('WORK_END_DATE')">
|
||||
<u-input v-model="form.WORK_END_DATE" border="none" readonly />
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业人" prop="WORK_USER" borderBottom required>
|
||||
<u-input v-model="form.WORK_USER" border="none" />
|
||||
</u-form-item>
|
||||
<u-form-item label="地点坐标" borderBottom required>
|
||||
<u-button type="primary" size="small" text="定位" :customStyle="{ width: '100upx', margin: 0 }"
|
||||
@click="fnLocation" />
|
||||
</u-form-item>
|
||||
<u-form-item label="经度" prop="WORK_LONGITUDE" borderBottom required>
|
||||
<u-input v-model="form.WORK_LONGITUDE" border="none" readonly />
|
||||
</u-form-item>
|
||||
<u-form-item label="纬度" prop="WORK_LATITUDE" borderBottom required>
|
||||
<u-input v-model="form.WORK_LATITUDE" border="none" readonly />
|
||||
</u-form-item>
|
||||
<u-divider text="管道参数" textPosition="left" textColor="#3c9cff" lineColor="#3c9cff" />
|
||||
<u-form-item label="介质" prop="MEDIUM" borderBottom required>
|
||||
<u-input v-model="form.MEDIUM" border="none" />
|
||||
</u-form-item>
|
||||
<u-form-item label="温度" prop="TEMPERATURE" borderBottom required>
|
||||
<u-input v-model="form.TEMPERATURE" border="none" />
|
||||
</u-form-item>
|
||||
<u-form-item label="压力" prop="PRESSURE" borderBottom required>
|
||||
<u-input v-model="form.PRESSURE" border="none" />
|
||||
</u-form-item>
|
||||
<u-divider text="盲板抽堵参数" textPosition="left" textColor="#3c9cff" lineColor="#3c9cff" />
|
||||
<view v-for="(item, index) in form.boardList" :key="item.ID" class="mt-10 p-10"
|
||||
style="background-color: #f9f9f9;border-radius: 4px">
|
||||
<view style="display: flex;justify-content: end">
|
||||
<u-button v-if="index === 0" type="primary" size="small" text="新增"
|
||||
:customStyle="{ width: '100upx', margin: 0 }" @click="fnAddBoardList" />
|
||||
<u-button v-if="index !== 0" type="error" size="small" text="删除"
|
||||
:customStyle="{ width: '100upx', margin: 0 }" @click="fnDeleteBoardList(index)" />
|
||||
</view>
|
||||
<u-form-item label="材质" prop="BOARD_MATERIAL" borderBottom required>
|
||||
<u-input v-model="item.BOARD_MATERIAL" border="none" />
|
||||
</u-form-item>
|
||||
<u-form-item label="规格" prop="BOARD_SPECIFICATION" borderBottom required>
|
||||
<u-input v-model="item.BOARD_SPECIFICATION" border="none" />
|
||||
</u-form-item>
|
||||
<u-form-item label="编号" prop="BOARD_NO" borderBottom required>
|
||||
<u-input v-model="item.BOARD_NO" border="none" />
|
||||
</u-form-item>
|
||||
</view>
|
||||
<u-divider text="盲板抽堵位置及安全措施" textPosition="left" textColor="#3c9cff" lineColor="#3c9cff" />
|
||||
<u-form-item label="盲板抽堵位置图" prop="BOARD_PATH" borderBottom required labelPosition="top" labelWidth="auto">
|
||||
<u-upload class="mt-10" :fileList="form.BOARD_PATH" @afterRead="fnAfterRead($event, 'BOARD_PATH')"
|
||||
@delete="fnDeletePic($event, 'BOARD_PATH')" multiple :maxCount="1"></u-upload>
|
||||
</u-form-item>
|
||||
<u-form-item label="关联的其他特殊作业及安全作业票编号" prop="SPECIAL_WORK" borderBottom required labelPosition="top"
|
||||
labelWidth="auto">
|
||||
<u-button type="primary" size="mini" text="选择其它"
|
||||
:customStyle="{ position: 'absolute', top: '-46upx', right: '20upx', width: '150upx' }"
|
||||
@click="otherAssignmentsShow = true" />
|
||||
<u-textarea v-model="form.SPECIAL_WORK" border="none" autoHeight maxlength="-1" />
|
||||
</u-form-item>
|
||||
<u-form-item label="风险辨识结果" prop="RISK_IDENTIFICATION" borderBottom required labelPosition="top"
|
||||
labelWidth="auto">
|
||||
<u-button type="primary" size="mini" text="选择其它"
|
||||
:customStyle="{ position: 'absolute', top: '-46upx', right: '20upx', width: '150upx' }"
|
||||
@click="otherIdentificationShow = true" />
|
||||
<u-textarea v-model="form.RISK_IDENTIFICATION" border="none" autoHeight maxlength="-1" />
|
||||
</u-form-item>
|
||||
<u-form-item label="申请单位负责人签字" prop="SIGN" borderBottom required labelPosition="top" labelWidth="auto">
|
||||
<view style="flex: 1">
|
||||
<view>
|
||||
<u-button type="primary" size="mini" text="签字"
|
||||
:customStyle="{ position: 'absolute', top: '-46upx', right: '20upx', width: '100upx' }"
|
||||
@click="signVisible = true" />
|
||||
</view>
|
||||
<view v-if="form.SIGN">
|
||||
<u-image width="400rpx" height="200rpx" :src="form.SIGN" />
|
||||
</view>
|
||||
</view>
|
||||
</u-form-item>
|
||||
</u-form>
|
||||
<view class="mt-10">
|
||||
<u-button type="primary" text="下一步" @click="$u.debounce(fnSubmit, 1000, true)" />
|
||||
</view>
|
||||
</view>
|
||||
<u-picker :show="picker.show" :columns="picker.columns" :keyName="picker.key" :key="picker.type"
|
||||
:defaultIndex="picker.defaultIndex" @confirm="fnSingleChoiceConfirm" @cancel="fnSingleChoiceCancel" />
|
||||
<u-datetime-picker :show="dateTimePicker.show" v-model="dateTimePicker.value" :mode="dateTimePicker.mode"
|
||||
:minDate="dateTimePicker.min" :key="dateTimePicker.type" @confirm="fnDateTimePickerConfirm"
|
||||
@cancel="fnDateTimePickerCancel" />
|
||||
<other-select :visible.sync="otherAssignmentsShow" v-model="form.SPECIAL_WORK" type="assignments" />
|
||||
<other-select :visible.sync="otherIdentificationShow" v-model="form.RISK_IDENTIFICATION" type="identification" />
|
||||
<sign :signShow.sync="signVisible" @confirm="fnSign" />
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import OtherSelect from '@/components/other-select/index.vue';
|
||||
import Sign from '@/components/sign/sign.vue'
|
||||
import {getData, setSubmitForm} from "@/utils/submitHomeworkProcess";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
OtherSelect,
|
||||
Sign
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
type: '',
|
||||
formItems: [
|
||||
{ name: '申请单位', key_name: 'APPLY_DEPARTMENT_NAME', key_id: 'APPLY_DEPARTMENT_ID', type: 0 },
|
||||
{ name: '申请人', key_name: 'APPLY_USER_NAME', key_id: 'APPLY_USER_ID', type: 0 },
|
||||
{ name: '作业分公司', key_name: 'CORP_NAME', key_id: 'CORP_ID', type: 0 },
|
||||
{ name: '作业类别', key_name: 'WORK_TYPE_NAME', key_id: 'WORK_TYPE', type: 0 },
|
||||
{ name: '设备管道名称', key_name: 'NAME', type: 0 },
|
||||
{ name: '实际作业开始时间', key_name: 'BOARD_INSTALL_TIME', type: 0 },
|
||||
{ name: '作业结束时间', key_name: 'WORK_END_DATE', type: 0 },
|
||||
{ name: '作业人', key_name: 'WORK_USER', type: 0 },
|
||||
{ name: '经度', key_name: 'WORK_LONGITUDE', type: 0 },
|
||||
{ name: '纬度', key_name: 'WORK_LATITUDE', type: 0 },
|
||||
{ name: '管道参数', type: 3 },
|
||||
{ name: '介质', key_name: 'MEDIUM', type: 0 },
|
||||
{ name: '温度', key_name: 'TEMPERATURE', type: 0 },
|
||||
{ name: '压力', key_name: 'PRESSURE', type: 0 },
|
||||
{ name: '盲板抽堵参数', type: 3 },
|
||||
{
|
||||
key_name: 'boardList',
|
||||
type: 4,
|
||||
listStructure: [
|
||||
{ name: '材质', key_name: 'BOARD_MATERIAL', type: 0 },
|
||||
{ name: '规格', key_name: 'BOARD_SPECIFICATION', type: 0 },
|
||||
{ name: '编号', key_name: 'BOARD_NO', type: 0 },
|
||||
]
|
||||
},
|
||||
{ name: '盲板抽堵位置及安全措施', type: 3 },
|
||||
{ name: '盲板抽堵位置图', key_name: 'BOARD_PATH', type: 1 },
|
||||
{ name: '关联的其他特殊作业及安全作业票编号', key_name: 'SPECIAL_WORK', type: 0 },
|
||||
{ name: '风险辨识结果', key_name: 'RISK_IDENTIFICATION', type: 0 },
|
||||
{ name: '申请单位负责人签字', key_name: 'SIGN', type: 5 },
|
||||
],
|
||||
form: {
|
||||
APPLY_DEPARTMENT_ID: this.$store.getters.getUserInfo.DEPARTMENT_ID,
|
||||
APPLY_DEPARTMENT_NAME: this.$store.getters.getUserInfo.DEPARTMENT_NAME,
|
||||
APPLY_USER_ID: this.$store.getters.getUserInfo.USER_ID,
|
||||
APPLY_USER_NAME: this.$store.getters.getUserInfo.NAME,
|
||||
CORP_ID: '',
|
||||
CORP_NAME: '',
|
||||
WORK_TYPE: '',
|
||||
WORK_TYPE_NAME: '',
|
||||
NAME: '',
|
||||
BOARD_INSTALL_TIME: '',
|
||||
WORK_END_DATE: '',
|
||||
WORK_USER: '',
|
||||
WORK_LONGITUDE: '1',
|
||||
WORK_LATITUDE: '2',
|
||||
MEDIUM: '',
|
||||
TEMPERATURE: '',
|
||||
PRESSURE: '',
|
||||
boardList: [],
|
||||
BOARD_PATH: [],
|
||||
SPECIAL_WORK: '',
|
||||
RISK_IDENTIFICATION: '',
|
||||
SIGN: '',
|
||||
},
|
||||
rules: {
|
||||
APPLY_DEPARTMENT_ID: [{ type: 'string', required: true, message: '请选择申请单位', trigger: ['blur', 'change'] }],
|
||||
APPLY_USER_NAME: [{ type: 'string', required: true, message: '请选择申请人', trigger: ['blur', 'change'] }],
|
||||
CORP_NAME: [{ type: 'string', required: true, message: '请选择作业分公司', trigger: ['blur', 'change'] }],
|
||||
WORK_TYPE_NAME: [{ type: 'string', required: true, message: '请选择作业类别', trigger: ['blur', 'change'] }],
|
||||
NAME: [{ type: 'string', required: true, message: '请输入设备管道名称', trigger: ['blur', 'change'] }],
|
||||
BOARD_INSTALL_TIME: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请选择实际作业开始时间',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
WORK_END_DATE: [{ type: 'string', required: true, message: '请选择作业结束时间', trigger: ['blur', 'change'] }],
|
||||
WORK_USER: [{ type: 'string', required: true, message: '请输入作业人', trigger: ['blur', 'change'] }],
|
||||
WORK_LONGITUDE: [{ type: 'string', required: true, message: '请输入经度', trigger: ['blur', 'change'] }],
|
||||
WORK_LATITUDE: [{ type: 'string', required: true, message: '请输入纬度', trigger: ['blur', 'change'] }],
|
||||
MEDIUM: [{ type: 'string', required: true, message: '请输入介质', trigger: ['blur', 'change'] }],
|
||||
TEMPERATURE: [{ type: 'string', required: true, message: '请输入温度', trigger: ['blur', 'change'] }],
|
||||
PRESSURE: [{ type: 'string', required: true, message: '请输入压力', trigger: ['blur', 'change'] }],
|
||||
BOARD_PATH: [{
|
||||
type: 'array',
|
||||
required: true,
|
||||
message: '请上传盲板抽堵位置图',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
SPECIAL_WORK: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请输入关联的其他特殊作业及安全作业票编号',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
RISK_IDENTIFICATION: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请输入风险辨识结果',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
SIGN: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请签字',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
},
|
||||
picker: {
|
||||
show: false,
|
||||
columns: [],
|
||||
key: 'NAME',
|
||||
type: 'picker',
|
||||
defaultIndex: []
|
||||
},
|
||||
dateTimePicker: {
|
||||
show: false,
|
||||
value: Number(new Date()),
|
||||
min: new Date().getTime(),
|
||||
mode: 'datetime',
|
||||
type: 'datetime-picker'
|
||||
},
|
||||
otherAssignmentsShow: false,
|
||||
otherIdentificationShow: false,
|
||||
signVisible: false,
|
||||
}
|
||||
},
|
||||
async onLoad(options) {
|
||||
this.form.CORP_ID = options.CORPINFO_ID
|
||||
this.form.CORP_NAME = options.CORP_NAME
|
||||
this.type = options.type
|
||||
this.fnAddBoardList()
|
||||
if (options.taskId) {
|
||||
this.form = await getData(options.taskId)
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
fnSingleChoiceClick(event) {
|
||||
this.picker.type = event
|
||||
if (event === 'WORK_TYPE_NAME') {
|
||||
this.picker.columns = [[{ NAME: "堵盲板", ID: '0' }, { NAME: "抽盲板", ID: '1' }]]
|
||||
}
|
||||
this.picker.show = true
|
||||
},
|
||||
fnSingleChoiceConfirm(event) {
|
||||
if (this.picker.type === 'WORK_TYPE_NAME') {
|
||||
this.form.WORK_TYPE = event.value[0].ID
|
||||
this.form.WORK_TYPE_NAME = event.value[0].NAME
|
||||
}
|
||||
this.fnSingleChoiceCancel()
|
||||
},
|
||||
fnSingleChoiceCancel() {
|
||||
this.picker.show = false
|
||||
},
|
||||
fnDateTimePickerClick(event) {
|
||||
this.dateTimePicker.type = event
|
||||
this.dateTimePicker.value = Number(new Date(this.form[event])) || Number(new Date())
|
||||
this.dateTimePicker.show = true
|
||||
},
|
||||
fnDateTimePickerConfirm(event) {
|
||||
this.form[this.dateTimePicker.type] = uni.$u.timeFormat(event.value, 'yyyy-mm-dd hh:MM')
|
||||
this.fnDateTimePickerCancel()
|
||||
},
|
||||
fnDateTimePickerCancel() {
|
||||
this.dateTimePicker.show = false
|
||||
},
|
||||
fnLocation() {
|
||||
uni.navigateTo({
|
||||
url: '/pages/map/index',
|
||||
events: {
|
||||
acceptLocationData: (event) => {
|
||||
this.form.WORK_LONGITUDE = event.data.longitue;
|
||||
this.form.WORK_LATITUDE = event.data.latitude;
|
||||
}
|
||||
},
|
||||
})
|
||||
},
|
||||
fnAddBoardList() {
|
||||
this.form.boardList.push({ BOARD_MATERIAL: '', BOARD_SPECIFICATION: '', BOARD_NO: '', ID: uni.$u.guid() })
|
||||
},
|
||||
fnDeleteBoardList(index) {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '确定删除该条信息吗?',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
this.form.boardList.splice(index, 1)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
fnAfterRead(event, key) {
|
||||
this.form[key].push(...event.file)
|
||||
},
|
||||
fnDeletePic(event, key) {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '确定删除该图片吗?',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
this.form[key].splice(event.index, 1)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
fnSign(event) {
|
||||
this.form.SIGN = event.filePath
|
||||
},
|
||||
async fnSubmit() {
|
||||
try {
|
||||
await this.$refs.formRef.validate()
|
||||
for (let i = 0; i < this.form.boardList.length; i++) {
|
||||
if (!this.form.boardList[i].BOARD_MATERIAL) {
|
||||
uni.$u.toast(`盲板抽堵参数第${i + 1}项中,请输入管道材质`)
|
||||
return
|
||||
}
|
||||
if (!this.form.boardList[i].BOARD_SPECIFICATION) {
|
||||
uni.$u.toast(`盲板抽堵参数第${i + 1}项中,请输入管道规格`)
|
||||
return
|
||||
}
|
||||
if (!this.form.boardList[i].BOARD_NO) {
|
||||
uni.$u.toast(`盲板抽堵参数第${i + 1}项中,请输入管道编号`)
|
||||
return
|
||||
}
|
||||
}
|
||||
try {
|
||||
await setSubmitForm({
|
||||
form: this.form,
|
||||
formItems: this.formItems,
|
||||
TYPE: this.type,
|
||||
CORP_ID: this.form.CORP_ID
|
||||
})
|
||||
} catch {
|
||||
}
|
||||
} catch {
|
||||
uni.$u.toast('请补全必填项')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,259 @@
|
|||
<template>
|
||||
<view class="content" style="margin-left: 10px">
|
||||
<view class="card">
|
||||
<u-form labelPosition="left" :model="form" :rules="rules" ref="formRef" labelWidth="140px">
|
||||
<u-form-item label="申请单位" prop="APPLY_DEPARTMENT_NAME" borderBottom required>
|
||||
<u-input v-model="form.APPLY_DEPARTMENT_NAME" border="none" readonly/>
|
||||
</u-form-item>
|
||||
<u-form-item label="申请人" prop="APPLY_USER_NAME" borderBottom required>
|
||||
<u-input v-model="form.APPLY_USER_NAME" border="none" readonly/>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业分公司" prop="CORP_NAME" borderBottom required>
|
||||
<u-input v-model="form.CORP_NAME" border="none" readonly/>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业开始时间" prop="WORK_START_DATE" borderBottom required
|
||||
@click="fnDateTimePickerClick('WORK_START_DATE')">
|
||||
<u-input v-model="form.WORK_START_DATE" border="none" readonly/>
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业结束时间" prop="WORK_END_DATE" borderBottom required
|
||||
@click="fnDateTimePickerClick('WORK_END_DATE')">
|
||||
<u-input v-model="form.WORK_END_DATE" border="none" readonly/>
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="地点坐标" borderBottom required>
|
||||
<u-button type="primary" size="small" text="定位" :customStyle="{width:'100upx',margin:0}"
|
||||
@click="fnLocation"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="经度" prop="WORK_LONGITUDE" borderBottom required>
|
||||
<u-input v-model="form.WORK_LONGITUDE" border="none" readonly/>
|
||||
</u-form-item>
|
||||
<u-form-item label="纬度" prop="WORK_LATITUDE" borderBottom required>
|
||||
<u-input v-model="form.WORK_LATITUDE" border="none" readonly/>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业地点" prop="WORK_PLACE" borderBottom required>
|
||||
<u-input v-model="form.WORK_PLACE" border="none"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业内容" prop="JOB_CONTENT" borderBottom required labelPosition="top" labelWidth="auto">
|
||||
<u-textarea v-model="form.JOB_CONTENT" border="none" autoHeight/>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业内容、范围、方式" prop="WORK_CONTENT" borderBottom required labelPosition="top" labelWidth="auto">
|
||||
<u-textarea v-model="form.WORK_CONTENT" border="none" autoHeight/>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业内容、范围、方式简图" prop="CONTENT_IMG_PATH" borderBottom required labelPosition="top" labelWidth="auto">
|
||||
<u-upload
|
||||
class="mt-10"
|
||||
:fileList="form.CONTENT_IMG_PATH"
|
||||
@afterRead="fnAfterRead($event,'CONTENT_IMG_PATH')"
|
||||
@delete="fnDeletePic($event,'CONTENT_IMG_PATH')"
|
||||
multiple
|
||||
:maxCount="1"
|
||||
></u-upload>
|
||||
</u-form-item>
|
||||
<u-form-item label="关联的其他特殊作业及安全作业票编号" prop="SPECIAL_WORK" borderBottom required
|
||||
labelPosition="top" labelWidth="auto">
|
||||
<u-button type="primary" size="mini" text="选择其它"
|
||||
:customStyle="{position: 'absolute',top: '-46upx',right: '20upx',width: '150upx'}"
|
||||
@click="otherAssignmentsShow = true"/>
|
||||
<u-textarea v-model="form.SPECIAL_WORK" border="none" autoHeight maxlength="-1"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="风险辨识结果" prop="RISK_IDENTIFICATION" borderBottom required labelPosition="top"
|
||||
labelWidth="auto">
|
||||
<u-button type="primary" size="mini" text="选择其它"
|
||||
:customStyle="{position: 'absolute',top: '-46upx',right: '20upx',width: '150upx'}"
|
||||
@click="otherIdentificationShow = true"/>
|
||||
<u-textarea v-model="form.RISK_IDENTIFICATION" border="none" autoHeight maxlength="-1"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="申请人签字" prop="SIGN" borderBottom required labelPosition="top" labelWidth="auto">
|
||||
<view style="flex: 1">
|
||||
<view>
|
||||
<u-button type="primary" size="mini" text="签字"
|
||||
:customStyle="{position: 'absolute',top: '-46upx',right: '20upx',width: '100upx'}"
|
||||
@click="signVisible = true"/>
|
||||
</view>
|
||||
<view v-if="form.SIGN">
|
||||
<u-image width="400rpx" height="200rpx" :src="form.SIGN"/>
|
||||
</view>
|
||||
</view>
|
||||
</u-form-item>
|
||||
</u-form>
|
||||
<view class="mt-10">
|
||||
<u-button type="primary" text="下一步" @click="$u.debounce(fnSubmit, 1000,true)"/>
|
||||
</view>
|
||||
</view>
|
||||
<u-datetime-picker :show="dateTimePicker.show" v-model="dateTimePicker.value" :mode="dateTimePicker.mode"
|
||||
:minDate="dateTimePicker.min" :key="dateTimePicker.type" @confirm="fnDateTimePickerConfirm"
|
||||
@cancel="fnDateTimePickerCancel"/>
|
||||
<other-select :visible.sync="otherAssignmentsShow" v-model="form.SPECIAL_WORK" type="assignments"/>
|
||||
<other-select :visible.sync="otherIdentificationShow" v-model="form.RISK_IDENTIFICATION" type="identification"/>
|
||||
<sign :signShow.sync="signVisible" @confirm="fnSign"/>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import OtherSelect from '@/components/other-select/index.vue';
|
||||
import Sign from '@/components/sign/sign.vue'
|
||||
import {getData, setSubmitForm} from "@/utils/submitHomeworkProcess";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
OtherSelect,
|
||||
Sign
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
type: '',
|
||||
formItems: [
|
||||
{name: '申请单位', key_name: 'APPLY_DEPARTMENT_NAME', key_id: 'APPLY_DEPARTMENT_ID', type: 0},
|
||||
{name: '申请人', key_name: 'APPLY_USER_NAME', key_id: 'APPLY_USER_ID', type: 0},
|
||||
{name: '作业分公司', key_name: 'CORP_NAME', key_id: 'CORP_ID', type: 0},
|
||||
{name: '作业开始时间', key_name: 'WORK_START_DATE', type: 0},
|
||||
{name: '作业结束时间', key_name: 'WORK_END_DATE', type: 0},
|
||||
{name: '经度', key_name: 'WORK_LONGITUDE', type: 0},
|
||||
{name: '纬度', key_name: 'WORK_LATITUDE', type: 0},
|
||||
{name: '作业地点', key_name: 'WORK_PLACE', type: 0},
|
||||
{name: '作业内容', key_name: 'JOB_CONTENT', type: 0},
|
||||
{name: '作业内容、范围、方式', key_name: 'WORK_CONTENT', type: 0},
|
||||
{name: '作业内容、范围、方式简图', key_name: 'CONTENT_IMG_PATH', type: 1},
|
||||
{name: '关联的其他特殊作业及安全作业票编号', key_name: 'SPECIAL_WORK', type: 0},
|
||||
{name: '风险辨识结果', key_name: 'RISK_IDENTIFICATION', type: 0},
|
||||
{name: '申请人签字', key_name: 'SIGN', type: 5},
|
||||
],
|
||||
form: {
|
||||
APPLY_DEPARTMENT_ID: this.$store.getters.getUserInfo.DEPARTMENT_ID,
|
||||
APPLY_DEPARTMENT_NAME: this.$store.getters.getUserInfo.DEPARTMENT_NAME,
|
||||
APPLY_USER_ID: this.$store.getters.getUserInfo.USER_ID,
|
||||
APPLY_USER_NAME: this.$store.getters.getUserInfo.NAME,
|
||||
CORP_ID: '',
|
||||
CORP_NAME: '',
|
||||
WORK_START_DATE: '',
|
||||
WORK_END_DATE: '',
|
||||
WORK_LONGITUDE: '1',
|
||||
WORK_LATITUDE: '2',
|
||||
WORK_PLACE: '',
|
||||
JOB_CONTENT: '',
|
||||
WORK_CONTENT: '',
|
||||
CONTENT_IMG_PATH: [],
|
||||
SPECIAL_WORK: '',
|
||||
RISK_IDENTIFICATION: '',
|
||||
SIGN: '',
|
||||
},
|
||||
rules: {
|
||||
APPLY_DEPARTMENT_ID: [{type: 'string', required: true, message: '请选择申请单位', trigger: ['blur', 'change']}],
|
||||
APPLY_USER_NAME: [{type: 'string', required: true, message: '请选择申请人', trigger: ['blur', 'change']}],
|
||||
CORP_NAME: [{type: 'string', required: true, message: '请选择作业分公司', trigger: ['blur', 'change']}],
|
||||
WORK_START_DATE: [{type: 'string', required: true, message: '请选择作业开始时间', trigger: ['blur', 'change']}],
|
||||
WORK_END_DATE: [{type: 'string', required: true, message: '请选择作业结束时间', trigger: ['blur', 'change']}],
|
||||
WORK_LONGITUDE: [{type: 'string', required: true, message: '请输入经度', trigger: ['blur', 'change']}],
|
||||
WORK_LATITUDE: [{type: 'string', required: true, message: '请输入纬度', trigger: ['blur', 'change']}],
|
||||
WORK_PLACE: [{type: 'string', required: true, message: '请输入作业地点', trigger: ['blur', 'change']}],
|
||||
JOB_CONTENT: [{type: 'string', required: true, message: '请输入作业内容', trigger: ['blur', 'change']}],
|
||||
WORK_CONTENT: [{type: 'string', required: true, message: '请输入作业内容、范围、方式', trigger: ['blur', 'change']}],
|
||||
CONTENT_IMG_PATH: [{
|
||||
type: 'array',
|
||||
required: true,
|
||||
message: '请上传作业内容、范围、方式简图',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
SPECIAL_WORK: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请输入关联的其他特殊作业及安全作业票编号',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
RISK_IDENTIFICATION: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请输入风险辨识结果',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
SIGN: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请签字',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
},
|
||||
dateTimePicker: {
|
||||
show: false,
|
||||
value: Number(new Date()),
|
||||
min: new Date().getTime(),
|
||||
mode: 'datetime',
|
||||
type: 'datetime-picker'
|
||||
},
|
||||
otherAssignmentsShow: false,
|
||||
otherIdentificationShow: false,
|
||||
signVisible: false,
|
||||
}
|
||||
},
|
||||
async onLoad(options) {
|
||||
this.form.CORP_ID = options.CORPINFO_ID
|
||||
this.form.CORP_NAME = options.CORP_NAME
|
||||
this.type = options.type
|
||||
if (options.taskId) {
|
||||
this.form = await getData(options.taskId)
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
fnDateTimePickerClick(event) {
|
||||
this.dateTimePicker.type = event
|
||||
this.dateTimePicker.value = Number(new Date(this.form[event])) || Number(new Date())
|
||||
this.dateTimePicker.show = true
|
||||
},
|
||||
fnDateTimePickerConfirm(event) {
|
||||
this.form[this.dateTimePicker.type] = uni.$u.timeFormat(event.value, 'yyyy-mm-dd hh:MM')
|
||||
this.fnDateTimePickerCancel()
|
||||
},
|
||||
fnDateTimePickerCancel() {
|
||||
this.dateTimePicker.show = false
|
||||
},
|
||||
fnLocation() {
|
||||
uni.navigateTo({
|
||||
url: '/pages/map/index',
|
||||
events: {
|
||||
acceptLocationData: (event) => {
|
||||
this.form.WORK_LONGITUDE = event.data.longitue;
|
||||
this.form.WORK_LATITUDE = event.data.latitude;
|
||||
}
|
||||
},
|
||||
})
|
||||
},
|
||||
fnAfterRead(event, key) {
|
||||
this.form[key].push(...event.file)
|
||||
},
|
||||
fnDeletePic(event, key) {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '确定删除该图片吗?',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
this.form[key].splice(event.index, 1)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
fnSign(event) {
|
||||
this.form.SIGN = event.filePath
|
||||
},
|
||||
async fnSubmit() {
|
||||
try {
|
||||
await this.$refs.formRef.validate()
|
||||
try {
|
||||
await setSubmitForm({
|
||||
form: this.form,
|
||||
formItems: this.formItems,
|
||||
TYPE: this.type,
|
||||
CORP_ID: this.form.CORP_ID
|
||||
})
|
||||
} catch {
|
||||
}
|
||||
} catch {
|
||||
uni.$u.toast('请补全必填项')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
</style>
|
|
@ -0,0 +1,87 @@
|
|||
<template>
|
||||
<view class="content">
|
||||
<u-list @scrolltolower="scrolltolower" v-if="list.length > 0">
|
||||
<u-list-item v-for="(item, index) in list" :key="index">
|
||||
<view class="flex-between main-title">
|
||||
<text>申请人:{{ item.jobName }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title">
|
||||
<text>身份:{{ item.taskName }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title">
|
||||
<text>作业编号:{{ item.id }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title">
|
||||
<text>作业分公司:{{ item.corpName }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title">
|
||||
<text>申请时间:{{ item.createdTime }}</text>
|
||||
</view>
|
||||
<view class="flex-between mt-10 subtitle">
|
||||
<view></view>
|
||||
<view class="flex-between">
|
||||
<u-button type="primary" text="流程" size="mini" class="bth-mini"
|
||||
@click="$u.route({
|
||||
url: '/pages/eight_assignments/technological_process',
|
||||
params: {taskId:item.taskId,type,title}
|
||||
})"/>
|
||||
</view>
|
||||
</view>
|
||||
</u-list-item>
|
||||
</u-list>
|
||||
<empty v-else></empty>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getToDoTaskList} from "@/api";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
type: '',
|
||||
title: '',
|
||||
pageSize: 10,
|
||||
currentPage: 1,
|
||||
totalPage: 0,
|
||||
list: []
|
||||
}
|
||||
},
|
||||
onLoad(query) {
|
||||
this.type = query.type
|
||||
this.title = query.title
|
||||
uni.setNavigationBarTitle({
|
||||
title: this.title + '已办'
|
||||
})
|
||||
},
|
||||
onShow() {
|
||||
this.resetList()
|
||||
},
|
||||
methods: {
|
||||
async getData() {
|
||||
let resData = await getToDoTaskList({
|
||||
showCount: this.pageSize,
|
||||
currentPage: this.currentPage,
|
||||
TYPE: this.type,
|
||||
vectors: '1'
|
||||
});
|
||||
this.list = [...this.list, ...resData.list.list];
|
||||
this.totalPage = resData.list.totalPage;
|
||||
},
|
||||
resetList() {
|
||||
this.pageSize = 10
|
||||
this.currentPage = 1
|
||||
this.list = []
|
||||
this.getData()
|
||||
},
|
||||
scrolltolower() {
|
||||
this.currentPage++;
|
||||
if (this.totalPage >= this.currentPage) this.getData();
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
|
@ -0,0 +1,248 @@
|
|||
<template>
|
||||
<view class="content" style="margin-left: 10px">
|
||||
<view class="card">
|
||||
<u-form labelPosition="left" :model="form" :rules="rules" ref="formRef" labelWidth="140px">
|
||||
<u-form-item label="申请单位" prop="APPLY_DEPARTMENT_NAME" borderBottom required>
|
||||
<u-input v-model="form.APPLY_DEPARTMENT_NAME" border="none" readonly/>
|
||||
</u-form-item>
|
||||
<u-form-item label="申请人" prop="APPLY_USER_NAME" borderBottom required>
|
||||
<u-input v-model="form.APPLY_USER_NAME" border="none" readonly/>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业分公司" prop="CORP_NAME" borderBottom required>
|
||||
<u-input v-model="form.CORP_NAME" border="none" readonly/>
|
||||
</u-form-item>
|
||||
<u-form-item label="受限空间所属单位" prop="BELONG_CORP" borderBottom required>
|
||||
<u-input v-model="form.BELONG_CORP" border="none"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="受限空间名称" prop="LIMITSPACE_NAME" borderBottom required
|
||||
@click="fnSingleChoiceClick('LIMITSPACE_NAME')">
|
||||
<u-input v-model="form.LIMITSPACE_NAME" border="none" readonly/>
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="受限空间内原有介质名称" prop="MEDIUM_NAME" borderBottom required>
|
||||
<u-input v-model="form.MEDIUM_NAME" border="none"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业内容" prop="WORK_CONTENT" borderBottom required labelPosition="top" labelWidth="auto">
|
||||
<u-textarea v-model="form.WORK_CONTENT" border="none" autoHeight/>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业开始时间" prop="WORK_START_DATE" borderBottom required
|
||||
@click="fnDateTimePickerClick('WORK_START_DATE')">
|
||||
<u-input v-model="form.WORK_START_DATE" border="none" readonly/>
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业结束时间" prop="WORK_END_DATE" borderBottom required
|
||||
@click="fnDateTimePickerClick('WORK_END_DATE')">
|
||||
<u-input v-model="form.WORK_END_DATE" border="none" readonly/>
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="地点坐标" borderBottom required>
|
||||
<u-button type="primary" size="small" text="定位" :customStyle="{width:'100upx',margin:0}"
|
||||
@click="fnLocation"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="经度" prop="WORK_LONGITUDE" borderBottom required>
|
||||
<u-input v-model="form.WORK_LONGITUDE" border="none" readonly/>
|
||||
</u-form-item>
|
||||
<u-form-item label="纬度" prop="WORK_LATITUDE" borderBottom required>
|
||||
<u-input v-model="form.WORK_LATITUDE" border="none" readonly/>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业人" prop="WORK_USER" borderBottom required>
|
||||
<u-input v-model="form.WORK_USER" border="none"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="关联的其他特殊作业及安全作业票编号" prop="SPECIAL_WORK" borderBottom required
|
||||
labelPosition="top" labelWidth="auto">
|
||||
<u-button type="primary" size="mini" text="选择其它"
|
||||
:customStyle="{position: 'absolute',top: '-46upx',right: '20upx',width: '150upx'}"
|
||||
@click="otherAssignmentsShow = true"/>
|
||||
<u-textarea v-model="form.SPECIAL_WORK" border="none" autoHeight maxlength="-1"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="风险辨识结果" prop="RISK_IDENTIFICATION" borderBottom required labelPosition="top"
|
||||
labelWidth="auto">
|
||||
<u-button type="primary" size="mini" text="选择其它"
|
||||
:customStyle="{position: 'absolute',top: '-46upx',right: '20upx',width: '150upx'}"
|
||||
@click="otherIdentificationShow = true"/>
|
||||
<u-textarea v-model="form.RISK_IDENTIFICATION" border="none" autoHeight maxlength="-1"/>
|
||||
</u-form-item>
|
||||
</u-form>
|
||||
<view class="mt-10">
|
||||
<u-button type="primary" text="下一步" @click="$u.debounce(fnSubmit, 1000,true)"/>
|
||||
</view>
|
||||
</view>
|
||||
<u-picker :show="picker.show" :columns="picker.columns" :keyName="picker.key" :key="picker.type"
|
||||
@confirm="fnSingleChoiceConfirm" @cancel="fnSingleChoiceCancel"/>
|
||||
<u-datetime-picker :show="dateTimePicker.show" v-model="dateTimePicker.value" :mode="dateTimePicker.mode"
|
||||
:minDate="dateTimePicker.min" :key="dateTimePicker.type" @confirm="fnDateTimePickerConfirm"
|
||||
@cancel="fnDateTimePickerCancel"/>
|
||||
<other-select :visible.sync="otherAssignmentsShow" v-model="form.SPECIAL_WORK" type="assignments"/>
|
||||
<other-select :visible.sync="otherIdentificationShow" v-model="form.RISK_IDENTIFICATION" type="identification"/>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getConfinedSpaceSelectList} from '@/api'
|
||||
import OtherSelect from '@/components/other-select/index.vue';
|
||||
import {getData, setSubmitForm} from "@/utils/submitHomeworkProcess";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
OtherSelect
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
type: '',
|
||||
formItems: [
|
||||
{name: '申请单位', key_name: 'APPLY_DEPARTMENT_NAME', key_id: 'APPLY_DEPARTMENT_ID', type: 0},
|
||||
{name: '申请人', key_name: 'APPLY_USER_NAME', key_id: 'APPLY_USER_ID', type: 0},
|
||||
{name: '作业分公司', key_name: 'CORP_NAME', key_id: 'CORP_ID', type: 0},
|
||||
{name: '受限空间所属单位', key_name: 'BELONG_CORP', type: 0},
|
||||
{name: '受限空间名称', key_name: 'LIMITSPACE_NAME', key_id: 'LIMITSPACE_ID', type: 0},
|
||||
{name: '受限空间内原有介质名称', key_name: 'MEDIUM_NAME', type: 0},
|
||||
{name: '作业内容', key_name: 'WORK_CONTENT', type: 0},
|
||||
{name: '作业开始时间', key_name: 'WORK_START_DATE', type: 0},
|
||||
{name: '作业结束时间', key_name: 'WORK_END_DATE', type: 0},
|
||||
{name: '经度', key_name: 'WORK_LONGITUDE', type: 0},
|
||||
{name: '纬度', key_name: 'WORK_LATITUDE', type: 0},
|
||||
{name: '作业人', key_name: 'WORK_USER', type: 0},
|
||||
{name: '关联的其他特殊作业及安全作业票编号', key_name: 'SPECIAL_WORK', type: 0},
|
||||
{name: '风险辨识结果', key_name: 'RISK_IDENTIFICATION', type: 0},
|
||||
],
|
||||
form: {
|
||||
APPLY_DEPARTMENT_ID: this.$store.getters.getUserInfo.DEPARTMENT_ID,
|
||||
APPLY_DEPARTMENT_NAME: this.$store.getters.getUserInfo.DEPARTMENT_NAME,
|
||||
APPLY_USER_ID: this.$store.getters.getUserInfo.USER_ID,
|
||||
APPLY_USER_NAME: this.$store.getters.getUserInfo.NAME,
|
||||
CORP_ID: '',
|
||||
CORP_NAME: '',
|
||||
BELONG_CORP: '',
|
||||
LIMITSPACE_NAME: '',
|
||||
LIMITSPACE_ID: '',
|
||||
MEDIUM_NAME: '',
|
||||
WORK_CONTENT: '',
|
||||
WORK_START_DATE: '',
|
||||
WORK_END_DATE: '',
|
||||
WORK_LONGITUDE: '1',
|
||||
WORK_LATITUDE: '2',
|
||||
WORK_USER: '',
|
||||
SPECIAL_WORK: '',
|
||||
RISK_IDENTIFICATION: '',
|
||||
},
|
||||
rules: {
|
||||
APPLY_DEPARTMENT_ID: [{type: 'string', required: true, message: '请选择申请单位', trigger: ['blur', 'change']}],
|
||||
APPLY_USER_NAME: [{type: 'string', required: true, message: '请选择申请人', trigger: ['blur', 'change']}],
|
||||
CORP_NAME: [{type: 'string', required: true, message: '请选择作业分公司', trigger: ['blur', 'change']}],
|
||||
BELONG_CORP: [{type: 'string', required: true, message: '请输入受限空间所属单位', trigger: ['blur', 'change']}],
|
||||
LIMITSPACE_NAME: [{type: 'string', required: true, message: '请选择受限空间名称', trigger: ['blur', 'change']}],
|
||||
MEDIUM_NAME: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请输入受限空间内原有介质名称',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
WORK_CONTENT: [{type: 'string', required: true, message: '请输入作业内容', trigger: ['blur', 'change']}],
|
||||
WORK_START_DATE: [{type: 'string', required: true, message: '请选择作业开始时间', trigger: ['blur', 'change']}],
|
||||
WORK_END_DATE: [{type: 'string', required: true, message: '请选择作业结束时间', trigger: ['blur', 'change']}],
|
||||
WORK_LONGITUDE: [{type: 'string', required: true, message: '请选择经度', trigger: ['blur']}],
|
||||
WORK_LATITUDE: [{type: 'string', required: true, message: '请选择纬度', trigger: ['blur']}],
|
||||
WORK_USER: [{type: 'string', required: true, message: '请输入作业人', trigger: ['blur', 'change']}],
|
||||
SPECIAL_WORK: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请输入关联的其他特殊作业及安全作业票编号',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
RISK_IDENTIFICATION: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请输入风险辨识结果',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
},
|
||||
picker: {
|
||||
show: false,
|
||||
columns: [],
|
||||
key: 'NAME',
|
||||
type: 'picker'
|
||||
},
|
||||
dateTimePicker: {
|
||||
show: false,
|
||||
value: Number(new Date()),
|
||||
min: new Date().getTime(),
|
||||
mode: 'datetime',
|
||||
type: 'datetime-picker'
|
||||
},
|
||||
otherAssignmentsShow: false,
|
||||
otherIdentificationShow: false,
|
||||
}
|
||||
},
|
||||
async onLoad(options) {
|
||||
this.form.CORP_ID = options.CORPINFO_ID
|
||||
this.form.CORP_NAME = options.CORP_NAME
|
||||
this.type = options.type
|
||||
if (options.taskId) {
|
||||
this.form = await getData(options.taskId)
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async fnGetConfinedSpaceSelectList() {
|
||||
const resData = await getConfinedSpaceSelectList({TYPE: 2, CORP_ID: this.form.CORP_ID})
|
||||
this.picker.columns = [resData.varList]
|
||||
},
|
||||
fnSingleChoiceClick(event) {
|
||||
this.picker.type = event
|
||||
if (event === 'LIMITSPACE_NAME') this.fnGetConfinedSpaceSelectList()
|
||||
this.picker.show = true
|
||||
},
|
||||
fnSingleChoiceConfirm(event) {
|
||||
if (this.picker.type === 'LIMITSPACE_NAME') {
|
||||
this.form.LIMITSPACE_ID = event.value[0].LIMITSPACE_ID
|
||||
this.form.LIMITSPACE_NAME = event.value[0].NAME
|
||||
}
|
||||
this.fnSingleChoiceCancel()
|
||||
},
|
||||
fnSingleChoiceCancel() {
|
||||
this.picker.show = false
|
||||
},
|
||||
fnDateTimePickerClick(event) {
|
||||
this.dateTimePicker.type = event
|
||||
this.dateTimePicker.value = Number(new Date(this.form[event])) || Number(new Date())
|
||||
this.dateTimePicker.show = true
|
||||
},
|
||||
fnDateTimePickerConfirm(event) {
|
||||
this.form[this.dateTimePicker.type] = uni.$u.timeFormat(event.value, 'yyyy-mm-dd hh:MM')
|
||||
this.fnDateTimePickerCancel()
|
||||
},
|
||||
fnDateTimePickerCancel() {
|
||||
this.dateTimePicker.show = false
|
||||
},
|
||||
fnLocation() {
|
||||
uni.navigateTo({
|
||||
url: '/pages/map/index',
|
||||
events: {
|
||||
acceptLocationData: (event) => {
|
||||
this.form.WORK_LONGITUDE = event.data.longitue;
|
||||
this.form.WORK_LATITUDE = event.data.latitude;
|
||||
}
|
||||
},
|
||||
})
|
||||
},
|
||||
async fnSubmit() {
|
||||
try {
|
||||
await this.$refs.formRef.validate()
|
||||
try {
|
||||
await setSubmitForm({
|
||||
form: this.form,
|
||||
formItems: this.formItems,
|
||||
TYPE: this.type,
|
||||
CORP_ID: this.form.CORP_ID
|
||||
})
|
||||
} catch {
|
||||
}
|
||||
} catch {
|
||||
uni.$u.toast('请补全必填项')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
</style>
|
|
@ -0,0 +1,138 @@
|
|||
<template>
|
||||
<view class="content">
|
||||
<view class="card">
|
||||
<u-form labelPosition="left" :model="form" :rules="rules" ref="formRef" labelWidth="140px">
|
||||
<block v-if="GAS_NAME1">
|
||||
<u-form-item :label="GAS_NAME1" prop="GAS_NAME1" borderBottom>
|
||||
<u-input v-model="form.DATA1" border="none"/>
|
||||
</u-form-item>
|
||||
</block>
|
||||
<block v-if="GAS_NAME2">
|
||||
<u-form-item :label="GAS_NAME2" prop="GAS_NAME1" borderBottom>
|
||||
<u-input v-model="form.DATA2" border="none"/>
|
||||
</u-form-item>
|
||||
</block>
|
||||
<block v-if="GAS_NAME3">
|
||||
<u-form-item :label="GAS_NAME3" prop="GAS_NAME1" borderBottom>
|
||||
<u-input v-model="form.DATA3" border="none"/>
|
||||
</u-form-item>
|
||||
</block>
|
||||
<block v-if="GAS_NAME4">
|
||||
<u-form-item :label="GAS_NAME4" prop="GAS_NAME1" borderBottom>
|
||||
<u-input v-model="form.DATA4" border="none"/>
|
||||
</u-form-item>
|
||||
</block>
|
||||
<u-form-item label="取样分析时间" prop="ANALYZE_TIME" borderBottom required
|
||||
@click="fnDateTimePickerClick('ANALYZE_TIME')">
|
||||
<u-input v-model="form.ANALYZE_TIME" border="none" readonly/>
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="分析部位" prop="ANALYZE_PLACE" borderBottom required>
|
||||
<u-input v-model="form.ANALYZE_PLACE" border="none"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="氧气含量" prop="OXYGEN_CONTENT" borderBottom required>
|
||||
<u-input v-model="form.OXYGEN_CONTENT" border="none"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="分析人" prop="ANALYZE_USER" borderBottom>
|
||||
<u-input v-model="form.ANALYZE_USER" border="none" readonly/>
|
||||
</u-form-item>
|
||||
</u-form>
|
||||
<view class="mt-10">
|
||||
<u-button type="primary" text="保存" @click="$u.debounce(fnSubmit, 1000,true)"/>
|
||||
</view>
|
||||
</view>
|
||||
<u-datetime-picker :show="dateTimePicker.show" v-model="dateTimePicker.value" :mode="dateTimePicker.mode"
|
||||
:maxDate="dateTimePicker.max" :key="dateTimePicker.type" @confirm="fnDateTimePickerConfirm"
|
||||
@cancel="fnDateTimePickerCancel"/>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {setConfinedSpaceGasInfoSave} from "@/api";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
form: {
|
||||
DATA1: '',
|
||||
DATA2: '',
|
||||
DATA3: '',
|
||||
DATA4: '',
|
||||
ANALYZE_TIME: '',
|
||||
ANALYZE_PLACE: '',
|
||||
OXYGEN_CONTENT: '',
|
||||
ANALYZE_USER: this.$store.getters.getUserInfo.NAME,
|
||||
},
|
||||
rules: {
|
||||
ANALYZE_TIME: [{type: 'string', required: true, message: '请选择分析时间', trigger: ['blur', 'change']}],
|
||||
ANALYZE_PLACE: [{type: 'string', required: true, message: '请输入分析部位', trigger: ['blur', 'change']}],
|
||||
OXYGEN_CONTENT: [{type: 'string', required: true, message: '请输入氧气含量', trigger: ['blur', 'change']}],
|
||||
},
|
||||
GAS_NAME1: '',
|
||||
GAS_NAME2: '',
|
||||
GAS_NAME3: '',
|
||||
GAS_NAME4: '',
|
||||
EW_RU_TASK_ID: '',
|
||||
EW_RU_JOB_ID: '',
|
||||
dateTimePicker: {
|
||||
show: false,
|
||||
value: Number(new Date()),
|
||||
max: new Date().getTime(),
|
||||
mode: 'datetime',
|
||||
type: 'datetime-picker'
|
||||
},
|
||||
}
|
||||
},
|
||||
onLoad(query) {
|
||||
this.GAS_NAME1 = query.GAS_NAME1
|
||||
this.GAS_NAME2 = query.GAS_NAME2
|
||||
this.GAS_NAME3 = query.GAS_NAME3
|
||||
this.GAS_NAME4 = query.GAS_NAME4
|
||||
this.EW_RU_TASK_ID = query.EW_RU_TASK_ID;
|
||||
this.EW_RU_JOB_ID = query.EW_RU_JOB_ID;
|
||||
},
|
||||
methods: {
|
||||
fnDateTimePickerClick(event) {
|
||||
this.dateTimePicker.type = event
|
||||
this.dateTimePicker.value = Number(new Date(this.form[event])) || Number(new Date())
|
||||
this.dateTimePicker.show = true
|
||||
},
|
||||
fnDateTimePickerConfirm(event) {
|
||||
this.form[this.dateTimePicker.type] = uni.$u.timeFormat(event.value, 'yyyy-mm-dd hh:MM')
|
||||
this.fnDateTimePickerCancel()
|
||||
},
|
||||
fnDateTimePickerCancel() {
|
||||
this.dateTimePicker.show = false
|
||||
},
|
||||
async fnSubmit() {
|
||||
try {
|
||||
await this.$refs.formRef.validate()
|
||||
try {
|
||||
for (let i = 0; i < 4; i++) {
|
||||
if (this[`GAS_NAME${i + 1}`] && !this.form[`DATA${i + 1}`]) this.form[`DATA${i + 1}`] = 0
|
||||
}
|
||||
await setConfinedSpaceGasInfoSave({
|
||||
data: {...this.form},
|
||||
EW_RU_TASK_ID: this.EW_RU_TASK_ID,
|
||||
EW_RU_JOB_ID: this.EW_RU_JOB_ID,
|
||||
postMethod: 'application/json',
|
||||
})
|
||||
uni.$u.toast('保存成功')
|
||||
setTimeout(() => {
|
||||
uni.switchTab({
|
||||
url: '/pages/index/index'
|
||||
})
|
||||
}, 2000)
|
||||
} catch {
|
||||
}
|
||||
} catch (e) {
|
||||
uni.$u.toast('请补全必填项')
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
</style>
|
|
@ -0,0 +1,120 @@
|
|||
<template>
|
||||
<view class="content">
|
||||
<u-list v-if="list.length > 0">
|
||||
<u-list-item v-for="(item, index) in list" :key="index">
|
||||
<view class="flex-between main-title">
|
||||
<text>分析时间:{{ item.ANALYZE_TIME }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title">
|
||||
<text>分析地点:{{ item.ANALYZE_PLACE }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title" v-if="GAS_NAME1 && item.DATA1">
|
||||
<text>{{ GAS_NAME1 }}:{{ item.DATA1 }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title" v-if="GAS_NAME2 && item.DATA2">
|
||||
<text>{{ GAS_NAME2 }}:{{ item.DATA2 }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title" v-if="GAS_NAME3 && item.DATA3">
|
||||
<text>{{ GAS_NAME3 }}:{{ item.DATA3 }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title" v-if="GAS_NAME4 && item.DATA4">
|
||||
<text>{{ GAS_NAME4 }}:{{ item.DATA4 }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title">
|
||||
<text>含氧量:{{ item.OXYGEN_CONTENT }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title">
|
||||
<text>分析人:{{ item.ANALYZE_USER_NAME }}</text>
|
||||
</view>
|
||||
<view class="flex-between mt-10 subtitle">
|
||||
<view></view>
|
||||
<view class="flex-between">
|
||||
<u-button type="error" text="删除" size="mini" class="bth-mini"
|
||||
@click="fnDelete(item)"/>
|
||||
</view>
|
||||
</view>
|
||||
</u-list-item>
|
||||
</u-list>
|
||||
<empty v-else></empty>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getConfinedSpaceGasInfo, setConfinedSpaceGasDelete} from "@/api";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
GAS_NAME1: '',
|
||||
GAS_NAME2: '',
|
||||
GAS_NAME3: '',
|
||||
GAS_NAME4: '',
|
||||
EW_RU_TASK_ID: '',
|
||||
EW_RU_JOB_ID: '',
|
||||
list: []
|
||||
}
|
||||
},
|
||||
onLoad(query) {
|
||||
this.GAS_NAME1 = query.GAS_NAME1;
|
||||
this.GAS_NAME2 = query.GAS_NAME2;
|
||||
this.GAS_NAME3 = query.GAS_NAME3;
|
||||
this.GAS_NAME4 = query.GAS_NAME4;
|
||||
this.EW_RU_TASK_ID = query.EW_RU_TASK_ID;
|
||||
this.EW_RU_JOB_ID = query.EW_RU_JOB_ID;
|
||||
},
|
||||
onNavigationBarButtonTap(e) {
|
||||
if (e.index === 0) {
|
||||
uni.$u.route({
|
||||
url: '/pages/eight_assignments/confined_space/gas/add',
|
||||
params: {
|
||||
GAS_NAME1: this.GAS_NAME1,
|
||||
GAS_NAME2: this.GAS_NAME2,
|
||||
GAS_NAME3: this.GAS_NAME3,
|
||||
GAS_NAME4: this.GAS_NAME4,
|
||||
EW_RU_TASK_ID: this.EW_RU_TASK_ID,
|
||||
EW_RU_JOB_ID: this.EW_RU_JOB_ID,
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
onShow() {
|
||||
this.resetList()
|
||||
},
|
||||
methods: {
|
||||
async getData() {
|
||||
let resData = await getConfinedSpaceGasInfo({
|
||||
EW_RU_JOB_ID: this.EW_RU_JOB_ID,
|
||||
EW_RU_TASK_ID: this.EW_RU_TASK_ID,
|
||||
postMethod: 'application/json',
|
||||
});
|
||||
this.list = [...this.list, ...resData.data.main];
|
||||
},
|
||||
resetList() {
|
||||
this.list = []
|
||||
this.getData()
|
||||
},
|
||||
fnDelete(item) {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '确定要删除这条记录?',
|
||||
success: async res => {
|
||||
if (res.confirm) {
|
||||
await setConfinedSpaceGasDelete({
|
||||
data: item,
|
||||
EW_RU_JOB_ID: this.EW_RU_JOB_ID,
|
||||
EW_RU_TASK_ID: this.EW_RU_TASK_ID,
|
||||
postMethod: 'application/json',
|
||||
})
|
||||
uni.$u.toast('删除成功')
|
||||
this.resetList()
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
</style>
|
|
@ -0,0 +1,116 @@
|
|||
<template>
|
||||
<view class="content">
|
||||
<view class="card">
|
||||
<u-form labelPosition="left" :model="form" :rules="rules" ref="formRef" labelWidth="140px">
|
||||
<u-form-item label="有毒有害气体名称1" prop="GAS_NAME1" borderBottom>
|
||||
<u-input v-model="form.GAS_NAME1" border="none"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="合格标准" prop="GAS_STANDARD1" borderBottom>
|
||||
<u-input v-model="form.GAS_STANDARD1" border="none"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="有毒有害气体名称2" prop="GAS_NAME2" borderBottom>
|
||||
<u-input v-model="form.GAS_NAME2" border="none"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="合格标准" prop="GAS_STANDARD2" borderBottom>
|
||||
<u-input v-model="form.GAS_STANDARD2" border="none"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="可燃气体名称1" prop="GAS_NAME3" borderBottom>
|
||||
<u-input v-model="form.GAS_NAME3" border="none"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="合格标准" prop="GAS_STANDARD3" borderBottom>
|
||||
<u-input v-model="form.GAS_STANDARD3" border="none"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="可燃气体名称2" prop="GAS_NAME4" borderBottom>
|
||||
<u-input v-model="form.GAS_NAME4" border="none"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="合格标准" prop="GAS_STANDARD4" borderBottom>
|
||||
<u-input v-model="form.GAS_STANDARD4" border="none"/>
|
||||
</u-form-item>
|
||||
</u-form>
|
||||
<view class="mt-10">
|
||||
<u-button type="primary" text="气体分析" @click="$u.debounce(fnSubmit, 1000,true)"/>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
getConfinedSpaceGasInfo,
|
||||
setConfinedSpaceGasInfoSave,
|
||||
} from "@/api";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
EW_RU_JOB_ID: '',
|
||||
EW_RU_TASK_ID: '',
|
||||
form: {
|
||||
GAS_NAME1: '',
|
||||
GAS_STANDARD1: '',
|
||||
GAS_NAME2: '',
|
||||
GAS_STANDARD2: '',
|
||||
GAS_NAME3: '',
|
||||
GAS_STANDARD3: '',
|
||||
GAS_NAME4: '',
|
||||
GAS_STANDARD4: '',
|
||||
},
|
||||
rules: {},
|
||||
}
|
||||
},
|
||||
onLoad(query) {
|
||||
this.EW_RU_TASK_ID = query.taskId
|
||||
this.EW_RU_JOB_ID = query.EW_RU_JOB_ID
|
||||
},
|
||||
onShow() {
|
||||
this.fnGetData()
|
||||
},
|
||||
methods: {
|
||||
async fnGetData() {
|
||||
let resData = await getConfinedSpaceGasInfo({
|
||||
EW_RU_TASK_ID: this.EW_RU_TASK_ID,
|
||||
EW_RU_JOB_ID: this.EW_RU_JOB_ID,
|
||||
postMethod: 'application/json',
|
||||
})
|
||||
this.form = resData.data.aux[0] || {}
|
||||
},
|
||||
async fnSubmit() {
|
||||
if (!this.form.GAS_NAME1 && !this.form.GAS_NAME2 && !this.form.GAS_NAME3 && !this.form.GAS_NAME4) {
|
||||
uni.$u.toast('最少填写一项气体名称')
|
||||
return
|
||||
}
|
||||
for (let i = 0; i < 4; i++) {
|
||||
if (this.form['GAS_NAME' + (i + 1)] && !this.form['GAS_STANDARD' + (i + 1)]) {
|
||||
uni.$u.toast('请填写气体名称(' + this.form['GAS_NAME' + (i + 1)] + ')的合格标准')
|
||||
return
|
||||
}
|
||||
if (this.form['GAS_STANDARD' + (i + 1)] && !this.form['GAS_NAME' + (i + 1)]) {
|
||||
uni.$u.toast('请填写合格标准(' + this.form['GAS_STANDARD' + (i + 1)] + ')的气体名称')
|
||||
return
|
||||
}
|
||||
}
|
||||
await setConfinedSpaceGasInfoSave({
|
||||
wh: {...this.form},
|
||||
EW_RU_TASK_ID: this.EW_RU_TASK_ID,
|
||||
EW_RU_JOB_ID: this.EW_RU_JOB_ID,
|
||||
postMethod: 'application/json',
|
||||
})
|
||||
uni.$u.route({
|
||||
url: '/pages/eight_assignments/confined_space/gas/list',
|
||||
params: {
|
||||
GAS_NAME1: this.form.GAS_NAME1,
|
||||
GAS_NAME2: this.form.GAS_NAME2,
|
||||
GAS_NAME3: this.form.GAS_NAME3,
|
||||
GAS_NAME4: this.form.GAS_NAME4,
|
||||
EW_RU_TASK_ID: this.EW_RU_TASK_ID,
|
||||
EW_RU_JOB_ID: this.EW_RU_JOB_ID,
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
</style>
|
|
@ -0,0 +1,259 @@
|
|||
<template>
|
||||
<view class="content" style="margin-left: 10px">
|
||||
<view class="card">
|
||||
<u-form labelPosition="left" :model="form" :rules="rules" ref="formRef" labelWidth="140px">
|
||||
<u-form-item label="申请单位" prop="APPLY_DEPARTMENT_NAME" borderBottom required>
|
||||
<u-input v-model="form.APPLY_DEPARTMENT_NAME" border="none" readonly/>
|
||||
</u-form-item>
|
||||
<u-form-item label="申请人" prop="APPLY_USER_NAME" borderBottom required>
|
||||
<u-input v-model="form.APPLY_USER_NAME" border="none" readonly/>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业分公司" prop="CORP_NAME" borderBottom required>
|
||||
<u-input v-model="form.CORP_NAME" border="none" readonly/>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业开始时间" prop="WORK_START_DATE" borderBottom required
|
||||
@click="fnDateTimePickerClick('WORK_START_DATE')">
|
||||
<u-input v-model="form.WORK_START_DATE" border="none" readonly/>
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业结束时间" prop="WORK_END_DATE" borderBottom required
|
||||
@click="fnDateTimePickerClick('WORK_END_DATE')">
|
||||
<u-input v-model="form.WORK_END_DATE" border="none" readonly/>
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="地点坐标" borderBottom required>
|
||||
<u-button type="primary" size="small" text="定位" :customStyle="{width:'100upx',margin:0}"
|
||||
@click="fnLocation"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="经度" prop="WORK_LONGITUDE" borderBottom required>
|
||||
<u-input v-model="form.WORK_LONGITUDE" border="none" readonly/>
|
||||
</u-form-item>
|
||||
<u-form-item label="纬度" prop="WORK_LATITUDE" borderBottom required>
|
||||
<u-input v-model="form.WORK_LATITUDE" border="none" readonly/>
|
||||
</u-form-item>
|
||||
<u-form-item label="涉及相关单位(部门)" prop="OTHER_DEPT" borderBottom required labelPosition="top" labelWidth="auto">
|
||||
<u-textarea v-model="form.OTHER_DEPT" border="none" autoHeight/>
|
||||
</u-form-item>
|
||||
<u-form-item label="断路原因" prop="WORK_REASON" borderBottom required labelPosition="top" labelWidth="auto">
|
||||
<u-textarea v-model="form.WORK_REASON" border="none" autoHeight/>
|
||||
</u-form-item>
|
||||
<u-form-item label="断路地段示意图相关说明" prop="WORK_CONTENT" borderBottom required labelPosition="top" labelWidth="auto">
|
||||
<u-textarea v-model="form.WORK_CONTENT" border="none" autoHeight/>
|
||||
</u-form-item>
|
||||
<u-form-item label="断路地段示意图" prop="CONTENT_IMG_PATH" borderBottom required labelPosition="top" labelWidth="auto">
|
||||
<u-upload
|
||||
class="mt-10"
|
||||
:fileList="form.CONTENT_IMG_PATH"
|
||||
@afterRead="fnAfterRead($event,'CONTENT_IMG_PATH')"
|
||||
@delete="fnDeletePic($event,'CONTENT_IMG_PATH')"
|
||||
multiple
|
||||
:maxCount="1"
|
||||
></u-upload>
|
||||
</u-form-item>
|
||||
<u-form-item label="关联的其他特殊作业及安全作业票编号" prop="SPECIAL_WORK" borderBottom required
|
||||
labelPosition="top" labelWidth="auto">
|
||||
<u-button type="primary" size="mini" text="选择其它"
|
||||
:customStyle="{position: 'absolute',top: '-46upx',right: '20upx',width: '150upx'}"
|
||||
@click="otherAssignmentsShow = true"/>
|
||||
<u-textarea v-model="form.SPECIAL_WORK" border="none" autoHeight maxlength="-1"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="风险辨识结果" prop="RISK_IDENTIFICATION" borderBottom required labelPosition="top"
|
||||
labelWidth="auto">
|
||||
<u-button type="primary" size="mini" text="选择其它"
|
||||
:customStyle="{position: 'absolute',top: '-46upx',right: '20upx',width: '150upx'}"
|
||||
@click="otherIdentificationShow = true"/>
|
||||
<u-textarea v-model="form.RISK_IDENTIFICATION" border="none" autoHeight maxlength="-1"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="申请人签字" prop="SIGN" borderBottom required labelPosition="top" labelWidth="auto">
|
||||
<view style="flex: 1">
|
||||
<view>
|
||||
<u-button type="primary" size="mini" text="签字"
|
||||
:customStyle="{position: 'absolute',top: '-46upx',right: '20upx',width: '100upx'}"
|
||||
@click="signVisible = true"/>
|
||||
</view>
|
||||
<view v-if="form.SIGN">
|
||||
<u-image width="400rpx" height="200rpx" :src="form.SIGN"/>
|
||||
</view>
|
||||
</view>
|
||||
</u-form-item>
|
||||
</u-form>
|
||||
<view class="mt-10">
|
||||
<u-button type="primary" text="下一步" @click="$u.debounce(fnSubmit, 1000,true)"/>
|
||||
</view>
|
||||
</view>
|
||||
<u-datetime-picker :show="dateTimePicker.show" v-model="dateTimePicker.value" :mode="dateTimePicker.mode"
|
||||
:minDate="dateTimePicker.min" :key="dateTimePicker.type" @confirm="fnDateTimePickerConfirm"
|
||||
@cancel="fnDateTimePickerCancel"/>
|
||||
<other-select :visible.sync="otherAssignmentsShow" v-model="form.SPECIAL_WORK" type="assignments"/>
|
||||
<other-select :visible.sync="otherIdentificationShow" v-model="form.RISK_IDENTIFICATION" type="identification"/>
|
||||
<sign :signShow.sync="signVisible" @confirm="fnSign"/>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import OtherSelect from '@/components/other-select/index.vue';
|
||||
import Sign from '@/components/sign/sign.vue'
|
||||
import {getData, setSubmitForm} from "@/utils/submitHomeworkProcess";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
OtherSelect,
|
||||
Sign
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
type: '',
|
||||
formItems: [
|
||||
{name: '申请单位', key_name: 'APPLY_DEPARTMENT_NAME', key_id: 'APPLY_DEPARTMENT_ID', type: 0},
|
||||
{name: '申请人', key_name: 'APPLY_USER_NAME', key_id: 'APPLY_USER_ID', type: 0},
|
||||
{name: '作业分公司', key_name: 'CORP_NAME', key_id: 'CORP_ID', type: 0},
|
||||
{name: '作业开始时间', key_name: 'WORK_START_DATE', type: 0},
|
||||
{name: '作业结束时间', key_name: 'WORK_END_DATE', type: 0},
|
||||
{name: '经度', key_name: 'WORK_LONGITUDE', type: 0},
|
||||
{name: '纬度', key_name: 'WORK_LATITUDE', type: 0},
|
||||
{name: '涉及相关单位(部门)', key_name: 'OTHER_DEPT', type: 0},
|
||||
{name: '断路原因', key_name: 'WORK_REASON', type: 0},
|
||||
{name: '断路地段示意图相关说明', key_name: 'WORK_CONTENT', type: 0},
|
||||
{name: '断路地段示意图', key_name: 'CONTENT_IMG_PATH', type: 1},
|
||||
{name: '关联的其他特殊作业及安全作业票编号', key_name: 'SPECIAL_WORK', type: 0},
|
||||
{name: '风险辨识结果', key_name: 'RISK_IDENTIFICATION', type: 0},
|
||||
{name: '申请人签字', key_name: 'SIGN', type: 5},
|
||||
],
|
||||
form: {
|
||||
APPLY_DEPARTMENT_ID: this.$store.getters.getUserInfo.DEPARTMENT_ID,
|
||||
APPLY_DEPARTMENT_NAME: this.$store.getters.getUserInfo.DEPARTMENT_NAME,
|
||||
APPLY_USER_ID: this.$store.getters.getUserInfo.USER_ID,
|
||||
APPLY_USER_NAME: this.$store.getters.getUserInfo.NAME,
|
||||
CORP_ID: '',
|
||||
CORP_NAME: '',
|
||||
WORK_START_DATE: '',
|
||||
WORK_END_DATE: '',
|
||||
WORK_LONGITUDE: '1',
|
||||
WORK_LATITUDE: '2',
|
||||
OTHER_DEPT: '',
|
||||
WORK_REASON: '',
|
||||
WORK_CONTENT: '',
|
||||
CONTENT_IMG_PATH: [],
|
||||
SPECIAL_WORK: '',
|
||||
RISK_IDENTIFICATION: '',
|
||||
SIGN: '',
|
||||
},
|
||||
rules: {
|
||||
APPLY_DEPARTMENT_ID: [{type: 'string', required: true, message: '请选择申请单位', trigger: ['blur', 'change']}],
|
||||
APPLY_USER_NAME: [{type: 'string', required: true, message: '请选择申请人', trigger: ['blur', 'change']}],
|
||||
CORP_NAME: [{type: 'string', required: true, message: '请选择作业分公司', trigger: ['blur', 'change']}],
|
||||
WORK_START_DATE: [{type: 'string', required: true, message: '请选择作业开始时间', trigger: ['blur', 'change']}],
|
||||
WORK_END_DATE: [{type: 'string', required: true, message: '请选择作业结束时间', trigger: ['blur', 'change']}],
|
||||
WORK_LONGITUDE: [{type: 'string', required: true, message: '请输入经度', trigger: ['blur', 'change']}],
|
||||
WORK_LATITUDE: [{type: 'string', required: true, message: '请输入纬度', trigger: ['blur', 'change']}],
|
||||
OTHER_DEPT: [{type: 'string', required: true, message: '请输入涉及相关单位(部门)', trigger: ['blur', 'change']}],
|
||||
WORK_REASON: [{type: 'string', required: true, message: '请输入断路原因', trigger: ['blur', 'change']}],
|
||||
WORK_CONTENT: [{type: 'string', required: true, message: '请输入断路地段示意图相关说明', trigger: ['blur', 'change']}],
|
||||
CONTENT_IMG_PATH: [{
|
||||
type: 'array',
|
||||
required: true,
|
||||
message: '请上传断路地段示意图',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
SPECIAL_WORK: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请输入关联的其他特殊作业及安全作业票编号',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
RISK_IDENTIFICATION: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请输入风险辨识结果',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
SIGN: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请签字',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
},
|
||||
dateTimePicker: {
|
||||
show: false,
|
||||
value: Number(new Date()),
|
||||
min: new Date().getTime(),
|
||||
mode: 'datetime',
|
||||
type: 'datetime-picker'
|
||||
},
|
||||
otherAssignmentsShow: false,
|
||||
otherIdentificationShow: false,
|
||||
signVisible: false,
|
||||
}
|
||||
},
|
||||
async onLoad(options) {
|
||||
this.form.CORP_ID = options.CORPINFO_ID
|
||||
this.form.CORP_NAME = options.CORP_NAME
|
||||
this.type = options.type
|
||||
if (options.taskId) {
|
||||
this.form = await getData(options.taskId)
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
fnDateTimePickerClick(event) {
|
||||
this.dateTimePicker.type = event
|
||||
this.dateTimePicker.value = Number(new Date(this.form[event])) || Number(new Date())
|
||||
this.dateTimePicker.show = true
|
||||
},
|
||||
fnDateTimePickerConfirm(event) {
|
||||
this.form[this.dateTimePicker.type] = uni.$u.timeFormat(event.value, 'yyyy-mm-dd hh:MM')
|
||||
this.fnDateTimePickerCancel()
|
||||
},
|
||||
fnDateTimePickerCancel() {
|
||||
this.dateTimePicker.show = false
|
||||
},
|
||||
fnLocation() {
|
||||
uni.navigateTo({
|
||||
url: '/pages/map/index',
|
||||
events: {
|
||||
acceptLocationData: (event) => {
|
||||
this.form.WORK_LONGITUDE = event.data.longitue;
|
||||
this.form.WORK_LATITUDE = event.data.latitude;
|
||||
}
|
||||
},
|
||||
})
|
||||
},
|
||||
fnAfterRead(event, key) {
|
||||
this.form[key].push(...event.file)
|
||||
},
|
||||
fnDeletePic(event, key) {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '确定删除该图片吗?',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
this.form[key].splice(event.index, 1)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
fnSign(event) {
|
||||
this.form.SIGN = event.filePath
|
||||
},
|
||||
async fnSubmit() {
|
||||
try {
|
||||
await this.$refs.formRef.validate()
|
||||
try {
|
||||
await setSubmitForm({
|
||||
form: this.form,
|
||||
formItems: this.formItems,
|
||||
TYPE: this.type,
|
||||
CORP_ID: this.form.CORP_ID
|
||||
})
|
||||
} catch {
|
||||
}
|
||||
} catch {
|
||||
uni.$u.toast('请补全必填项')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
</style>
|
|
@ -0,0 +1,273 @@
|
|||
<template>
|
||||
<view class="content" style="margin-left: 10px">
|
||||
<view class="card">
|
||||
<u-form labelPosition="left" :model="form" :rules="rules" ref="formRef" labelWidth="140px">
|
||||
<u-form-item label="申请单位" prop="APPLY_DEPARTMENT_NAME" borderBottom required>
|
||||
<u-input v-model="form.APPLY_DEPARTMENT_NAME" border="none" readonly/>
|
||||
</u-form-item>
|
||||
<u-form-item label="申请人" prop="APPLY_USER_NAME" borderBottom required>
|
||||
<u-input v-model="form.APPLY_USER_NAME" border="none" readonly/>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业分公司" prop="CORP_NAME" borderBottom required>
|
||||
<u-input v-model="form.CORP_NAME" border="none" readonly/>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业实施开始时间" prop="WORK_START_DATE" borderBottom required
|
||||
@click="fnDateTimePickerClick('WORK_START_DATE')">
|
||||
<u-input v-model="form.WORK_START_DATE" border="none" readonly/>
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业实施结束时间" prop="WORK_END_DATE" borderBottom required
|
||||
@click="fnDateTimePickerClick('WORK_END_DATE')">
|
||||
<u-input v-model="form.WORK_END_DATE" border="none" readonly/>
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="地点坐标" borderBottom required>
|
||||
<u-button type="primary" size="small" text="定位" :customStyle="{width:'100upx',margin:0}"
|
||||
@click="fnLocation"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="经度" prop="WORK_LONGITUDE" borderBottom required>
|
||||
<u-input v-model="form.WORK_LONGITUDE" border="none" readonly/>
|
||||
</u-form-item>
|
||||
<u-form-item label="纬度" prop="WORK_LATITUDE" borderBottom required>
|
||||
<u-input v-model="form.WORK_LATITUDE" border="none" readonly/>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业地点" prop="WORK_PLACE" borderBottom required>
|
||||
<u-input v-model="form.WORK_PLACE" border="none"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业内容" prop="WORK_CONTENT" borderBottom required labelPosition="top" labelWidth="auto">
|
||||
<u-textarea v-model="form.WORK_CONTENT" border="none" autoHeight/>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业人" prop="WORK_USER" borderBottom required>
|
||||
<u-input v-model="form.WORK_USER" border="none"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="电工证号" prop="CARD_NO" borderBottom required>
|
||||
<u-input v-model="form.CARD_NO" border="none"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="电源接入点及许可用电功率" prop="ALLOW_POWER" borderBottom required>
|
||||
<u-input v-model="form.ALLOW_POWER" border="none"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="用电设备名称及额定功率" prop="RATED_POWER" borderBottom required>
|
||||
<u-input v-model="form.RATED_POWER" border="none"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="工作电压" prop="WORK_VOLTAGE" borderBottom required>
|
||||
<u-input v-model="form.WORK_VOLTAGE" border="none"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="用电人" prop="ELECTRICITY_USER" borderBottom required>
|
||||
<u-input v-model="form.ELECTRICITY_USER" border="none"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="负责人电工号" prop="LEADER_CARD_NO" borderBottom required>
|
||||
<u-input v-model="form.LEADER_CARD_NO" border="none"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="是否进行气体分析" prop="ISANALYZE" borderBottom required>
|
||||
<u-radio-group v-model="form.ISANALYZE" :customStyle="{'justify-content': 'flex-end'}" @change="fnIsAnalyzeChange">
|
||||
<u-radio label="是" name="1"/>
|
||||
<u-radio :customStyle="{marginLeft: '8px'}" label="否" name="0"/>
|
||||
</u-radio-group>
|
||||
</u-form-item>
|
||||
<u-form-item label="关联的其他特殊作业及安全作业票编号" prop="SPECIAL_WORK" borderBottom required
|
||||
labelPosition="top" labelWidth="auto">
|
||||
<u-button type="primary" size="mini" text="选择其它"
|
||||
:customStyle="{position: 'absolute',top: '-46upx',right: '20upx',width: '150upx'}"
|
||||
@click="otherAssignmentsShow = true"/>
|
||||
<u-textarea v-model="form.SPECIAL_WORK" border="none" autoHeight maxlength="-1"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="风险辨识结果" prop="RISK_IDENTIFICATION" borderBottom required labelPosition="top"
|
||||
labelWidth="auto">
|
||||
<u-button type="primary" size="mini" text="选择其它"
|
||||
:customStyle="{position: 'absolute',top: '-46upx',right: '20upx',width: '150upx'}"
|
||||
@click="otherIdentificationShow = true"/>
|
||||
<u-textarea v-model="form.RISK_IDENTIFICATION" border="none" autoHeight maxlength="-1"/>
|
||||
</u-form-item>
|
||||
</u-form>
|
||||
<view class="mt-10">
|
||||
<u-button type="primary" text="下一步" @click="$u.debounce(fnSubmit, 1000,true)"/>
|
||||
</view>
|
||||
</view>
|
||||
<u-datetime-picker :show="dateTimePicker.show" v-model="dateTimePicker.value" :mode="dateTimePicker.mode"
|
||||
:minDate="dateTimePicker.min" :key="dateTimePicker.type" @confirm="fnDateTimePickerConfirm"
|
||||
@cancel="fnDateTimePickerCancel"/>
|
||||
<other-select :visible.sync="otherAssignmentsShow" v-model="form.SPECIAL_WORK" type="assignments"/>
|
||||
<other-select :visible.sync="otherIdentificationShow" v-model="form.RISK_IDENTIFICATION" type="identification"/>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import OtherSelect from '@/components/other-select/index.vue';
|
||||
import {getData, setSubmitForm} from "@/utils/submitHomeworkProcess";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
OtherSelect,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
type: '',
|
||||
formItems: [
|
||||
{name: '申请单位', key_name: 'APPLY_DEPARTMENT_NAME', key_id: 'APPLY_DEPARTMENT_ID', type: 0},
|
||||
{name: '申请人', key_name: 'APPLY_USER_NAME', key_id: 'APPLY_USER_ID', type: 0},
|
||||
{name: '作业分公司', key_name: 'CORP_NAME', key_id: 'CORP_ID', type: 0},
|
||||
{name: '作业实施开始时间', key_name: 'WORK_START_DATE', type: 0},
|
||||
{name: '作业实施结束时间', key_name: 'WORK_END_DATE', type: 0},
|
||||
{name: '经度', key_name: 'WORK_LONGITUDE', type: 0},
|
||||
{name: '纬度', key_name: 'WORK_LATITUDE', type: 0},
|
||||
{name: '作业地点', key_name: 'WORK_PLACE', type: 0},
|
||||
{name: '作业内容', key_name: 'WORK_CONTENT', type: 0},
|
||||
{name: '作业人', key_name: 'WORK_USER', type: 0},
|
||||
{name: '电工证号', key_name: 'CARD_NO', type: 0},
|
||||
{name: '电源接入点及许可用电功率', key_name: 'ALLOW_POWER', type: 0},
|
||||
{name: '用电设备名称及额定功率', key_name: 'RATED_POWER', type: 0},
|
||||
{name: '工作电压', key_name: 'WORK_VOLTAGE', type: 0},
|
||||
{name: '用电人', key_name: 'ELECTRICITY_USER', type: 0},
|
||||
{name: '负责人电工号', key_name: 'LEADER_CARD_NO', type: 0},
|
||||
{name: '是否进行气体分析', key_name: 'ISANALYZE_NAME',key_id: 'ISANALYZE', type: 0},
|
||||
{name: '关联的其他特殊作业及安全作业票编号', key_name: 'SPECIAL_WORK', type: 0},
|
||||
{name: '风险辨识结果', key_name: 'RISK_IDENTIFICATION', type: 0},
|
||||
],
|
||||
form: {
|
||||
APPLY_DEPARTMENT_ID: this.$store.getters.getUserInfo.DEPARTMENT_ID,
|
||||
APPLY_DEPARTMENT_NAME: this.$store.getters.getUserInfo.DEPARTMENT_NAME,
|
||||
APPLY_USER_ID: this.$store.getters.getUserInfo.USER_ID,
|
||||
APPLY_USER_NAME: this.$store.getters.getUserInfo.NAME,
|
||||
CORP_ID: '',
|
||||
CORP_NAME: '',
|
||||
WORK_START_DATE: '',
|
||||
WORK_END_DATE: '',
|
||||
WORK_LONGITUDE: '1',
|
||||
WORK_LATITUDE: '2',
|
||||
WORK_PLACE: '',
|
||||
WORK_CONTENT: '',
|
||||
WORK_USER: '',
|
||||
CARD_NO: '',
|
||||
ALLOW_POWER: '',
|
||||
RATED_POWER: '',
|
||||
WORK_VOLTAGE: '',
|
||||
ELECTRICITY_USER: '',
|
||||
LEADER_CARD_NO: '',
|
||||
ISANALYZE: '',
|
||||
ISANALYZE_NAME: '',
|
||||
SPECIAL_WORK: '',
|
||||
RISK_IDENTIFICATION: '',
|
||||
},
|
||||
rules: {
|
||||
APPLY_DEPARTMENT_ID: [{type: 'string', required: true, message: '请选择申请单位', trigger: ['blur', 'change']}],
|
||||
APPLY_USER_NAME: [{type: 'string', required: true, message: '请选择申请人', trigger: ['blur', 'change']}],
|
||||
CORP_NAME: [{type: 'string', required: true, message: '请选择作业分公司', trigger: ['blur', 'change']}],
|
||||
WORK_START_DATE: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请选择作业实施开始时间',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
WORK_END_DATE: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请选择作业实施结束时间',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
WORK_LONGITUDE: [{type: 'string', required: true, message: '请输入经度', trigger: ['blur', 'change']}],
|
||||
WORK_LATITUDE: [{type: 'string', required: true, message: '请输入纬度', trigger: ['blur', 'change']}],
|
||||
WORK_PLACE: [{type: 'string', required: true, message: '请输入作业地点', trigger: ['blur', 'change']}],
|
||||
WORK_CONTENT: [{type: 'string', required: true, message: '请输入作业内容', trigger: ['blur', 'change']}],
|
||||
WORK_USER: [{type: 'string', required: true, message: '请输入作业人', trigger: ['blur', 'change']}],
|
||||
CARD_NO: [{type: 'string', required: true, message: '请输入电工证号', trigger: ['blur', 'change']}],
|
||||
ALLOW_POWER: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请输入电源接入点及许可用电功率',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
RATED_POWER: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请输入用电设备名称及额定功率',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
WORK_VOLTAGE: [{type: 'string', required: true, message: '请输入工作电压', trigger: ['blur', 'change']}],
|
||||
ELECTRICITY_USER: [{type: 'string', required: true, message: '请输入用电人', trigger: ['blur', 'change']}],
|
||||
LEADER_CARD_NO: [{type: 'string', required: true, message: '请输入负责人电工号', trigger: ['blur', 'change']}],
|
||||
ISANALYZE: [{type: 'string', required: true, message: '请选择是否进行气体分析', trigger: ['blur', 'change']}],
|
||||
SPECIAL_WORK: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请输入关联的其他特殊作业及安全作业票编号',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
RISK_IDENTIFICATION: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请输入风险辨识结果',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
},
|
||||
dateTimePicker: {
|
||||
show: false,
|
||||
value: Number(new Date()),
|
||||
min: new Date().getTime(),
|
||||
mode: 'datetime',
|
||||
type: 'datetime-picker'
|
||||
},
|
||||
otherAssignmentsShow: false,
|
||||
otherIdentificationShow: false,
|
||||
}
|
||||
},
|
||||
async onLoad(options) {
|
||||
this.form.CORP_ID = options.CORPINFO_ID
|
||||
this.form.CORP_NAME = options.CORP_NAME
|
||||
this.type = options.type
|
||||
if (options.taskId) {
|
||||
this.form = await getData(options.taskId)
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
fnDateTimePickerClick(event) {
|
||||
this.dateTimePicker.type = event
|
||||
this.dateTimePicker.value = Number(new Date(this.form[event])) || Number(new Date())
|
||||
this.dateTimePicker.show = true
|
||||
},
|
||||
fnDateTimePickerConfirm(event) {
|
||||
this.form[this.dateTimePicker.type] = uni.$u.timeFormat(event.value, 'yyyy-mm-dd hh:MM')
|
||||
this.fnDateTimePickerCancel()
|
||||
},
|
||||
fnDateTimePickerCancel() {
|
||||
this.dateTimePicker.show = false
|
||||
},
|
||||
fnLocation() {
|
||||
uni.navigateTo({
|
||||
url: '/pages/map/index',
|
||||
events: {
|
||||
acceptLocationData: (event) => {
|
||||
this.form.WORK_LONGITUDE = event.data.longitue;
|
||||
this.form.WORK_LATITUDE = event.data.latitude;
|
||||
}
|
||||
},
|
||||
})
|
||||
},
|
||||
fnIsAnalyzeChange(event){
|
||||
if(event === '1'){
|
||||
this.form.ISANALYZE_NAME = '是'
|
||||
} else{
|
||||
this.form.ISANALYZE_NAME = '否'
|
||||
}
|
||||
},
|
||||
async fnSubmit() {
|
||||
try {
|
||||
await this.$refs.formRef.validate()
|
||||
try {
|
||||
await setSubmitForm({
|
||||
form: this.form,
|
||||
formItems: this.formItems,
|
||||
TYPE: this.type,
|
||||
CORP_ID: this.form.CORP_ID
|
||||
})
|
||||
} catch {
|
||||
}
|
||||
} catch {
|
||||
uni.$u.toast('请补全必填项')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
</style>
|
|
@ -0,0 +1,247 @@
|
|||
<template>
|
||||
<view class="content" style="margin-left: 10px">
|
||||
<view class="card">
|
||||
<u-form labelPosition="left" :model="form" :rules="rules" ref="formRef" labelWidth="140px">
|
||||
<u-form-item label="申请单位" prop="APPLY_DEPARTMENT_NAME" borderBottom required>
|
||||
<u-input v-model="form.APPLY_DEPARTMENT_NAME" border="none" readonly />
|
||||
</u-form-item>
|
||||
<u-form-item label="申请人" prop="APPLY_USER_NAME" borderBottom required>
|
||||
<u-input v-model="form.APPLY_USER_NAME" border="none" readonly />
|
||||
</u-form-item>
|
||||
<u-form-item label="作业分公司" prop="CORP_NAME" borderBottom required>
|
||||
<u-input v-model="form.CORP_NAME" border="none" readonly />
|
||||
</u-form-item>
|
||||
<u-form-item label="作业地点" prop="WORK_PLACE" borderBottom required>
|
||||
<u-input v-model="form.WORK_PLACE" border="none" />
|
||||
</u-form-item>
|
||||
<u-form-item label="作业人" prop="PROJECT_MANAGER" borderBottom required>
|
||||
<u-input v-model="form.PROJECT_MANAGER" border="none" />
|
||||
</u-form-item>
|
||||
<u-form-item label="作业高度(米)" prop="WORK_HIGH" borderBottom required>
|
||||
<u-input v-model="form.WORK_HIGH" border="none" type="number" />
|
||||
</u-form-item>
|
||||
<u-form-item label="高处作业级别" prop="WORK_LEVEL_NAME" borderBottom required
|
||||
@click="fnSingleChoiceClick('WORK_LEVEL_NAME')">
|
||||
<u-input v-model="form.WORK_LEVEL_NAME" border="none" readonly />
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业内容" prop="WORK_CONTENT" borderBottom required labelPosition="top" labelWidth="auto">
|
||||
<u-textarea v-model="form.WORK_CONTENT" border="none" autoHeight maxlength="-1" />
|
||||
</u-form-item>
|
||||
<u-form-item label="作业实施开始时间" prop="WORK_START_DATE" borderBottom required
|
||||
@click="fnDateTimePickerClick('WORK_START_DATE')">
|
||||
<u-input v-model="form.WORK_START_DATE" border="none" readonly />
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业实施结束时间" prop="WORK_END_DATE" borderBottom required
|
||||
@click="fnDateTimePickerClick('WORK_END_DATE')">
|
||||
<u-input v-model="form.WORK_END_DATE" border="none" readonly />
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="地点坐标" borderBottom required>
|
||||
<u-button type="primary" size="small" text="定位" :customStyle="{ width: '100upx', margin: 0 }"
|
||||
@click="fnLocation" />
|
||||
</u-form-item>
|
||||
<u-form-item label="经度" prop="WORK_LONGITUDE" borderBottom required>
|
||||
<u-input v-model="form.WORK_LONGITUDE" border="none" readonly />
|
||||
</u-form-item>
|
||||
<u-form-item label="纬度" prop="WORK_LATITUDE" borderBottom required>
|
||||
<u-input v-model="form.WORK_LATITUDE" border="none" readonly />
|
||||
</u-form-item>
|
||||
<u-form-item label="关联的其他特殊作业及安全作业票编号" prop="SPECIAL_WORK" borderBottom required labelPosition="top"
|
||||
labelWidth="auto">
|
||||
<u-button type="primary" size="mini" text="选择其它"
|
||||
:customStyle="{ position: 'absolute', top: '-46upx', right: '20upx', width: '150upx' }"
|
||||
@click="otherAssignmentsShow = true" />
|
||||
<u-textarea v-model="form.SPECIAL_WORK" border="none" autoHeight maxlength="-1" />
|
||||
</u-form-item>
|
||||
<u-form-item label="风险辨识结果" prop="RISK_IDENTIFICATION" borderBottom required labelPosition="top"
|
||||
labelWidth="auto">
|
||||
<u-button type="primary" size="mini" text="选择其它"
|
||||
:customStyle="{ position: 'absolute', top: '-46upx', right: '20upx', width: '150upx' }"
|
||||
@click="otherIdentificationShow = true" />
|
||||
<u-textarea v-model="form.RISK_IDENTIFICATION" border="none" autoHeight maxlength="-1" />
|
||||
</u-form-item>
|
||||
</u-form>
|
||||
<view class="mt-10">
|
||||
<u-button type="primary" text="下一步" @click="$u.debounce(fnSubmit, 1000, true)" />
|
||||
</view>
|
||||
</view>
|
||||
<u-picker :show="picker.show" :columns="picker.columns" :keyName="picker.key" :key="picker.type" :defaultIndex="picker.defaultIndex"
|
||||
@confirm="fnSingleChoiceConfirm" @cancel="fnSingleChoiceCancel" />
|
||||
<u-datetime-picker :show="dateTimePicker.show" v-model="dateTimePicker.value" :mode="dateTimePicker.mode"
|
||||
:minDate="dateTimePicker.min" :key="dateTimePicker.type" @confirm="fnDateTimePickerConfirm"
|
||||
@cancel="fnDateTimePickerCancel" />
|
||||
<other-select :visible.sync="otherAssignmentsShow" v-model="form.SPECIAL_WORK" type="assignments" />
|
||||
<other-select :visible.sync="otherIdentificationShow" v-model="form.RISK_IDENTIFICATION" type="identification" />
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import OtherSelect from '@/components/other-select/index.vue';
|
||||
import Sign from '@/components/sign/sign.vue'
|
||||
import {getData, setSubmitForm} from "@/utils/submitHomeworkProcess";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
OtherSelect,
|
||||
Sign
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
type: '',
|
||||
formItems: [
|
||||
{ name: '申请单位', key_name: 'APPLY_DEPARTMENT_NAME', key_id: 'APPLY_DEPARTMENT_ID', type: 0 },
|
||||
{ name: '申请人', key_name: 'APPLY_USER_NAME', key_id: 'APPLY_USER_ID', type: 0 },
|
||||
{ name: '作业分公司', key_name: 'CORP_NAME', key_id: 'CORP_ID', type: 0 },
|
||||
{ name: '作业地点', key_name: 'WORK_PLACE', type: 0 },
|
||||
{ name: '作业人', key_name: 'PROJECT_MANAGER', type: 0 },
|
||||
{ name: '作业高度(米)', key_name: 'WORK_HIGH', type: 0 },
|
||||
{ name: '高处作业级别', key_name: 'WORK_LEVEL_NAME', key_id: 'WORK_LEVEL', type: 0 },
|
||||
{ name: '作业内容', key_name: 'WORK_CONTENT', type: 0 },
|
||||
{ name: '作业实施开始时间', key_name: 'WORK_START_DATE', type: 0 },
|
||||
{ name: '作业实施结束时间', key_name: 'WORK_END_DATE', type: 0 },
|
||||
{ name: '经度', key_name: 'WORK_LONGITUDE', type: 0 },
|
||||
{ name: '纬度', key_name: 'WORK_LATITUDE', type: 0 },
|
||||
{ name: '关联的其他特殊作业及安全作业票编号', key_name: 'SPECIAL_WORK', type: 0 },
|
||||
{ name: '风险辨识结果', key_name: 'RISK_IDENTIFICATION', type: 0 },
|
||||
],
|
||||
form: {
|
||||
APPLY_DEPARTMENT_ID: this.$store.getters.getUserInfo.DEPARTMENT_ID,
|
||||
APPLY_DEPARTMENT_NAME: this.$store.getters.getUserInfo.DEPARTMENT_NAME,
|
||||
APPLY_USER_ID: this.$store.getters.getUserInfo.USER_ID,
|
||||
APPLY_USER_NAME: this.$store.getters.getUserInfo.NAME,
|
||||
CORP_ID: '',
|
||||
CORP_NAME: '',
|
||||
WORK_PLACE: '',
|
||||
PROJECT_MANAGER: '',
|
||||
WORK_HIGH: '',
|
||||
WORK_LEVEL_NAME: '',
|
||||
WORK_LEVEL: '',
|
||||
WORK_CONTENT: '',
|
||||
WORK_START_DATE: '',
|
||||
WORK_END_DATE: '',
|
||||
WORK_LONGITUDE: '1',
|
||||
WORK_LATITUDE: '2',
|
||||
SPECIAL_WORK: '',
|
||||
RISK_IDENTIFICATION: '',
|
||||
},
|
||||
rules: {
|
||||
APPLY_DEPARTMENT_ID: [{ type: 'string', required: true, message: '请选择申请单位', trigger: ['blur', 'change'] }],
|
||||
APPLY_USER_NAME: [{ type: 'string', required: true, message: '请选择申请人', trigger: ['blur', 'change'] }],
|
||||
CORP_NAME: [{ type: 'string', required: true, message: '请选择作业分公司', trigger: ['blur', 'change'] }],
|
||||
WORK_PLACE: [{ type: 'string', required: true, message: '请输入作业地点', trigger: ['blur', 'change'] }],
|
||||
PROJECT_MANAGER: [{ type: 'string', required: true, message: '请输入作业人', trigger: ['blur', 'change'] }],
|
||||
WORK_HIGH: [{ type: 'string', required: true, message: '请输入作业高度(米)', trigger: ['blur', 'change'] }],
|
||||
WORK_LEVEL_NAME: [{ type: 'string', required: true, message: '请选择高处作业级别', trigger: ['blur', 'change'] }],
|
||||
WORK_CONTENT: [{ type: 'string', required: true, message: '请输入作业内容', trigger: ['blur', 'change'] }],
|
||||
WORK_START_DATE: [{ type: 'string', required: true, message: '请选择作业实施开始时间', trigger: ['blur', 'change'] }],
|
||||
WORK_END_DATE: [{ type: 'string', required: true, message: '请选择作业实施结束时间', trigger: ['blur', 'change'] }],
|
||||
WORK_LONGITUDE: [{ type: 'string', required: true, message: '请输入经度', trigger: ['blur', 'change'] }],
|
||||
WORK_LATITUDE: [{ type: 'string', required: true, message: '请输入纬度', trigger: ['blur', 'change'] }],
|
||||
SPECIAL_WORK: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请输入关联的其他特殊作业及安全作业票编号',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
RISK_IDENTIFICATION: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请输入风险辨识结果',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
},
|
||||
picker: {
|
||||
show: false,
|
||||
columns: [],
|
||||
key: 'NAME',
|
||||
type: 'picker',
|
||||
defaultIndex: []
|
||||
},
|
||||
dateTimePicker: {
|
||||
show: false,
|
||||
value: Number(new Date()),
|
||||
min: new Date().getTime(),
|
||||
mode: 'datetime',
|
||||
type: 'datetime-picker'
|
||||
},
|
||||
otherAssignmentsShow: false,
|
||||
otherIdentificationShow: false,
|
||||
}
|
||||
},
|
||||
async onLoad(options) {
|
||||
this.form.CORP_ID = options.CORPINFO_ID
|
||||
this.form.CORP_NAME = options.CORP_NAME
|
||||
this.type = options.type
|
||||
if (options.taskId) {
|
||||
this.form = await getData(options.taskId)
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
fnSingleChoiceClick(event) {
|
||||
this.picker.type = event
|
||||
if (event === 'WORK_LEVEL_NAME') {
|
||||
this.picker.columns = [[
|
||||
{ NAME: 'I级高处作业', ID: '0' },
|
||||
{ NAME: 'II级高处作业', ID: '1' },
|
||||
{ NAME: 'III级高处作业', ID: '2' },
|
||||
{ NAME: 'IV级高处作业', ID: '3' },
|
||||
]];
|
||||
}
|
||||
this.picker.show = true
|
||||
},
|
||||
fnSingleChoiceConfirm(event) {
|
||||
if (this.picker.type === 'WORK_LEVEL_NAME') {
|
||||
this.form.WORK_LEVEL = event.value[0].ID
|
||||
this.form.WORK_LEVEL_NAME = event.value[0].NAME
|
||||
}
|
||||
this.fnSingleChoiceCancel()
|
||||
},
|
||||
fnSingleChoiceCancel() {
|
||||
this.picker.show = false
|
||||
},
|
||||
fnDateTimePickerClick(event) {
|
||||
this.dateTimePicker.type = event
|
||||
this.dateTimePicker.value = Number(new Date(this.form[event])) || Number(new Date())
|
||||
this.dateTimePicker.show = true
|
||||
},
|
||||
fnDateTimePickerConfirm(event) {
|
||||
this.form[this.dateTimePicker.type] = uni.$u.timeFormat(event.value, 'yyyy-mm-dd hh:MM')
|
||||
this.fnDateTimePickerCancel()
|
||||
},
|
||||
fnDateTimePickerCancel() {
|
||||
this.dateTimePicker.show = false
|
||||
},
|
||||
fnLocation() {
|
||||
uni.navigateTo({
|
||||
url: '/pages/map/index',
|
||||
events: {
|
||||
acceptLocationData: (event) => {
|
||||
this.form.WORK_LONGITUDE = event.data.longitue;
|
||||
this.form.WORK_LATITUDE = event.data.latitude;
|
||||
}
|
||||
},
|
||||
})
|
||||
},
|
||||
async fnSubmit() {
|
||||
try {
|
||||
await this.$refs.formRef.validate()
|
||||
try {
|
||||
await setSubmitForm({
|
||||
form: this.form,
|
||||
formItems: this.formItems,
|
||||
TYPE: this.type,
|
||||
CORP_ID: this.form.CORP_ID
|
||||
})
|
||||
} catch {
|
||||
}
|
||||
} catch {
|
||||
uni.$u.toast('请补全必填项')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,60 @@
|
|||
<template>
|
||||
<view class="container">
|
||||
<view class="card">
|
||||
<u-cell-group>
|
||||
<view v-for="(item, index) in list" :key="index">
|
||||
<u-cell :title="item.JOB_TYPE_DESCRIBE">
|
||||
<template #label>
|
||||
<view class="mt-10">
|
||||
<view>部门:{{ item.JOB_DEPARTMENT_NAME }}</view>
|
||||
<view>人员:{{ item.JOB_NAME }}</view>
|
||||
<view>
|
||||
审批结果:{{ item.PASS_FLAG === 0 ? "不通过" : "通过" }}
|
||||
</view>
|
||||
<view v-if="item.SIGN_PICTURE">
|
||||
<u-image
|
||||
width="400rpx"
|
||||
height="200rpx"
|
||||
:src="$filePath + item.SIGN_PICTURE"
|
||||
mode="widthFix"
|
||||
/>
|
||||
<view>审批意见:{{ item.APPROVAL_OPINIONS }}</view>
|
||||
<view>时间:{{ item.CREATE_TIME }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
</u-cell>
|
||||
</view>
|
||||
</u-cell-group>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getHistoricalApprovalRecords} from "@/api";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
list: [],
|
||||
EW_RU_TASK_ID: '',
|
||||
EW_RU_JOB_ID: ''
|
||||
}
|
||||
},
|
||||
onLoad(query) {
|
||||
this.EW_RU_TASK_ID = query.taskId;
|
||||
this.EW_RU_JOB_ID = query.EW_RU_JOB_ID;
|
||||
this.fnGetData();
|
||||
},
|
||||
methods: {
|
||||
async fnGetData() {
|
||||
let resData = await getHistoricalApprovalRecords({
|
||||
EW_RU_TASK_ID: this.EW_RU_TASK_ID,
|
||||
EW_RU_JOB_ID: this.EW_RU_JOB_ID,
|
||||
});
|
||||
this.list = resData.list;
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,266 @@
|
|||
<template>
|
||||
<view class="content" style="margin-left: 10px">
|
||||
<view class="card">
|
||||
<u-form labelPosition="left" :model="form" :rules="rules" ref="formRef" labelWidth="140px">
|
||||
<u-form-item label="申请单位" prop="APPLY_DEPARTMENT_NAME" borderBottom required>
|
||||
<u-input v-model="form.APPLY_DEPARTMENT_NAME" border="none" readonly />
|
||||
</u-form-item>
|
||||
<u-form-item label="申请人" prop="APPLY_USER_NAME" borderBottom required>
|
||||
<u-input v-model="form.APPLY_USER_NAME" border="none" readonly />
|
||||
</u-form-item>
|
||||
<u-form-item label="作业分公司" prop="CORP_NAME" borderBottom required>
|
||||
<u-input v-model="form.CORP_NAME" border="none" readonly />
|
||||
</u-form-item>
|
||||
<u-form-item label="吊装地点" prop="WORK_PLACE" borderBottom required>
|
||||
<u-input v-model="form.WORK_PLACE" border="none" />
|
||||
</u-form-item>
|
||||
<u-form-item label="吊具名称" prop="TOOL_NAME" borderBottom required>
|
||||
<u-input v-model="form.TOOL_NAME" border="none" />
|
||||
</u-form-item>
|
||||
<u-form-item label="吊装作业人" prop="WORK_USER" borderBottom required>
|
||||
<u-input v-model="form.WORK_USER" border="none" />
|
||||
</u-form-item>
|
||||
<u-form-item label="司索人" prop="SISUO_USER" borderBottom required>
|
||||
<u-input v-model="form.SISUO_USER" border="none" />
|
||||
</u-form-item>
|
||||
<u-form-item label="指挥人员" prop="PROJECT_MANAGER" borderBottom required>
|
||||
<u-input v-model="form.PROJECT_MANAGER" border="none" />
|
||||
</u-form-item>
|
||||
<u-form-item label="吊物质量(吨)" prop="PART_WEIGHT" borderBottom required>
|
||||
<u-input v-model="form.PART_WEIGHT" border="none" type="number" />
|
||||
</u-form-item>
|
||||
<u-form-item label="作业级别" prop="WORK_LEVEL_NAME" borderBottom required
|
||||
@click="fnSingleChoiceClick('WORK_LEVEL_NAME')">
|
||||
<u-input v-model="form.WORK_LEVEL_NAME" border="none" readonly />
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="吊物内容" prop="WORK_CONTENT" borderBottom required labelPosition="top" labelWidth="auto">
|
||||
<u-textarea v-model="form.WORK_CONTENT" border="none" autoHeight maxlength="-1" />
|
||||
</u-form-item>
|
||||
<u-form-item label="作业开始时间" prop="WORK_START_DATE" borderBottom required
|
||||
@click="fnDateTimePickerClick('WORK_START_DATE')">
|
||||
<u-input v-model="form.WORK_START_DATE" border="none" readonly />
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业结束时间" prop="WORK_END_DATE" borderBottom required
|
||||
@click="fnDateTimePickerClick('WORK_END_DATE')">
|
||||
<u-input v-model="form.WORK_END_DATE" border="none" readonly />
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="地点坐标" borderBottom required>
|
||||
<u-button type="primary" size="small" text="定位" :customStyle="{ width: '100upx', margin: 0 }"
|
||||
@click="fnLocation" />
|
||||
</u-form-item>
|
||||
<u-form-item label="经度" prop="WORK_LONGITUDE" borderBottom required>
|
||||
<u-input v-model="form.WORK_LONGITUDE" border="none" readonly />
|
||||
</u-form-item>
|
||||
<u-form-item label="纬度" prop="WORK_LATITUDE" borderBottom required>
|
||||
<u-input v-model="form.WORK_LATITUDE" border="none" readonly />
|
||||
</u-form-item>
|
||||
<u-form-item label="关联的其他特殊作业及安全作业票编号" prop="SPECIAL_WORK" borderBottom required labelPosition="top"
|
||||
labelWidth="auto">
|
||||
<u-button type="primary" size="mini" text="选择其它"
|
||||
:customStyle="{ position: 'absolute', top: '-46upx', right: '20upx', width: '150upx' }"
|
||||
@click="otherAssignmentsShow = true" />
|
||||
<u-textarea v-model="form.SPECIAL_WORK" border="none" autoHeight maxlength="-1" />
|
||||
</u-form-item>
|
||||
<u-form-item label="风险辨识结果" prop="RISK_IDENTIFICATION" borderBottom required labelPosition="top"
|
||||
labelWidth="auto">
|
||||
<u-button type="primary" size="mini" text="选择其它"
|
||||
:customStyle="{ position: 'absolute', top: '-46upx', right: '20upx', width: '150upx' }"
|
||||
@click="otherIdentificationShow = true" />
|
||||
<u-textarea v-model="form.RISK_IDENTIFICATION" border="none" autoHeight maxlength="-1" />
|
||||
</u-form-item>
|
||||
</u-form>
|
||||
<view class="mt-10">
|
||||
<u-button type="primary" text="下一步" @click="$u.debounce(fnSubmit, 1000, true)" />
|
||||
</view>
|
||||
</view>
|
||||
<u-picker :show="picker.show" :columns="picker.columns" :keyName="picker.key" :key="picker.type"
|
||||
:defaultIndex="picker.defaultIndex" @confirm="fnSingleChoiceConfirm" @cancel="fnSingleChoiceCancel" />
|
||||
<u-datetime-picker :show="dateTimePicker.show" v-model="dateTimePicker.value" :mode="dateTimePicker.mode"
|
||||
:minDate="dateTimePicker.min" :key="dateTimePicker.type" @confirm="fnDateTimePickerConfirm"
|
||||
@cancel="fnDateTimePickerCancel" />
|
||||
<other-select :visible.sync="otherAssignmentsShow" v-model="form.SPECIAL_WORK" type="assignments" />
|
||||
<other-select :visible.sync="otherIdentificationShow" v-model="form.RISK_IDENTIFICATION" type="identification" />
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import OtherSelect from '@/components/other-select/index.vue';
|
||||
import Sign from '@/components/sign/sign.vue'
|
||||
import {getData, setSubmitForm} from "@/utils/submitHomeworkProcess";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
OtherSelect,
|
||||
Sign
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
type: '',
|
||||
formItems: [
|
||||
{ name: '申请单位', key_name: 'APPLY_DEPARTMENT_NAME', key_id: 'APPLY_DEPARTMENT_ID', type: 0 },
|
||||
{ name: '申请人', key_name: 'APPLY_USER_NAME', key_id: 'APPLY_USER_ID', type: 0 },
|
||||
{ name: '作业分公司', key_name: 'CORP_NAME', key_id: 'CORP_ID', type: 0 },
|
||||
{ name: '吊装地点', key_name: 'WORK_PLACE', type: 0 },
|
||||
{ name: '吊具名称', key_name: 'TOOL_NAME', type: 0 },
|
||||
{ name: '吊装作业人', key_name: 'WORK_USER', type: 0 },
|
||||
{ name: '司索人', key_name: 'SISUO_USER', type: 0 },
|
||||
{ name: '指挥人员', key_name: 'PROJECT_MANAGER', type: 0 },
|
||||
{ name: '吊物质量(吨)', key_name: 'PART_WEIGHT', type: 0 },
|
||||
{ name: '作业级别', key_name: 'WORK_LEVEL_NAME', key_id: 'WORK_LEVEL_ID', type: 0 },
|
||||
{ name: '吊物内容', key_name: 'WORK_CONTENT', type: 0 },
|
||||
{ name: '作业开始时间', key_name: 'WORK_START_DATE', type: 0 },
|
||||
{ name: '作业结束时间', key_name: 'WORK_END_DATE', type: 0 },
|
||||
{ name: '经度', key_name: 'WORK_LONGITUDE', type: 0 },
|
||||
{ name: '纬度', key_name: 'WORK_LATITUDE', type: 0 },
|
||||
{ name: '关联的其他特殊作业及安全作业票编号', key_name: 'SPECIAL_WORK', type: 0 },
|
||||
{ name: '风险辨识结果', key_name: 'RISK_IDENTIFICATION', type: 0 },
|
||||
],
|
||||
form: {
|
||||
APPLY_DEPARTMENT_ID: this.$store.getters.getUserInfo.DEPARTMENT_ID,
|
||||
APPLY_DEPARTMENT_NAME: this.$store.getters.getUserInfo.DEPARTMENT_NAME,
|
||||
APPLY_USER_ID: this.$store.getters.getUserInfo.USER_ID,
|
||||
APPLY_USER_NAME: this.$store.getters.getUserInfo.NAME,
|
||||
CORP_ID: '',
|
||||
CORP_NAME: '',
|
||||
WORK_PLACE: '',
|
||||
TOOL_NAME: '',
|
||||
WORK_USER: '',
|
||||
SISUO_USER: '',
|
||||
PROJECT_MANAGER: '',
|
||||
PART_WEIGHT: '',
|
||||
WORK_LEVEL_ID: '',
|
||||
WORK_LEVEL_NAME: '',
|
||||
WORK_CONTENT: '',
|
||||
WORK_START_DATE: '',
|
||||
WORK_END_DATE: '',
|
||||
WORK_LONGITUDE: '1',
|
||||
WORK_LATITUDE: '2',
|
||||
SPECIAL_WORK: '',
|
||||
RISK_IDENTIFICATION: '',
|
||||
},
|
||||
rules: {
|
||||
APPLY_DEPARTMENT_ID: [{ type: 'string', required: true, message: '请选择申请单位', trigger: ['blur', 'change'] }],
|
||||
APPLY_USER_NAME: [{ type: 'string', required: true, message: '请选择申请人', trigger: ['blur', 'change'] }],
|
||||
CORP_NAME: [{ type: 'string', required: true, message: '请选择作业分公司', trigger: ['blur', 'change'] }],
|
||||
WORK_PLACE: [{ type: 'string', required: true, message: '请输入吊装地点', trigger: ['blur', 'change'] }],
|
||||
TOOL_NAME: [{ type: 'string', required: true, message: '请输入吊具名称', trigger: ['blur', 'change'] }],
|
||||
WORK_USER: [{ type: 'string', required: true, message: '请输入吊装作业人', trigger: ['blur', 'change'] }],
|
||||
SISUO_USER: [{ type: 'string', required: true, message: '请输入司索人', trigger: ['blur', 'change'] }],
|
||||
PROJECT_MANAGER: [{ type: 'string', required: true, message: '请输入指挥人员', trigger: ['blur', 'change'] }],
|
||||
PART_WEIGHT: [{ type: 'string', required: true, message: '请输入吊物质量(吨)', trigger: ['blur', 'change'] }],
|
||||
WORK_LEVEL_NAME: [{ type: 'string', required: true, message: '请选择作业级别', trigger: ['blur', 'change'] }],
|
||||
WORK_CONTENT: [{ type: 'string', required: true, message: '请输入吊物内容', trigger: ['blur', 'change'] }],
|
||||
WORK_START_DATE: [{ type: 'string', required: true, message: '请选择作业开始时间', trigger: ['blur', 'change'] }],
|
||||
WORK_END_DATE: [{ type: 'string', required: true, message: '请选择作业结束时间', trigger: ['blur', 'change'] }],
|
||||
WORK_LONGITUDE: [{ type: 'string', required: true, message: '请输入经度', trigger: ['blur', 'change'] }],
|
||||
WORK_LATITUDE: [{ type: 'string', required: true, message: '请输入纬度', trigger: ['blur', 'change'] }],
|
||||
SPECIAL_WORK: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请输入关联的其他特殊作业及安全作业票编号',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
RISK_IDENTIFICATION: [{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请输入风险辨识结果',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
},
|
||||
picker: {
|
||||
show: false,
|
||||
columns: [],
|
||||
key: 'NAME',
|
||||
type: 'picker',
|
||||
defaultIndex: [] // 这里存储默认选中的项,是一个数组,默认情况下为空数组,当 picker 选择器选择后,该状态会发生变化,以及调用 fnGetData 方法获取数据进行回显时,该状态会发生变化
|
||||
},
|
||||
dateTimePicker: {
|
||||
show: false,
|
||||
value: Number(new Date()),
|
||||
min: new Date().getTime(),
|
||||
mode: 'datetime',
|
||||
type: 'datetime-picker'
|
||||
},
|
||||
otherAssignmentsShow: false,
|
||||
otherIdentificationShow: false,
|
||||
}
|
||||
},
|
||||
async onLoad(options) {
|
||||
this.form.CORP_ID = options.CORPINFO_ID
|
||||
this.form.CORP_NAME = options.CORP_NAME
|
||||
this.type = options.type
|
||||
if (options.taskId) {
|
||||
this.form = await getData(options.taskId)
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
fnSingleChoiceClick(event) {
|
||||
this.picker.type = event
|
||||
if (event === 'WORK_LEVEL_NAME') {
|
||||
this.picker.columns = [[
|
||||
{ NAME: 'I级高处作业', ID: '0' },
|
||||
{ NAME: 'II级高处作业', ID: '1' },
|
||||
{ NAME: 'III级高处作业', ID: '2' },
|
||||
{ NAME: 'IV级高处作业', ID: '3' },
|
||||
]];
|
||||
}
|
||||
this.picker.show = true
|
||||
},
|
||||
fnSingleChoiceConfirm(event) {
|
||||
if (this.picker.type === 'WORK_LEVEL_NAME') {
|
||||
this.form.WORK_LEVEL_ID = event.value[0].ID
|
||||
this.form.WORK_LEVEL_NAME = event.value[0].NAME
|
||||
this.picker.defaultIndex = event.indexs; // 当 picker 选择器选择后,改变 this.picker.defaultIndex 的状态信息
|
||||
}
|
||||
this.fnSingleChoiceCancel()
|
||||
},
|
||||
fnSingleChoiceCancel() {
|
||||
this.picker.show = false
|
||||
},
|
||||
fnDateTimePickerClick(event) {
|
||||
this.dateTimePicker.type = event
|
||||
this.dateTimePicker.value = Number(new Date(this.form[event])) || Number(new Date())
|
||||
this.dateTimePicker.show = true
|
||||
},
|
||||
fnDateTimePickerConfirm(event) {
|
||||
this.form[this.dateTimePicker.type] = uni.$u.timeFormat(event.value, 'yyyy-mm-dd hh:MM')
|
||||
this.fnDateTimePickerCancel()
|
||||
},
|
||||
fnDateTimePickerCancel() {
|
||||
this.dateTimePicker.show = false
|
||||
},
|
||||
fnLocation() {
|
||||
uni.navigateTo({
|
||||
url: '/pages/map/index',
|
||||
events: {
|
||||
acceptLocationData: (event) => {
|
||||
this.form.WORK_LONGITUDE = event.data.longitue;
|
||||
this.form.WORK_LATITUDE = event.data.latitude;
|
||||
}
|
||||
},
|
||||
})
|
||||
},
|
||||
async fnSubmit() {
|
||||
try {
|
||||
await this.$refs.formRef.validate()
|
||||
try {
|
||||
await setSubmitForm({
|
||||
form: this.form,
|
||||
formItems: this.formItems,
|
||||
TYPE: this.type,
|
||||
CORP_ID: this.form.CORP_ID
|
||||
})
|
||||
} catch {
|
||||
}
|
||||
} catch (err) {
|
||||
uni.$u.toast('请补全必填项')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,276 @@
|
|||
<template>
|
||||
<view class="content" style="margin-left: 10px">
|
||||
<view class="card">
|
||||
<u-form labelPosition="left" :model="form" :rules="rules" ref="formRef" labelWidth="140px">
|
||||
<u-form-item label="申请单位" prop="APPLY_DEPARTMENT_NAME" borderBottom required>
|
||||
<u-input v-model="form.APPLY_DEPARTMENT_NAME" border="none" readonly />
|
||||
</u-form-item>
|
||||
<u-form-item label="申请办理人" prop="APPLY_USER_NAME" borderBottom required>
|
||||
<u-input v-model="form.APPLY_USER_NAME" border="none" readonly />
|
||||
</u-form-item>
|
||||
<u-form-item label="作业分公司" prop="CORP_NAME" borderBottom required>
|
||||
<u-input v-model="form.CORP_NAME" border="none" readonly />
|
||||
</u-form-item>
|
||||
<u-form-item v-if="false" label="作业编号" prop="JOB_NUMBER" borderBottom>
|
||||
<u-input v-model="form.JOB_NUMBER" border="none" placeholder="请输入作业编号" />
|
||||
</u-form-item>
|
||||
<u-form-item label="申请日期" prop="APPLICATION_DATE" borderBottom required
|
||||
@click="fnDateTimePickerClick('APPLICATION_DATE')">
|
||||
<u-input v-model="form.APPLICATION_DATE" border="none" readonly />
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业类型" prop="JOB_TYPE_NAME" borderBottom required
|
||||
@click="fnSingleChoiceClick('JOB_TYPE_NAME')">
|
||||
<u-input v-model="form.JOB_TYPE_NAME" border="none" readonly />
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="动火部位" prop="HOT_WORK_POSITION" borderBottom required>
|
||||
<u-input v-model="form.HOT_WORK_POSITION" border="none" placeholder="请输入动火部位" />
|
||||
</u-form-item>
|
||||
<u-form-item label="动火方法" prop="HOT_WORK_METHOD_ID" borderBottom labelPosition="top" labelWidth="auto" required>
|
||||
<u-button type="primary" size="mini" text="选择其它动火方法"
|
||||
:customStyle="{ position: 'absolute', top: '-46upx', right: '20upx', width: '180upx' }"
|
||||
@click="otherWorkMethodShow = true" />
|
||||
<u-textarea v-model="form.HOT_WORK_METHOD_ID" border="none" autoHeight maxlength="-1" />
|
||||
</u-form-item>
|
||||
<u-form-item label="动火等级" prop="HOT_WORK_LEVEL_INDEX" borderBottom required
|
||||
@click="fnSingleChoiceClick('HOT_WORK_LEVEL_INDEX')">
|
||||
<u-input v-model="form.HOT_WORK_LEVEL_INDEX" border="none" readonly />
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="动火开始时间" prop="HOT_WORK_TIME_START" borderBottom required
|
||||
@click="fnDateTimePickerClick('HOT_WORK_TIME_START')">
|
||||
<u-input v-model="form.HOT_WORK_TIME_START" border="none" readonly />
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="动火结束时间" prop="HOT_WORK_TIME_END" borderBottom required
|
||||
@click="fnDateTimePickerClick('HOT_WORK_TIME_END')">
|
||||
<u-input v-model="form.HOT_WORK_TIME_END" border="none" readonly />
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="作业内容" prop="JOB_CONTENT" borderBottom required>
|
||||
<u-input v-model="form.JOB_CONTENT" border="none" placeholder="请输入作业内容" />
|
||||
</u-form-item>
|
||||
<u-form-item label="动火操作人" prop="USER_NAME" borderBottom required labelPosition="top" labelWidth="auto">
|
||||
<u-button type="primary" size="mini" text="添加"
|
||||
:customStyle="{ position: 'absolute', top: '-46upx', right: '20upx', width: '90upx' }"
|
||||
@click="otherUserNameSelectShow = true" />
|
||||
<u-textarea v-model="form.USER_NAME" border="none" autoHeight maxlength="-1" />
|
||||
</u-form-item>
|
||||
<u-form-item label="动火监火人" prop="SUPERVISOR_OF_HOT_WORK_UNIT" borderBottom required>
|
||||
<u-input v-model="form.SUPERVISOR_OF_HOT_WORK_UNIT" border="none" placeholder="请输入动火监火人" />
|
||||
</u-form-item>
|
||||
<u-form-item label="是否安全总监审批" prop="IS_SAFETY_DIRECTOR" borderBottom required>
|
||||
<u-radio-group v-model="form.IS_SAFETY_DIRECTOR" :customStyle="{ 'justify-content': 'flex-end' }">
|
||||
<u-radio label="是" name="1" />
|
||||
<u-radio :customStyle="{ marginLeft: '8px' }" label="否" name="0" />
|
||||
</u-radio-group>
|
||||
</u-form-item>
|
||||
<u-form-item label="是否需要气体检测" props="IS_GAS_TESTING" borderBottom required>
|
||||
<u-radio-group v-model="form.IS_GAS_TESTING" :customStyle="{ 'justify-content': 'flex-end' }" @change="fnRadioChange($event, 'IS_GAS_TESTING_NAME')">
|
||||
<u-radio label="是" name="1" />
|
||||
<u-radio :customStyle="{ marginLeft: '8px' }" label="否" name="0" />
|
||||
</u-radio-group>
|
||||
</u-form-item>
|
||||
</u-form>
|
||||
<view class="mt-10">
|
||||
<u-button type="primary" text="下一步" @click="$u.debounce(fnSubmit, 1000, true)" />
|
||||
</view>
|
||||
</view>
|
||||
<u-picker :show="picker.show" :columns="picker.columns" :keyName="picker.key" :key="picker.type"
|
||||
:defaultIndex="picker.defaultIndex" @confirm="fnSingleChoiceConfirm" @cancel="fnSingleChoiceCancel" />
|
||||
<u-datetime-picker :show="dateTimePicker.show" v-model="dateTimePicker.value" :mode="dateTimePicker.mode"
|
||||
:minDate="dateTimePicker.min" :key="dateTimePicker.type" @confirm="fnDateTimePickerConfirm"
|
||||
@cancel="fnDateTimePickerCancel" />
|
||||
<other-select :visible.sync="otherWorkMethodShow" v-model="form.HOT_WORK_METHOD_ID" type="hotWorkMethod" />
|
||||
<other-select :visible.sync="otherUserNameSelectShow" v-model="form.USER_NAME" type="userNameSelect" />
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import OtherSelect from '@/components/other-select/index.vue';
|
||||
import {getData, setSubmitForm} from "@/utils/submitHomeworkProcess";
|
||||
import useFormValidate from "@/utils/useFormValidate";
|
||||
export default {
|
||||
components: { OtherSelect },
|
||||
|
||||
data() {
|
||||
return {
|
||||
type: '',
|
||||
formItems: [
|
||||
{name: '申请单位', key_name: 'APPLY_DEPARTMENT_NAME', key_id: 'APPLY_DEPARTMENT_ID', type: 0},
|
||||
{name: '申请办理人', key_name: 'APPLY_USER_NAME', key_id: 'APPLY_USER_ID', type: 0},
|
||||
{name: "作业分公司", key_name: "CORP_NAME", key_id: "CORP_ID", type: 0},
|
||||
{name: '作业编号', key_name: 'JOB_NUMBER', key_id: 'JOB_NUMBER_ID', type: 0},
|
||||
{name: '申请日期', key_name: 'APPLICATION_DATE', type: 0},
|
||||
{name: '作业类型', key_name: 'JOB_TYPE_NAME', key_id: 'JOB_TYPE_INDEX', type: 0},
|
||||
{name: '动火部位', key_name: 'HOT_WORK_POSITION', type: 0},
|
||||
{name: '动火方法', key_id: "HOT_WORK_METHOD_ID", key_name: "HOT_WORK_METHOD_NAME", type: 0},
|
||||
{name: '动火等级', key_name: 'HOT_WORK_LEVEL_INDEX', key_id: 'HOT_WORK_LEVEL_NAME', type: 0},
|
||||
{name: '动火开始时间', key_name: 'HOT_WORK_TIME_START', type: 0},
|
||||
{name: '动火结束时间', key_name: 'HOT_WORK_TIME_END', type: 0},
|
||||
{name: '作业内容', key_name: 'JOB_CONTENT', type: 0},
|
||||
{
|
||||
key_name: "hotWorkOperatorList",
|
||||
type: 4,
|
||||
listStructure: [
|
||||
{name: "动火操作人部门", key_name: "DEPARTMENT_NAME", key_id: "DEPARTMENT_ID", type: 0},
|
||||
{name: "动火操作人", key_name: "USER_NAME", key_id: "USER_ID", type: 0},
|
||||
{name: "所属端", key_name: "TYPE", type: 0, IS_NOT_SHOW: "1"},
|
||||
],
|
||||
},
|
||||
{name: '动火操作人', key_name: 'SUPERVISOR_OF_HOT_WORK_UNIT', type: 0},
|
||||
{name: "是否安全总监审批", key_name: "IS_SAFETY_DIRECTOR_NAME", key_id: "IS_SAFETY_DIRECTOR", type: 0},
|
||||
{name: "是否需要气体检测", key_name: "IS_GAS_TESTING_NAME", key_id: "IS_GAS_TESTING", type: 0},
|
||||
],
|
||||
form: {
|
||||
// 申请单位
|
||||
APPLY_DEPARTMENT_NAME: this.$store.getters.getUserInfo.DEPARTMENT_NAME,
|
||||
APPLY_DEPARTMENT_ID: this.$store.getters.getUserInfo.DEPARTMENT_ID,
|
||||
// 申请办理人
|
||||
APPLY_USER_NAME: this.$store.getters.getUserInfo.NAME,
|
||||
APPLY_USER_ID: this.$store.getters.getUserInfo.USER_ID,
|
||||
// 作业编号
|
||||
JOB_NUMBER: '',
|
||||
// 申请日期
|
||||
APPLICATION_DATE: '',
|
||||
// 作业类型
|
||||
JOB_TYPE_ID: '',
|
||||
JOB_TYPE_NAME: '',
|
||||
// 动火部位
|
||||
HOT_WORK_POSITION: '',
|
||||
// 动火方法
|
||||
HOT_WORK_METHOD_ID: '',
|
||||
// 动火等级
|
||||
HOT_WORK_LEVEL_ID: '',
|
||||
HOT_WORK_LEVEL_INDEX: '',
|
||||
/** 动火开始时间 */
|
||||
HOT_WORK_TIME_START: '',
|
||||
/** 动火结束时间 */
|
||||
HOT_WORK_TIME_END: '',
|
||||
/** 作业内容 */
|
||||
JOB_CONTENT: '',
|
||||
/** 动火操作人 */
|
||||
USER_NAME: '',
|
||||
/** 动火监火人 */
|
||||
SUPERVISOR_OF_HOT_WORK_UNIT: '',
|
||||
/** 是否安全总监审批 */
|
||||
IS_SAFETY_DIRECTOR: '',
|
||||
/** 是否需要气体检测 */
|
||||
IS_GAS_TESTING: '',
|
||||
hotWorkOperatorList: []
|
||||
},
|
||||
rules: {
|
||||
APPLY_DEPARTMENT_NAME: [{ type: 'string', required: true, message: '请选择申请单位', trigger: ['blur', 'change'] }],
|
||||
APPLY_USER_NAME: [{ type: 'string', required: true, message: '请选择申请办理人', trigger: ['blur', 'change'] }],
|
||||
JOB_NUMBER: [{ type: 'string', required: false, message: '请输入作业编号', trigger: ['blur', 'change'] }],
|
||||
APPLICATION_DATE: [{ type: 'string', required: true, message: '请选择申请日期', trigger: ['blur', 'change'] }],
|
||||
JOB_TYPE_NAME: [{ type: 'string', required: true, message: '请选择作业类型', trigger: ['blur', 'change'] }],
|
||||
HOT_WORK_POSITION: [{ type: 'string', required: true, message: '请输入动火部位', trigger: ['blur', 'change'] }],
|
||||
HOT_WORK_METHOD_ID: [{ type: 'string', required: true, message: '请选择动火方法', trigger: ['blur', 'change'] }],
|
||||
HOT_WORK_LEVEL_INDEX: [{ type: 'string', required: true, message: '请选择动火等级', trigger: ['blue', 'change'] }],
|
||||
HOT_WORK_TIME_START: [{ type: 'string', required: true, message: '请选择动火开始时间', trigger: ['blur', 'change'] }],
|
||||
HOT_WORK_TIME_END: [{ type: 'string', required: true, message: '请选择动火结束时间', trigger: ['blur', 'change'] }],
|
||||
JOB_CONTENT: [{ type: 'string', required: true, message: '请输入作业内容', trigger: ['blur', 'change'] }],
|
||||
USER_NAME: [{ type: 'string', required: true, message: '请选择动火操作人', trigger: ['blur', 'change'] }],
|
||||
SUPERVISOR_OF_HOT_WORK_UNIT: [{ type: 'string', required: true, message: '请输入动火监火人', trigger: ['blur', 'change'] }],
|
||||
IS_SAFETY_DIRECTOR: [{ type: 'string', required: true, message: '请选择是否安全总监审批', trigger: ['blur', 'change'] }],
|
||||
IS_GAS_TESTING: [{ type: 'string', required: true, message: '请选择是否需要气体检测', trigger: ['blur', 'change'] }],
|
||||
},
|
||||
picker: {
|
||||
show: false,
|
||||
columns: [],
|
||||
key: 'NAME',
|
||||
type: 'picker',
|
||||
defaultIndex: []
|
||||
},
|
||||
dateTimePicker: {
|
||||
show: false,
|
||||
value: Number(new Date()),
|
||||
min: new Date().getTime(),
|
||||
mode: 'datetime',
|
||||
type: 'datetime-picker'
|
||||
},
|
||||
/** 其他动火方法选择器是否显示 */
|
||||
otherWorkMethodShow: false,
|
||||
/** 其他动火操作人选择器是否展示 */
|
||||
otherUserNameSelectShow: false,
|
||||
taskId: null
|
||||
}
|
||||
},
|
||||
async onLoad(options) {
|
||||
this.form.CORP_ID = options.CORPINFO_ID
|
||||
this.form.CORP_NAME = options.CORP_NAME
|
||||
this.type = options.type
|
||||
if (options.taskId) {
|
||||
this.taskId = options.taskId
|
||||
this.form = await getData(options.taskId)
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
fnDateTimePickerClick(event) {
|
||||
this.dateTimePicker.type = event
|
||||
this.dateTimePicker.value = Number(new Date(this.form[event])) || Number(new Date())
|
||||
this.dateTimePicker.show = true
|
||||
},
|
||||
fnSingleChoiceClick(event) {
|
||||
this.picker.type = event;
|
||||
if (event === 'JOB_TYPE_NAME') {
|
||||
this.picker.columns = [[{ ID: '0', NAME: '内部作业' }, { ID: '1', NAME: '相关方作业' }]]
|
||||
};
|
||||
if (event === 'HOT_WORK_LEVEL_INDEX') {
|
||||
this.picker.columns = [[{ ID: '0', NAME: '特级' }, { ID: '1', NAME: '一级' }, { ID: '2', NAME: '二级' }, { ID: '3', NAME: '三级' }]]
|
||||
}
|
||||
this.picker.show = true;
|
||||
},
|
||||
fnSingleChoiceConfirm(event) {
|
||||
if (this.picker.type === 'JOB_TYPE_NAME') {
|
||||
this.form.JOB_TYPE_ID = event.value[0].ID
|
||||
this.form.JOB_TYPE_NAME = event.value[0].NAME
|
||||
this.picker.defaultIndex = event.indexs
|
||||
}
|
||||
if (this.picker.type === 'HOT_WORK_LEVEL_INDEX') {
|
||||
this.form.HOT_WORK_LEVEL_ID = event.value[0].ID
|
||||
this.form.HOT_WORK_LEVEL_INDEX = event.value[0].NAME
|
||||
this.picker.defaultIndex = event.indexs
|
||||
}
|
||||
this.fnSingleChoiceCancel()
|
||||
},
|
||||
fnSingleChoiceCancel() {
|
||||
this.picker.show = false
|
||||
},
|
||||
fnDateTimePickerConfirm(event) {
|
||||
this.form[this.dateTimePicker.type] = uni.$u.timeFormat(event.value, 'yyyy-mm-dd hh:MM')
|
||||
this.fnDateTimePickerCancel()
|
||||
},
|
||||
fnDateTimePickerCancel() {
|
||||
this.dateTimePicker.show = false
|
||||
},
|
||||
fnRadioChange(event, key){
|
||||
if (event === "1") {
|
||||
this.form[key] = "是";
|
||||
} else {
|
||||
this.form[key] = "否";
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 下一步所触发的按钮事件
|
||||
*/
|
||||
async fnSubmit() {
|
||||
await this.$refs.formRef.validate()
|
||||
uni.navigateTo({
|
||||
url: "/pages/eight_assignments/hot_work/select_operator",
|
||||
success: ({ eventChannel }) => {
|
||||
eventChannel.emit("data", {
|
||||
form: this.form,
|
||||
formItems: this.formItems,
|
||||
EW_RU_TASK_ID: this.taskId
|
||||
});
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,122 @@
|
|||
<!-- 延时监火的添加页面 -->
|
||||
<template>
|
||||
<view class="content">
|
||||
<view class="card">
|
||||
<u-form labelPosition="left" :model="form" :rules="rules" ref="formRef" labelWidth="140px">
|
||||
<u-form-item label="监火人" prop="USER_NAME" borderBottom required>
|
||||
<u-input v-model="form.USER_NAME" border="none" readonly />
|
||||
</u-form-item>
|
||||
<u-form-item label="时间" prop="TIME" borderBottom required
|
||||
@click="fnDateTimePickerClick('TIME')">
|
||||
<u-input v-model="form.TIME" border="none" readonly />
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="照片" prop="imgList" borderBottom required labelPosition="top" labelWidth="auto">
|
||||
<u-upload class="mt-10" :fileList="form.imgList" @afterRead="fnAfterRead($event, 'imgList')"
|
||||
@delete="fnDeletePic($event, 'imgList')" multiple :maxCount="1"></u-upload>
|
||||
</u-form-item>
|
||||
</u-form>
|
||||
<view class="mt-10">
|
||||
<u-button type="primary" text="提交" @click="$u.debounce(fnSubmit, 1000, true)" />
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<u-datetime-picker :show="dateTimePicker.show" v-model="dateTimePicker.value" :mode="dateTimePicker.mode"
|
||||
:maxDate="dateTimePicker.max" :key="dateTimePicker.type" @confirm="fnDateTimePickerConfirm"
|
||||
@cancel="fnDateTimePickerCancel" />
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { formatDate } from '@/utils/tools';
|
||||
import {setHotWorkRecord, setTaskFile} from "../../../../api";
|
||||
|
||||
export default {
|
||||
onLoad(event) {
|
||||
this.EW_RU_TASK_ID = event.taskId
|
||||
this.EW_RU_JOB_ID = event.EW_RU_JOB_ID
|
||||
this.TYPE = event.TYPE
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
EW_RU_JOB_ID: '',
|
||||
EW_RU_TASK_ID: '',
|
||||
form:{
|
||||
EW_SP_DHW_MONITOR_ID: '',
|
||||
EW_RU_JOB_ID: '',
|
||||
EW_RU_TASK_ID: '',
|
||||
/** 监火人 */
|
||||
USER_NAME: this.$store.getters.getUserInfo.NAME,
|
||||
USER_ID: this.$store.getters.getUserInfo.USER_ID,
|
||||
/** 时间 */
|
||||
TIME: formatDate(new Date(), 'yyyy-MM-dd hh:mm'),
|
||||
/** 照片 */
|
||||
imgList: [],
|
||||
FILE_PATH: ''
|
||||
},
|
||||
rules: {
|
||||
USER_NAME: [{ type: 'string', required: true, message: '请输入监火人', trigger: ['blur', 'change'] }],
|
||||
TIME: [{ type: 'string', required: true, message: '请选择时间', trigger: ['blur', 'change'] }],
|
||||
imgList: [{ type: 'array', required: true, message: '请上传照片', trigger: ['blur', 'change'] }],
|
||||
},
|
||||
dateTimePicker: {
|
||||
show: false,
|
||||
value: Number(new Date()),
|
||||
min: new Date().getTime(),
|
||||
mode: 'datetime',
|
||||
type: 'datetime-picker'
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async fnSubmit() {
|
||||
try {
|
||||
await this.$refs.formRef.validate()
|
||||
try {
|
||||
const {CODE} = await setTaskFile({formData: {type: 0}, name: 'files', filePath: this.form.imgList[0].url})
|
||||
this.form.FILE_PATH = CODE
|
||||
await setHotWorkRecord({
|
||||
EW_SP_DHW_MONITOR_ID: this.form.EW_SP_DHW_MONITOR_ID,
|
||||
EW_RU_JOB_ID: this.EW_RU_JOB_ID,
|
||||
EW_RU_TASK_ID: this.EW_RU_TASK_ID,
|
||||
USER_NAME: this.form.USER_NAME,
|
||||
USER_ID: this.form.USER_ID,
|
||||
TIME: this.form.TIME,
|
||||
FILE_PATH: this.form.FILE_PATH
|
||||
})
|
||||
uni.navigateBack(); // 返回到上一级
|
||||
} catch {
|
||||
}
|
||||
} catch {
|
||||
uni.$u.toast('请补全必填项')
|
||||
}
|
||||
},
|
||||
fnDateTimePickerClick(event) {
|
||||
this.dateTimePicker.type = event
|
||||
this.dateTimePicker.value = Number(new Date(this.form[event])) || Number(new Date())
|
||||
this.dateTimePicker.show = true
|
||||
},
|
||||
fnDateTimePickerConfirm(event) {
|
||||
this.form[this.dateTimePicker.type] = uni.$u.timeFormat(event.value, 'yyyy-mm-dd hh:MM')
|
||||
this.fnDateTimePickerCancel()
|
||||
},
|
||||
fnDateTimePickerCancel() {
|
||||
this.dateTimePicker.show = false
|
||||
},
|
||||
fnAfterRead(event, key) {
|
||||
this.form[key].push(...event.file)
|
||||
},
|
||||
fnDeletePic(event, key) {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '确定删除该图片吗?',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
this.form[key].splice(event.index, 1)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -0,0 +1,150 @@
|
|||
<template>
|
||||
<view class="content">
|
||||
<view v-if="isView !== '1'" class="flex-end padding">
|
||||
<u-button type="primary" text="添加" size="mini" class="bth-mini" @click="goToAdd"/>
|
||||
<u-button type="primary" text="任务转发" size="mini" class="bth-mini ml-10" @click="goToTaskForword"/>
|
||||
</view>
|
||||
<view>
|
||||
<view class="form" v-if="list.length > 0">
|
||||
<view class="wui-form-list" v-for="(item, index) in list" :key="index">
|
||||
<view class="cu-form-group">
|
||||
<view class="title">监火人:</view>
|
||||
{{ item.USER_NAME }}
|
||||
</view>
|
||||
<view class="cu-form-group">
|
||||
<view class="title">时间:</view>
|
||||
{{ item.TIME }}
|
||||
</view>
|
||||
<view class="cu-form-group">
|
||||
<view class="title">照片:</view>
|
||||
<view><u-button size="mini" type="primary" text="查看图片" @click="ViewImage1(item.FILE_PATH)" /></view>
|
||||
</view>
|
||||
</view>
|
||||
<view style="margin-top: 30upx;" v-show="list.length !== 0 && isView !== '1'">
|
||||
<u-button class="bg-green" style="max-width: 50%;" @click="$u.debounce(goSubmit, 1000, true)">完成延时监火</u-button>
|
||||
</view>
|
||||
</view>
|
||||
<empty v-else></empty>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getHotWorkRecord, setTaskSign} from "../../../../api";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
list: [],
|
||||
STATE: '',
|
||||
EW_RU_TASK_ID: '',
|
||||
EW_RU_JOB_ID: '',
|
||||
TYPE: '',
|
||||
isView: '1'
|
||||
}
|
||||
},
|
||||
onLoad(event) {
|
||||
this.STATE = event.state;
|
||||
this.EW_RU_TASK_ID = event.taskId
|
||||
this.EW_RU_JOB_ID = event.EW_RU_JOB_ID
|
||||
this.TYPE = event.TYPE
|
||||
},
|
||||
onShow() {
|
||||
this.resetList()
|
||||
},
|
||||
methods: {
|
||||
async getData() {
|
||||
let resData = await getHotWorkRecord({
|
||||
EW_RU_TASK_ID: this.EW_RU_TASK_ID
|
||||
});
|
||||
this.list = [...this.list, ...resData.list];
|
||||
},
|
||||
resetList() {
|
||||
this.list = []
|
||||
this.getData()
|
||||
},
|
||||
/**
|
||||
* 跳转到延时监火的添加页面
|
||||
*/
|
||||
goToAdd() {
|
||||
uni.$u.route({
|
||||
url: '/pages/eight_assignments/hot_work/delay_fire_monitoring/add',
|
||||
params: {taskId: this.EW_RU_TASK_ID, EW_RU_JOB_ID:this.EW_RU_JOB_ID,TYPE:this.TYPE}
|
||||
});
|
||||
},
|
||||
/**
|
||||
* 跳转到延时监火的任务转发页面
|
||||
*/
|
||||
goToTaskForword() {
|
||||
uni.$u.route({
|
||||
url: '/pages/eight_assignments/hot_work/delay_fire_monitoring/task_forward',
|
||||
params: {taskId: this.EW_RU_TASK_ID, EW_RU_JOB_ID:this.EW_RU_JOB_ID,TYPE:this.TYPE}
|
||||
});
|
||||
},
|
||||
/**
|
||||
* 图片预览
|
||||
*/
|
||||
ViewImage1(urls) {
|
||||
uni.previewImage({
|
||||
urls: [this.$filePath + urls]
|
||||
});
|
||||
},
|
||||
/**
|
||||
* 完成延时监火的确认按钮事件
|
||||
*/
|
||||
async goSubmit() {
|
||||
await setTaskSign({
|
||||
EW_RU_JOB_ID: this.EW_RU_JOB_ID,
|
||||
EW_RU_TASK_ID: this.EW_RU_TASK_ID,
|
||||
})
|
||||
uni.$u.toast('保存成功')
|
||||
setTimeout(() => {
|
||||
uni.switchTab({
|
||||
url: '/pages/index/index'
|
||||
})
|
||||
}, 2000)
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.content {
|
||||
.padding {
|
||||
padding: 20upx;
|
||||
}
|
||||
|
||||
.wui-form-list {
|
||||
background-color: #FFFFFF;
|
||||
border-radius: 10upx;
|
||||
margin: 20upx;
|
||||
}
|
||||
|
||||
.wui-form-list .cu-form-group {
|
||||
color: #808080;
|
||||
font-size: 28upx;
|
||||
padding: 30upx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.wui-form-list .cu-form-group .title {
|
||||
min-width: 200upx;
|
||||
width: max-content;
|
||||
font-weight: bold;
|
||||
color: #000000;
|
||||
font-size: 28upx;
|
||||
/* white-space: nowrap; */
|
||||
}
|
||||
|
||||
.cu-form-group+.cu-form-group {
|
||||
border-top: 1px solid #eee;
|
||||
}
|
||||
|
||||
.bg-green {
|
||||
background-color: #39b54a;
|
||||
color: #fff;
|
||||
border-radius: 16upx;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,97 @@
|
|||
<template>
|
||||
<view class="content">
|
||||
<view class="card">
|
||||
<u-cell-group>
|
||||
<block v-for="(item, index) in form" :key="index">
|
||||
<u-cell v-if="item.TYPE === 0" :key="index" :title="item.ITEM" :value="item.ITEM_VALUE"></u-cell>
|
||||
</block>
|
||||
</u-cell-group>
|
||||
<u-divider text="安全措施" textPosition="left" textColor="#3c9cff" lineColor="#3c9cff" />
|
||||
<u-cell-group>
|
||||
<u-cell v-for="(item, index) in questionnaires" :key="index" :title="item.QUESTION">
|
||||
<template #title>
|
||||
<view style="display: flex;justify-content: space-between">
|
||||
<view>{{ item.QUESTION }}</view>
|
||||
<view>{{ item.TEXT_INFO || item.ANSWER }}</view>
|
||||
</view>
|
||||
</template>
|
||||
<template #label>
|
||||
<block v-for="(item1, index1) in item.answers" :key="index1">
|
||||
<view>{{ item1.TEXT_INFO }}:{{ item1.ANSWER }}</view>
|
||||
</block>
|
||||
</template>
|
||||
</u-cell>
|
||||
</u-cell-group>
|
||||
<u-divider text="审批人员" textPosition="left" textColor="#3c9cff" lineColor="#3c9cff" />
|
||||
<u-cell-group>
|
||||
<block v-for="(item, index) in jobs" :key="index">
|
||||
<u-cell :key="index" :title="item.TYPE_DESCRIBE">
|
||||
<template #label>
|
||||
<view class="mt-10">
|
||||
<view>部门:{{ item.DEPARTMENT_NAME }}</view>
|
||||
<view>人员:{{ item.USER_NAME }}</view>
|
||||
<view v-if="item.SIGN_PICTURE">
|
||||
<u-image width="400rpx" height="200rpx" :src="$filePath + '/' + item.SIGN_PICTURE" mode="widthFix" />
|
||||
<view>审批意见:{{ item.APPROVAL_OPINIONS }}</view>
|
||||
<view>审批意见:{{ item.APPROVAL_TIME }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
</u-cell>
|
||||
</block>
|
||||
</u-cell-group>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getTaskInfo } from "@/api";
|
||||
import { resolveNextOperation } from "@/utils/submitHomeworkProcess";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
taskId: '',
|
||||
type: '',
|
||||
jobId: '',
|
||||
form: [],
|
||||
jobs: [],
|
||||
questionnaires: [],
|
||||
}
|
||||
},
|
||||
onLoad(query) {
|
||||
this.taskId = query.taskId
|
||||
this.type = query.type
|
||||
this.jobId = query.jobId
|
||||
this.fnGetData(query.taskId)
|
||||
uni.setNavigationBarTitle({
|
||||
title: query.title + '查看'
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
async fnGetData(taskId) {
|
||||
let resData = await getTaskInfo({ EW_RU_TASK_ID: taskId })
|
||||
this.form = resData.list.form
|
||||
this.jobs = resData.list.jobs
|
||||
this.questionnaires = resData.list.simpleQues[0]
|
||||
},
|
||||
async fnSubmit() {
|
||||
let CORP_ID = ''
|
||||
for (let i = 0; i < this.form.length; i++) {
|
||||
if (this.form[i].FK_NAME === 'CORP_ID') {
|
||||
CORP_ID = this.form[i].FK_VALUE
|
||||
break
|
||||
}
|
||||
}
|
||||
await resolveNextOperation({
|
||||
EW_RU_TASK_ID: this.taskId,
|
||||
TYPE: this.type,
|
||||
CORP_ID,
|
||||
EW_RU_JOB_ID: this.jobId,
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,125 @@
|
|||
<!-- 延时监火页面 列表 -->
|
||||
<template>
|
||||
<view class="content">
|
||||
<u-list @scrolltolower="scrolltolower" v-if="list.length > 0">
|
||||
<u-list-item v-for="(item, index) in list" :key="index">
|
||||
<view @click="goToDetail(item)">
|
||||
<view class="flex-between main-title bold">
|
||||
<text>作业证编号: {{ item.JOB_NUMBER }}</text>
|
||||
<text>动火等级: {{ item.HOT_WORK_LEVEL_NAME }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title">
|
||||
<text>申请办理人: {{ item.APPLY_USER_NAME }}</text>
|
||||
<text>作业类型: {{ item.JOB_TYPE_NAME }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title">
|
||||
<text>现场负责人:{{ item.SITE_LEADER_NAME }}</text>
|
||||
<text>动火单位负责人:{{ item.HOT_WORK_UNIT_LEADER_NAME }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title">
|
||||
<text>动火部位:{{ item.HOT_WORK_POSITION }}</text>
|
||||
<text>作业内容:{{ item.JOB_CONTENT }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title">
|
||||
<text>审核状态:延时监火</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex-between mt-10 subtitle">
|
||||
<view></view>
|
||||
<view class="flex-between">
|
||||
<u-button type="primary" text="延时监火" size="mini" class="bth-mini ml-10"
|
||||
@click="goToDelay(item.HOTWORKAPPLICATION_ID)" />
|
||||
</view>
|
||||
</view>
|
||||
</u-list-item>
|
||||
</u-list>
|
||||
<empty v-else></empty>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
type: '',
|
||||
title: '',
|
||||
pageSize: 10,
|
||||
currentPage: 1,
|
||||
totalPage: 0,
|
||||
list: [],
|
||||
EW_RU_TASK_ID: '',
|
||||
EW_RU_JOB_ID: '',
|
||||
TYPE: ''
|
||||
}
|
||||
},
|
||||
onLoad(query) {
|
||||
this.type = query.type
|
||||
this.title = query.title
|
||||
this.EW_RU_TASK_ID = query.taskId
|
||||
this.EW_RU_JOB_ID = query.EW_RU_JOB_ID
|
||||
this.TYPE = query.TYPE
|
||||
},
|
||||
onShow() {
|
||||
this.resetList()
|
||||
},
|
||||
methods: {
|
||||
async getData() {
|
||||
// 这里请求列表数据
|
||||
// let resData = await getToDoTaskList({
|
||||
// showCount: this.pageSize,
|
||||
// currentPage: this.currentPage,
|
||||
// TYPE: this.type,
|
||||
// vectors: '0'
|
||||
// });
|
||||
const mockData = [
|
||||
{
|
||||
HOTWORKAPPLICATION_ID: '0',
|
||||
JOB_NUMBER: 'DFIO-FPI',
|
||||
HOT_WORK_LEVEL_NAME: '一级',
|
||||
APPLY_USER_NAME: '孙喊问',
|
||||
JOB_TYPE_NAME: '内部作业',
|
||||
SITE_LEADER_NAME: '王某某',
|
||||
HOT_WORK_UNIT_LEADER_NAME: '王某某',
|
||||
HOT_WORK_POSITION: '测试',
|
||||
JOB_CONTENT: '测试',
|
||||
taskId: 'f4eb31f4b61b408e8a88e849017558d4',
|
||||
jobId: 'c4f007f2ef5c487d96c31e297f5ff29b'
|
||||
}
|
||||
]
|
||||
this.list = mockData || [];
|
||||
this.totalPage = 0;
|
||||
},
|
||||
resetList() {
|
||||
this.pageSize = 10
|
||||
this.currentPage = 1
|
||||
this.list = []
|
||||
this.getData()
|
||||
},
|
||||
goToDetail(item) {
|
||||
uni.$u.route({
|
||||
url: '/pages/eight_assignments/hot_work/delay_fire_monitoring/detail',
|
||||
params: {
|
||||
taskId: item.taskId,
|
||||
jobId: item.jobId,
|
||||
type: this.type,
|
||||
title: this.title
|
||||
}
|
||||
})
|
||||
},
|
||||
goToDelay(HOTWORKAPPLICATION_ID) {
|
||||
uni.$u.route({
|
||||
url: '/pages/eight_assignments/hot_work/delay_fire_monitoring/delay',
|
||||
params: { id: HOTWORKAPPLICATION_ID }
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.content {
|
||||
.bold {
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,95 @@
|
|||
<!-- 延时监火的任务转发 -->
|
||||
<template>
|
||||
<view class="content">
|
||||
<view class="card">
|
||||
<u-form labelPosition="left" :model="form" :rules="rules" ref="formRef" labelWidth="140px">
|
||||
<u-form-item label="接班监火人部门:" prop="PYROMANCER" borderBottom required @click="fnSelect">
|
||||
<u-input v-model="form.DEPARTMENT_NAME" border="none" readonly />
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
</u-form>
|
||||
</view>
|
||||
<view style="margin-top: 30upx;">
|
||||
<u-button class="bg-green" style="max-width: 50%;"
|
||||
@click="$u.debounce(goSubmit, 1000, true)">确认</u-button>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {setTaskSign} from "../../../../api";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
form: {
|
||||
DEPARTMENT_NAME: '',
|
||||
DEPARTMENT_ID: ''
|
||||
},
|
||||
rules: {
|
||||
DEPARTMENT_NAME: [{ type: 'string', required: true, message: '请输入监火人', trigger: ['blur', 'change'] }]
|
||||
},
|
||||
EW_RU_TASK_ID: '',
|
||||
EW_RU_JOB_ID: '',
|
||||
TYPE: ''
|
||||
|
||||
}
|
||||
},
|
||||
onLoad(event) {
|
||||
this.STATE = event.state;
|
||||
this.EW_RU_TASK_ID = event.taskId
|
||||
this.EW_RU_JOB_ID = event.EW_RU_JOB_ID
|
||||
this.TYPE = event.TYPE
|
||||
},
|
||||
methods: {
|
||||
fnSelect() {
|
||||
uni.navigateTo({
|
||||
url: `/pages/eight_assignments/select_department?CORP_ID=${this.CORP_ID}`,
|
||||
events: {
|
||||
confirm: (event) => {
|
||||
console.log(event)
|
||||
this.form.DEPARTMENT_NAME = event.DEPARTMENT_NAME
|
||||
this.form.DEPARTMENT_ID = event.DEPARTMENT_ID
|
||||
}
|
||||
},
|
||||
})
|
||||
},
|
||||
async goSubmit(){
|
||||
const JOB_DTO = {
|
||||
DEPARTMENT_ID: this.form.DEPARTMENT_ID,
|
||||
DEPARTMENT_NAME: this.form.DEPARTMENT_NAME,
|
||||
CORP_ID: this.$store.getters.getUserInfo.CORPINFO_ID,
|
||||
CORP_NAME: this.$store.getters.getUserInfo.CORP_NAME
|
||||
}
|
||||
try {
|
||||
await this.$refs.formRef.validate()
|
||||
try {
|
||||
await setTaskSign({
|
||||
EW_RU_JOB_ID: this.EW_RU_JOB_ID,
|
||||
EW_RU_TASK_ID: this.EW_RU_TASK_ID,
|
||||
SIGN_FLAG: 1,
|
||||
JOB_DTO: JSON.stringify(JOB_DTO)
|
||||
})
|
||||
uni.$u.toast('保存成功')
|
||||
setTimeout(() => {
|
||||
uni.switchTab({
|
||||
url: '/pages/index/index'
|
||||
})
|
||||
}, 2000)
|
||||
} catch {
|
||||
}
|
||||
} catch {
|
||||
uni.$u.toast('请补全必填项')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.bg-green {
|
||||
background-color: #39b54a;
|
||||
color: #fff;
|
||||
border-radius: 16upx;
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,107 @@
|
|||
<template>
|
||||
<view class="content">
|
||||
<view class="card">
|
||||
<u-form labelPosition="left" :model="form" :rules="rules" ref="formRef" labelWidth="140px">
|
||||
<u-form-item label="动火分析时间" prop="ANALYZE_TIME" borderBottom required @click="fnDateTimePickerClick('ANALYZE_TIME')">
|
||||
<u-input v-model="form.ANALYZE_TIME" border="none" readonly />
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</u-form-item>
|
||||
<u-form-item label="分析点名称" prop="ANALYZE_PLACE" borderBottom required>
|
||||
<u-input v-model="form.ANALYZE_PLACE" border="none" />
|
||||
</u-form-item>
|
||||
<u-form-item label="分析数据(%LEL)" prop="ANALYZE_RESULT" borderBottom required>
|
||||
<u-input v-model="form.ANALYZE_RESULT" border="none" type="number" placeholder="0" />
|
||||
<view class="title">(%LEL)</view>
|
||||
</u-form-item>
|
||||
<u-form-item label="分析人" prop="ANALYZE_USER_NAME" borderBottom required>
|
||||
<u-input v-model="form.ANALYZE_USER_NAME" border="none" />
|
||||
</u-form-item>
|
||||
</u-form>
|
||||
<view class="mt-10">
|
||||
<u-button type="primary" text="保存" @click="$u.debounce(fnSubmit, 1000, true)" />
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<u-datetime-picker :show="dateTimePicker.show" v-model="dateTimePicker.value" :mode="dateTimePicker.mode"
|
||||
:maxDate="dateTimePicker.max" :key="dateTimePicker.type" @confirm="fnDateTimePickerConfirm"
|
||||
@cancel="fnDateTimePickerCancel" />
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getHotWorkGasInfoSave } from "@/api";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
form: {
|
||||
/** 动火分析时间 */
|
||||
ANALYZE_TIME: '',
|
||||
/** 分析点名称 */
|
||||
ANALYZE_PLACE: '',
|
||||
/** 分析数据(%LEL) */
|
||||
ANALYZE_RESULT: '',
|
||||
/** 分析人 */
|
||||
ANALYZE_USER_NAME: this.$store.getters.getUserInfo.NAME,
|
||||
ANALYZE_USER_ID: this.$store.getters.getUserInfo.USER_ID,
|
||||
EW_RU_TASK_ID:'',
|
||||
EW_RU_JOB_ID:'',
|
||||
TYPE: ''
|
||||
},
|
||||
rules: {
|
||||
ANALYZE_TIME: [{ type: 'string', required: true, message: '请选择动火分析时间', trigger: ['blur', 'change'] }],
|
||||
ANALYZE_PLACE: [{ type: 'string', required: true, message: '请输入分析点名称', trigger: ['blur', 'change'] }],
|
||||
ANALYZE_RESULT: [{ type: 'string', required: true, message: '请输入分析数据', trigger: ['blur', 'change'] }],
|
||||
ANALYZE_USER_NAME: [{ type: 'string', required: true, message: '请输入分析人', trigger: ['blur', 'change'] }],
|
||||
},
|
||||
dateTimePicker: {
|
||||
show: false,
|
||||
value: Number(new Date()),
|
||||
max: new Date().getTime(),
|
||||
mode: 'datetime',
|
||||
type: 'datetime-picker'
|
||||
},
|
||||
}
|
||||
},
|
||||
onLoad(query) {
|
||||
this.form.EW_RU_TASK_ID = query.EW_RU_TASK_ID
|
||||
this.TYPE = query.TYPE
|
||||
this.form.EW_RU_JOB_ID = query.EW_RU_JOB_ID
|
||||
},
|
||||
methods: {
|
||||
fnDateTimePickerClick(event) {
|
||||
this.dateTimePicker.type = event
|
||||
this.dateTimePicker.value = Number(new Date(this.form[event])) || Number(new Date())
|
||||
this.dateTimePicker.show = true
|
||||
},
|
||||
fnDateTimePickerConfirm(event) {
|
||||
this.form[this.dateTimePicker.type] = uni.$u.timeFormat(event.value, 'yyyy-mm-dd hh:MM')
|
||||
this.fnDateTimePickerCancel()
|
||||
},
|
||||
fnDateTimePickerCancel() {
|
||||
this.dateTimePicker.show = false
|
||||
},
|
||||
async fnSubmit() {
|
||||
try {
|
||||
await this.$refs.formRef.validate()
|
||||
try {
|
||||
await getHotWorkGasInfoSave({
|
||||
...this.form
|
||||
})
|
||||
uni.$u.toast('保存成功')
|
||||
setTimeout(() => {
|
||||
uni.switchTab({
|
||||
url: '/pages/index/index'
|
||||
})
|
||||
}, 2000)
|
||||
} catch {
|
||||
}
|
||||
} catch (e) {
|
||||
uni.$u.toast('请补全必填项')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,94 @@
|
|||
<template>
|
||||
<view class="content">
|
||||
<view v-if="isView !== '1'" class="flex-end padding" style="padding: 20upx;">
|
||||
<u-button type="primary" text="添加" size="mini" class="bth-mini" @click="goToAdd"/>
|
||||
</view>
|
||||
<u-list v-if="list.length > 0">
|
||||
<u-list-item v-for="(item, index) in list" :key="index">
|
||||
<view class="flex-between main-title">
|
||||
<text>动火分析时间: {{ item.ANALYZE_TIME }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title">
|
||||
<text>分析点名称: {{ item.ANALYZE_PLACE }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title">
|
||||
<text>分析数据(%LEL): {{ item.ANALYZE_PLACE }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title">
|
||||
<text>分析人:{{ item.ANALYZE_USER_NAME }}</text>
|
||||
</view>
|
||||
<view v-if="isView !== '1'" class="flex-between mt-10 subtitle">
|
||||
<view></view>
|
||||
<view class="flex-between">
|
||||
<u-button type="error" text="删除" size="mini" class="bth-mini" @click="fnDelete(item)"/>
|
||||
</view>
|
||||
</view>
|
||||
</u-list-item>
|
||||
</u-list>
|
||||
<empty v-else></empty>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getHotWorkGasInfo, getHotWorkGasDelete} from "@/api";
|
||||
import {getHotWorkGasAll} from "../../../../api";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
list: [],
|
||||
EW_RU_TASK_ID: '',
|
||||
EW_RU_JOB_ID: '',
|
||||
TYPE: '',
|
||||
isView: '0'
|
||||
}
|
||||
},
|
||||
onLoad(query) {
|
||||
this.EW_RU_TASK_ID = query.taskId
|
||||
this.TYPE = query.type
|
||||
this.EW_RU_JOB_ID = query.EW_RU_JOB_ID
|
||||
this.isView = query.isView
|
||||
},
|
||||
onShow() {
|
||||
this.resetList()
|
||||
},
|
||||
methods: {
|
||||
async getData() {
|
||||
let resData = await getHotWorkGasAll({
|
||||
EW_RU_TASK_ID: this.EW_RU_TASK_ID,
|
||||
EW_RU_JOB_ID: this.EW_RU_JOB_ID,
|
||||
});
|
||||
this.list = [...this.list, ...resData.list];
|
||||
},
|
||||
resetList() {
|
||||
this.list = []
|
||||
this.getData()
|
||||
},
|
||||
fnDelete(item) {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '确定要删除这条记录?',
|
||||
success: async res => {
|
||||
if (res.confirm) {
|
||||
await getHotWorkGasDelete({
|
||||
EW_SP_EG_ID: item.EW_SP_EG_ID
|
||||
})
|
||||
uni.$u.toast('删除成功')
|
||||
this.resetList()
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
goToAdd() {
|
||||
uni.$u.route({
|
||||
url: '/pages/eight_assignments/hot_work/gas/add',
|
||||
params: {
|
||||
EW_RU_TASK_ID: this.EW_RU_TASK_ID,
|
||||
EW_RU_JOB_ID: this.EW_RU_JOB_ID,
|
||||
TYPE: this.TYPE
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -0,0 +1,13 @@
|
|||
<template>
|
||||
<view>name的预留位置</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,174 @@
|
|||
<template>
|
||||
<view class="container">
|
||||
<view class="card">
|
||||
<view class="card">
|
||||
<u-form label-position="left" label-width="auto">
|
||||
<view class="mt-10 flex-end">
|
||||
<u-button custom-style="width: 100rpx;margin:0" type="primary" size="mini" text="添加" @click="fnAddHotWorkOperatorList()"/>
|
||||
</view>
|
||||
<view v-for="(item, index) in hotWorkOperatorList" :key="item.id" style="position: relative;border: 1px dashed #ccc;padding: 20rpx 20rpx 20rpx 40rpx;" class="mt-10">
|
||||
<u-form-item label="动火操作人部门" prop="DEPARTMENT_NAME" required @click="fnSelectDepartment(index)">
|
||||
<view class="select_content">
|
||||
<u-input v-model="item.DEPARTMENT_NAME || '请选择'" border="none" input-align="right" readonly />
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</view>
|
||||
</u-form-item>
|
||||
<u-line/>
|
||||
<u-form-item label="动火操作人" prop="USER_NAME" required @click="fnSelectUser(index)">
|
||||
<view class="select_content">
|
||||
<u-input v-model="item.USER_NAME || '请选择'" border="none" input-align="right" readonly/>
|
||||
<u-icon name="arrow-right"></u-icon>
|
||||
</view>
|
||||
</u-form-item>
|
||||
<u-line/>
|
||||
<u-icon v-if="index !== 0" name="close-circle-fill" color="#ff2929" size="20" custom-style="position: absolute;right: -20rpx;top: -20rpx" @click="hotWorkOperatorList.splice(index, 1)"/>
|
||||
</view>
|
||||
<view class="mt-10 flex-between">
|
||||
<u-button type="primary" shape="circle" text="下一步" :throttle-time="1000" @click="fnSubmit()"/>
|
||||
</view>
|
||||
</u-form>
|
||||
</view>
|
||||
</view>
|
||||
<u-picker
|
||||
:key="picker.key"
|
||||
:show="picker.show"
|
||||
:columns="picker.columns"
|
||||
:default-index="picker.defaultIndex"
|
||||
key-name="NAME"
|
||||
@confirm="fnPickerConfirm"
|
||||
@cancel="fnPickerCancel"
|
||||
/>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { setSubmitForm} from "@/utils/submitHomeworkProcess";
|
||||
import {getUserList} from "@/api";
|
||||
|
||||
export default {
|
||||
components: { setSubmitForm },
|
||||
data() {
|
||||
return {
|
||||
form: {},
|
||||
formItems: {},
|
||||
taskId: '',
|
||||
hotWorkOperatorList: [],
|
||||
picker: {
|
||||
show: false,
|
||||
columns: [],
|
||||
key: "",
|
||||
defaultIndex: [0]
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
const eventChannel = this.getOpenerEventChannel();
|
||||
eventChannel.on('data', (data) => {
|
||||
console.log(data)
|
||||
this.form = data.form;
|
||||
this.formItems = data.formItems;
|
||||
this.taskId = data.taskId;
|
||||
this.hotWorkOperatorList = uni.$u.deepClone(data.form.hotWorkOperatorList);
|
||||
if (this.hotWorkOperatorList.length === 0) this.fnAddHotWorkOperatorList();
|
||||
else {
|
||||
for (let i = 0; i < this.hotWorkOperatorList.length; i++) {
|
||||
for (let i = 0; i < this.hotWorkOperatorList.length; i++) {
|
||||
fnGetUserList(this.hotWorkOperatorList.value[i], i);
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
},
|
||||
methods: {
|
||||
fnAddHotWorkOperatorList() {
|
||||
this.hotWorkOperatorList.push({
|
||||
DEPARTMENT_NAME: "",
|
||||
DEPARTMENT_ID: "",
|
||||
USER_NAME: "",
|
||||
USER_ID: "",
|
||||
TYPE: "",
|
||||
id: uni.$u.guid(),
|
||||
columns: [],
|
||||
});
|
||||
},
|
||||
fnSelectDepartment(index) {
|
||||
uni.navigateTo({
|
||||
url: "/pages/eight_assignments/select_department",
|
||||
events: {
|
||||
confirm: (event) => {
|
||||
this.hotWorkOperatorList[index].DEPARTMENT_NAME = event.DEPARTMENT_NAME;
|
||||
this.hotWorkOperatorList[index].DEPARTMENT_ID = event.DEPARTMENT_ID;
|
||||
this.hotWorkOperatorList[index].USER_NAME = "";
|
||||
this.hotWorkOperatorList[index].USER_ID = "";
|
||||
this.hotWorkOperatorList[index].TYPE = event.TYPE;
|
||||
this.fnGetUserList(event, index);
|
||||
},
|
||||
},
|
||||
});
|
||||
},
|
||||
fnSelectUser(index) {
|
||||
this.picker.key = index;
|
||||
this.picker.columns = this.hotWorkOperatorList[index].columns;
|
||||
this.picker.defaultIndex = [0];
|
||||
if (this.picker.columns[0].length === 0) {
|
||||
uni.$u.toast("没有选择部门或当前部门没有人员");
|
||||
return;
|
||||
}
|
||||
for (let i = 0; i < this.picker.columns[0].length; i++) {
|
||||
if (
|
||||
this.picker.columns[0][i].USER_ID ===
|
||||
this.hotWorkOperatorList[index].USER_ID
|
||||
) {
|
||||
this.picker.defaultIndex = [i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.picker.show = true;
|
||||
},
|
||||
async fnSubmit() {
|
||||
for (let i = 0; i < this.hotWorkOperatorList.length; i++) {
|
||||
if (
|
||||
!this.hotWorkOperatorList[i].DEPARTMENT_ID ||
|
||||
!this.hotWorkOperatorList[i].USER_ID
|
||||
) {
|
||||
uni.$u.toast("请完善动火操作人信息");
|
||||
return;
|
||||
}
|
||||
}
|
||||
await setSubmitForm({
|
||||
form: {...this.form, hotWorkOperatorList: this.hotWorkOperatorList},
|
||||
formItems: this.formItems,
|
||||
TYPE: "hotWork",
|
||||
EW_RU_TASK_ID: this.taskId,
|
||||
});
|
||||
},
|
||||
async fnGetUserList({DEPARTMENT_ID, TYPE}, index) {
|
||||
const resData = await getUserList({DEPARTMENT_ID, TYPE});
|
||||
for (let i = 0; i < resData.list.list.length; i++) {
|
||||
resData.list.list[i].NAME = resData.list.list[i].name || resData.list.list[i].NAME;
|
||||
resData.list.list[i].USER_ID = resData.list.list[i].user_ID || resData.list.list[i].USER_ID;
|
||||
}
|
||||
this.hotWorkOperatorList[index].columns = [resData.list.list];
|
||||
},
|
||||
fnPickerConfirm(event){
|
||||
this.hotWorkOperatorList[this.picker.key].USER_ID = event.value[0].USER_ID;
|
||||
this.hotWorkOperatorList[this.picker.key].USER_NAME = event.value[0].NAME;
|
||||
this.fnPickerCancel();
|
||||
},
|
||||
fnPickerCancel(){
|
||||
this.picker.show = false;
|
||||
}
|
||||
},
|
||||
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.select_content{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,126 @@
|
|||
<template>
|
||||
<view class="content">
|
||||
<view class="card">
|
||||
<view class="items">
|
||||
<view class="item" v-for="(item,index) in baseList" :key="index" @click="fnNavigator(index)">
|
||||
<image :src="item.img" mode=""></image>
|
||||
<view class="text">
|
||||
<text>{{ item.title }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
baseList: [
|
||||
{
|
||||
img: require('../../static/icon-apps/i1.png'),
|
||||
title: '受限空间安全作业',
|
||||
url: '/pages/eight_assignments/subordinate_index',
|
||||
params: {
|
||||
type: 'confinedSpace',
|
||||
}
|
||||
},
|
||||
{
|
||||
img: require('../../static/icon-apps/i2.png'),
|
||||
title: '盲板抽堵作业',
|
||||
url: '/pages/eight_assignments/subordinate_index',
|
||||
params: {
|
||||
type: 'blindBoard',
|
||||
}
|
||||
},
|
||||
{
|
||||
img: require('../../static/icon-apps/i3.png'),
|
||||
title: '动土作业',
|
||||
url: '/pages/eight_assignments/subordinate_index',
|
||||
params: {
|
||||
type: 'breakGround',
|
||||
}
|
||||
},
|
||||
{
|
||||
img: require('../../static/icon-apps/i4.png'),
|
||||
title: '高处作业',
|
||||
url: '/pages/eight_assignments/subordinate_index',
|
||||
params: {
|
||||
type: 'highWork',
|
||||
}
|
||||
},
|
||||
{
|
||||
img: require('../../static/icon-apps/i5.png'),
|
||||
title: '吊装作业',
|
||||
url: '/pages/eight_assignments/subordinate_index',
|
||||
params: {
|
||||
type: 'hoisting',
|
||||
}
|
||||
},
|
||||
{
|
||||
img: require('../../static/icon-apps/i6.png'),
|
||||
title: '临时用电作业',
|
||||
url: '/pages/eight_assignments/subordinate_index',
|
||||
params: {
|
||||
type: 'electricity',
|
||||
}
|
||||
},
|
||||
{
|
||||
img: require('../../static/icon-apps/i7.png'),
|
||||
title: '动火作业',
|
||||
url: '/pages/eight_assignments/subordinate_index',
|
||||
params: {
|
||||
type: 'hotWork',
|
||||
}
|
||||
},
|
||||
{
|
||||
img: require('../../static/icon-apps/i8.png'),
|
||||
title: '断路作业',
|
||||
url: '/pages/eight_assignments/subordinate_index',
|
||||
params: {
|
||||
type: 'cutRoad',
|
||||
}
|
||||
},
|
||||
]
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
fnNavigator(e) {
|
||||
uni.$u.route({
|
||||
url: this.baseList[e].url,
|
||||
params: {
|
||||
title: this.baseList[e].title,
|
||||
...this.baseList[e].params
|
||||
}
|
||||
})
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.items {
|
||||
background-color: #fff;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-top: -20upx;
|
||||
|
||||
.item {
|
||||
flex-basis: 25%;
|
||||
text-align: center;
|
||||
margin-top: 20upx;
|
||||
|
||||
image {
|
||||
width: 110upx;
|
||||
height: 110upx;
|
||||
}
|
||||
|
||||
.text {
|
||||
width: 130upx;
|
||||
font-size: 28upx;
|
||||
margin: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,76 @@
|
|||
<template>
|
||||
<view class="content">
|
||||
<view class="card">
|
||||
<u-form labelPosition="top" :model="form" :rules="rules" ref="formRef" labelWidth="auto">
|
||||
<u-form-item label="其它安全措施" borderBottom required v-for="(item,index) in form.value" :key="item.id">
|
||||
<u-button v-if="index === 0" type="primary" size="mini" text="新增"
|
||||
:customStyle="{position: 'absolute',top: '-46upx',right: '20upx',width:'100upx',margin:0}"
|
||||
@click="fnAddValue"/>
|
||||
<u-button v-if="index !== 0" type="error" size="mini" text="删除"
|
||||
:customStyle="{position: 'absolute',top: '-46upx',right: '20upx',width:'100upx',margin:0}"
|
||||
@click="fnDeleteValue(index)"/>
|
||||
<u-textarea v-model="item.value" border="none" autoHeight maxlength="-1"/>
|
||||
</u-form-item>
|
||||
</u-form>
|
||||
<view class="mt-10">
|
||||
<u-button type="primary" text="下一步" @click="$u.debounce(fnSubmit, 1000,true)"/>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {setOtherSecurityMeasures} from "@/utils/submitHomeworkProcess";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
EW_RU_JOB_ID: '',
|
||||
taskId: '',
|
||||
TYPE: '',
|
||||
CORP_ID: '',
|
||||
vernier: '',
|
||||
form: {
|
||||
value: []
|
||||
},
|
||||
rules: {},
|
||||
}
|
||||
},
|
||||
onLoad(query) {
|
||||
this.EW_RU_JOB_ID = query.EW_RU_JOB_ID
|
||||
this.taskId = query.taskId
|
||||
this.TYPE = query.TYPE
|
||||
this.CORP_ID = query.CORP_ID
|
||||
this.vernier = query.vernier
|
||||
this.fnAddValue()
|
||||
},
|
||||
methods: {
|
||||
fnAddValue() {
|
||||
this.form.value.push({value: '', id: uni.$u.guid()})
|
||||
},
|
||||
fnDeleteValue(index) {
|
||||
this.form.value.splice(index, 1)
|
||||
},
|
||||
async fnSubmit() {
|
||||
for (let i = 0; i < this.form.value.length; i++) {
|
||||
if (!this.form.value[i].value) {
|
||||
uni.$u.toast(`第${i + 1}项中,请输入内容`)
|
||||
return
|
||||
}
|
||||
}
|
||||
await setOtherSecurityMeasures({
|
||||
value: this.form.value,
|
||||
taskId: this.taskId,
|
||||
EW_RU_JOB_ID: this.EW_RU_JOB_ID,
|
||||
CORP_ID: this.CORP_ID,
|
||||
TYPE: this.TYPE,
|
||||
vernier: this.vernier
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
</style>
|
|
@ -0,0 +1,112 @@
|
|||
<template>
|
||||
<view class="content">
|
||||
<view class="card">
|
||||
<view class="title">{{ questionnaireInfo.NAME }}</view>
|
||||
<uni-table border class="mt-10">
|
||||
<uni-tr>
|
||||
<uni-th>主要安全措施</uni-th>
|
||||
<uni-th width="200rpx">是否涉及</uni-th>
|
||||
</uni-tr>
|
||||
<uni-tr v-for="(item,index) in items" :key="item.itemInfo.EW_RE_QUES_ITEM_ID">
|
||||
<uni-td>
|
||||
<view>{{ item.itemInfo.TEXT_INFO }}</view>
|
||||
<view v-for="item1 in item.inputBoxes" :key="item1.EW_RE_QUES_ITEM_FILL_ID">
|
||||
<u-cell :title="item1.TEXT_INFO + ':'" :border="false">
|
||||
<template #value>
|
||||
<u-input v-model="item1.MARKERS" :customStyle="{marginTop: '8px'}" border="bottom"/>
|
||||
</template>
|
||||
</u-cell>
|
||||
</view>
|
||||
</uni-td>
|
||||
<uni-td>
|
||||
<u-radio-group placement="column" v-model="item.optionsValue" @change="fnRadioChange($event,index)">
|
||||
<u-radio :customStyle="{marginTop: '8px'}" v-for="item1 in item.options"
|
||||
:key="item1.EW_RE_QUES_ITEM_FILL_ID" :label="item1.TEXT_INFO" :name="item1.VALUE_INFO"/>
|
||||
</u-radio-group>
|
||||
</uni-td>
|
||||
</uni-tr>
|
||||
</uni-table>
|
||||
<view class="mt-10">
|
||||
<u-button type="primary" text="下一步" @click="$u.debounce(fnSubmit, 1000,true)"/>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {setSecurityMeasures} from "@/utils/submitHomeworkProcess";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
EW_RU_JOB_ID: '',
|
||||
taskId: '',
|
||||
TYPE: '',
|
||||
CORP_ID: '',
|
||||
questionnaireInfo: {},
|
||||
items: [],
|
||||
vernier: ''
|
||||
}
|
||||
},
|
||||
onLoad(event) {
|
||||
this.vernier = event.vernier
|
||||
const eventChannel = this.getOpenerEventChannel();
|
||||
eventChannel.on('questionnaire', (data) => {
|
||||
this.EW_RU_JOB_ID = data.EW_RU_JOB_ID
|
||||
this.taskId = data.taskId
|
||||
this.TYPE = data.TYPE
|
||||
this.CORP_ID = data.CORP_ID
|
||||
this.questionnaireInfo = data.questionnaire.questionnaire
|
||||
this.items = data.questionnaire.items
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
fnRadioChange(event, index) {
|
||||
for (let i = 0; i < this.items[index].options.length; i++) {
|
||||
this.items[index].options[i].MARKERS = '0'
|
||||
if (this.items[index].options[i].VALUE_INFO === event) {
|
||||
this.items[index].options[i].MARKERS = '1'
|
||||
}
|
||||
}
|
||||
},
|
||||
async fnSubmit() {
|
||||
for (let i = 0; i < this.items.length; i++) {
|
||||
for (let j = 0; j < this.items[i].inputBoxes.length; j++) {
|
||||
if (!this.items[i].inputBoxes[j].MARKERS) {
|
||||
uni.$u.toast(`第${i + 1}行第${j + 1}项未填写`)
|
||||
return
|
||||
}
|
||||
}
|
||||
for (let j = 0; j < this.items[i].options.length; j++) {
|
||||
if (!this.items[i].options[j].MARKERS) {
|
||||
uni.$u.toast(`第${i + 1}行第${j + 1}项未选择`)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
await setSecurityMeasures({
|
||||
questionnaires: this.items,
|
||||
questionnaireInfo: this.questionnaireInfo,
|
||||
taskId: this.taskId,
|
||||
EW_RU_JOB_ID: this.EW_RU_JOB_ID,
|
||||
CORP_ID: this.CORP_ID,
|
||||
TYPE: this.TYPE,
|
||||
vernier:this.vernier
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.title {
|
||||
text-align: center;
|
||||
font-size: 36rpx;
|
||||
}
|
||||
|
||||
::v-deep {
|
||||
.u-cell__body {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,109 @@
|
|||
<template>
|
||||
<view class="content">
|
||||
<view class="card">
|
||||
<u-radio-group v-model="select_corp" placement="column">
|
||||
<u-radio :customStyle="{marginBottom: '20rpx'}" v-for="item in list" :key="item.CORPINFO_ID"
|
||||
:label="item.NAME" :name="item.CORPINFO_ID">
|
||||
</u-radio>
|
||||
</u-radio-group>
|
||||
<view class="button_placeholder"></view>
|
||||
<view class="button">
|
||||
<u-button type="primary" text="确定" @click="fnConfirm"></u-button>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getCorpList} from '@/api'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
type: '',
|
||||
list: [],
|
||||
select_corp: ''
|
||||
}
|
||||
},
|
||||
onLoad(options) {
|
||||
this.type = options.type
|
||||
this.fnGetData()
|
||||
},
|
||||
methods: {
|
||||
async fnGetData() {
|
||||
const resData = await getCorpList()
|
||||
this.list = resData.list.corpInfoDos
|
||||
},
|
||||
fnConfirm() {
|
||||
if (!this.select_corp) {
|
||||
uni.$u.toast('请选择作业分公司')
|
||||
return;
|
||||
}
|
||||
const urlByTypeMap = {
|
||||
'confinedSpace': {
|
||||
'035958e685cf4850bc40151c5e0617a6': '',
|
||||
'default': '/pages/eight_assignments/confined_space/apply'
|
||||
},
|
||||
'blindBoard': {
|
||||
'035958e685cf4850bc40151c5e0617a6': '',
|
||||
'default': '/pages/eight_assignments/blind_board/apply'
|
||||
},
|
||||
'breakGround': {
|
||||
'035958e685cf4850bc40151c5e0617a6': '',
|
||||
'default': '/pages/eight_assignments/break_ground/apply'
|
||||
},
|
||||
'highWork': {
|
||||
'035958e685cf4850bc40151c5e0617a6': '',
|
||||
'default': '/pages/eight_assignments/high_work/apply'
|
||||
},
|
||||
'hoisting': {
|
||||
'035958e685cf4850bc40151c5e0617a6': '',
|
||||
'default': '/pages/eight_assignments/hoisting/apply'
|
||||
},
|
||||
'electricity': {
|
||||
'035958e685cf4850bc40151c5e0617a6': '',
|
||||
'default': '/pages/eight_assignments/electricity/apply'
|
||||
},
|
||||
'cutRoad': {
|
||||
'035958e685cf4850bc40151c5e0617a6': '',
|
||||
'default': '/pages/eight_assignments/cut_road/apply'
|
||||
},
|
||||
'hotWork': {
|
||||
'035958e685cf4850bc40151c5e0617a6': '',
|
||||
'default': '/pages/eight_assignments/hot_work/apply'
|
||||
},
|
||||
}
|
||||
const url = urlByTypeMap[this.type][this.select_corp] ?? urlByTypeMap[this.type].default
|
||||
let params = {}
|
||||
for (let i = 0; i < this.list.length; i++) {
|
||||
if (this.list[i].CORPINFO_ID === this.select_corp) {
|
||||
params = {
|
||||
CORPINFO_ID: this.list[i].CORPINFO_ID,
|
||||
CORP_NAME: this.list[i].NAME,
|
||||
type: this.type
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
uni.$u.route({
|
||||
url,
|
||||
type: 'redirect',
|
||||
params
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.button_placeholder {
|
||||
height: 100rpx;
|
||||
}
|
||||
|
||||
.button {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,94 @@
|
|||
<template>
|
||||
<view>
|
||||
<u-modal :show="modelShow" title="选择所属端" showCancelButton cancelText="返回" @cancel="fnModalCancel"
|
||||
@confirm="fnModalConfirm">
|
||||
<u-radio-group v-model="type" placement="column">
|
||||
<u-radio :customStyle="{marginBottom: '8px'}" label="企业端" name="0"/>
|
||||
<u-radio :customStyle="{marginBottom: '8px'}" label="监管端" name="1"/>
|
||||
<u-radio :customStyle="{marginBottom: '8px'}" label="相关方端" name="2"/>
|
||||
</u-radio-group>
|
||||
</u-modal>
|
||||
<next-tree
|
||||
v-if="!modelShow"
|
||||
uiMode="page"
|
||||
ref="nextTreeRef"
|
||||
checkStrictly
|
||||
funcMode="radio"
|
||||
selectParent
|
||||
:ifSearch="false"
|
||||
:treeData="treeData"
|
||||
themeColor="#2a56f7"
|
||||
page-height="92vh"
|
||||
labelKey="DEPARTMENT_NAME"
|
||||
valueKey="DEPARTMENT_ID"
|
||||
childrenKey="nodes"
|
||||
@change="fnTreeChange"
|
||||
>
|
||||
<template #fixedBottomBar>
|
||||
<view style="padding: 20upx;margin-bottom: 20upx;">
|
||||
<u-button type="primary" text="确定" @click="fnTreeConfirm"/>
|
||||
</view>
|
||||
</template>
|
||||
</next-tree>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getDepartmentTree} from "@/api";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
modelShow: true,
|
||||
type: '',
|
||||
CORP_ID: '',
|
||||
treeData: [],
|
||||
treeSelectData: []
|
||||
}
|
||||
},
|
||||
onLoad(query) {
|
||||
this.CORP_ID = query.CORP_ID
|
||||
},
|
||||
methods: {
|
||||
fnModalCancel() {
|
||||
uni.navigateBack()
|
||||
},
|
||||
fnModalConfirm() {
|
||||
if (!this.type) {
|
||||
uni.$u.toast('请选择所属端')
|
||||
return
|
||||
}
|
||||
this.modelShow = false
|
||||
this.fnGetDepartmentTree()
|
||||
},
|
||||
async fnGetDepartmentTree() {
|
||||
let CORP_ID = ''
|
||||
if (this.type === '0') CORP_ID = this.CORP_ID
|
||||
if (this.type === '2') CORP_ID = this.$store.getters.getUserInfo.CORPINFO_ID
|
||||
if (this.type === '1') CORP_ID = '1'
|
||||
let resData = await getDepartmentTree({TYPE: this.type, CORP_ID})
|
||||
this.treeData = resData.tree.tree
|
||||
},
|
||||
fnTreeChange(event) {
|
||||
this.treeSelectData = event
|
||||
},
|
||||
fnTreeConfirm() {
|
||||
if (this.treeSelectData.length === 0) {
|
||||
uni.$u.toast('请选择部门')
|
||||
return
|
||||
}
|
||||
this.getOpenerEventChannel().emit("confirm", {
|
||||
DEPARTMENT_NAME: this.treeSelectData[0].DEPARTMENT_NAME,
|
||||
DEPARTMENT_ID: this.treeSelectData[0].DEPARTMENT_ID,
|
||||
CORP_ID: this.CORP_ID,
|
||||
TYPE: this.type
|
||||
});
|
||||
uni.navigateBack();
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
</style>
|
|
@ -0,0 +1,260 @@
|
|||
<template>
|
||||
<view>
|
||||
<view class="content">
|
||||
<view class="card">
|
||||
<u-form labelPosition="left" :model="form" :rules="rules" ref="formRef" labelWidth="140px">
|
||||
<view v-for="(item, index) in list" :key="index">
|
||||
<view v-if="item.multiple === '1'" class="mt-10 multiple_btn">
|
||||
<u-button type="primary" size="mini" :customStyle="{width:'auto',margin:0}"
|
||||
:text="'添加' + item.list[1].name" @click="fnAdd(index)"/>
|
||||
</view>
|
||||
<view v-for="(item1, index1) in item.list"
|
||||
:key="index.toString() + index1.toString()"
|
||||
:class="{'mt-10': item.multiple === '1' && index1 % 2 === 0,'multiple_form_item': item.multiple === '1'}">
|
||||
<u-form-item
|
||||
:label="item1.name"
|
||||
:prop="item1.key_name"
|
||||
borderBottom
|
||||
:required="item1.isRequired === '1'"
|
||||
@click="fnSelect(item,item1)">
|
||||
<u-input v-model="form[item1.key_name]" border="none" readonly/>
|
||||
<u-icon name="arrow-right"/>
|
||||
</u-form-item>
|
||||
<u-icon name="close-circle-fill" color="#ff2929" size="20"
|
||||
v-if="item.multiple === '1' && index1 !== 0 && index1 % 2 === 0"
|
||||
:customStyle="{position: 'absolute',top:'-15rpx',right:'0'}"
|
||||
@click="fnDelete(index,index1)"/>
|
||||
</view>
|
||||
</view>
|
||||
</u-form>
|
||||
<view class="mt-10">
|
||||
<u-button type="primary" text="下一步" @click="$u.debounce(fnSubmit, 1000,true)"/>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<u-picker :show="picker.show" :columns="picker.columns" keyName="NAME"
|
||||
:key="picker.currentColumnKey" @confirm="fnPickerConfirm" @cancel="fnPickerCancel"/>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getUserList} from "@/api";
|
||||
import {setPersonnelForm} from "@/utils/submitHomeworkProcess";
|
||||
import {addFlowInfo} from '@/utils/submitHomeworkProcess';
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
taskId: '',
|
||||
CORP_ID: '',
|
||||
TYPE: '',
|
||||
list: [],
|
||||
form: {},
|
||||
rules: {},
|
||||
picker: {
|
||||
show: false,
|
||||
columnsAll: {},
|
||||
columns: [],
|
||||
currentColumnKey: '',
|
||||
currentName: '',
|
||||
currentId: '',
|
||||
},
|
||||
initFlag: null,
|
||||
vernier: null
|
||||
}
|
||||
},
|
||||
onLoad(event) {
|
||||
this.vernier = event.vernier
|
||||
const eventChannel = this.getOpenerEventChannel();
|
||||
eventChannel.on('nextNodes', (data) => {
|
||||
for (let i = 0; i < data.nextNodes.length; i++) {
|
||||
if (data.nextNodes[i].multiple === '1') {
|
||||
const guid = uni.$u.guid()
|
||||
for (let j = 0; j < data.nextNodes[i].list.length; j++) {
|
||||
// 把多选的后面随机拼接一个值,用于必填验证,提交数据的时候删除
|
||||
data.nextNodes[i].list[j].key_name = data.nextNodes[i].list[j].key_name + `&&${guid}`
|
||||
data.nextNodes[i].list[j].key_id = data.nextNodes[i].list[j].key_id + `&&${guid}`
|
||||
}
|
||||
}
|
||||
}
|
||||
this.list = data.nextNodes
|
||||
this.taskId = data.taskId
|
||||
this.EW_RU_JOB_ID = data.EW_RU_JOB_ID
|
||||
this.CORP_ID = data.CORP_ID
|
||||
this.TYPE = data.TYPE
|
||||
this.initFlag = data.initFlag
|
||||
this.fnInitFormAndRules()
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
fnInitFormAndRules() {
|
||||
this.list.forEach((item) => {
|
||||
item.list.forEach((item1) => {
|
||||
// 将key_name和key_id作为form的key
|
||||
// 将key_name作为rules的key
|
||||
this.$set(this.form, item1.key_name, '')
|
||||
this.$set(this.form, item1.key_id, '')
|
||||
this.$set(this.rules, item1.key_name, [{
|
||||
required: item1.isRequired === '1',
|
||||
message: item1.name + '不能为空',
|
||||
trigger: ['blur', 'change'],
|
||||
}])
|
||||
})
|
||||
})
|
||||
},
|
||||
fnAdd(index) {
|
||||
const currentItem = this.list[index]
|
||||
// 克隆拿到当前的部门和人员
|
||||
const currentItemDepartment = uni.$u.deepClone(currentItem.list[0])
|
||||
const currentItemUser = uni.$u.deepClone(currentItem.list[1])
|
||||
// 重新生成key_id和key_name
|
||||
const guid = uni.$u.guid()
|
||||
currentItemDepartment.key_id = this.fnReSplicing(currentItemDepartment.key_id, guid)
|
||||
currentItemDepartment.key_name = this.fnReSplicing(currentItemDepartment.key_name, guid)
|
||||
currentItemUser.key_id = this.fnReSplicing(currentItemUser.key_id, guid)
|
||||
currentItemUser.key_name = this.fnReSplicing(currentItemUser.key_name, guid)
|
||||
// 添加到数组里
|
||||
currentItem.list.push(currentItemDepartment)
|
||||
currentItem.list.push(currentItemUser)
|
||||
// 将新生成的key_id和key_name添加到form和rules
|
||||
this.$set(this.form, currentItemDepartment.key_id, '')
|
||||
this.$set(this.form, currentItemDepartment.key_name, '')
|
||||
this.$set(this.form, currentItemUser.key_id, '')
|
||||
this.$set(this.form, currentItemUser.key_name, '')
|
||||
this.$set(this.rules, currentItemDepartment.key_name, [{
|
||||
required: currentItemDepartment.isRequired === '1',
|
||||
message: currentItemDepartment.name + '不能为空',
|
||||
trigger: ['blur', 'change'],
|
||||
}])
|
||||
this.$set(this.rules, currentItemUser.key_name, [{
|
||||
required: currentItemUser.isRequired === '1',
|
||||
message: currentItemUser.name + '不能为空',
|
||||
trigger: ['blur', 'change'],
|
||||
}])
|
||||
},
|
||||
fnReSplicing(value, guid) {
|
||||
return value.substring(0, value.indexOf('&&')) + `&&${guid}`
|
||||
},
|
||||
fnDelete(index, index1) {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '是否删除该条数据?',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
const departmentKeyId = this.list[index].list[index1].key_id
|
||||
const departmentKeyName = this.list[index].list[index1].key_name
|
||||
const userKeyId = this.list[index].list[index1 + 1].key_id
|
||||
const userKeyName = this.list[index].list[index1 + 1].key_name
|
||||
// 需要删除两遍,第一遍是部门,第二遍是人员
|
||||
this.list[index].list.splice(index1, 1)
|
||||
this.list[index].list.splice(index1, 1)
|
||||
// 在form和rules中删除
|
||||
delete this.form[departmentKeyId]
|
||||
delete this.form[departmentKeyName]
|
||||
delete this.form[userKeyId]
|
||||
delete this.form[userKeyName]
|
||||
delete this.rules[departmentKeyName]
|
||||
delete this.rules[userKeyName]
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
fnSelect({multiple}, {key_name, key_id, type, value}) {
|
||||
const key_value = multiple === '1' ? key_id.substring(key_id.indexOf('&&') + 2) : value
|
||||
if (type === '1') {
|
||||
this.fnSelectDepartment(key_name, key_id, key_value)
|
||||
return
|
||||
}
|
||||
if (type === '0') {
|
||||
this.fnSelectUser(key_name, key_id, key_value)
|
||||
}
|
||||
},
|
||||
fnSelectDepartment(key_name, key_id, value) {
|
||||
uni.navigateTo({
|
||||
url: `/pages/eight_assignments/select_department?CORP_ID=${this.CORP_ID}`,
|
||||
events: {
|
||||
confirm: (event) => {
|
||||
this.form[key_name] = event.DEPARTMENT_NAME
|
||||
this.form[key_id] = event.DEPARTMENT_ID
|
||||
this.form[value + '_USER_ID'] = ''
|
||||
this.form[value + '_USER_NAME'] = ''
|
||||
this.picker.columnsAll[value] = []
|
||||
this.fnGetUserList(event, value)
|
||||
}
|
||||
},
|
||||
})
|
||||
},
|
||||
async fnGetUserList({DEPARTMENT_ID, TYPE}, value) {
|
||||
let resData = await getUserList({DEPARTMENT_ID, TYPE})
|
||||
for (let i = 0; i < resData.list.list.length; i++) {
|
||||
resData.list.list[i].NAME = resData.list.list[i].name || resData.list.list[i].NAME
|
||||
resData.list.list[i].USER_ID = resData.list.list[i].user_ID || resData.list.list[i].USER_ID
|
||||
}
|
||||
this.$set(this.picker.columnsAll, value, [resData.list.list])
|
||||
},
|
||||
fnSelectUser(key_name, key_id, value) {
|
||||
this.picker.currentName = key_name
|
||||
this.picker.currentId = key_id
|
||||
this.picker.currentColumnKey = value
|
||||
this.picker.columns = this.picker.columnsAll[this.picker.currentColumnKey]
|
||||
if (!this.picker.columnsAll[this.picker.currentColumnKey]) {
|
||||
uni.$u.toast('没有选择部门或当前部门没有人员')
|
||||
return
|
||||
}
|
||||
this.picker.show = true
|
||||
},
|
||||
fnPickerConfirm(event) {
|
||||
this.form[this.picker.currentId] = event.value[0].USER_ID
|
||||
this.form[this.picker.currentName] = event.value[0].NAME
|
||||
this.fnPickerCancel()
|
||||
},
|
||||
fnPickerCancel() {
|
||||
this.picker.show = false
|
||||
},
|
||||
async fnSubmit() {
|
||||
try {
|
||||
await this.$refs.formRef.validate()
|
||||
try {
|
||||
if (!this.initFlag || this.initFlag === '1') {
|
||||
await setPersonnelForm({
|
||||
form: this.form,
|
||||
list: this.list,
|
||||
taskId: this.taskId,
|
||||
CORP_ID: this.CORP_ID,
|
||||
TYPE: this.TYPE,
|
||||
vernier: this.vernier
|
||||
})
|
||||
} else {
|
||||
await addFlowInfo({
|
||||
form: this.form,
|
||||
list: this.list,
|
||||
taskId: this.taskId,
|
||||
EW_RU_JOB_ID: this.EW_RU_JOB_ID,
|
||||
TYPE: this.TYPE,
|
||||
CORP_ID: this.CORP_ID,
|
||||
vernier: this.vernier
|
||||
})
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
} catch {
|
||||
uni.$u.toast('请补全必填项')
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.multiple_btn {
|
||||
display: flex;
|
||||
justify-content: end;
|
||||
}
|
||||
|
||||
.multiple_form_item {
|
||||
position: relative;
|
||||
background-color: #f9f9f9;
|
||||
padding: 0 20rpx;
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,106 @@
|
|||
<template>
|
||||
<view class="content">
|
||||
<view class="card">
|
||||
<u-form labelPosition="top" :model="form" :rules="rules" ref="formRef" labelWidth="140px">
|
||||
<u-form-item label="审批结果" prop="APPROVAL_RESULTS" borderBottom required labelPosition="left">
|
||||
<u-radio-group v-model="form.APPROVAL_RESULTS">
|
||||
<u-radio label="通过" name="1"/>
|
||||
<u-radio :customStyle="{marginLeft: '8px'}" label="不通过" name="0"/>
|
||||
</u-radio-group>
|
||||
</u-form-item>
|
||||
<u-form-item label="审批意见" prop="APPROVAL_OPINIONS" borderBottom required>
|
||||
<u-textarea v-model="form.APPROVAL_OPINIONS" border="none" autoHeight/>
|
||||
</u-form-item>
|
||||
<u-form-item label="签字" prop="SIGN" borderBottom required>
|
||||
<view style="flex: 1">
|
||||
<view>
|
||||
<u-button type="primary" size="mini" text="签字"
|
||||
:customStyle="{position: 'absolute',top: '-46upx',right: '20upx',width: '100upx'}"
|
||||
@click="signVisible = true"/>
|
||||
</view>
|
||||
<view v-if="form.SIGN">
|
||||
<u-image width="400rpx" height="200rpx" :src="form.SIGN"/>
|
||||
</view>
|
||||
</view>
|
||||
</u-form-item>
|
||||
</u-form>
|
||||
<view class="mt-10">
|
||||
<u-button type="primary" text="下一步" @click="$u.debounce(fnSubmit, 1000,true)"/>
|
||||
</view>
|
||||
</view>
|
||||
<sign :signShow.sync="signVisible" @confirm="fnSign"/>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Sign from '@/components/sign/sign.vue'
|
||||
import {setTaskFile, setTaskSign} from "@/api";
|
||||
import {resolveNextOperation} from "@/utils/submitHomeworkProcess";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
Sign,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
EW_RU_JOB_ID: '',
|
||||
TYPE: '',
|
||||
taskId: '',
|
||||
CORP_ID: '',
|
||||
vernier: '',
|
||||
signVisible: false,
|
||||
form: {
|
||||
APPROVAL_RESULTS: '',
|
||||
APPROVAL_OPINIONS: '',
|
||||
SIGN: '',
|
||||
},
|
||||
rules: {
|
||||
APPROVAL_RESULTS: [{type: 'string', required: true, message: '请选择审批结果', trigger: ['blur', 'change']}],
|
||||
APPROVAL_OPINIONS: [{type: 'string', required: true, message: '请输入审批意见', trigger: ['blur', 'change']}],
|
||||
SIGN: [{type: 'string', required: true, message: '请签字', trigger: ['blur', 'change']}],
|
||||
},
|
||||
}
|
||||
},
|
||||
onLoad(query) {
|
||||
this.EW_RU_JOB_ID = query.EW_RU_JOB_ID
|
||||
this.TYPE = query.TYPE
|
||||
this.taskId = query.taskId
|
||||
this.vernier = query.vernier
|
||||
},
|
||||
methods: {
|
||||
fnSign(event) {
|
||||
this.form.SIGN = event.filePath
|
||||
},
|
||||
async fnSubmit() {
|
||||
try {
|
||||
await this.$refs.formRef.validate()
|
||||
try {
|
||||
const {CODE} = await setTaskFile({formData: {type: 0}, name: 'files', filePath: this.form.SIGN})
|
||||
await setTaskSign({
|
||||
IMG_CODE: CODE,
|
||||
...this.form,
|
||||
SIGN: '',
|
||||
EW_RU_JOB_ID: this.EW_RU_JOB_ID,
|
||||
EW_RU_TASK_ID: this.taskId
|
||||
})
|
||||
await resolveNextOperation({
|
||||
EW_RU_TASK_ID: this.taskId,
|
||||
CORP_ID: null,
|
||||
TYPE: this.TYPE,
|
||||
EW_RU_JOB_ID:this.EW_RU_JOB_ID,
|
||||
vernier: this.vernier
|
||||
})
|
||||
} catch(e) {
|
||||
console.log(e)
|
||||
}
|
||||
} catch {
|
||||
uni.$u.toast('请补全必填项')
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
</style>
|
|
@ -0,0 +1,95 @@
|
|||
<template>
|
||||
<view class="content">
|
||||
<view class="card">
|
||||
<view class="items">
|
||||
<view class="item" v-for="(item, index) in baseList" :key="index" @click="fnNavigator(index)">
|
||||
<image :src="item.img" mode=""></image>
|
||||
<view class="text">
|
||||
<text>{{ item.title }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
baseList: [
|
||||
{
|
||||
img: require('../../static/icon-apps/i9.png'),
|
||||
title: '申请',
|
||||
url: '/pages/eight_assignments/select_corp_info'
|
||||
},
|
||||
{
|
||||
img: require('../../static/icon-apps/i10.png'),
|
||||
title: '待办',
|
||||
url: '/pages/eight_assignments/to_do_list',
|
||||
},
|
||||
{
|
||||
img: require('../../static/icon-apps/i11.png'),
|
||||
title: '已办',
|
||||
url: '/pages/eight_assignments/completed_list',
|
||||
},
|
||||
],
|
||||
type: '',
|
||||
title: ''
|
||||
};
|
||||
},
|
||||
onLoad(query) {
|
||||
this.type = query.type;
|
||||
this.title = query.title;
|
||||
uni.setNavigationBarTitle({
|
||||
title: this.title
|
||||
});
|
||||
// 若得到的 type 类型为 [动火作业],为baseList动态添加 [延时监火] 模块
|
||||
// 暂时隐藏,以后若没放开则有缘人看到以后删一下
|
||||
if (false) {
|
||||
this.baseList.push({
|
||||
img: require('../../static/icon-apps/i12.png'),
|
||||
title: '延时监火',
|
||||
url: '/pages/eight_assignments/hot_work/delay_fire_monitoring/list'
|
||||
})
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
fnNavigator(e) {
|
||||
uni.$u.route({
|
||||
url: this.baseList[e].url,
|
||||
params: {
|
||||
type: this.type,
|
||||
title: this.title,
|
||||
}
|
||||
})
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.items {
|
||||
background-color: #fff;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-top: -20upx;
|
||||
|
||||
.item {
|
||||
flex-basis: calc(100% / 3);
|
||||
text-align: center;
|
||||
margin-top: 20upx;
|
||||
|
||||
image {
|
||||
width: 110upx;
|
||||
height: 110upx;
|
||||
}
|
||||
|
||||
.text {
|
||||
width: 130upx;
|
||||
font-size: 28upx;
|
||||
margin: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,33 @@
|
|||
<template>
|
||||
<view class="content">
|
||||
<cc-defineStep colors="#fa436a" :stepData="stepData"></cc-defineStep>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getTaskTechnologicalProcess} from "@/api";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
stepData: []
|
||||
}
|
||||
},
|
||||
onLoad(query) {
|
||||
this.fnGetData(query.taskId)
|
||||
uni.setNavigationBarTitle({
|
||||
title: query.title + '流程'
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
async fnGetData(taskId) {
|
||||
let resData = await getTaskTechnologicalProcess({ID: taskId})
|
||||
this.stepData = resData.list
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
</style>
|
|
@ -0,0 +1,114 @@
|
|||
<template>
|
||||
<view class="content">
|
||||
<u-list @scrolltolower="scrolltolower" v-if="list.length > 0">
|
||||
<u-list-item v-for="(item, index) in list" :key="index">
|
||||
<view class="flex-between main-title">
|
||||
<text>申请人:{{ item.jobName }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title">
|
||||
<text>作业编号:{{ item.id }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title">
|
||||
<text>作业分公司:{{ item.corpName }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title">
|
||||
<text>申请时间:{{ item.createdTime }}</text>
|
||||
</view>
|
||||
<view class="flex-between main-title">
|
||||
<text>当前步骤:{{ item.taskName }}</text>
|
||||
</view>
|
||||
<view class=" mt-10 flex_btn">
|
||||
|
||||
<view class="flex_btn">
|
||||
<u-button type="primary" text="修改" size="mini" class="bth-mini" v-if="item.canEditFlag === '1'" @click="handleEditTask(item)" />
|
||||
<u-button type="primary" text="流程" size="mini" class="bth-mini ml-10"
|
||||
@click="$u.route({
|
||||
url: '/pages/eight_assignments/technological_process',
|
||||
params: {taskId:item.taskId,type,title}
|
||||
})"/>
|
||||
<u-button type="primary" text="审批" size="mini" class="bth-mini ml-10" v-if="item.canEditFlag !== '1'"
|
||||
@click="$u.route({
|
||||
url: '/pages/eight_assignments/view_info',
|
||||
params: {taskId:item.taskId,jobId:item.jobId,type,title}
|
||||
})"/>
|
||||
</view>
|
||||
<view v-for="(item1, index1) in item.buttons" :key="index1" class="flex_btn">
|
||||
<u-button type="primary" size="mini" shape="circle" :text="item1.name" class="bth-mini ml-10"
|
||||
@click="$u.route({
|
||||
url: item1.route,
|
||||
params: {taskId: item.taskId,EW_RU_JOB_ID: item.jobId, isView: '1'},
|
||||
})"
|
||||
/>
|
||||
</view>
|
||||
</view>
|
||||
</u-list-item>
|
||||
</u-list>
|
||||
<empty v-else></empty>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getToDoTaskList} from "@/api";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
type: '',
|
||||
title: '',
|
||||
pageSize: 10,
|
||||
currentPage: 1,
|
||||
totalPage: 0,
|
||||
list: []
|
||||
}
|
||||
},
|
||||
onLoad(query) {
|
||||
this.type = query.type
|
||||
this.title = query.title
|
||||
uni.setNavigationBarTitle({
|
||||
title: this.title + '待办'
|
||||
})
|
||||
},
|
||||
onShow() {
|
||||
this.resetList()
|
||||
},
|
||||
methods: {
|
||||
async getData() {
|
||||
let resData = await getToDoTaskList({
|
||||
showCount: this.pageSize,
|
||||
currentPage: this.currentPage,
|
||||
TYPE: this.type,
|
||||
vectors: '0',
|
||||
REQUEST_SOURCE: '2'
|
||||
});
|
||||
this.list = [...this.list, ...resData.list.list];
|
||||
this.totalPage = resData.list.totalPage;
|
||||
},
|
||||
resetList() {
|
||||
this.pageSize = 10
|
||||
this.currentPage = 1
|
||||
this.list = []
|
||||
this.getData()
|
||||
},
|
||||
scrolltolower() {
|
||||
this.currentPage++;
|
||||
if (this.totalPage >= this.currentPage) this.getData();
|
||||
},
|
||||
handleEditTask(value) {
|
||||
let tempUrlStr = this.type.replace(/([a-z])([A-Z])/g, '\$1_\$2').toLowerCase()
|
||||
uni.$u.route({
|
||||
url: `/pages/eight_assignments/${tempUrlStr}/apply`,
|
||||
params: { taskId: value.taskId, CORPINFO_ID: value.corpId }
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.flex_btn{
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
|
||||
}
|
||||
|
||||
</style>
|
|
@ -0,0 +1,142 @@
|
|||
<template>
|
||||
<view class="content">
|
||||
<view class="card">
|
||||
<u-cell-group>
|
||||
<view v-for="(item, index) in form" :key="index">
|
||||
<u-cell v-if="item.TYPE === 0" :title="item.ITEM" :value="item.ITEM_VALUE"></u-cell>
|
||||
<view v-if="item.TYPE === 1">
|
||||
<u-cell :title="item.ITEM">
|
||||
<template #label>
|
||||
<view class="mt-5">
|
||||
<view v-for="(item1, index1) in item.list" :key="index1">
|
||||
<u-image
|
||||
width="400rpx"
|
||||
height="200rpx"
|
||||
:src="$filePath + item1.ITEM_VALUE"
|
||||
mode="widthFix"
|
||||
/>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
</u-cell>
|
||||
</view>
|
||||
<view v-if="item.TYPE === 3">
|
||||
<u-divider text-position="left" :text="item.ITEM" />
|
||||
</view>
|
||||
<view v-if="item.TYPE === 4">
|
||||
<view v-for="(item1, index1) in item.list" :key="index1">
|
||||
<view v-for="(item2, index2) in item1.list" :key="index2">
|
||||
<u-cell :title="item2.ITEM" :value="item2.ITEM_VALUE" />
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view v-if="item.TYPE === 5">
|
||||
<u-cell :title="item.ITEM">
|
||||
<template #label>
|
||||
<view class="mt-5">
|
||||
<u-image
|
||||
width="400rpx"
|
||||
height="200rpx"
|
||||
:src="$filePath + item.ITEM_VALUE"
|
||||
mode="widthFix"
|
||||
/>
|
||||
</view>
|
||||
</template>
|
||||
</u-cell>
|
||||
</view>
|
||||
</view>
|
||||
</u-cell-group>
|
||||
<u-divider text="安全措施" textPosition="left" textColor="#3c9cff" lineColor="#3c9cff"/>
|
||||
<u-cell-group>
|
||||
<u-cell v-for="(item,index) in questionnaires" :key="index" :title="item.QUESTION">
|
||||
<template #title>
|
||||
<view style="display: flex;justify-content: space-between">
|
||||
<view style="width: 75%;">{{ item.QUESTION }}</view>
|
||||
<view>{{ item.TEXT_INFO || item.ANSWER }}</view>
|
||||
</view>
|
||||
</template>
|
||||
<template #label>
|
||||
<block v-for="(item1,index1) in item.answers" :key="index1">
|
||||
<view>{{ item1.TEXT_INFO }}:{{ item1.ANSWER }}</view>
|
||||
</block>
|
||||
</template>
|
||||
</u-cell>
|
||||
</u-cell-group>
|
||||
<u-divider text="审批人员" textPosition="left" textColor="#3c9cff" lineColor="#3c9cff"/>
|
||||
<u-cell-group>
|
||||
<block v-for="(item, index) in jobs" :key="index">
|
||||
<u-cell :key="index" :title="item.TYPE_DESCRIBE">
|
||||
<template #label>
|
||||
<view class="mt-10">
|
||||
<view>部门:{{ item.DEPARTMENT_NAME }}</view>
|
||||
<view>人员:{{ item.USER_NAME }}</view>
|
||||
<view v-if="item.SIGN_PICTURE">
|
||||
<u-image width="400rpx" height="200rpx" :src="$filePath + '/' +item.SIGN_PICTURE" mode="widthFix"/>
|
||||
<view>审批意见:{{ item.APPROVAL_OPINIONS }}</view>
|
||||
<view>审批意见:{{ item.APPROVAL_TIME }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
</u-cell>
|
||||
</block>
|
||||
</u-cell-group>
|
||||
<view class="mt-10">
|
||||
<u-button type="primary" text="下一步" @click="$u.debounce(fnSubmit, 1000,true)"/>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getTaskInfo} from "@/api";
|
||||
import {resolveNextOperation} from "@/utils/submitHomeworkProcess";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
taskId: '',
|
||||
type: '',
|
||||
jobId: '',
|
||||
form: [],
|
||||
jobs: [],
|
||||
questionnaires: [],
|
||||
}
|
||||
},
|
||||
onLoad(query) {
|
||||
this.taskId = query.taskId
|
||||
this.type = query.type
|
||||
this.jobId = query.jobId
|
||||
this.fnGetData(query.taskId)
|
||||
uni.setNavigationBarTitle({
|
||||
title: query.title + '查看'
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
async fnGetData(taskId) {
|
||||
let resData = await getTaskInfo({EW_RU_TASK_ID: taskId})
|
||||
this.form = resData.list.fromTrans
|
||||
this.jobs = resData.list.jobs
|
||||
this.questionnaires = resData.list.simpleQues[0]
|
||||
},
|
||||
async fnSubmit() {
|
||||
let CORP_ID = ''
|
||||
for (let i = 0; i < this.form.length; i++) {
|
||||
if (this.form[i].FK_NAME === 'CORP_ID') {
|
||||
CORP_ID = this.form[i].FK_VALUE
|
||||
break
|
||||
}
|
||||
}
|
||||
await resolveNextOperation({
|
||||
EW_RU_TASK_ID: this.taskId,
|
||||
TYPE: this.type,
|
||||
CORP_ID,
|
||||
EW_RU_JOB_ID: this.jobId,
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
</style>
|
|
@ -178,6 +178,11 @@
|
|||
title: '秦港站内信',
|
||||
url: '/pages/information/index/index'
|
||||
},
|
||||
{
|
||||
img: require('../../static/icon-apps/app_icons6.png'),
|
||||
title: '高危作业',
|
||||
url: '/pages/eight_assignments/index'
|
||||
},
|
||||
],
|
||||
isPromiseUnsigned: false
|
||||
}
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
<template>
|
||||
<web-view :src="url" @message="fnMessage"></web-view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import gcoord from '../../utils/gcoord.js'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
url: '',
|
||||
longitude: '',
|
||||
latitude: ''
|
||||
}
|
||||
},
|
||||
onLoad(option) {
|
||||
uni.getLocation({
|
||||
type: 'GCJ02',
|
||||
success: (res) => {
|
||||
var result = gcoord.transform(
|
||||
[res.longitude, res.latitude],
|
||||
gcoord.GCJ02,
|
||||
gcoord.BD09
|
||||
);
|
||||
this.longitude = result[0]
|
||||
this.latitude = result[1]
|
||||
this.fnInitMapUrl();
|
||||
},
|
||||
fail: () => {
|
||||
uni.showToast({
|
||||
title: "获取位置失败",
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
fnInitMapUrl() {
|
||||
this.url = ('/hybrid/html/map.html?longitude=' + this.longitude + '&latitude=' + this.latitude + 't=' +
|
||||
new Date().getTime());
|
||||
},
|
||||
fnMessage(event) {
|
||||
const eventChannel = this.getOpenerEventChannel();
|
||||
eventChannel.emit('acceptLocationData', {
|
||||
data: event.detail.data[0]
|
||||
});
|
||||
uni.navigateBack();
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
After Width: | Height: | Size: 8.1 KiB |
After Width: | Height: | Size: 7.5 KiB |
After Width: | Height: | Size: 8.6 KiB |
After Width: | Height: | Size: 8.5 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 5.8 KiB |
After Width: | Height: | Size: 6.6 KiB |
After Width: | Height: | Size: 7.9 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 9.6 KiB |
After Width: | Height: | Size: 8.5 KiB |
After Width: | Height: | Size: 7.4 KiB |
After Width: | Height: | Size: 7.9 KiB |
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 8.7 KiB |
After Width: | Height: | Size: 7.0 KiB |
|
@ -0,0 +1,173 @@
|
|||
## 1.8.9(2024-06-28)
|
||||
完善说明文件
|
||||
## 1.8.8(2024-06-21)
|
||||
更新插件
|
||||
## 1.8.7(2024-05-08)
|
||||
fix bug
|
||||
## 1.8.6(2024-04-07)
|
||||
功能更新
|
||||
## 1.8.5(2024-04-07)
|
||||
修复bug
|
||||
## 1.8.3(2024-04-06)
|
||||
update
|
||||
## 1.8.2(2024-04-06)
|
||||
update
|
||||
## 1.8.1(2024-04-06)
|
||||
fix bug
|
||||
## 1.8.0(2024-04-03)
|
||||
优化
|
||||
## 1.7.9(2024-04-03)
|
||||
优化编辑tree功能
|
||||
## 1.7.8(2024-04-02)
|
||||
超集功能上线
|
||||
## 1.7.7(2024-03-26)
|
||||
增加expandedMode=singe
|
||||
## 1.7.6(2024-02-27)
|
||||
修复特殊字符的处理方法
|
||||
## 1.7.5(2024-02-26)
|
||||
增加无子节点的父节点配置
|
||||
## 1.7.4(2024-02-05)
|
||||
修复vue2,语法使用问题
|
||||
## 1.7.3(2024-02-05)
|
||||
修复vue2,插槽不显示bug
|
||||
## 1.7.2(2024-02-05)
|
||||
优化大数据的性能
|
||||
## 1.7.1(2024-01-25)
|
||||
优化功能说明
|
||||
## 1.7.0(2024-01-24)
|
||||
增加expandedKeys默认展开项目,配置
|
||||
## 1.6.9(2024-01-23)
|
||||
增加change事件
|
||||
## 1.6.8(2024-01-22)
|
||||
搜索模式下,不再响应展开收起逻辑
|
||||
## 1.6.7(2024-01-04)
|
||||
修复异步加载节点搜索展示bug
|
||||
## 1.6.6(2023-12-29)
|
||||
修复next-tree异步加载节点关闭bug
|
||||
## 1.6.5(2023-12-21)
|
||||
fix bug
|
||||
## 1.6.4(2023-12-21)
|
||||
fix bug
|
||||
## 1.6.3(2023-12-21)
|
||||
更新vue2版本说明文档
|
||||
## 1.6.2(2023-12-21)
|
||||
修复说明文档
|
||||
## 1.6.1(2023-12-18)
|
||||
增加empty插槽
|
||||
## 1.6.0(2023-12-18)
|
||||
增加empty插槽
|
||||
## 1.5.9(2023-12-15)
|
||||
修改说明文件
|
||||
## 1.5.8(2023-12-15)
|
||||
修复changeVerify函数单选时,返回参数bug
|
||||
## 1.5.7(2023-12-14)
|
||||
修复checkStrictlyModel === 'strong'的bug
|
||||
## 1.5.6(2023-12-13)
|
||||
代码优化
|
||||
## 1.5.5(2023-12-13)
|
||||
优化changeVerify的使用
|
||||
## 1.5.4(2023-12-12)
|
||||
修复提示层级问题
|
||||
## 1.5.3(2023-12-12)
|
||||
优化uiMode=page模式下的使用
|
||||
## 1.5.2(2023-12-11)
|
||||
增加uiMode配置,实现页面模式展示
|
||||
## 1.5.1(2023-12-06)
|
||||
更新说明
|
||||
## 1.5.0(2023-12-06)
|
||||
更新插件使用注意事项
|
||||
## 1.4.9(2023-12-01)
|
||||
增加topBar插槽
|
||||
## 1.4.8(2023-11-30)
|
||||
增加changeVerify验证函数,实现change的各种控制
|
||||
## 1.4.7(2023-11-30)
|
||||
增加弹层容器高度可配置
|
||||
## 1.4.6(2023-11-28)
|
||||
修复bug
|
||||
## 1.4.5(2023-11-28)
|
||||
修复disabled是,需要显示灰色不可操作
|
||||
## 1.4.4(2023-11-28)
|
||||
增加说明
|
||||
## 1.4.3(2023-11-28)
|
||||
增加主题配置
|
||||
## 1.4.2(2023-11-28)
|
||||
增加异步加载时,子节点说明
|
||||
## 1.4.1(2023-11-27)
|
||||
修复说明bug
|
||||
## 1.4.0(2023-11-27)
|
||||
next-tree 全面说明文档
|
||||
## 1.3.6(2023-11-27)
|
||||
增加远程加载loadData,全面实现全功能覆盖
|
||||
## 1.3.5(2023-11-27)
|
||||
增加title的定义
|
||||
## 1.3.4(2023-11-27)
|
||||
增加title支持自定义定制
|
||||
## 1.3.3(2023-11-21)
|
||||
增加搜索模式searchModel=depHighlight模式,从属高亮显示模式
|
||||
## 1.3.2(2023-11-20)
|
||||
修复valueKey设置bug
|
||||
## 1.3.1(2023-11-17)
|
||||
增加说明文件,和demo
|
||||
## 1.3.0(2023-11-17)
|
||||
修复clear时不支持关联模式的设置
|
||||
## 1.2.9(2023-11-17)
|
||||
增加checkStrictlyModel模式设置,强关联,和弱关联
|
||||
## 1.2.8(2023-11-16)
|
||||
增加next-tree的辅助线模式
|
||||
## 1.2.7(2023-11-16)
|
||||
优化next-tree
|
||||
## 1.2.6(2023-11-16)
|
||||
修复搜索时,隐藏未打开的数据
|
||||
## 1.2.5(2023-11-16)
|
||||
修复搜索无法点击,和级联半选不生效问题
|
||||
## 1.2.4(2023-11-16)
|
||||
更新新功能插件使用说明
|
||||
## 1.2.3(2023-11-16)
|
||||
增加插槽模式,只是高ui要求定制
|
||||
## 1.2.2(2023-11-15)
|
||||
修复checkStrictly配置下,子关联父的选择状态
|
||||
## 1.2.1(2023-11-15)
|
||||
增加半选提示功能配置showHalfCheckedTips
|
||||
## 1.2.0(2023-11-14)
|
||||
修复disabled配置状态下,父子级联,不需要改变disabled设置项的选择状态
|
||||
## 1.1.9(2023-11-13)
|
||||
增强大数据量体验交互,增加筛选搜索模式
|
||||
## 1.1.8(2023-11-13)
|
||||
增加清除clear和取消cancel事件
|
||||
## 1.1.7(2023-11-08)
|
||||
更新next-tree插件功能清单说明
|
||||
## 1.1.6(2023-11-07)
|
||||
update说明文档
|
||||
## 1.1.5(2023-11-07)
|
||||
update
|
||||
## 1.1.4(2023-11-07)
|
||||
更新readme.md说明
|
||||
## 1.1.3(2023-11-07)
|
||||
更新说明demo
|
||||
## 1.1.2(2023-11-07)
|
||||
增加子节点按需渲染演示demo
|
||||
## 1.1.1(2023-11-07)
|
||||
增加清空功能
|
||||
## 1.1.0(2023-11-07)
|
||||
增加子孙节点按需渲染,扩展本插件支持大数据量渲染;
|
||||
## 1.0.9(2023-10-26)
|
||||
增加文件说明
|
||||
## 1.0.8(2023-09-14)
|
||||
增加禁用节点属性配置disabledKey
|
||||
## 1.0.7(2023-09-06)
|
||||
增加checkStrictly,实现父子节点关联
|
||||
## 1.0.6(2023-09-06)
|
||||
更新vue2使用过程视图不更新的技术说明
|
||||
## 1.0.5(2023-09-06)
|
||||
修复说明文档
|
||||
## 1.0.4(2023-06-19)
|
||||
修改demo
|
||||
## 1.0.3(2023-06-19)
|
||||
更新vue2的使用demo
|
||||
## 1.0.2(2023-06-19)
|
||||
修复说明文档
|
||||
|
||||
## 1.0.1(2023-05-10)
|
||||
更新说明文件
|
||||
## 1.0.0(2023-05-09)
|
||||
初始化项目
|
|
@ -0,0 +1,272 @@
|
|||
@font-face {
|
||||
font-family: 'iconfont';
|
||||
src: url('//at.alicdn.com/t/c/font_4110624_qs48wckazsh.ttf?t=1712479573821') format('truetype');
|
||||
}
|
||||
@keyframes spin {
|
||||
0% { transform: rotate(0deg); }
|
||||
100% { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
font-family: iconfont;
|
||||
font-style: normal;
|
||||
}
|
||||
.iconfont-loading {
|
||||
font-family: iconfont;
|
||||
display: inline-block;
|
||||
font-style: normal;
|
||||
animation: spin 1s linear infinite;
|
||||
}
|
||||
.next-tree-mask {
|
||||
position: fixed;
|
||||
top: 0rpx;
|
||||
right: 0rpx;
|
||||
bottom: 0rpx;
|
||||
left: 0rpx;
|
||||
z-index: 997;
|
||||
background-color: rgba(0, 0, 0, 0.6);
|
||||
opacity: 0;
|
||||
transition: all 0.3s ease;
|
||||
visibility: hidden;
|
||||
}
|
||||
.next-tree-mask.show {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
.next-tree-cnt {
|
||||
position: fixed;
|
||||
top: 0rpx;
|
||||
right: 0rpx;
|
||||
bottom: 0rpx;
|
||||
left: 0rpx;
|
||||
z-index: 997;
|
||||
top: 360rpx;
|
||||
transition: all 0.3s ease;
|
||||
transform: translateY(100%);
|
||||
}
|
||||
.next-tree-cnt.next-tree-cnt-page {
|
||||
transition: none;
|
||||
}
|
||||
.next-tree-cnt.show {
|
||||
transform: translateY(0);
|
||||
}
|
||||
.next-tree-bar {
|
||||
background-color: #fff;
|
||||
height: 72rpx;
|
||||
padding-left: 20rpx;
|
||||
padding-right: 20rpx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
border-bottom-width: 1rpx !important;
|
||||
border-bottom-style: solid;
|
||||
border-bottom-color: #f5f5f5;
|
||||
font-size: 32rpx;
|
||||
color: #757575;
|
||||
line-height: 1;
|
||||
}
|
||||
.next-tree-bar-btns {
|
||||
display: inline-block;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
.btn-divid {
|
||||
display: inline-block;
|
||||
width: 1px;
|
||||
margin: 0 10px;
|
||||
background-color: #ccc;
|
||||
}
|
||||
.next-tree-bar-confirm {
|
||||
color: #f9ae3d;
|
||||
}
|
||||
.next-tree-view {
|
||||
position: absolute;
|
||||
top: 0rpx;
|
||||
right: 0rpx;
|
||||
bottom: 0rpx;
|
||||
left: 0rpx;
|
||||
top: 72rpx;
|
||||
background-color: #fff;
|
||||
padding-top: 20rpx;
|
||||
padding-right: 20rpx;
|
||||
padding-bottom: 20rpx;
|
||||
padding-left: 20rpx;
|
||||
}
|
||||
.next-tree-view-sc {
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
.next-tree-view-sc .empty {
|
||||
text-align: center;
|
||||
color: #757575;
|
||||
padding: 30rpx;
|
||||
}
|
||||
.next-tree-item-block {
|
||||
|
||||
}
|
||||
.next-tree-item {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
font-size: 26rpx;
|
||||
color: #757575;
|
||||
line-height: 1;
|
||||
height: 0;
|
||||
opacity: 0;
|
||||
transition: 0.2s;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.next-tree-item .icon-btn {
|
||||
font-size: 30rpx;
|
||||
margin-right: 20rpx;
|
||||
}
|
||||
.next-tree-item .left-line {
|
||||
position: relative;
|
||||
width: 1rpx;
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.next-tree-item .left-line::before {
|
||||
position: absolute;
|
||||
content: "";
|
||||
width: 1rpx;
|
||||
height: 100%;
|
||||
background-color: rgba(204,204,204,0.9);
|
||||
box-sizing: border-box;
|
||||
|
||||
left: -18rpx;
|
||||
}
|
||||
.next-tree-item .parent-horizontal-line {
|
||||
width: 1rpx;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0rpx;
|
||||
box-sizing: border-box;
|
||||
background-color: rgba(204,204,204,0.9);
|
||||
}
|
||||
.next-tree-item .left-line .horizontal-line {
|
||||
width: 20rpx;
|
||||
height: 1rpx;
|
||||
position: absolute;
|
||||
top: 40rpx;
|
||||
left: 0rpx;
|
||||
background-color: rgba(204,204,204,0.9);
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.next-tree-item.show {
|
||||
min-height: 80rpx;
|
||||
margin-top: 10rpx;
|
||||
height: 100%;
|
||||
opacity: 1;
|
||||
}
|
||||
.next-tree-item.showchild:before {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
.next-tree-item.border {
|
||||
border-bottom: 1rpx solid rgba(204,204,204,0.2);
|
||||
}
|
||||
.next-tree-item.last:before {
|
||||
opacity: 0;
|
||||
}
|
||||
.next-tree-item.disabled {
|
||||
color: #ccc!important;
|
||||
}
|
||||
|
||||
.next-tree-icon {
|
||||
width: 26rpx;
|
||||
height: 26rpx;
|
||||
margin-right: 8rpx;
|
||||
}
|
||||
.next-tree-label {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 100%;
|
||||
line-height: 1.2;
|
||||
}
|
||||
.next-tree-label .label-input {
|
||||
border: 1rpx solid #f0f0f0;
|
||||
border-radius: 10rpx;
|
||||
width: 100%;
|
||||
padding: 12rpx 18rpx;
|
||||
margin-right: 30rpx;
|
||||
}
|
||||
.next-tree-check {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.next-tree-check-yes,
|
||||
.next-tree-check-no {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border-top-left-radius: 20%;
|
||||
border-top-right-radius: 20%;
|
||||
border-bottom-right-radius: 20%;
|
||||
border-bottom-left-radius: 20%;
|
||||
border-top-width: 1rpx;
|
||||
border-left-width: 1rpx;
|
||||
border-bottom-width: 1rpx;
|
||||
border-right-width: 1rpx;
|
||||
border-style: solid;
|
||||
border-color: #f9ae3d;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.next-tree-check-yes-b {
|
||||
border-top-left-radius: 20%;
|
||||
border-top-right-radius: 20%;
|
||||
border-bottom-right-radius: 20%;
|
||||
border-bottom-left-radius: 20%;
|
||||
background-color: #f9ae3d;
|
||||
color: #fff;
|
||||
}
|
||||
.next-tree-check-yes-b .icon-text {
|
||||
font-size: 14px;
|
||||
font-weight: normal;
|
||||
font-family: uicon-iconfont;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
.next-tree-check .radio {
|
||||
border-top-left-radius: 50%;
|
||||
border-top-right-radius: 50%;
|
||||
border-bottom-right-radius: 50%;
|
||||
border-bottom-left-radius: 50%;
|
||||
}
|
||||
.next-tree-check .radio .next-tree-check-yes-b {
|
||||
border-top-left-radius: 50%;
|
||||
border-top-right-radius: 50%;
|
||||
border-bottom-right-radius: 50%;
|
||||
border-bottom-left-radius: 50%;
|
||||
}
|
||||
|
||||
.next-tree-item.disabled .next-tree-check-no {
|
||||
color: #ccc!important;
|
||||
}
|
||||
.next-tree-item.disabled .next-tree-check-yes-b {
|
||||
background-color: #ccc!important;
|
||||
}
|
||||
.hover-c {
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
.fixed-bottom-bar {
|
||||
border-top: 1px solid #ccc;
|
||||
position: fixed;
|
||||
bottom: 0rpx;
|
||||
left: 0rpx;
|
||||
right: 0rpx;
|
||||
z-index: 998;
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
{
|
||||
"id": "next-tree",
|
||||
"displayName": "next-tree(超强树选择器、树组件、树插件、无限级联树、单选树、多选树、自定义样式树、树形选择器)",
|
||||
"version": "1.8.9",
|
||||
"description": "next-tree 弹窗树形选择器,支持多选,支持大数据, 无限级联,单选,父子级级联,远程/ajax加载,子节点增量/异步渲染,自定义样式定制,具名插槽等;支持h5/小程序/APP,全端通用",
|
||||
"keywords": [
|
||||
"树选择",
|
||||
"tree",
|
||||
"弹窗树选择器",
|
||||
"多选树",
|
||||
"单选树"
|
||||
],
|
||||
"engines": {
|
||||
},
|
||||
"dcloudext": {
|
||||
"sale": {
|
||||
"regular": {
|
||||
"price": "0.00"
|
||||
},
|
||||
"sourcecode": {
|
||||
"price": "0.00"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"qq": ""
|
||||
},
|
||||
"declaration": {
|
||||
"ads": "无",
|
||||
"data": "修改版本说明",
|
||||
"permissions": "无"
|
||||
},
|
||||
"npmurl": "",
|
||||
"type": "component-vue"
|
||||
},
|
||||
"uni_modules": {
|
||||
"dependencies": ["next-search-more"],
|
||||
"encrypt": [],
|
||||
"platforms": {
|
||||
"cloud": {
|
||||
"tcb": "y",
|
||||
"aliyun": "y",
|
||||
"alipay": "n"
|
||||
},
|
||||
"client": {
|
||||
"Vue": {
|
||||
"vue2": "y",
|
||||
"vue3": "y"
|
||||
},
|
||||
"App": {
|
||||
"app-vue": "y",
|
||||
"app-nvue": "u"
|
||||
},
|
||||
"H5-mobile": {
|
||||
"Safari": "y",
|
||||
"Android Browser": "y",
|
||||
"微信浏览器(Android)": "y",
|
||||
"QQ浏览器(Android)": "y"
|
||||
},
|
||||
"H5-pc": {
|
||||
"Chrome": "y",
|
||||
"IE": "n",
|
||||
"Edge": "y",
|
||||
"Firefox": "y",
|
||||
"Safari": "u"
|
||||
},
|
||||
"小程序": {
|
||||
"微信": "y",
|
||||
"阿里": "y",
|
||||
"百度": "y",
|
||||
"字节跳动": "u",
|
||||
"QQ": "y",
|
||||
"钉钉": "y",
|
||||
"快手": "u",
|
||||
"飞书": "u",
|
||||
"京东": "u"
|
||||
},
|
||||
"快应用": {
|
||||
"华为": "u",
|
||||
"联盟": "u"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,843 @@
|
|||
|
||||
## next-tree --下拉树
|
||||
|
||||
> 遇到问题或有建议可以加入QQ群(<font color=#f00>455948571</font>)反馈
|
||||
> 如果觉得组件不错,<font color=#f00>给五星鼓励鼓励</font>咯!
|
||||
|
||||
## 亮点功能说明(打造你不得不用的好插件)
|
||||
|
||||
### 本插件自1.5.0版本后支持一下功能
|
||||
|
||||
> 1.大数据量渲染(本插件智能判断,如果子孙集数据量大于50时,会响应等待渲染视图;)
|
||||
> 2.子节点按需渲染(自动启用,无需配置)
|
||||
> 3.父子级联选择设置
|
||||
> 4.单选多选设置
|
||||
> 5.父节点是否可选设置
|
||||
> 6.回显默认选中值
|
||||
> 7.不可选项disabled设置
|
||||
> 8.增强大数据量体验交互,增加筛选搜索模式
|
||||
> 9.增强样式定制,提供自定义插槽,实现高要求样式定制
|
||||
> 10.增加辅助线模式,外观更加精美
|
||||
> 11.支持动态配置title
|
||||
> 12.支持搜索模式searchModel=depHighlight模式,从属高亮显示模式
|
||||
> 13.支持异步加载子节点,ajax加载子节点
|
||||
> 14.增加可配置主题,自由定制插件主题颜色
|
||||
> 15.支持动态校验,可以进行提示控制校验
|
||||
> 16.支持页面模式/弹层模式,可以进行单页面展示或者弹层展示
|
||||
> 17.支持半选提示状态显示
|
||||
> 18.支持展开项expandedKeys配置
|
||||
> 19.全面支持vue2/vue3
|
||||
> 20.增加无子节点的父节点配置支持(当item[childrenKey]为null时,代表无子节点的父节点)
|
||||
> 21.终极支持超数据量使用,增加展开模式配置单链路配置使用expandedMode=singe,使得ui组件使用进一步不在限制与数据量
|
||||
> 22.功能模式再次增强,支持单选tree,多选tree,编辑tree,展示tree;
|
||||
|
||||
## 注意
|
||||
|
||||
### 作者不介意你对组件源码进行改造使用,为了开源更加高效,谢谢你的配合;为了节省不必要的沟通浪费,以下情况请不要再反馈给作者,请自行解决;
|
||||
### 在这感各位的理解,我支持开源,但是作者时间有限;谢谢各位的配合;在这里期望我写的小小插件能为你提供便捷;
|
||||
|
||||
> 1.如果你对源码进行了修改使用,请不需要对作者做任何的反馈,作者确实没有空陪你做技术分析解答;
|
||||
> 2.如果你引入插件,连插件是否有正常被uniapp框架识别解析都不清楚,请你换个插件使用;
|
||||
> 3.如果你引入插件,针对自己项目进行功能改造的,请自行仔细阅读源码并了解其原理,自行改造;这里作者不愿意浪费过多时间进行技术解答;
|
||||
> 4.如果你不想进行全局加载next-tree,需要按需加载;next-tree中有相关依赖的组件,需要你自行在组件内部单独引入;依赖组件可以在package.json中找到;
|
||||
> 5.理论上作者不再解决由于本地开发环境问题所导致的插件使用问题,请自行到uniapp官网学习解决;
|
||||
|
||||
## 使用
|
||||
### 超集功能即将不对外开源;
|
||||
|
||||
>[从uniapp插件市场导入](https://ext.dcloud.net.cn/plugin?name=next-tree)
|
||||
|
||||
## 关注作者的动态
|
||||
[点击进入主页,关注作者](https://ask.dcloud.net.cn/people/ponder_7464)
|
||||
|
||||
## 关注作者其他开源
|
||||
|
||||
npm开源包:[npm](https://www.npmjs.com/~lixueshiaa);
|
||||
github开源项目:[github](https://github.com/lixueshiaa);
|
||||
|
||||
|
||||
```html
|
||||
<template>
|
||||
<view style="padding:10px;color: #333;font-weight: 500;">
|
||||
<view style="padding: 10px 0"><text>1、设置单选和父级不可选</text></view>
|
||||
<button style="width: 100%;background-color: #f9ae3d;color:#fff" size="mini" @click="itemclick(false, false)">设置</button>
|
||||
<view style="padding: 10px 0"><text>2、设置多选和父级不可选</text></view>
|
||||
<button style="width: 100%;background-color: #f9ae3d;color:#fff" size="mini" @click="itemclick(true, false)">设置</button>
|
||||
<view style="padding: 10px 0"><text>3、设置单选和父级可选</text></view>
|
||||
<button style="width: 100%;background-color: #f9ae3d;color:#fff" size="mini" @click="itemclick(false, true)">设置</button>
|
||||
<view style="padding: 10px 0"><text>4、设置多选和父级可选</text></view>
|
||||
<button style="width: 100%;background-color: #f9ae3d;color:#fff" size="mini" @click="itemclick(true, true)" >设置</button>
|
||||
<view style="padding: 10px 0"><text>4、设置多选和父级可选和父级关联子级选择</text></view>
|
||||
<button style="width: 100%;background-color: #f9ae3d;color:#fff" size="mini" @click="itemclick(true, true, true)" >设置</button>
|
||||
<view style="padding: 10px 0"><text>5、设置默认回显(默认选中: '上海-2', '黄埔区-35')</text></view>
|
||||
<button style="width: 100%;background-color: #f9ae3d;color:#fff" size="mini" @click="echoDefault()" >设置</button>
|
||||
<!-- 异步加载demo -->
|
||||
<view style="padding: 10px 0"><text>6、异步加载渲染demo</text></view>
|
||||
<button style="width: 100%;background-color: #f9ae3d;color:#fff" size="mini" @click="openTree()" >设置</button>
|
||||
</view>
|
||||
|
||||
<!-- 异步加载demo -->
|
||||
<next-tree :selectParent="false" :checkStrictly="true" funcMode="checkbox" ref="nextTreeAsyncRef" :treeData="asyncTreeData" :loadData="loadData" />
|
||||
|
||||
<next-tree :expandedKeys="['3','3-1']" :changeVerify="changeVerify" :title="getTitle" ref="nextTreeRef" :checkStrictly="checkStrictly" :selectParent="selectParent" :funcMode="funcMode" :treeData="treeData" @cancel="oncancel" @confirm="onconfirm">
|
||||
<!-- label插槽示意代码 -->
|
||||
<!-- <template #label="{data: {id, label, iconSrc, prev, post}}">
|
||||
<view class="line-block">
|
||||
<image class="img" v-if="iconSrc" :src="iconSrc"></image>
|
||||
<text space="nbsp" v-if="prev">{{prev}} </text><text>{{label}}</text><text space="nbsp" v-if="post"> {{post}}</text>
|
||||
</view>
|
||||
</template> -->
|
||||
<!-- <template #topBar>
|
||||
<view style="color: #666;padding:5px;"><text style="font-size: 12px;">历史记录</text></view>
|
||||
<view style="display: flex;justify-content: space-between;padding-bottom: 10px;border-bottom: 1rpx solid #f0f0f0;">
|
||||
<button @click="checkedFunc('1-3-3-4')" :style="'background-color:'+ (activeId === '1-3-3-4' ? '#f9ae3d' : '#ccc') + ';color:#fff;margin: 5px'" size="mini">北京区-4</button>
|
||||
<button @click="checkedFunc('3-1-2')" :style="'background-color:'+ (activeId === '3-1-2' ? '#f9ae3d' : '#ccc') + ';color:#fff;margin: 5px'" size="mini">海珠区-2</button>
|
||||
<button @click="checkedFunc('3-1-6')" :style="'background-color:'+ (activeId === '3-1-6' ? '#f9ae3d' : '#ccc') + ';color:#fff;margin: 5px'" size="mini">海珠区-5</button>
|
||||
</view>
|
||||
</template> -->
|
||||
</next-tree>
|
||||
</template>
|
||||
```
|
||||
|
||||
### vue3 + ts 使用
|
||||
|
||||
```ts
|
||||
<script setup lang="ts">
|
||||
import { ref, unref } from 'vue'
|
||||
import nextTree from '@/components/next-tree/next-tree.vue'
|
||||
|
||||
const funcMode = ref('radio');
|
||||
const selectParent = ref(false)
|
||||
const nextTreeRef = ref()
|
||||
const nextTreeAsyncRef = ref()
|
||||
const activeId = ref('')
|
||||
|
||||
const localData: any = {
|
||||
'a1': [{id: 'a1-1', label: 'a1-1'}, {id: 'a1-2', label: 'a1-2',children: [] },{id: 'a1-3', label: 'a1-3'}],
|
||||
'b1': [{id: 'b1-1', label: 'b1-1',children: []}, {id: 'b1-2', label: 'b1-2'},{id: 'b1-3', label: 'b1-3'}],
|
||||
'c1': [{id: 'c1-1', label: 'c1-1'}, {id: 'c1-2', label: 'c1-2'},{id: 'c1-3', label: 'c1-3',children: []}],
|
||||
'a1-2': [{id: 'a1-2-1', label: 'a1-2-1'}, {id: 'a1-2-2', label: 'a1-2-2'}],
|
||||
'b1-1': [{id: 'b1-1-1', label: 'b1-1-1'}, {id: 'b1-1-2', label: 'b1-1-2'}],
|
||||
'c1-3': [{id: 'c1-3-1', label: 'c1-3-1'}, {id: 'c1-3-2', label: 'c1-3-2'}]
|
||||
}
|
||||
|
||||
const checkStrictly = ref(false)
|
||||
const asyncTreeData = ref([{id: 'a1', label: 'a1', children: []},{id: 'b1', label: 'b1', children: []},{id: 'c1', label: 'c1', children: []}])
|
||||
const treeData = ref([
|
||||
{id: '1', label: '北京'},
|
||||
{id: '2', label: '上海', children: [
|
||||
{id: '2-1', label: '上海-1'},
|
||||
{id: '2-2', label: '上海-2'},
|
||||
{id: '2-3', label: '上海-3'},
|
||||
] },
|
||||
{id: '3', label: '广州', children: [
|
||||
{id: '3-1', label: '海珠区', children: [
|
||||
{id: '3-1-1', label: '海珠区-1'},
|
||||
{id: '3-1-2', label: '海珠区-2'},
|
||||
{id: '3-1-4', label: '海珠区-3'},
|
||||
{id: '3-1-5', label: '海珠区-4'},
|
||||
{id: '3-1-6', label: '海珠区-5'},
|
||||
{id: '3-1-7', label: '海珠区-6'},
|
||||
{id: '3-1-8', label: '海珠区-7'},
|
||||
{id: '3-1-9', label: '海珠区-8'},
|
||||
{id: '3-1-10', label: '海珠区-9'},
|
||||
{id: '3-1-11', label: '海珠区-10'},
|
||||
]},
|
||||
{id: '3-2', label: '番禺区', children: [
|
||||
{id: '3-2-1', label: '番禺区-1'},
|
||||
{id: '3-2-2', label: '番禺区-2'},
|
||||
{id: '3-2-4', label: '番禺区-3', children: null}, // 注意: 当childrenKey的值设为null,代表无子节点的父节点
|
||||
{id: '3-2-5', label: '番禺区-4'},
|
||||
{id: '3-2-6', label: '番禺区-5'},
|
||||
{id: '3-2-7', label: '番禺区-6'},
|
||||
{id: '3-2-8', label: '番禺区-7'},
|
||||
{id: '3-2-9', label: '番禺区-8'},
|
||||
{id: '3-2-10', label: '番禺区-9'},
|
||||
{id: '3-2-11', label: '番禺区-10'},
|
||||
]},
|
||||
{id: '3-3', label: '黄埔区', children: [
|
||||
{id: '3-3-1', label: '黄埔区-1'},
|
||||
{id: '3-3-2', label: '黄埔区-2'},
|
||||
{id: '3-3-3', label: '黄埔区-3'},
|
||||
{id: '3-3-4', label: '黄埔区-4'},
|
||||
{id: '3-3-5', label: '黄埔区-5'},
|
||||
{id: '3-3-6', label: '黄埔区-6'},
|
||||
{id: '3-3-7', label: '黄埔区-7'},
|
||||
{id: '3-3-8', label: '黄埔区-8'},
|
||||
{id: '3-3-9', label: '黄埔区-9'},
|
||||
{id: '3-3-10', label: '黄埔区-10'},
|
||||
{id: '3-3-12', label: '黄埔区-11'},
|
||||
{id: '3-3-13', label: '黄埔区-12'},
|
||||
{id: '3-3-13', label: '黄埔区-13'},
|
||||
{id: '3-3-14', label: '黄埔区-14'},
|
||||
{id: '3-3-15', label: '黄埔区-15'},
|
||||
{id: '3-3-16', label: '黄埔区-16'},
|
||||
{id: '3-3-17', label: '黄埔区-17'},
|
||||
{id: '3-3-18', label: '黄埔区-18'},
|
||||
{id: '3-3-19', label: '黄埔区-19'},
|
||||
{id: '3-3-20', label: '黄埔区-20'},
|
||||
{id: '3-3-21', label: '黄埔区-21'},
|
||||
{id: '3-3-22', label: '黄埔区-22'},
|
||||
{id: '3-3-23', label: '黄埔区-23'},
|
||||
{id: '3-3-24', label: '黄埔区-24'},
|
||||
{id: '3-3-25', label: '黄埔区-25'},
|
||||
{id: '3-3-26', label: '黄埔区-26'},
|
||||
{id: '3-3-27', label: '黄埔区-27'},
|
||||
{id: '3-3-28', label: '黄埔区-28'},
|
||||
{id: '3-3-29', label: '黄埔区-29'},
|
||||
{id: '3-3-30', label: '黄埔区-30'},
|
||||
{id: '3-3-31', label: '黄埔区-31'},
|
||||
{id: '3-3-32', label: '黄埔区-32'},
|
||||
{id: '3-3-33', label: '黄埔区-33'},
|
||||
{id: '3-3-34', label: '黄埔区-34'},
|
||||
{id: '3-3-35', label: '黄埔区-35'},
|
||||
{id: '3-3-36', label: '黄埔区-36'},
|
||||
|
||||
]},
|
||||
],
|
||||
}])
|
||||
function getTitle(checked) {
|
||||
return `已选:${checked.length}项`
|
||||
}
|
||||
function itemclick (_multiple, _selectParent, _checkStrictly = false) {
|
||||
funcMode.value = _multiple ? 'checkbox' : 'radio';
|
||||
selectParent.value = _selectParent
|
||||
checkStrictly.value = _checkStrictly
|
||||
unref(nextTreeRef).showTree = true
|
||||
}
|
||||
function checkedFunc(id) {
|
||||
if(unref(activeId) === id) {
|
||||
activeId.value = '';
|
||||
unref(nextTreeRef).checkedFunc(id, false)
|
||||
} else {
|
||||
activeId.value = id;
|
||||
unref(nextTreeRef).checkedFunc(id)
|
||||
}
|
||||
}
|
||||
function changeVerify(current, chooseList) {
|
||||
// 注意:返回非空字符串会阻止原有行为,并提示返回的字符串
|
||||
// 如果函数体不做return返回值,即验证通过,控件正常处理业务
|
||||
console.log('当前变化的数据', current)
|
||||
console.log('已选择的数据', chooseList)
|
||||
if(chooseList && chooseList.length > 4) {
|
||||
|
||||
return '最多可以选择4个节点'
|
||||
}
|
||||
}
|
||||
function openTree() {
|
||||
unref(nextTreeAsyncRef).showTree = true
|
||||
}
|
||||
function echoDefault () {
|
||||
const selectIds = ['2-1','3-3-35']
|
||||
checkedTreeData(unref(treeData), selectIds)
|
||||
console.log('treeData的数据:', unref(treeData))
|
||||
funcMode.value = 'checkbox'
|
||||
unref(nextTreeRef).showTree = true
|
||||
}
|
||||
function loadData(data) {
|
||||
const type = data.$type; // 加载类型
|
||||
const source = data.source // 源数据
|
||||
// 同步实现的代码处理方式
|
||||
|
||||
if (type === 'nodeLoad') {
|
||||
const nodeItem = source;
|
||||
// 同步实现的代码处理方式
|
||||
// 如果期望子集节点中还存在孙子节点可以打开,请在初始化数据的时候,初始化个空数组的子节点配置值{[this.childrenKey]: []}
|
||||
|
||||
// if(nodeItem && localData[nodeItem.id]) {
|
||||
// return localData[nodeItem.id]
|
||||
// } else {
|
||||
// return []
|
||||
// }
|
||||
|
||||
// 异步的代码实现方式
|
||||
// 如果期望子集节点中还存在孙子节点可以打开,请在初始化数据的时候,初始化个空数组的子节点配置值{[this.childrenKey]: []}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
setTimeout(() => {
|
||||
if(nodeItem && localData[nodeItem.id]) {
|
||||
return resolve(localData[nodeItem.id])
|
||||
} else {
|
||||
return resolve([])
|
||||
}
|
||||
}, 1000)
|
||||
})
|
||||
} else if(type === 'remoteSearch') { // searchModel=remote的时候,会在loadData函数中返回type参数供做业务处理
|
||||
// ...doing
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function checkedTreeData (treeData, selectIds) {
|
||||
treeData.map(item => {
|
||||
if (selectIds.indexOf(item.id) !== -1) {
|
||||
item.checked = true
|
||||
} else {
|
||||
item.checked = false
|
||||
}
|
||||
if (item.children && item.children.length) {
|
||||
checkedTreeData(item.children, selectIds)
|
||||
}
|
||||
})
|
||||
}
|
||||
function oncancel() {
|
||||
// 清除treeData的选中状态
|
||||
checkedTreeData(unref(treeData), [])
|
||||
}
|
||||
function onconfirm(list) {
|
||||
console.log('选中项的数量列表list:', list)
|
||||
}
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.line-block {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
.img {
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
border-radius: 10rpx;
|
||||
margin: 0 20rpx;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
```
|
||||
|
||||
### vue2 使用
|
||||
```html
|
||||
<template>
|
||||
<view>
|
||||
<view style="padding:10px;color: #333;font-weight: 500;">
|
||||
<view style="padding: 10px 0"><text>1、设置单选和父级不可选</text></view>
|
||||
<button style="width: 100%;background-color: #f9ae3d;color:#fff" size="mini" @click="itemclick(false, false)">设置</button>
|
||||
<view style="padding: 10px 0"><text>2、设置多选和父级不可选</text></view>
|
||||
<button style="width: 100%;background-color: #f9ae3d;color:#fff" size="mini" @click="itemclick(true, false)">设置</button>
|
||||
<view style="padding: 10px 0"><text>3、设置单选和父级可选</text></view>
|
||||
<button style="width: 100%;background-color: #f9ae3d;color:#fff" size="mini" @click="itemclick(false, true)">设置</button>
|
||||
<view style="padding: 10px 0"><text>4、设置多选和父级可选</text></view>
|
||||
<button style="width: 100%;background-color: #f9ae3d;color:#fff" size="mini" @click="itemclick(true, true)" >设置</button>
|
||||
<view style="padding: 10px 0"><text>4、设置多选和父级可选和父级关联子级选择</text></view>
|
||||
<button style="width: 100%;background-color: #f9ae3d;color:#fff" size="mini" @click="itemclick(true, true, true)" >设置</button>
|
||||
<view style="padding: 10px 0"><text>5、设置默认回显(默认选中: '上海-2', '黄埔区-35')</text></view>
|
||||
<button style="width: 100%;background-color: #f9ae3d;color:#fff" size="mini" @click="echoDefault()" >设置</button>
|
||||
<!-- 异步加载demo -->
|
||||
<view style="padding: 10px 0"><text>6、异步加载渲染demo</text></view>
|
||||
<button style="width: 100%;background-color: #f9ae3d;color:#fff" size="mini" @click="openTree()" >设置</button>
|
||||
</view>
|
||||
<!-- 异步加载demo -->
|
||||
<next-tree :selectParent="false" :checkStrictly="true" funcMode="checkbox" ref="nextTreeAsyncRef" :treeData="asyncTreeData" :loadData="loadData" />
|
||||
|
||||
<next-tree :expandedKeys="['3','3-1']" :changeVerify="changeVerify" :title="getTitle" ref="nextTreeRef" :checkStrictly="checkStrictly" :selectParent="selectParent" :funcMode="funcMode" :treeData="treeData" @cancel="oncancel" @confirm="onconfirm">
|
||||
<!-- label插槽示意代码 -->
|
||||
<!-- <template v-slot:label="{data}">
|
||||
<view class="line-block">
|
||||
<image class="img" v-if="data.iconSrc" :src="data.iconSrc"></image>
|
||||
<text space="nbsp" v-if="data.prev">{{data.prev}} </text><text>{{data.label}}</text><text space="nbsp" v-if="data.post"> {{data.post}}</text>
|
||||
</view>
|
||||
</template> -->
|
||||
<!-- <template #topBar>
|
||||
<view style="color: #666;padding:5px;"><text style="font-size: 12px;">历史记录</text></view>
|
||||
<view style="display: flex;justify-content: space-between;padding-bottom: 10px;border-bottom: 1rpx solid #f0f0f0;">
|
||||
<button @click="checkedFunc('1-3-3-4')" :style="'background-color:'+ (activeId === '1-3-3-4' ? '#f9ae3d' : '#ccc') + ';color:#fff;margin: 5px'" size="mini">北京区-4</button>
|
||||
<button @click="checkedFunc('3-1-2')" :style="'background-color:'+ (activeId === '3-1-2' ? '#f9ae3d' : '#ccc') + ';color:#fff;margin: 5px'" size="mini">海珠区-2</button>
|
||||
<button @click="checkedFunc('3-1-6')" :style="'background-color:'+ (activeId === '3-1-6' ? '#f9ae3d' : '#ccc') + ';color:#fff;margin: 5px'" size="mini">海珠区-5</button>
|
||||
</view>
|
||||
</template> -->
|
||||
</next-tree>
|
||||
</view>
|
||||
</template>
|
||||
```
|
||||
|
||||
```js
|
||||
<script>
|
||||
let self = null;
|
||||
export default {
|
||||
data () {
|
||||
return {
|
||||
funcMode: 'radio',
|
||||
selectParent: false,
|
||||
checkStrictly: false,
|
||||
activeId: '',
|
||||
localData:{
|
||||
'a1': [{id: 'a1-1', label: 'a1-1'}, {id: 'a1-2', label: 'a1-2',children: [] },{id: 'a1-3', label: 'a1-3'}],
|
||||
'b1': [{id: 'b1-1', label: 'b1-1',children: []}, {id: 'b1-2', label: 'b1-2'},{id: 'b1-3', label: 'b1-3'}],
|
||||
'c1': [{id: 'c1-1', label: 'c1-1'}, {id: 'c1-2', label: 'c1-2'},{id: 'c1-3', label: 'c1-3',children: []}],
|
||||
'a1-2': [{id: 'a1-2-1', label: 'a1-2-1'}, {id: 'a1-2-2', label: 'a1-2-2'}],
|
||||
'b1-1': [{id: 'b1-1-1', label: 'b1-1-1'}, {id: 'b1-1-2', label: 'b1-1-2'}],
|
||||
'c1-3': [{id: 'c1-3-1', label: 'c1-3-1'}, {id: 'c1-3-2', label: 'c1-3-2'}]
|
||||
},
|
||||
asyncTreeData: [{id: 'a1', label: 'a1', children: []},{id: 'b1', label: 'b1', children: []},{id: 'c1', label: 'c1', children: []}],
|
||||
treeData: [
|
||||
{id: '1', label: '北京', checked: false},
|
||||
{id: '2', label: '上海', checked: false, children: [
|
||||
{id: '2-1', label: '上海-1', checked: false},
|
||||
{id: '2-2', label: '上海-2', checked: false},
|
||||
{id: '2-3', label: '上海-3', checked: false},
|
||||
] },
|
||||
{id: '3', label: '广州', children: [
|
||||
{id: '3-1', label: '海珠区', checked: false, children: [
|
||||
{id: '3-1-1', label: '海珠区-1', checked: false, disabled: true},
|
||||
{id: '3-1-2', label: '海珠区-2', checked: false},
|
||||
{id: '3-1-4', label: '海珠区-3', checked: false},
|
||||
{id: '3-1-5', label: '海珠区-4', checked: false},
|
||||
{id: '3-1-6', label: '海珠区-5', checked: false},
|
||||
{id: '3-1-7', label: '海珠区-6', checked: false},
|
||||
{id: '3-1-8', label: '海珠区-7', checked: false},
|
||||
{id: '3-1-9', label: '海珠区-8', checked: false},
|
||||
{id: '3-1-10', label: '海珠区-9', checked: false},
|
||||
{id: '3-1-11', label: '海珠区-10', checked: false},
|
||||
]},
|
||||
{id: '3-2', label: '番禺区', checked: false, children: [
|
||||
{id: '3-2-1', label: '番禺区-1', checked: false},
|
||||
{id: '3-2-2', label: '番禺区-2', checked: false},
|
||||
{id: '3-2-4', label: '番禺区-3', checked: false},
|
||||
{id: '3-2-5', label: '番禺区-4', checked: false},
|
||||
{id: '3-2-6', label: '番禺区-5', checked: false},
|
||||
{id: '3-2-7', label: '番禺区-6', checked: false},
|
||||
{id: '3-2-8', label: '番禺区-7', checked: false},
|
||||
{id: '3-2-9', label: '番禺区-8', checked: false},
|
||||
{id: '3-2-10', label: '番禺区-9', checked: false},
|
||||
{id: '3-2-11', label: '番禺区-10', checked: false},
|
||||
]},
|
||||
{id: '3-3', label: '黄埔区', checked: false, children: [
|
||||
{id: '3-3-1', label: '黄埔区-1', checked: false},
|
||||
{id: '3-3-2', label: '黄埔区-2', checked: false},
|
||||
{id: '3-3-3', label: '黄埔区-3', checked: false},
|
||||
{id: '3-3-4', label: '黄埔区-4', checked: false},
|
||||
{id: '3-3-5', label: '黄埔区-5', checked: false},
|
||||
{id: '3-3-6', label: '黄埔区-6', checked: false},
|
||||
{id: '3-3-7', label: '黄埔区-7', checked: false},
|
||||
{id: '3-3-8', label: '黄埔区-8', checked: false},
|
||||
{id: '3-3-9', label: '黄埔区-9', checked: false},
|
||||
{id: '3-3-10', label: '黄埔区-10', checked: false},
|
||||
{id: '3-3-12', label: '黄埔区-11', checked: false},
|
||||
{id: '3-3-13', label: '黄埔区-12', checked: false},
|
||||
{id: '3-3-13', label: '黄埔区-13', checked: false},
|
||||
{id: '3-3-14', label: '黄埔区-14', checked: false},
|
||||
{id: '3-3-15', label: '黄埔区-15', checked: false},
|
||||
{id: '3-3-16', label: '黄埔区-16', checked: false},
|
||||
{id: '3-3-17', label: '黄埔区-17', checked: false},
|
||||
{id: '3-3-18', label: '黄埔区-18', checked: false},
|
||||
{id: '3-3-19', label: '黄埔区-19', checked: false},
|
||||
{id: '3-3-20', label: '黄埔区-20', checked: false},
|
||||
{id: '3-3-21', label: '黄埔区-21', checked: false},
|
||||
{id: '3-3-22', label: '黄埔区-22', checked: false},
|
||||
{id: '3-3-23', label: '黄埔区-23', checked: false},
|
||||
{id: '3-3-24', label: '黄埔区-24', checked: false},
|
||||
{id: '3-3-25', label: '黄埔区-25', checked: false},
|
||||
{id: '3-3-26', label: '黄埔区-26', checked: false},
|
||||
{id: '3-3-27', label: '黄埔区-27', checked: false},
|
||||
{id: '3-3-28', label: '黄埔区-28', checked: false},
|
||||
{id: '3-3-29', label: '黄埔区-29', checked: false},
|
||||
{id: '3-3-30', label: '黄埔区-30', checked: false},
|
||||
{id: '3-3-31', label: '黄埔区-31', checked: false},
|
||||
{id: '3-3-32', label: '黄埔区-32', checked: false},
|
||||
{id: '3-3-33', label: '黄埔区-33', checked: false},
|
||||
{id: '3-3-34', label: '黄埔区-34', checked: false},
|
||||
{id: '3-3-35', label: '黄埔区-35', checked: false},
|
||||
{id: '3-3-36', label: '黄埔区-36', checked: false},
|
||||
]},
|
||||
],
|
||||
}]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openTree: function() {
|
||||
this.$refs.nextTreeAsyncRef.showTree = true
|
||||
},
|
||||
changeVerify: function(current, chooseList) {
|
||||
// 注意:返回非空字符串会阻止原有行为,并提示返回的字符串
|
||||
// 如果函数体不做return返回值,即验证通过,控件正常处理业务
|
||||
console.log('当前变化的数据', current)
|
||||
console.log('已选择的数据', chooseList)
|
||||
if(chooseList && chooseList.length > 4) {
|
||||
|
||||
return '最多可以选择4个节点'
|
||||
}
|
||||
},
|
||||
checkedFunc: function(id) {
|
||||
if(this.activeId === id) {
|
||||
this.activeId = '';
|
||||
this.$refs.nextTreeRef.checkedFunc(id, false)
|
||||
} else {
|
||||
this.activeId = id;
|
||||
this.$refs.nextTreeRef.checkedFunc(id)
|
||||
}
|
||||
},
|
||||
function loadData(data) {
|
||||
const type = data.$type; // 加载类型
|
||||
const source = data.source // 源数据
|
||||
// 同步实现的代码处理方式
|
||||
|
||||
if (type === 'nodeLoad') {
|
||||
const nodeItem = source;
|
||||
// 同步实现的代码处理方式 可以返回单个子节点的集合也可以返回子孙节点的集合
|
||||
// 如果期望子集节点中还存在孙子节点可以打开,请在初始化数据的时候,初始化个空数组的子节点配置值{[this.childrenKey]: []}
|
||||
|
||||
// if(nodeItem && this.localData[nodeItem.id]) {
|
||||
// return this.localData[nodeItem.id]
|
||||
// } else {
|
||||
// return []
|
||||
// }
|
||||
// 异步的代码实现方式 可以返回单个子节点的集合也可以返回子孙节点的集合
|
||||
// 如果期望子集节点中还存在孙子节点可以打开,请在初始化数据的时候,初始化个空数组的子节点配置值{[this.childrenKey]: []}
|
||||
return new Promise((resolve, reject) => {
|
||||
setTimeout(() => {
|
||||
if(nodeItem && self.localData[nodeItem.id]) {
|
||||
return resolve(self.localData[nodeItem.id])
|
||||
} else {
|
||||
return resolve([])
|
||||
}
|
||||
}, 1000)
|
||||
})
|
||||
} else if(type === 'remoteSearch') { // searchModel=remote的时候,会在loadData函数中返回type参数供做业务处理
|
||||
// ...doing
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
getTitle: function(checked) {
|
||||
return `已选:${checked.length}项`
|
||||
},
|
||||
echoDefault: function() {
|
||||
const selectIds = ['2-1','3-3-35']
|
||||
this.checkedTreeData(this.treeData, selectIds)
|
||||
console.log('treeData的数据:', this.treeData)
|
||||
this.funcMode = 'checkbox'
|
||||
this.$refs.nextTreeRef.showTree = true
|
||||
},
|
||||
itemclick: function(_multiple, _selectParent, _checkStrictly = false) {
|
||||
this.funcMode = _multiple ? 'checkbox' : 'radio'
|
||||
this.selectParent = _selectParent
|
||||
this.checkStrictly = _checkStrictly
|
||||
this.$refs.nextTreeRef.showTree = true
|
||||
},
|
||||
checkedTreeData: function(treeData, selectIds) {
|
||||
// 注意 vue2当数据深嵌套时,如果没有在treeData里面初始化checked属性,那在改变数据的时候直接将checked属性赋值为true,这时候ui界面有可能不会更新,
|
||||
// 这时候建议使用this.$set去更新checked属性值,或者在初始化this.treeData的时候初始化checked属性
|
||||
(treeData || []).map(item => {
|
||||
if (selectIds.indexOf(item.id) !== -1) {
|
||||
item.checked = true
|
||||
} else {
|
||||
item.checked = false
|
||||
}
|
||||
if (item.children && item.children.length) {
|
||||
this.checkedTreeData(item.children, selectIds)
|
||||
}
|
||||
})
|
||||
},
|
||||
onconfirm: function(list) {
|
||||
console.log('选中项的数量列表list:', list)
|
||||
},
|
||||
oncancel: function() {
|
||||
// 清除treeData的选中状态
|
||||
this.checkedTreeData(this.treeData, [])
|
||||
}
|
||||
},
|
||||
created() {
|
||||
self = this
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.line-block {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
.img {
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
border-radius: 10rpx;
|
||||
margin: 0 20rpx;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
```
|
||||
|
||||
### 个性化自定义样式渲染
|
||||
|
||||
如果你的需求对样式需求比较高,请使用插槽模式渲染,本组件提供label插槽供你自定义定制;
|
||||
|
||||
```js
|
||||
<script>
|
||||
// 提供参考一组自定义渲染数据demo,treeData如下;
|
||||
const treeData = [
|
||||
{id: '1', label: '北京', prev: 'PonderNext-', iconSrc: 'https://img95.699pic.com/xsj/03/fg/hj.jpg%21/fh/300', children: [
|
||||
{id: '1-3-3-1', label: '北京区-1', prev: '前置-'},
|
||||
{id: '1-3-3-2', label: '北京区-2', post: '-后置'},
|
||||
{id: '1-3-3-3', label: '北京区-3', post: '-后置', prev: '前置-'},
|
||||
{id: '1-3-3-4', label: '北京区-4'},
|
||||
{id: '1-3-3-5', label: '北京区-5'},
|
||||
{id: '1-3-3-6', label: '北京区-6'},
|
||||
{id: '1-3-3-7', label: '北京区-7'},
|
||||
{id: '1-3-3-8', label: '北京区-8'},
|
||||
{id: '1-3-3-9', label: '北京区-9'},
|
||||
{id: '1-3-3-10', label: '北京区-10'},
|
||||
{id: '1-3-3-12', label: '北京区-11'},
|
||||
{id: '1-3-3-13', label: '北京区-12'},
|
||||
{id: '1-3-3-13', label: '北京区-13'},
|
||||
{id: '1-3-3-14', label: '北京区-14'},
|
||||
{id: '1-3-3-15', label: '北京区-15'},
|
||||
{id: '1-3-3-16', label: '北京区-16'},
|
||||
{id: '1-3-3-17', label: '北京区-17'},
|
||||
{id: '1-3-3-18', label: '北京区-18'},
|
||||
{id: '1-3-3-19', label: '北京区-19'},
|
||||
{id: '1-3-3-20', label: '北京区-20'},
|
||||
{id: '1-3-3-21', label: '北京区-21'},
|
||||
{id: '1-3-3-22', label: '北京区-22'},
|
||||
{id: '1-3-3-23', label: '北京区-23'},
|
||||
{id: '1-3-3-24', label: '北京区-24'},
|
||||
{id: '1-3-3-25', label: '北京区-25'},
|
||||
{id: '1-3-3-26', label: '北京区-26'},
|
||||
{id: '1-3-3-27', label: '北京区-27'},
|
||||
{id: '1-3-3-28', label: '北京区-28'},
|
||||
{id: '1-3-3-29', label: '北京区-29'},
|
||||
{id: '1-1-3-3-30', label: '北京区-30'},
|
||||
{id: '1-3-3-31', label: '北京区-31'},
|
||||
{id: '1-3-3-32', label: '北京区-32'},
|
||||
{id: '1-3-3-33', label: '北京区-33'},
|
||||
{id: '1-3-3-34', label: '北京区-34'},
|
||||
{id: '1-3-3-35', label: '北京区-35'},
|
||||
{id: '1-3-3-36', label: '北京区-36'},
|
||||
{id: '1-3-3-37', label: '北京区-37'},
|
||||
{id: '1-3-3-38', label: '北京区-38'},
|
||||
{id: '1-3-3-39', label: '北京区-39'},
|
||||
{id: '1-3-3-40', label: '北京区-40'},
|
||||
{id: '1-3-3-41', label: '北京区-41'},
|
||||
{id: '1-3-3-42', label: '北京区-42'},
|
||||
{id: '1-3-3-43', label: '北京区-43'},
|
||||
{id: '1-3-3-44', label: '北京区-44'},
|
||||
{id: '1-3-3-45', label: '北京区-45'},
|
||||
{id: '1-3-3-46', label: '北京区-46'},
|
||||
{id: '1-3-3-47', label: '北京区-47'},
|
||||
{id: '1-3-3-48', label: '北京区-48'},
|
||||
{id: '1-3-3-49', label: '北京区-49'},
|
||||
{id: '1-3-3-50', label: '北京区-50'},
|
||||
{id: '1-3-3-51', label: '北京区-51'},
|
||||
{id: '1-3-3-52', label: '北京区-52'},
|
||||
{id: '1-3-3-53', label: '北京区-53'},
|
||||
{id: '1-3-3-54', label: '北京区-54'},
|
||||
]},
|
||||
{id: '2', label: '上海', prev: 'PonderNext-', iconSrc: 'https://img95.699pic.com/xsj/0g/hb/tc.jpg%21/fh/300', children: [
|
||||
{id: '2-1', label: '上海-1', iconSrc: 'https://img1.baidu.com/it/u=1997340124,765201109&fm=253&fmt=auto&app=120&f=JPEG?w=285&h=285'},
|
||||
{id: '2-2', label: '上海-2', iconSrc: 'https://img1.baidu.com/it/u=1997340124,765201109&fm=253&fmt=auto&app=120&f=JPEG?w=285&h=285'},
|
||||
{id: '2-3', label: '上海-3', iconSrc: 'https://img1.baidu.com/it/u=1997340124,765201109&fm=253&fmt=auto&app=120&f=JPEG?w=285&h=285'},
|
||||
] },
|
||||
{id: '3', label: '广州', prev: 'PonderNext-', iconSrc: 'https://storage-public.zhaopin.cn/user/avatar/1589350028141684980/d00a1afa-e3ec-40a5-a68e-aef1f684b189.jpg', children: [
|
||||
{id: '3-1', label: '海珠区', iconSrc: 'https://img95.699pic.com/xsj/0u/f3/5h.jpg%21/fh/300', children: [
|
||||
{id: '3-1-1', label: '海珠区-1', disabled: true},
|
||||
{id: '3-1-2', label: '海珠区-2', post: '-后置', prev: '前置-'},
|
||||
{id: '3-1-4', label: '海珠区-3', post: '-后置',},
|
||||
{id: '3-1-5', label: '海珠区-4', children: [
|
||||
{ id: '3-1-5-1', label: '海珠区-4-200号'},
|
||||
{ id: '3-1-5-2', label: '海珠区-4-201号', children: [
|
||||
{ id: '3-1-5-1-1', label: '海珠区-4-200号-2'},
|
||||
{ id: '3-1-5-2-1', label: '海珠区-4-201号-3'},
|
||||
]},
|
||||
]},
|
||||
{id: '3-1-6', label: '海珠区-5'},
|
||||
{id: '3-1-7', label: '海珠区-6'},
|
||||
{id: '3-1-8', label: '海珠区-7', post: '-后置',},
|
||||
{id: '3-1-9', label: '海珠区-8'},
|
||||
{id: '3-1-10', label: '海珠区-9'},
|
||||
{id: '3-1-11', label: '海珠区-10'},
|
||||
{id: '3-1-1', label: '海珠区-11', disabled: true},
|
||||
{id: '3-1-2', label: '海珠区-12'},
|
||||
{id: '3-1-4', label: '海珠区-13'},
|
||||
{id: '3-1-5', label: '海珠区-14'},
|
||||
{id: '3-1-6', label: '海珠区-15'},
|
||||
{id: '3-1-7', label: '海珠区-16'},
|
||||
{id: '3-1-8', label: '海珠区-17'},
|
||||
{id: '3-1-9', label: '海珠区-18'},
|
||||
{id: '3-1-10', label: '海珠区-19', prev: '前置-'},
|
||||
{id: '3-1-11', label: '海珠区-20'},
|
||||
{id: '3-1-1', label: '海珠区-21', disabled: true},
|
||||
{id: '3-1-2', label: '海珠区-22'},
|
||||
{id: '3-1-4', label: '海珠区-23'},
|
||||
{id: '3-1-5', label: '海珠区-24'},
|
||||
{id: '3-1-6', label: '海珠区-25'},
|
||||
{id: '3-1-7', label: '海珠区-26'},
|
||||
{id: '3-1-8', label: '海珠区-27'},
|
||||
{id: '3-1-9', label: '海珠区-28'},
|
||||
{id: '3-1-10', label: '海珠区-29'},
|
||||
{id: '3-1-11', label: '海珠区-30'},
|
||||
{id: '3-1-1', label: '海珠区-31', disabled: true},
|
||||
{id: '3-1-2', label: '海珠区-32'},
|
||||
{id: '3-1-4', label: '海珠区-33'},
|
||||
{id: '3-1-5', label: '海珠区-34'},
|
||||
{id: '3-1-6', label: '海珠区-35'},
|
||||
{id: '3-1-7', label: '海珠区-36'},
|
||||
{id: '3-1-8', label: '海珠区-37'},
|
||||
{id: '3-1-9', label: '海珠区-38'},
|
||||
{id: '3-1-10', label: '海珠区-39'},
|
||||
{id: '3-1-11', label: '海珠区-40'},
|
||||
{id: '3-1-1', label: '海珠区-41', disabled: true},
|
||||
{id: '3-1-2', label: '海珠区-42'},
|
||||
{id: '3-1-4', label: '海珠区-43'},
|
||||
{id: '3-1-5', label: '海珠区-44'},
|
||||
{id: '3-1-6', label: '海珠区-45'},
|
||||
{id: '3-1-7', label: '海珠区-46'},
|
||||
{id: '3-1-8', label: '海珠区-47'},
|
||||
{id: '3-1-9', label: '海珠区-48'},
|
||||
{id: '3-1-10', label: '海珠区-49'},
|
||||
{id: '3-1-11', label: '海珠区-50'},
|
||||
{id: '3-1-11', label: '海珠区-51'},
|
||||
]},
|
||||
{id: '3-2', label: '番禺区', iconSrc: 'https://img1.baidu.com/it/u=931648192,3196263841&fm=253&fmt=auto&app=120&f=JPEG?w=285&h=285', disabled: true, checked: true, children: [
|
||||
{id: '3-2-1', label: '番禺区-1'},
|
||||
{id: '3-2-2', label: '番禺区-2'},
|
||||
{id: '3-2-4', label: '番禺区-3'},
|
||||
{id: '3-2-5', label: '番禺区-4'},
|
||||
{id: '3-2-6', label: '番禺区-5'},
|
||||
{id: '3-2-7', label: '番禺区-6'},
|
||||
{id: '3-2-8', label: '番禺区-7'},
|
||||
{id: '3-2-9', label: '番禺区-8'},
|
||||
{id: '3-2-10', label: '番禺区-9'},
|
||||
{id: '3-2-11', label: '番禺区-10'},
|
||||
]},
|
||||
{id: '3-3', label: '黄埔区', iconSrc: 'https://img.jiaoyubao.cn/43423/20210423113959473-20210423114005024.jpeg', children: [
|
||||
{id: '3-3-1', label: '黄埔区-1'},
|
||||
{id: '3-3-2', label: '黄埔区-2'},
|
||||
{id: '3-3-3', label: '黄埔区-3'},
|
||||
{id: '3-3-4', label: '黄埔区-4'},
|
||||
{id: '3-3-5', label: '黄埔区-5'},
|
||||
{id: '3-3-6', label: '黄埔区-6'},
|
||||
{id: '3-3-7', label: '黄埔区-7'},
|
||||
{id: '3-3-8', label: '黄埔区-8'},
|
||||
{id: '3-3-9', label: '黄埔区-9'},
|
||||
{id: '3-3-10', label: '黄埔区-10'},
|
||||
{id: '3-3-12', label: '黄埔区-11'},
|
||||
{id: '3-3-13', label: '黄埔区-12'},
|
||||
{id: '3-3-13', label: '黄埔区-13'},
|
||||
{id: '3-3-14', label: '黄埔区-14'},
|
||||
{id: '3-3-15', label: '黄埔区-15'},
|
||||
{id: '3-3-16', label: '黄埔区-16'},
|
||||
{id: '3-3-17', label: '黄埔区-17'},
|
||||
{id: '3-3-18', label: '黄埔区-18'},
|
||||
{id: '3-3-19', label: '黄埔区-19'},
|
||||
{id: '3-3-20', label: '黄埔区-20'},
|
||||
{id: '3-3-21', label: '黄埔区-21'},
|
||||
{id: '3-3-22', label: '黄埔区-22'},
|
||||
{id: '3-3-23', label: '黄埔区-23'},
|
||||
{id: '3-3-24', label: '黄埔区-24'},
|
||||
{id: '3-3-25', label: '黄埔区-25'},
|
||||
{id: '3-3-26', label: '黄埔区-26'},
|
||||
{id: '3-3-27', label: '黄埔区-27'},
|
||||
{id: '3-3-28', label: '黄埔区-28'},
|
||||
{id: '3-3-29', label: '黄埔区-29'},
|
||||
{id: '3-3-30', label: '黄埔区-30'},
|
||||
{id: '3-3-31', label: '黄埔区-31'},
|
||||
{id: '3-3-32', label: '黄埔区-32'},
|
||||
{id: '3-3-33', label: '黄埔区-33'},
|
||||
{id: '3-3-34', label: '黄埔区-34'},
|
||||
{id: '3-3-35', label: '黄埔区-35'},
|
||||
{id: '3-3-36', label: '黄埔区-36'},
|
||||
{id: '3-3-37', label: '黄埔区-37'},
|
||||
{id: '3-3-38', label: '黄埔区-38'},
|
||||
{id: '3-3-39', label: '黄埔区-39'},
|
||||
{id: '3-3-40', label: '黄埔区-40'},
|
||||
{id: '3-3-41', label: '黄埔区-41'},
|
||||
{id: '3-3-42', label: '黄埔区-42'},
|
||||
{id: '3-3-43', label: '黄埔区-43'},
|
||||
{id: '3-3-44', label: '黄埔区-44'},
|
||||
{id: '3-3-45', label: '黄埔区-45'},
|
||||
{id: '3-3-46', label: '黄埔区-46'},
|
||||
{id: '3-3-47', label: '黄埔区-47'},
|
||||
{id: '3-3-48', label: '黄埔区-48'},
|
||||
{id: '3-3-49', label: '黄埔区-49'},
|
||||
{id: '3-3-50', label: '黄埔区-50'},
|
||||
{id: '3-3-51', label: '黄埔区-51'},
|
||||
{id: '3-3-52', label: '黄埔区-52'},
|
||||
{id: '3-3-53', label: '黄埔区-53'},
|
||||
{id: '3-3-54', label: '黄埔区-54'},
|
||||
]},
|
||||
],
|
||||
}]
|
||||
</script>
|
||||
```
|
||||
|
||||
### 预览
|
||||
###
|
||||
***
|
||||
|
||||
| 功能预览 | 父子级关联演示 | 全面支持大数据量,子孙节点ui按需渲染(按需渲染数据) |
|
||||
| :------------------------------------------------------------------: | :------------------------------------------------------------------: | :------------------------------------------------------------------: |
|
||||
|  |  |  |
|
||||
|
||||
|
||||
|
||||
| 增强控件交互能力,增加筛选search模式,全面支持大数据量交互 | 超强的样式定制能力,满足你高精美组件的需求 | 打开精美的辅助线模式,让你的控件更加友好 |
|
||||
| :------------------------------------------------------------------: | :------------------------------------------------------------------: | :------------------------------------------------------------------: |
|
||||
|  |  |  |
|
||||
|
||||
|
||||
| 增加搜索模式searchModel=depHighlight模式,从属高亮显示模式 | 支持异步加载子节点,子树集,ajax远程加载数据等 | 支持不同主题的切换,ui定制更简单 |
|
||||
| :------------------------------------------------------------------: | :------------------------------------------------------------------: | :------------------------------------------------------------------: |
|
||||
|  |  |  |
|
||||
|
||||
| 增加验证函数和topBar插槽使得更加容易和组件进行交互 | 增加页面模式,支持整页ui展示模式 | 增加展开模式expandedMode配置,支持单链路展开,理论上支持几万数据量 |
|
||||
| :------------------------------------------------------------------: | :------------------------------------------------------------------: | :------------------------------------------------------------------: |
|
||||
| | |  |
|
||||
|
||||
|
||||
|
||||
### 超集功能预览(增值功能)
|
||||
###
|
||||
| 实现tree的功能模式扩展,让你的tree组件实现可编辑态 |
|
||||
| :--------------------------------------------------------------------: |
|
||||
| |
|
||||
|
||||
## 参数
|
||||
可选参数属性列表
|
||||
|
||||
|参数名 |说明 |类型 |是否必填 |默认值 |可选值 |
|
||||
|---- |---- |---- |---- |---- |----------------------- |
|
||||
|uiMode |ui表现方式;popup<弹窗>, page<页面>;默认是 popup |String |是 |popup |page |
|
||||
|funcMode |功能模式配置;display<展示模式>, edit<编辑模式>,checkbox<多选模式>, radio<单选模式>;默认是 radio |String |是 |radio |dispaly,edit,checkbox |
|
||||
|treeData |树源数据列表 |Array |是 |[] |- |
|
||||
|valueKey |绑定value的键属性(项的唯一key标识) |String |否 |id |- |
|
||||
|labelKey |用于显示的字段 |String |否 |label |- |
|
||||
|disabledKey |禁用节点绑定属性 |String |否 |disabled |- |
|
||||
|childrenKey |子节点绑定属性 (注意:当item[childrenKey]的值设为null时,代表是无下级数据的父节点,即非叶子节点) |String |否 |children |- |
|
||||
|title | 弹出标题(如果是函数时会返回所选项的值作为回调参数如;title: (checked):String => {}) |String, Function |否 |'' |- |
|
||||
|selectParent |作用于funcMode=display模式下;是否可以选父级 |Boolean |否 |false |true |
|
||||
|foldAll| 折叠时关闭所有已经打开的子集,再次打开时需要一级一级打开 |Boolean |否 |false |true |
|
||||
|themeColor |主题颜色 |String |否 |#f9ae3d |- |
|
||||
|cancelColor |取消按钮颜色 |String |否 |#757575 |- |
|
||||
|titleColor |标题颜色 |String |否 |#757575 |- |
|
||||
|border |是否有分割线 |Boolean |否 |false |true |
|
||||
|checkStrictly|作用于funcMode=checkbox模式下; 状态下节点选择完全受控(父子节点选中状态不再关联) |Boolean |否 |false |true |
|
||||
|checkStrictlyModel|作用于funcMode=checkbox模式下;父子节点关联模式:strong:强关联(不再受限节点的disabled控制),weak:弱关联(节点关联受disabled控制) |String |是 |weak |strong |
|
||||
|showHalfCheckedTips|作用于funcMode=checkbox模式下; checkStrictly为false的状态下生效;父子节点选中状态不再关联,是否展示半选提示; |Boolean |否 |false |true |
|
||||
|ifSearch| 筛选search模式 |Boolean |否 |true |false |
|
||||
|searchModel| 搜索模式配置 depHighlight: 从属高亮(显示层级并高亮显示);common: 一般;remote: 远程 |String |否 |common |depHighlight |
|
||||
|showAuxiliaryLine| 是否打开辅助线 |Boolean |否 |false |true |
|
||||
|loadData| 异步加载函数 (node):Promise([childData]) => {} // demo有说明 |Function |否 |- |- |
|
||||
|height| 只在uiMode=popup时生效;弹层容器的高度,默认是500 |Number |否 |500 |- |
|
||||
|changeVerify|作用于funcMode=display模式下; 验证函数 (current as any, chooseList as any []):String => {} // 验证函数会把当前控件的选择值作为参数返给函数体,demo有说明 |Function |否 |- |- |
|
||||
|expandedKeys| (Controlled) Specifies the keys of the expanded treeNodes 展开配置项,格式为[valueKey] |Array |否 |[] |- |
|
||||
|expandedMode| 展开模式配置: common: 一般模式;singe: 单一模式; |String |否 |common |singe |
|
||||
|
||||
|
||||
# Event 事件
|
||||
|事件名 |说明 |类型 |回调参数 |
|
||||
|---- |---- |---- |---- |
|
||||
|confirm|菜单收起时返回的筛选结果 |emit |array |
|
||||
|clear|点击清除按钮时触发 |emit |- |
|
||||
|cancel|关闭弹层和点击取消时触发 |emit |- |
|
||||
|change|选项改变时触发 |emit |array |
|
||||
|
||||
## Slot 插槽
|
||||
|
||||
|名称 |说明 |参数 |
|
||||
|---- |---- |---- |
|
||||
|label |label插槽 |data(当前项对于treeData里面的数据) |
|
||||
|topBar |topBar插槽 |----滚动区域顶部topBar插槽 |
|
||||
|bottomBar |bottomBar插槽 |----滚动区域底部bottomBar插槽 |
|
||||
|fixedBottomBar |fixedBottomBar插槽 |----固定在页面的底部,使用fixed进行定位 |
|
||||
|empty |empty插槽 |----数据为空的插槽 |
|
||||
|
|
@ -0,0 +1,216 @@
|
|||
/* @preserve
|
||||
* gcoord 0.2.2, geographic coordinate library
|
||||
* Copyright (c) 2019 Jiulong Hu <me@hujiulong.com>
|
||||
*/
|
||||
!function (e, t) {
|
||||
"object" == typeof exports && "undefined" != typeof module ? t(exports) : "function" == typeof define && define.amd ? define(["exports"], t) : t(e.gcoord = {})
|
||||
}(this, function (e) {
|
||||
"use strict";
|
||||
var t = "WGS84", r = t, n = t, o = "GCJ02", a = o, i = "BD09", u = i, f = i, c = i, s = "BD09MC", l = s,
|
||||
M = "EPSG3857", g = M, h = M, v = M, d = M;
|
||||
|
||||
function m(e) {
|
||||
throw new Error(e)
|
||||
}
|
||||
|
||||
function G(e) {
|
||||
return !isNaN(e) && null !== e && !S(e)
|
||||
}
|
||||
|
||||
function S(e) {
|
||||
return !!e && "[object Array]" === Object.prototype.toString.call(e)
|
||||
}
|
||||
|
||||
function P() {
|
||||
for (var o = [], e = 0; e < arguments.length; e++) o[e] = arguments[e];
|
||||
var a = o.length - 1;
|
||||
return function () {
|
||||
for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];
|
||||
for (var r = a, n = o[a].apply(null, e); r--;) n = o[r].call(null, n);
|
||||
return n
|
||||
}
|
||||
}
|
||||
|
||||
var b = Math.sin, y = Math.cos, p = Math.sqrt, B = Math.abs, D = Math.PI, C = 6378245, E = .006693421622965823;
|
||||
|
||||
function W(e) {
|
||||
var t = e[0], r = e[1];
|
||||
if (!J(t, r)) return [t, r];
|
||||
for (var n = [t, r], o = n[0], a = n[1], i = x([o, a]), u = i[0] - t, f = i[1] - r; 1e-6 < B(u) || 1e-6 < B(f);) u = (i = x([o -= u, a -= f]))[0] - t, f = i[1] - r;
|
||||
return [o, a]
|
||||
}
|
||||
|
||||
function x(e) {
|
||||
var t = e[0], r = e[1];
|
||||
if (!J(t, r)) return [t, r];
|
||||
var n = function (e, t) {
|
||||
var r = function (e, t) {
|
||||
var r = 300 + e + 2 * t + .1 * e * e + .1 * e * t + .1 * p(B(e));
|
||||
return r += 2 * (20 * b(6 * e * D) + 20 * b(2 * e * D)) / 3, r += 2 * (20 * b(e * D) + 40 * b(e / 3 * D)) / 3, r += 2 * (150 * b(e / 12 * D) + 300 * b(e / 30 * D)) / 3
|
||||
}(e - 105, t - 35), n = function (e, t) {
|
||||
var r = 2 * e - 100 + 3 * t + .2 * t * t + .1 * e * t + .2 * p(B(e));
|
||||
return r += 2 * (20 * b(6 * e * D) + 20 * b(2 * e * D)) / 3, r += 2 * (20 * b(t * D) + 40 * b(t / 3 * D)) / 3, r += 2 * (160 * b(t / 12 * D) + 320 * b(t * D / 30)) / 3
|
||||
}(e - 105, t - 35), o = t / 180 * D, a = b(o), i = p(a = 1 - E * a * a);
|
||||
return [r = 180 * r / (C / i * y(o) * D), n = 180 * n / (C * (1 - E) / (a * i) * D)]
|
||||
}(t, r);
|
||||
return [t + n[0], r + n[1]]
|
||||
}
|
||||
|
||||
function J(e, t) {
|
||||
return 72.004 <= e && e <= 137.8347 && .8293 <= t && t <= 55.8271
|
||||
}
|
||||
|
||||
var k = Math.sin, L = Math.cos, j = Math.atan2, I = Math.sqrt, q = 3e3 * Math.PI / 180;
|
||||
|
||||
function w(e) {
|
||||
var t = e[0] - .0065, r = e[1] - .006, n = I(t * t + r * r) - 2e-5 * k(r * q), o = j(r, t) - 3e-6 * L(t * q);
|
||||
return [n * L(o), n * k(o)]
|
||||
}
|
||||
|
||||
function N(e) {
|
||||
var t = e[0], r = e[1], n = I(t * t + r * r) + 2e-5 * k(r * q), o = j(r, t) + 3e-6 * L(t * q);
|
||||
return [n * L(o) + .0065, n * k(o) + .006]
|
||||
}
|
||||
|
||||
var O = 180 / Math.PI, A = Math.PI / 180, F = 6378137, _ = 20037508.342789244;
|
||||
|
||||
function z(e) {
|
||||
return [e[0] * O / F, (.5 * Math.PI - 2 * Math.atan(Math.exp(-e[1] / F))) * O]
|
||||
}
|
||||
|
||||
function T(e) {
|
||||
var t = Math.abs(e[0]) <= 180 ? e[0] : e[0] - 360 * (e[0] < 0 ? -1 : 1),
|
||||
r = [F * t * A, F * Math.log(Math.tan(.25 * Math.PI + .5 * e[1] * A))];
|
||||
return r[0] > _ && (r[0] = _), r[0] < -_ && (r[0] = -_), r[1] > _ && (r[1] = _), r[1] < -_ && (r[1] = -_), r
|
||||
}
|
||||
|
||||
var U = Math.abs, H = Math.pow, K = [12890594.86, 8362377.87, 5591021, 3481989.83, 1678043.12, 0],
|
||||
Q = [75, 60, 45, 30, 15, 0],
|
||||
R = [[1.410526172116255e-8, 898305509648872e-20, -1.9939833816331, 200.9824383106796, -187.2403703815547, 91.6087516669843, -23.38765649603339, 2.57121317296198, -.03801003308653, 17337981.2], [-7.435856389565537e-9, 8983055097726239e-21, -.78625201886289, 96.32687599759846, -1.85204757529826, -59.36935905485877, 47.40033549296737, -16.50741931063887, 2.28786674699375, 10260144.86], [-3.030883460898826e-8, 898305509983578e-20, .30071316287616, 59.74293618442277, 7.357984074871, -25.38371002664745, 13.45380521110908, -3.29883767235584, .32710905363475, 6856817.37], [-1.981981304930552e-8, 8983055099779535e-21, .03278182852591, 40.31678527705744, .65659298677277, -4.44255534477492, .85341911805263, .12923347998204, -.04625736007561, 4482777.06], [3.09191371068437e-9, 8983055096812155e-21, 6995724062e-14, 23.10934304144901, -.00023663490511, -.6321817810242, -.00663494467273, .03430082397953, -.00466043876332, 2555164.4], [2.890871144776878e-9, 8983055095805407e-21, -3.068298e-8, 7.47137025468032, -353937994e-14, -.02145144861037, -1234426596e-14, .00010322952773, -323890364e-14, 826088.5]],
|
||||
V = [[-.0015702102444, 111320.7020616939, 0x60e374c3105a3, -0x24bb4115e2e164, 0x5cc55543bb0ae8, -0x7ce070193f3784, 0x5e7ca61ddf8150, -0x261a578d8b24d0, 0x665d60f3742ca, 82.5], [.0008277824516172526, 111320.7020463578, 647795574.6671607, -4082003173.641316, 10774905663.51142, -15171875531.51559, 12053065338.62167, -5124939663.577472, 913311935.9512032, 67.5], [.00337398766765, 111320.7020202162, 4481351.045890365, -23393751.19931662, 79682215.47186455, -115964993.2797253, 97236711.15602145, -43661946.33752821, 8477230.501135234, 52.5], [.00220636496208, 111320.7020209128, 51751.86112841131, 3796837.749470245, 992013.7397791013, -1221952.21711287, 1340652.697009075, -620943.6990984312, 144416.9293806241, 37.5], [-.0003441963504368392, 111320.7020576856, 278.2353980772752, 2485758.690035394, 6070.750963243378, 54821.18345352118, 9540.606633304236, -2710.55326746645, 1405.483844121726, 22.5], [-.0003218135878613132, 111320.7020701615, .00369383431289, 823725.6402795718, .46104986909093, 2351.343141331292, 1.58060784298199, 8.77738589078284, .37238884252424, 7.45]];
|
||||
|
||||
function X(e, t, r) {
|
||||
var n = U(t) / r[9], o = r[0] + r[1] * U(e),
|
||||
a = r[2] + r[3] * n + r[4] * H(n, 2) + r[5] * H(n, 3) + r[6] * H(n, 4) + r[7] * H(n, 5) + r[8] * H(n, 6);
|
||||
return [o *= e < 0 ? -1 : 1, a *= t < 0 ? -1 : 1]
|
||||
}
|
||||
|
||||
function Y(e) {
|
||||
for (var t = e[0], r = e[1], n = [], o = 0; o < Q.length; o++) if (U(r) > Q[o]) {
|
||||
n = V[o];
|
||||
break
|
||||
}
|
||||
return X(t, r, n)
|
||||
}
|
||||
|
||||
function Z(e) {
|
||||
for (var t = e[0], r = e[1], n = [], o = 0; o < K.length; o++) if (K[o] <= r) {
|
||||
n = R[o];
|
||||
break
|
||||
}
|
||||
return X(t, r, n)
|
||||
}
|
||||
|
||||
var $ = {to: {GCJ02: x, BD09: P(N, x), BD09MC: P(Y, N, x), EPSG3857: T}},
|
||||
ee = {to: {WGS84: W, BD09: N, BD09MC: P(Y, N), EPSG3857: P(T, W)}},
|
||||
te = {to: {WGS84: P(W, w), GCJ02: w, EPSG3857: P(T, W, w), BD09MC: Y}},
|
||||
re = {to: {WGS84: z, GCJ02: P(x, z), BD09: P(N, x, z), BD09MC: P(Y, N, x, z)}},
|
||||
ne = {to: {WGS84: P(W, w, Z), GCJ02: P(w, Z), EPSG3857: P(T, W, w, Z), BD09: Z}},
|
||||
oe = Object.freeze({WGS84: $, GCJ02: ee, BD09: te, EPSG3857: re, BD09MC: ne});
|
||||
|
||||
function ae(e, t, r) {
|
||||
e || m("coordinate is required"), t || m("original coordinate system is required"), r || m("target coordinate system is required");
|
||||
var n = oe[t];
|
||||
if (n || m("original coordinate system is invalid"), t === r) return e;
|
||||
var o = n.to[r];
|
||||
o || m("target coordinate system is invalid");
|
||||
var a = typeof e;
|
||||
if ("string" != a && "object" != a && m("coordinate must be an geojson or an array of position"), "string" == a) try {
|
||||
e = JSON.parse(e)
|
||||
} catch (e) {
|
||||
m("input is not a legal JSON string")
|
||||
}
|
||||
var i = !1;
|
||||
S(e) && (e.length < 2 && m("position must be at 2 numbers long"), G(e[0]) && G(e[1]) || m("position must contain numbers"), e = e.map(Number), i = !0);
|
||||
var u = o;
|
||||
return i ? u(e) : (function e(t, r, n) {
|
||||
if (void 0 === n && (n = !1), null !== t) for (var o, a, i, u, f, c, s, l, M = 0, g = 0, h = t.type, v = "FeatureCollection" === h, d = "Feature" === h, G = v ? t.features.length : 1, S = 0; S < G; S++) {
|
||||
f = (l = !!(s = v ? t.features[S].geometry : d ? t.geometry : t) && "GeometryCollection" === s.type) ? s.geometries.length : 1;
|
||||
for (var P = 0; P < f; P++) {
|
||||
var b = 0, y = 0;
|
||||
if (null !== (u = l ? s.geometries[P] : s)) {
|
||||
var p = u.type;
|
||||
switch (M = !n || "Polygon" !== p && "MultiPolygon" !== p ? 0 : 1, p) {
|
||||
case null:
|
||||
break;
|
||||
case"Point":
|
||||
if (!1 === r(c = u.coordinates, g, S, b, y)) return !1;
|
||||
g++, b++;
|
||||
break;
|
||||
case"LineString":
|
||||
case"MultiPoint":
|
||||
for (c = u.coordinates, o = 0; o < c.length; o++) {
|
||||
if (!1 === r(c[o], g, S, b, y)) return !1;
|
||||
g++, "MultiPoint" === p && b++
|
||||
}
|
||||
"LineString" === p && b++;
|
||||
break;
|
||||
case"Polygon":
|
||||
case"MultiLineString":
|
||||
for (c = u.coordinates, o = 0; o < c.length; o++) {
|
||||
for (a = 0; a < c[o].length - M; a++) {
|
||||
if (!1 === r(c[o][a], g, S, b, y)) return !1;
|
||||
g++
|
||||
}
|
||||
"MultiLineString" === p && b++, "Polygon" === p && y++
|
||||
}
|
||||
"Polygon" === p && b++;
|
||||
break;
|
||||
case"MultiPolygon":
|
||||
for (c = u.coordinates, o = 0; o < c.length; o++) {
|
||||
for (a = y = 0; a < c[o].length; a++) {
|
||||
for (i = 0; i < c[o][a].length - M; i++) {
|
||||
if (!1 === r(c[o][a][i], g, S, b, y)) return !1;
|
||||
g++
|
||||
}
|
||||
y++
|
||||
}
|
||||
b++
|
||||
}
|
||||
break;
|
||||
case"GeometryCollection":
|
||||
for (o = 0; o < u.geometries.length; o++) if (!1 === e(u.geometries[o], r, n)) return !1;
|
||||
break;
|
||||
default:
|
||||
m("Unknown Geometry Type")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}(e, function (e) {
|
||||
var t;
|
||||
t = u(e), e[0] = t[0], e[1] = t[1]
|
||||
}), e)
|
||||
}
|
||||
|
||||
var ie = {
|
||||
WGS84: t,
|
||||
WGS1984: r,
|
||||
EPSG4326: n,
|
||||
GCJ02: o,
|
||||
AMap: a,
|
||||
BD09: i,
|
||||
BD09LL: u,
|
||||
Baidu: f,
|
||||
BMap: c,
|
||||
BD09MC: s,
|
||||
BD09Meter: l,
|
||||
EPSG3857: M,
|
||||
EPSG900913: g,
|
||||
EPSG102100: h,
|
||||
WebMercator: v,
|
||||
WM: d,
|
||||
transform: ae
|
||||
};
|
||||
e.WGS84 = t, e.WGS1984 = r, e.EPSG4326 = n, e.GCJ02 = o, e.AMap = a, e.BD09 = i, e.BD09LL = u, e.Baidu = f, e.BMap = c, e.BD09MC = s, e.BD09Meter = l, e.EPSG3857 = M, e.EPSG900913 = g, e.EPSG102100 = h, e.WebMercator = v, e.WM = d, e.transform = ae, e.default = ie, Object.defineProperty(e, "__esModule", {value: !0})
|
||||
});
|
|
@ -0,0 +1,287 @@
|
|||
import {
|
||||
getCurrentNextOperation, getTaskInfo,
|
||||
setOtherSecurityMeasuresSave,
|
||||
setSecurityMeasuresSave,
|
||||
setTaskFile,
|
||||
setTaskSave
|
||||
} from "@/api";
|
||||
import {addFormInfo} from "../api";
|
||||
|
||||
// 处理表单数据
|
||||
// TYPE 0 纯文本 1 图片 2 视频 3 divider标签 4 动态添加 5 签字
|
||||
const processFormData = async (formData, formItems) => {
|
||||
const form = []
|
||||
for (let i = 0; i < formItems.length; i++) {
|
||||
const formItem = formItems[i]
|
||||
const obj = {
|
||||
ITEM: formItem.name || '',
|
||||
ITEM_NAME: formItem.key_name || '',
|
||||
ITEM_VALUE: formData[formItem.key_name] || '',
|
||||
FK_NAME: formItem.key_id || '',
|
||||
FK_VALUE: formData[formItem.key_id] || '',
|
||||
TYPE: formItem.type,
|
||||
SORT: i + 1
|
||||
}
|
||||
if (formItem.type === 1 || formItem.type === 2) {
|
||||
if (typeof formData[formItem.key_name] === 'object') {
|
||||
const currentItem = uni.$u.deepClone(formData[formItem.key_name])
|
||||
const codeList = []
|
||||
for (let j = 0; j < currentItem.length; j++) {
|
||||
const {CODE} = await setTaskFile({formData: {type: 0}, name: 'files', filePath: currentItem[j].url})
|
||||
codeList.push(CODE)
|
||||
}
|
||||
obj.ITEM_VALUE = ''
|
||||
obj.picList = codeList
|
||||
} else {
|
||||
throw Error('图片和视频只支持数组')
|
||||
}
|
||||
}
|
||||
if (formItem.type === 4) {
|
||||
if (typeof formData[formItem.key_name] === 'object') {
|
||||
const currentItem = uni.$u.deepClone(formData[formItem.key_name])
|
||||
const itemList = []
|
||||
for (let j = 0; j < currentItem.length; j++) {
|
||||
itemList.push(await processFormData(currentItem[j], formItem.listStructure))
|
||||
}
|
||||
obj.ITEM_VALUE = ''
|
||||
obj.list = itemList
|
||||
} else {
|
||||
throw Error('动态表单只支持数组')
|
||||
}
|
||||
}
|
||||
if (formItem.type === 5) {
|
||||
if (typeof formData[formItem.key_name] === 'string') {
|
||||
const {CODE} = await setTaskFile({formData: {type: 0}, name: 'files', filePath: formData[formItem.key_name]})
|
||||
obj.ITEM_VALUE = CODE
|
||||
} else {
|
||||
throw Error('签字只支持字符串')
|
||||
}
|
||||
}
|
||||
form.push(obj)
|
||||
}
|
||||
return form
|
||||
}
|
||||
// 提交表单基础信息
|
||||
export const setSubmitForm = async ({form, formItems, TYPE, CORP_ID, EW_RU_TASK_ID}) => {
|
||||
const {taskIds} = await setTaskSave({
|
||||
data: [{form: await processFormData(form, formItems),task:{EW_RU_TASK_ID:EW_RU_TASK_ID}}],
|
||||
TYPE,
|
||||
postMethod: 'application/json',
|
||||
})
|
||||
await resolveNextOperation({
|
||||
EW_RU_TASK_ID: taskIds[0],
|
||||
CORP_ID,
|
||||
TYPE
|
||||
})
|
||||
}
|
||||
// 处理选择人员数据
|
||||
const processSelectedPersonnelData = (formData, list) => {
|
||||
const form = []
|
||||
for (let i = 0; i < list.length; i++) {
|
||||
for (let j = 0; j < list[i].list.length; j++) {
|
||||
const item = list[i].list[j]
|
||||
const link = item.key_id.substring(item.key_id.indexOf('&&') + 2)
|
||||
form.push({
|
||||
TYPE_NAME: item.value,
|
||||
TYPE: item.code,
|
||||
TYPE_DESCRIBE: item.desc,
|
||||
DEPARTMENT_ID: item.type === '1' ? formData[item.key_id] : '',
|
||||
DEPARTMENT_NAME: item.type === '1' ? formData[item.key_name] : '',
|
||||
USER_ID: item.type === '0' ? formData[item.key_id] : '',
|
||||
USER_NAME: item.type === '0' ? formData[item.key_name] : '',
|
||||
isDepartment: item.type,
|
||||
link: list[i].multiple === '1' ? link : '',
|
||||
})
|
||||
}
|
||||
}
|
||||
return form
|
||||
}
|
||||
// 提交人员信息
|
||||
export const setPersonnelForm = async ({form, list, taskId, CORP_ID, TYPE,vernier}) => {
|
||||
await addFormInfo({
|
||||
job: processSelectedPersonnelData(form,list),
|
||||
EW_RU_TASK_ID: taskId,
|
||||
TYPE,
|
||||
postMethod: 'application/json'
|
||||
}
|
||||
)
|
||||
await resolveNextOperation({
|
||||
EW_RU_TASK_ID: taskId,
|
||||
CORP_ID,
|
||||
TYPE,
|
||||
vernier
|
||||
})
|
||||
}
|
||||
// 提交安全措施
|
||||
export const setSecurityMeasures = async ({questionnaires, questionnaireInfo, taskId, EW_RU_JOB_ID, CORP_ID, TYPE, vernier}) => {
|
||||
await setSecurityMeasuresSave({
|
||||
questionnaires: [{items: questionnaires, questionnaire: questionnaireInfo}],
|
||||
EW_RU_JOB_ID,
|
||||
EW_RU_TASK_ID: taskId,
|
||||
postMethod: 'application/json',
|
||||
})
|
||||
await resolveNextOperation({
|
||||
EW_RU_TASK_ID: taskId,
|
||||
CORP_ID,
|
||||
TYPE,
|
||||
EW_RU_JOB_ID,
|
||||
vernier
|
||||
})
|
||||
}
|
||||
// 提交其它安全措施
|
||||
export const setOtherSecurityMeasures = async ({value, taskId, EW_RU_JOB_ID, CORP_ID, TYPE, vernier}) => {
|
||||
const ADDITIONAL_COMMENT = value.map(item => item.value)
|
||||
await setOtherSecurityMeasuresSave({
|
||||
ADDITIONAL_COMMENT,
|
||||
EW_RU_JOB_ID,
|
||||
EW_RU_TASK_ID: taskId,
|
||||
postMethod: 'application/json',
|
||||
})
|
||||
await resolveNextOperation({
|
||||
EW_RU_TASK_ID: taskId,
|
||||
CORP_ID,
|
||||
TYPE,
|
||||
EW_RU_JOB_ID,
|
||||
vernier
|
||||
})
|
||||
}
|
||||
// 结束当前操作人流程提交
|
||||
const endCurrentPersonnelTechnologicalProcess = async ({EW_RU_TASK_ID}) => {
|
||||
await setTaskSave({
|
||||
COMPLETE_FLAG: '1',
|
||||
data: [{task: {EW_RU_TASK_ID}}],
|
||||
postMethod: 'application/json',
|
||||
})
|
||||
}
|
||||
// 在审批过程中指定下一节点人
|
||||
export const addFlowInfo = async ({form,list, taskId,EW_RU_JOB_ID, TYPE,CORP_ID, vernier}) => {
|
||||
// 在审批过程中添加节点信息
|
||||
await addFormInfo({
|
||||
job: processSelectedPersonnelData(form,list),
|
||||
EW_RU_TASK_ID: taskId,
|
||||
TYPE,
|
||||
postMethod: 'application/json'
|
||||
}
|
||||
)
|
||||
// 结束后续流程
|
||||
await resolveNextOperation({
|
||||
EW_RU_TASK_ID: taskId,
|
||||
CORP_ID,
|
||||
TYPE,
|
||||
EW_RU_JOB_ID,
|
||||
vernier
|
||||
})
|
||||
}
|
||||
// 决定下一步操作
|
||||
// EW_RU_TASK_ID当前任务id
|
||||
// CORP_ID选择的企业id
|
||||
// TYPE作业类型
|
||||
// EW_RU_JOB_ID当前操作节点的人员id
|
||||
// isLastStep是否还有下一步,纯前端确定,不去后台获取
|
||||
export const resolveNextOperation = async ({EW_RU_TASK_ID = '', CORP_ID = '', TYPE = '', EW_RU_JOB_ID = '',vernier = ''}, isLastStep = true) => {
|
||||
let stepNum = 0
|
||||
if (isLastStep) {
|
||||
const {info} = await getCurrentNextOperation({EW_RU_TASK_ID, EW_RU_JOB_ID, VERNIER: vernier})
|
||||
// 选人
|
||||
if (info.chooseNextFlag === '1') {
|
||||
uni.navigateTo({
|
||||
url: '/pages/eight_assignments/select_review_personnel?vernier='+ info.vernier,
|
||||
success: ({eventChannel}) => {
|
||||
eventChannel.emit('nextNodes', {
|
||||
nextNodes: info.nextNodes,
|
||||
initFlag: info.initFlag,
|
||||
taskId: EW_RU_TASK_ID,
|
||||
EW_RU_JOB_ID: EW_RU_JOB_ID,
|
||||
CORP_ID,
|
||||
TYPE
|
||||
})
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
// 填写安全措施
|
||||
if (info.completeFlag === '1') {
|
||||
uni.navigateTo({
|
||||
url: '/pages/eight_assignments/security_measures?vernier=' + info.vernier,
|
||||
success: ({eventChannel}) => {
|
||||
eventChannel.emit('questionnaire', {
|
||||
questionnaire: info.questionnaire[0],
|
||||
taskId: EW_RU_TASK_ID,
|
||||
EW_RU_JOB_ID,
|
||||
TYPE,
|
||||
CORP_ID,
|
||||
vernier: info.vernier
|
||||
})
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
// 填写其它安全措施
|
||||
if (info.canAddFlag === '1') {
|
||||
uni.$u.route({
|
||||
url: '/pages/eight_assignments/other_security_measures',
|
||||
params: {taskId: EW_RU_TASK_ID, EW_RU_JOB_ID, TYPE, CORP_ID,vernier: info.vernier}
|
||||
})
|
||||
return
|
||||
}
|
||||
// 签字
|
||||
if (info.submitFlag === '1') {
|
||||
uni.$u.route({
|
||||
url: '/pages/eight_assignments/sign',
|
||||
params: {taskId: EW_RU_TASK_ID, EW_RU_JOB_ID, TYPE,vernier: info.vernier}
|
||||
})
|
||||
return
|
||||
}
|
||||
// 流程特殊权限校验
|
||||
if (info.otherFlag !== null && info.otherFlag.redirectFlag === '1') {
|
||||
uni.$u.route({
|
||||
url: info.otherFlag.url,
|
||||
params: {taskId: EW_RU_TASK_ID, EW_RU_JOB_ID, TYPE,vernier: info.vernier}
|
||||
})
|
||||
return
|
||||
}
|
||||
// 根据后端返回的页数退回到指定页面
|
||||
stepNum = info.stepNum
|
||||
}
|
||||
|
||||
uni.$u.toast('提交成功')
|
||||
setTimeout(() => {
|
||||
uni.navigateBack(
|
||||
{
|
||||
delta: stepNum
|
||||
}
|
||||
)
|
||||
}, 1500)
|
||||
}
|
||||
|
||||
export const getData = async (taskId) => {
|
||||
const resData = await getTaskInfo({ EW_RU_TASK_ID: taskId });
|
||||
if (resData.list.fromTrans && resData.list.fromTrans.length > 0) {
|
||||
const form = {};
|
||||
resData.list.fromTrans.forEach((item) => {
|
||||
form[item.ITEM_NAME] = item.ITEM_VALUE;
|
||||
if (item.FK_NAME) {
|
||||
form[item.FK_NAME] = item.FK_VALUE;
|
||||
}
|
||||
if (item.TYPE === 1) {
|
||||
form[item.ITEM_NAME] = item.list.map((item) => ({
|
||||
url: this.$filePath + item.ITEM_VALUE,
|
||||
}));
|
||||
}
|
||||
if (item.TYPE === 4) {
|
||||
form[item.ITEM_NAME] = [];
|
||||
for (let i = 0; i < item.list.length; i++) {
|
||||
form[item.ITEM_NAME].push({});
|
||||
for (let j = 0; j < item.list[i].list.length; j++) {
|
||||
form[item.ITEM_NAME][i][item.list[i].list[j].ITEM_NAME] =
|
||||
item.list[i].list[j].ITEM_VALUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (item.TYPE === 5) {
|
||||
form[item.ITEM_NAME] = this.$filePath + item.ITEM_VALUE;
|
||||
}
|
||||
});
|
||||
return form;
|
||||
}
|
||||
};
|
|
@ -0,0 +1,27 @@
|
|||
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)
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
const useFormValidate = (ref, message = "请补全必填项!") => {
|
||||
return new Promise((resolve) => {
|
||||
ref.value
|
||||
.validate()
|
||||
.then(() => {
|
||||
resolve(true);
|
||||
})
|
||||
.catch(() => {
|
||||
// eslint-disable-next-line prefer-promise-reject-errors
|
||||
resolve(false);
|
||||
uni.$u.toast(message);
|
||||
});
|
||||
});
|
||||
};
|
||||
export default useFormValidate;
|