330 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
		
		
			
		
	
	
			330 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| 
								 | 
							
								<template>
							 | 
						||
| 
								 | 
							
									<view class="camera-page">
							 | 
						||
| 
								 | 
							
										<uni-card class="card-style" margin="0" :is-shadow="true">
							 | 
						||
| 
								 | 
							
											<u--form labelPosition="left" labelWidth="auto" labelAlign="center" :model="dataModel" :rules="rules"
							 | 
						||
| 
								 | 
							
												ref="wForm" errorType="border-bottom">
							 | 
						||
| 
								 | 
							
												<u-form-item label="检查类型" prop="checkType" borderBottom
							 | 
						||
| 
								 | 
							
													@click="handleShowSheet({title: '检查类型', name: 'checkType'})">
							 | 
						||
| 
								 | 
							
													<u--input :value="dataModel.checkType.name" disabled disabledColor="#fff" placeholder="请选择检查类型"
							 | 
						||
| 
								 | 
							
														border="none" inputAlign="right"></u--input>
							 | 
						||
| 
								 | 
							
													<u-icon style="margin-left: 4px;" slot="right" name="arrow-down"></u-icon>
							 | 
						||
| 
								 | 
							
												</u-form-item>
							 | 
						||
| 
								 | 
							
												<u-form-item label="检查层级" prop="checkLevel" borderBottom
							 | 
						||
| 
								 | 
							
													@click="handleShowSheet({title: '检查层级', name: 'checkLevel'})">
							 | 
						||
| 
								 | 
							
													<u--input :value="dataModel.checkLevel.name" placeholder="请选择检查层级" disabled disabledColor="#fff"
							 | 
						||
| 
								 | 
							
														border="none" inputAlign="right"></u--input>
							 | 
						||
| 
								 | 
							
													<u-icon style="margin-left: 4px;" slot="right" name="arrow-down"></u-icon>
							 | 
						||
| 
								 | 
							
												</u-form-item>
							 | 
						||
| 
								 | 
							
												<u-form-item label="检查时间" prop="checkDate" borderBottom @click="showCheckDate = true;">
							 | 
						||
| 
								 | 
							
													<u--input disabled disabledColor="#fff" :value="dataModel.checkDate.value" border="none"
							 | 
						||
| 
								 | 
							
														inputAlign="right"></u--input>
							 | 
						||
| 
								 | 
							
												</u-form-item>
							 | 
						||
| 
								 | 
							
												<view class="label-title">照片</view>
							 | 
						||
| 
								 | 
							
												<u-form-item borderBottom>
							 | 
						||
| 
								 | 
							
													<u-upload :fileList="pictureLists" @afterRead="afterRead" @delete="deletePic" multiple :maxCount="3"
							 | 
						||
| 
								 | 
							
														style="margin-bottom: 0;" :previewFullImage="true" uploadIcon="plus"></u-upload>
							 | 
						||
| 
								 | 
							
												</u-form-item>
							 | 
						||
| 
								 | 
							
												<view>
							 | 
						||
| 
								 | 
							
													<view class="label-title">检查内容</view>
							 | 
						||
| 
								 | 
							
													<u-form-item borderBottom>
							 | 
						||
| 
								 | 
							
														<u--textarea :value="dataModel.checkContent.value" @input="onInput" placeholder="请输入检查内容"
							 | 
						||
| 
								 | 
							
															border="surround"></u--textarea>
							 | 
						||
| 
								 | 
							
													</u-form-item>
							 | 
						||
| 
								 | 
							
												</view>
							 | 
						||
| 
								 | 
							
											</u--form>
							 | 
						||
| 
								 | 
							
											<u-datetime-picker :show="showCheckDate" mode="datetime" :value="dataModel.checkDate.value"
							 | 
						||
| 
								 | 
							
												@confirm="handleCheckDate" @close="showCheckDate = false;"
							 | 
						||
| 
								 | 
							
												@cancel="showCheckDate = false;"></u-datetime-picker>
							 | 
						||
| 
								 | 
							
											<u-picker :show="comPickerInfo.showSheet" :columns="comPickerInfo.columns" @confirm="onConfirmPicker"
							 | 
						||
| 
								 | 
							
												@close="closePicker" @cancel="closePicker" keyName="name"></u-picker>
							 | 
						||
| 
								 | 
							
										</uni-card>
							 | 
						||
| 
								 | 
							
										<button type="primary" @click="handleSubmit">提交</button>
							 | 
						||
| 
								 | 
							
									</view>
							 | 
						||
| 
								 | 
							
								</template>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<script>
							 | 
						||
| 
								 | 
							
									import store from '@/store/index.js'
							 | 
						||
| 
								 | 
							
									import {
							 | 
						||
| 
								 | 
							
										mapState,
							 | 
						||
| 
								 | 
							
										mapMutations
							 | 
						||
| 
								 | 
							
									} from 'vuex'
							 | 
						||
| 
								 | 
							
									import {
							 | 
						||
| 
								 | 
							
										extendInclude,
							 | 
						||
| 
								 | 
							
										extendOrder,
							 | 
						||
| 
								 | 
							
										extendRule,
							 | 
						||
| 
								 | 
							
										guid,
							 | 
						||
| 
								 | 
							
										initFilter
							 | 
						||
| 
								 | 
							
									} from '../../utils/common'
							 | 
						||
| 
								 | 
							
									import {
							 | 
						||
| 
								 | 
							
										getCheckArea,
							 | 
						||
| 
								 | 
							
										getCheckContent,
							 | 
						||
| 
								 | 
							
										getCheckLevel,
							 | 
						||
| 
								 | 
							
										getCheckProblem,
							 | 
						||
| 
								 | 
							
										getCheckType,
							 | 
						||
| 
								 | 
							
										saveRiskReport
							 | 
						||
| 
								 | 
							
									} from '../../services/safe'
							 | 
						||
| 
								 | 
							
									import config from '../../config/common'
							 | 
						||
| 
								 | 
							
									// import UImage from '../../uni_modules/uview-ui/components/u--image/u--image.vue'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									export default {
							 | 
						||
| 
								 | 
							
										// components: { UImage },
							 | 
						||
| 
								 | 
							
										data() {
							 | 
						||
| 
								 | 
							
											return {
							 | 
						||
| 
								 | 
							
												pictureLists: [],
							 | 
						||
| 
								 | 
							
												dataModel: {
							 | 
						||
| 
								 | 
							
													checkType: {
							 | 
						||
| 
								 | 
							
														name: '',
							 | 
						||
| 
								 | 
							
														value: ''
							 | 
						||
| 
								 | 
							
													},
							 | 
						||
| 
								 | 
							
													checkLevel: {
							 | 
						||
| 
								 | 
							
														name: '',
							 | 
						||
| 
								 | 
							
														value: ''
							 | 
						||
| 
								 | 
							
													},
							 | 
						||
| 
								 | 
							
													checkDate: {
							 | 
						||
| 
								 | 
							
														name: '',
							 | 
						||
| 
								 | 
							
														value: uni.$u.timeFormat(new Date(), 'yyyy-mm-dd hh:MM')
							 | 
						||
| 
								 | 
							
													},
							 | 
						||
| 
								 | 
							
													checkContent: {
							 | 
						||
| 
								 | 
							
														name: '',
							 | 
						||
| 
								 | 
							
														value: ''
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
												},
							 | 
						||
| 
								 | 
							
												rules: {},
							 | 
						||
| 
								 | 
							
												showCheckDate: false,
							 | 
						||
| 
								 | 
							
												comPickerInfo: {
							 | 
						||
| 
								 | 
							
													showSheet: false,
							 | 
						||
| 
								 | 
							
													columns: [],
							 | 
						||
| 
								 | 
							
													title: '',
							 | 
						||
| 
								 | 
							
													formIndex: undefined,
							 | 
						||
| 
								 | 
							
													name: ''
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										onLoad() {
							 | 
						||
| 
								 | 
							
											this.pictureLists = this.$store.state.imageLists.map(i => {
							 | 
						||
| 
								 | 
							
												return {
							 | 
						||
| 
								 | 
							
													url: i
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											})
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										methods: {
							 | 
						||
| 
								 | 
							
											onConfirmPicker(e) {
							 | 
						||
| 
								 | 
							
												const {
							 | 
						||
| 
								 | 
							
													name,
							 | 
						||
| 
								 | 
							
													formIndex
							 | 
						||
| 
								 | 
							
												} = this.comPickerInfo
							 | 
						||
| 
								 | 
							
												this.dataModel[name].value = e.value[0].id
							 | 
						||
| 
								 | 
							
												this.dataModel[name].name = e.value[0].name
							 | 
						||
| 
								 | 
							
												this.comPickerInfo.showSheet = false
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
											async handleShowSheet(p) {
							 | 
						||
| 
								 | 
							
												const orgId = uni.getStorageSync('orgId')
							 | 
						||
| 
								 | 
							
												const json = initFilter(orgId, "", "", 0)
							 | 
						||
| 
								 | 
							
												let column = []
							 | 
						||
| 
								 | 
							
												if (p.name === 'checkType') {
							 | 
						||
| 
								 | 
							
													extendOrder(json, "NUM", "0")
							 | 
						||
| 
								 | 
							
													column = await getCheckType(json).then(res => {
							 | 
						||
| 
								 | 
							
														return res.map(i => {
							 | 
						||
| 
								 | 
							
															return {
							 | 
						||
| 
								 | 
							
																...i,
							 | 
						||
| 
								 | 
							
																name: i.NAME,
							 | 
						||
| 
								 | 
							
																id: i.ID
							 | 
						||
| 
								 | 
							
															}
							 | 
						||
| 
								 | 
							
														})
							 | 
						||
| 
								 | 
							
													})
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
												// if (p.name === 'checkType') {
							 | 
						||
| 
								 | 
							
												// 	column = [
							 | 
						||
| 
								 | 
							
												// 		{name: '巡回检查', value: 1},
							 | 
						||
| 
								 | 
							
												// 		{name: '隐患上报', value: 2}
							 | 
						||
| 
								 | 
							
												// 	]
							 | 
						||
| 
								 | 
							
												// }
							 | 
						||
| 
								 | 
							
												if (p.name === 'checkLevel') {
							 | 
						||
| 
								 | 
							
													extendRule(json, 'CHECK_TYPE_ID', 1, this.dataModel.checkType.value)
							 | 
						||
| 
								 | 
							
													extendInclude(json, "Nav_Enums")
							 | 
						||
| 
								 | 
							
													column = await getCheckLevel(json).then(res => {
							 | 
						||
| 
								 | 
							
														return res.map(i => {
							 | 
						||
| 
								 | 
							
															return {
							 | 
						||
| 
								 | 
							
																...i,
							 | 
						||
| 
								 | 
							
																name: i.Nav_Enums?.NAME,
							 | 
						||
| 
								 | 
							
																id: i.Nav_Enums?.ID
							 | 
						||
| 
								 | 
							
															}
							 | 
						||
| 
								 | 
							
														})
							 | 
						||
| 
								 | 
							
													})
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
												// if (p.name === 'checkLevel') {
							 | 
						||
| 
								 | 
							
												// 	// extendInclude(json, "Nav_Enums")
							 | 
						||
| 
								 | 
							
												// 	// column = await getCheckLevel(json).then(res => {return res})
							 | 
						||
| 
								 | 
							
												// 	column = [
							 | 
						||
| 
								 | 
							
												// 		{name: '高', id: 1},
							 | 
						||
| 
								 | 
							
												// 		{name: '中', id: 2},
							 | 
						||
| 
								 | 
							
												// 		{name: '低', id: 3},
							 | 
						||
| 
								 | 
							
												// 	]
							 | 
						||
| 
								 | 
							
												// }
							 | 
						||
| 
								 | 
							
												if (column.length) {
							 | 
						||
| 
								 | 
							
													this.comPickerInfo = {
							 | 
						||
| 
								 | 
							
														showSheet: true,
							 | 
						||
| 
								 | 
							
														title: p.title,
							 | 
						||
| 
								 | 
							
														name: p.name,
							 | 
						||
| 
								 | 
							
														formIndex: p.formIndex,
							 | 
						||
| 
								 | 
							
														columns: [column]
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
												} else {
							 | 
						||
| 
								 | 
							
													// 暂无数据
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
											handleCheckDate(e) {
							 | 
						||
| 
								 | 
							
												this.showCheckDate = false
							 | 
						||
| 
								 | 
							
												this.dataModel.checkDate.value = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM')
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
											onInput(e) {
							 | 
						||
| 
								 | 
							
												this.dataModel.checkContent.value = e
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
											handleSubmit() {
							 | 
						||
| 
								 | 
							
												const ele = this.$refs
							 | 
						||
| 
								 | 
							
												ele['wForm'].validate().then(res => {
							 | 
						||
| 
								 | 
							
													const orgId = uni.getStorageSync('orgId')
							 | 
						||
| 
								 | 
							
													const appInfoData = uni.getStorageSync('appInfo')
							 | 
						||
| 
								 | 
							
													const {
							 | 
						||
| 
								 | 
							
														checkDate,
							 | 
						||
| 
								 | 
							
														checkType,
							 | 
						||
| 
								 | 
							
														checkType_name,
							 | 
						||
| 
								 | 
							
														checkLevel
							 | 
						||
| 
								 | 
							
													} = this.dataModel
							 | 
						||
| 
								 | 
							
													const submitId = guid()
							 | 
						||
| 
								 | 
							
													// TODO: 确认对应字段是否填写正确
							 | 
						||
| 
								 | 
							
													const params = {
							 | 
						||
| 
								 | 
							
														ID: submitId,
							 | 
						||
| 
								 | 
							
														ORG_ID: orgId,
							 | 
						||
| 
								 | 
							
														FORM_ID: guid(), // ?
							 | 
						||
| 
								 | 
							
														ENTITY_ORG_TPYE: 0, // ?
							 | 
						||
| 
								 | 
							
														ENABLE_STATUS: 0, // ?
							 | 
						||
| 
								 | 
							
														CHECKTIME: checkDate.value,
							 | 
						||
| 
								 | 
							
														CHECK_TYPE_ID: checkType.value,
							 | 
						||
| 
								 | 
							
														NAME: checkType.name,
							 | 
						||
| 
								 | 
							
														CHECK_TYPE_LEVEL_ID: checkLevel.value,
							 | 
						||
| 
								 | 
							
														SUBMIT_STATUS: '5', // ?
							 | 
						||
| 
								 | 
							
														OrgRule: [], // ?
							 | 
						||
| 
								 | 
							
														Nav_Files: this.pictureLists.map(i => {
							 | 
						||
| 
								 | 
							
															return {
							 | 
						||
| 
								 | 
							
																ID: guid(),
							 | 
						||
| 
								 | 
							
																IMG_FILE_ID: i.IMG_FILE_ID,
							 | 
						||
| 
								 | 
							
																ORG_ID: orgId,
							 | 
						||
| 
								 | 
							
																RISK_SUBMIT_ID: submitId
							 | 
						||
| 
								 | 
							
															}
							 | 
						||
| 
								 | 
							
														}),
							 | 
						||
| 
								 | 
							
														// Nav_ListRiskSubmitContent: this.subDataModel.map(o => {
							 | 
						||
| 
								 | 
							
														// 	return {
							 | 
						||
| 
								 | 
							
														// 		ID: guid(),
							 | 
						||
| 
								 | 
							
														// 		ORG_ID: orgId,
							 | 
						||
| 
								 | 
							
														// 		ENTITY_ORG_TPYE: 0, // ?
							 | 
						||
| 
								 | 
							
														// 		RISK_SUBMIT_ID: submitId,
							 | 
						||
| 
								 | 
							
														// 		ROW_NO: 1, // ?
							 | 
						||
| 
								 | 
							
														// 		ADDRESS: '',
							 | 
						||
| 
								 | 
							
														// 		CHECK_CONTENTS_ID: o.checkContent,
							 | 
						||
| 
								 | 
							
														// 		CHECKCONTENT: o.checkContent_name,
							 | 
						||
| 
								 | 
							
														// 		CHECK_QUESTION_ID: o.checkProblem,
							 | 
						||
| 
								 | 
							
														// 		DESCREPTION: '', // ?
							 | 
						||
| 
								 | 
							
														// 		DEMAND: '', // ?
							 | 
						||
| 
								 | 
							
														// 		QUESTION_LEVEL: 50, // ?
							 | 
						||
| 
								 | 
							
														// 		RISK_AREA_ID: o.checkArea,
							 | 
						||
| 
								 | 
							
														// 		USER_ID: appInfoData.User.ID, // ?
							 | 
						||
| 
								 | 
							
														// 		DEPARTMENT_ID: appInfoData.User.DEPARTMENT_ID, // ?
							 | 
						||
| 
								 | 
							
														// 		SUBMIT_STATUS: 5 // ?
							 | 
						||
| 
								 | 
							
														// 	}
							 | 
						||
| 
								 | 
							
														// })
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
													saveRiskReport(params).then(res => {
							 | 
						||
| 
								 | 
							
														if (res) {
							 | 
						||
| 
								 | 
							
															uni.showToast({
							 | 
						||
| 
								 | 
							
																title: '提交成功'
							 | 
						||
| 
								 | 
							
															})
							 | 
						||
| 
								 | 
							
														}
							 | 
						||
| 
								 | 
							
													})
							 | 
						||
| 
								 | 
							
												}).catch(err => {
							 | 
						||
| 
								 | 
							
													console.log('校验失败', err)
							 | 
						||
| 
								 | 
							
												})
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
											closePicker() {
							 | 
						||
| 
								 | 
							
												this.comPickerInfo = {
							 | 
						||
| 
								 | 
							
													showSheet: false,
							 | 
						||
| 
								 | 
							
													columns: [],
							 | 
						||
| 
								 | 
							
													title: '',
							 | 
						||
| 
								 | 
							
													name: '',
							 | 
						||
| 
								 | 
							
													formIndex: undefined
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
											deletePic(event) {
							 | 
						||
| 
								 | 
							
												this[`pictureLists`].splice(event.index, 1)
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
											async afterRead(event) {
							 | 
						||
| 
								 | 
							
												// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
							 | 
						||
| 
								 | 
							
												let lists = [].concat(event.file)
							 | 
						||
| 
								 | 
							
												let fileListLen = this[`pictureLists`].length
							 | 
						||
| 
								 | 
							
												lists.map((item) => {
							 | 
						||
| 
								 | 
							
													this[`pictureLists`].push({
							 | 
						||
| 
								 | 
							
														...item,
							 | 
						||
| 
								 | 
							
														status: 'uploading',
							 | 
						||
| 
								 | 
							
														message: '上传中'
							 | 
						||
| 
								 | 
							
													})
							 | 
						||
| 
								 | 
							
												})
							 | 
						||
| 
								 | 
							
												for (let i = 0; i < lists.length; i++) {
							 | 
						||
| 
								 | 
							
													const result = await this.uploadFilePromise(lists[i].url)
							 | 
						||
| 
								 | 
							
													let item = this[`pictureLists`][fileListLen]
							 | 
						||
| 
								 | 
							
													this[`pictureLists`].splice(fileListLen, 1, Object.assign(item, {
							 | 
						||
| 
								 | 
							
														status: 'success',
							 | 
						||
| 
								 | 
							
														message: '',
							 | 
						||
| 
								 | 
							
														IMG_FILE_ID: result.imgFileID
							 | 
						||
| 
								 | 
							
														// url: result
							 | 
						||
| 
								 | 
							
													}))
							 | 
						||
| 
								 | 
							
													fileListLen++
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
											uploadFilePromise(url) {
							 | 
						||
| 
								 | 
							
												const appInfoData = uni.getStorageSync('appInfo')
							 | 
						||
| 
								 | 
							
												const userId = appInfoData?.User?.ID || ''
							 | 
						||
| 
								 | 
							
												const orgId = uni.getStorageSync('orgId')
							 | 
						||
| 
								 | 
							
												const tenant = uni.getStorageSync('Tenant') || ''
							 | 
						||
| 
								 | 
							
												const remoteUrl = config.serviceHost('/PF/File/UploadFile')
							 | 
						||
| 
								 | 
							
												return new Promise((resolve, reject) => {
							 | 
						||
| 
								 | 
							
													uni.uploadFile({
							 | 
						||
| 
								 | 
							
														url: remoteUrl,
							 | 
						||
| 
								 | 
							
														filePath: url,
							 | 
						||
| 
								 | 
							
														fileList: url,
							 | 
						||
| 
								 | 
							
														name: 'file',
							 | 
						||
| 
								 | 
							
														formData: {
							 | 
						||
| 
								 | 
							
															OrgId: orgId
							 | 
						||
| 
								 | 
							
														},
							 | 
						||
| 
								 | 
							
														header: {
							 | 
						||
| 
								 | 
							
															Tenant: tenant,
							 | 
						||
| 
								 | 
							
															userid: userId
							 | 
						||
| 
								 | 
							
														},
							 | 
						||
| 
								 | 
							
														success: (res) => {
							 | 
						||
| 
								 | 
							
															if (res.statusCode === 200) {
							 | 
						||
| 
								 | 
							
																const uploadResult = JSON.parse(res.data)
							 | 
						||
| 
								 | 
							
																if (uploadResult.IsSuccessful) {
							 | 
						||
| 
								 | 
							
																	resolve(uploadResult.Data)
							 | 
						||
| 
								 | 
							
																}
							 | 
						||
| 
								 | 
							
															}
							 | 
						||
| 
								 | 
							
														}
							 | 
						||
| 
								 | 
							
													})
							 | 
						||
| 
								 | 
							
												})
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								</script>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<style scoped>
							 | 
						||
| 
								 | 
							
									/* @import url("@/style/css/editTemplate.css"); */
							 | 
						||
| 
								 | 
							
									.camera-page {
							 | 
						||
| 
								 | 
							
										padding: 16px;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									.label-title {
							 | 
						||
| 
								 | 
							
										color: #303133;
							 | 
						||
| 
								 | 
							
										font-size: 15px;
							 | 
						||
| 
								 | 
							
										line-height: 22px;
							 | 
						||
| 
								 | 
							
										padding-top: 8px;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								</style>
							 |