362 lines
12 KiB
Vue
362 lines
12 KiB
Vue
|
|
<template>
|
||
|
|
<view>
|
||
|
|
<Navbar :title="opt.title" />
|
||
|
|
<div class="content">
|
||
|
|
<u-form :model="formData" :rules="rules" ref="uForm" labelWidth="70px">
|
||
|
|
<u-form-item label="检查标题" prop="title" required>
|
||
|
|
<u-input
|
||
|
|
v-model="formData.title"
|
||
|
|
placeholder="请输入检查标题"
|
||
|
|
border="bottom"
|
||
|
|
clearable
|
||
|
|
:disabled="opt.isDetail"
|
||
|
|
></u-input>
|
||
|
|
</u-form-item>
|
||
|
|
<u-form-item label="检查记录编号" prop="recordCode" labelWidth="100px" v-if="!opt.isAdd">
|
||
|
|
<u-input v-model="formData.recordCode" placeholder="请输入检查记录编号" border="bottom" disabled></u-input>
|
||
|
|
</u-form-item>
|
||
|
|
<u-form-item label="检查级别" prop="inspectLevelLabel" required>
|
||
|
|
<u-cell-group :border="false">
|
||
|
|
<u-cell
|
||
|
|
:title="formData.inspectLevelLabel"
|
||
|
|
isLink
|
||
|
|
:label="formData.inspectLevelLabel ? '' : '请选择检查级别'"
|
||
|
|
@click="showPicker1 = true"
|
||
|
|
:disabled="opt.isDetail"
|
||
|
|
></u-cell>
|
||
|
|
</u-cell-group>
|
||
|
|
</u-form-item>
|
||
|
|
<u-form-item label="排查类型" prop="checkType" required>
|
||
|
|
<u-cell-group :border="false">
|
||
|
|
<u-cell
|
||
|
|
:title="formData.checkTypeLabel"
|
||
|
|
isLink
|
||
|
|
:label="formData.checkTypeLabel ? '' : '请选择排查类型'"
|
||
|
|
@click="showPicker2 = true"
|
||
|
|
:disabled="opt.isDetail"
|
||
|
|
></u-cell>
|
||
|
|
</u-cell-group>
|
||
|
|
</u-form-item>
|
||
|
|
<u-form-item label="检查时间" prop="checkTime" required>
|
||
|
|
<u-cell-group :border="false">
|
||
|
|
<u-cell
|
||
|
|
:title="formData.checkTime"
|
||
|
|
isLink
|
||
|
|
:label="formData.checkTime ? '' : '请选择检查时间'"
|
||
|
|
@click="showPicker3 = true"
|
||
|
|
:disabled="opt.isDetail"
|
||
|
|
></u-cell>
|
||
|
|
</u-cell-group>
|
||
|
|
</u-form-item>
|
||
|
|
<u-form-item label="照片" prop="photoList">
|
||
|
|
<uni-file-picker
|
||
|
|
v-model="photoList"
|
||
|
|
:auto-upload="false"
|
||
|
|
ref="files"
|
||
|
|
limit="9"
|
||
|
|
@select="selectImg"
|
||
|
|
@delete="deleteImg"
|
||
|
|
:disabled="opt.isDetail"
|
||
|
|
:readonly="opt.isDetail ? true : false"
|
||
|
|
/>
|
||
|
|
</u-form-item>
|
||
|
|
<u-form-item label="附件" prop="attachmentList" v-if="opt.isDetail">
|
||
|
|
<Preview :dataList="formData.attachmentList" />
|
||
|
|
</u-form-item>
|
||
|
|
</u-form>
|
||
|
|
|
||
|
|
<u-button v-if="opt.isAdd || opt.isEdit" class="btn" type="primary" shape="circle" @click="submitForm">
|
||
|
|
提交
|
||
|
|
</u-button>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<!-- 检查级别 -->
|
||
|
|
<u-picker
|
||
|
|
:show="showPicker1"
|
||
|
|
:columns="inspectLevelOpts"
|
||
|
|
keyName="label"
|
||
|
|
@cancel="showPicker1 = false"
|
||
|
|
@confirm="confirm1"
|
||
|
|
></u-picker>
|
||
|
|
<!-- 排查类型 -->
|
||
|
|
<u-picker
|
||
|
|
:show="showPicker2"
|
||
|
|
:columns="checkTypeOpts"
|
||
|
|
keyName="label"
|
||
|
|
@cancel="showPicker2 = false"
|
||
|
|
@confirm="confirm2"
|
||
|
|
></u-picker>
|
||
|
|
<!-- 检查事件 -->
|
||
|
|
<u-datetime-picker
|
||
|
|
:show="showPicker3"
|
||
|
|
v-model="dataTime"
|
||
|
|
mode="datetime"
|
||
|
|
:min-date="minDate"
|
||
|
|
:max-date="maxDate"
|
||
|
|
@cancel="showPicker3 = false"
|
||
|
|
@confirm="confirm3"
|
||
|
|
></u-datetime-picker>
|
||
|
|
<u-loading-page :loading="isLoading" icon-size="39" style="z-index: 99999"></u-loading-page>
|
||
|
|
</view>
|
||
|
|
</template>
|
||
|
|
|
||
|
|
<script>
|
||
|
|
import { dictTableOption } from '@/api/tool/select'
|
||
|
|
import { addSecurityCheckRecord, getSecurityCheckRecordForm, uploadFileUrl } from '@/api/hiddenDangerViolation'
|
||
|
|
import { encryptCBC, decryptCBC } from '@/utils/aescbc'
|
||
|
|
import config from '@/config'
|
||
|
|
|
||
|
|
export default {
|
||
|
|
data() {
|
||
|
|
return {
|
||
|
|
isLoading: false,
|
||
|
|
actionUrl: uploadFileUrl,
|
||
|
|
token: '',
|
||
|
|
opt: {},
|
||
|
|
showPicker1: false,
|
||
|
|
showPicker2: false,
|
||
|
|
showPicker3: false,
|
||
|
|
dataTime: Number(new Date()),
|
||
|
|
formData: {
|
||
|
|
id: '',
|
||
|
|
title: '', // 检查标题
|
||
|
|
recordCode: '', // 检查记录编号
|
||
|
|
inspectLevel: '', // 检查级别
|
||
|
|
inspectLevelLabel: '', // 检查级别-显示
|
||
|
|
checkType: '', // 排查类型
|
||
|
|
checkTypeLabel: '', // 排查类型-显示
|
||
|
|
checkTime: '', // 检查时间
|
||
|
|
photoList: [], // 照片
|
||
|
|
attachmentList: [], // 附件
|
||
|
|
fileId: [], // 删除的图片/附件id
|
||
|
|
photoType: [] // 图片
|
||
|
|
},
|
||
|
|
photoList: [], // 照片
|
||
|
|
// 检查级别-下拉
|
||
|
|
inspectLevelOpts: [],
|
||
|
|
// 排查类型-下拉
|
||
|
|
checkTypeOpts: [],
|
||
|
|
rules: {
|
||
|
|
title: { required: true, message: '请输入检查标题', trigger: ['blur'] },
|
||
|
|
inspectLevelLabel: [{ required: true, message: '请选择检查级别', trigger: ['blur', 'change'] }],
|
||
|
|
checkType: [{ required: true, message: '请选择排查类型', trigger: 'blur' }],
|
||
|
|
checkTime: [{ required: true, message: '请选择检查时间', trigger: 'blur' }]
|
||
|
|
},
|
||
|
|
minDate: 0,
|
||
|
|
maxDate: 0
|
||
|
|
}
|
||
|
|
},
|
||
|
|
onLoad(opt) {
|
||
|
|
this.opt = JSON.parse(opt.params)
|
||
|
|
console.log('🚀 ~ onLoad ~ this.opt:', this.opt)
|
||
|
|
this.token = uni.getStorageSync('App-Token')
|
||
|
|
this.getCheckLevelType()
|
||
|
|
this.handleDataTime()
|
||
|
|
setTimeout(() => {
|
||
|
|
if (this.opt.isEdit || this.opt.isDetail) {
|
||
|
|
this.getFormData()
|
||
|
|
}
|
||
|
|
}, 200)
|
||
|
|
},
|
||
|
|
methods: {
|
||
|
|
handleDataTime() {
|
||
|
|
// minDate 今天往前10年, maxDate 为今天
|
||
|
|
// 获取今天的日期
|
||
|
|
let today = new Date()
|
||
|
|
// 获取10年前的日期
|
||
|
|
let tenYearsAgo = new Date()
|
||
|
|
tenYearsAgo.setFullYear(today.getFullYear() - 10)
|
||
|
|
// 获取今天和10年前日期的时间戳
|
||
|
|
this.maxDate = today.getTime() // 当前时间戳
|
||
|
|
this.minDate = tenYearsAgo.getTime() // 10年前的时间戳
|
||
|
|
},
|
||
|
|
async getCheckLevelType() {
|
||
|
|
try {
|
||
|
|
const params = {
|
||
|
|
dictType: 'yh_inspect_level',
|
||
|
|
dictValue: ''
|
||
|
|
}
|
||
|
|
const params2 = {
|
||
|
|
dictType: 'yh_check_type',
|
||
|
|
dictValue: ''
|
||
|
|
}
|
||
|
|
const res = await dictTableOption(params)
|
||
|
|
console.log('🚀 ~ 检查级别 ~ res:', res)
|
||
|
|
this.inspectLevelOpts = [res.data]
|
||
|
|
const res2 = await dictTableOption(params2)
|
||
|
|
console.log('🚀 ~ 排查类型 ~ res2:', res2)
|
||
|
|
this.checkTypeOpts = [res2.data]
|
||
|
|
} catch (error) {
|
||
|
|
console.log('获取检查级别-下拉失败', error)
|
||
|
|
}
|
||
|
|
},
|
||
|
|
// 详情/编辑-表单回显
|
||
|
|
async getFormData() {
|
||
|
|
try {
|
||
|
|
const res = await getSecurityCheckRecordForm({ id: this.opt.id })
|
||
|
|
console.log('🚀 ~ getFormData ~ res:', res)
|
||
|
|
this.formData = { ...this.formData, ...res.data }
|
||
|
|
// 根据 checkType 查询 checkTypeLabel
|
||
|
|
const checkType = this.checkTypeOpts[0].find(item => item.value == this.formData.checkType)
|
||
|
|
this.formData.checkTypeLabel = checkType.label
|
||
|
|
// 根据 inspectLevel 查询 inspectLevelLabel
|
||
|
|
const inspectLevel = this.inspectLevelOpts[0].find(item => item.value == this.formData.inspectLevel)
|
||
|
|
this.formData.inspectLevelLabel = inspectLevel.label
|
||
|
|
|
||
|
|
// 处理照片
|
||
|
|
if (this.formData.photoList.length > 0) {
|
||
|
|
this.formData.photoList.forEach(item => {
|
||
|
|
item.filePath = config.fileUrl + item.filePath
|
||
|
|
item.url = item.filePath
|
||
|
|
})
|
||
|
|
}
|
||
|
|
this.photoList = this.formData.photoList
|
||
|
|
|
||
|
|
// 处理附件
|
||
|
|
if (this.formData.attachmentList.length > 0) {
|
||
|
|
this.formData.attachmentList.forEach(item => {
|
||
|
|
item.url = item.filePath
|
||
|
|
})
|
||
|
|
}
|
||
|
|
console.log('🚀 ~ --> ~ this.formData:', this.formData)
|
||
|
|
} catch (error) {
|
||
|
|
console.log('🚀 ~ getFormData ~ error:', error)
|
||
|
|
}
|
||
|
|
},
|
||
|
|
// 确认选择-检查级别
|
||
|
|
confirm1(e) {
|
||
|
|
console.log('🚀 ~ confirm1 ~ e:', e)
|
||
|
|
this.formData.inspectLevel = e.value[0].value
|
||
|
|
this.formData.inspectLevelLabel = e.value[0].label
|
||
|
|
this.showPicker1 = false
|
||
|
|
},
|
||
|
|
// 确认选择-排查类型
|
||
|
|
confirm2(e) {
|
||
|
|
console.log('🚀 ~ confirm2 ~ e:', e)
|
||
|
|
this.formData.checkType = e.value[0].value
|
||
|
|
this.formData.checkTypeLabel = e.value[0].label
|
||
|
|
this.showPicker2 = false
|
||
|
|
},
|
||
|
|
// 确认选择-检查时间
|
||
|
|
confirm3(e) {
|
||
|
|
console.log('🚀 ~ confirm3 ~ e:', e)
|
||
|
|
this.formData.checkTime = this.formatTimestamp(e.value)
|
||
|
|
this.showPicker3 = false
|
||
|
|
},
|
||
|
|
// 将时间戳转换为日期格式 yyyy-MM-dd
|
||
|
|
formatTimestamp(timestamp) {
|
||
|
|
const date = new Date(timestamp)
|
||
|
|
const year = date.getFullYear()
|
||
|
|
const month = String(date.getMonth() + 1).padStart(2, '0')
|
||
|
|
const day = String(date.getDate()).padStart(2, '0')
|
||
|
|
const hour = String(date.getHours()).padStart(2, '0')
|
||
|
|
const minute = String(date.getMinutes()).padStart(2, '0')
|
||
|
|
const second = String(date.getSeconds()).padStart(2, '0')
|
||
|
|
return `${year}-${month}-${day} ${hour}:${minute}:${second}`
|
||
|
|
},
|
||
|
|
selectImg(e) {
|
||
|
|
console.log('🚀 ~ selectImg ~ e:', e)
|
||
|
|
e.tempFiles.forEach(item => {
|
||
|
|
this.formData.photoList.push(item)
|
||
|
|
})
|
||
|
|
},
|
||
|
|
upload(path) {
|
||
|
|
uni.uploadFile({
|
||
|
|
url: this.actionUrl,
|
||
|
|
filePath: path,
|
||
|
|
name: 'photoType',
|
||
|
|
header: {
|
||
|
|
Authorization: this.token,
|
||
|
|
tokenType: 'APP'
|
||
|
|
},
|
||
|
|
success: res => {
|
||
|
|
console.log('🚀 ~ token--1:', this.token)
|
||
|
|
console.log('🚀 ~ token--2:', uni.getStorageSync('App-Token'))
|
||
|
|
console.log('🚀 ~ selectImg ~ res:', res)
|
||
|
|
this.formData.photoType.push(JSON.parse(res.data).data[0])
|
||
|
|
console.log('🚀 ~ upload ~ this.photoType:', this.formData.photoType)
|
||
|
|
},
|
||
|
|
fail: err => {
|
||
|
|
console.log('🚀 ~ selectImg ~ err:', err)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
},
|
||
|
|
deleteImg(e) {
|
||
|
|
console.log('🚀 ~ deleteImg ~ e:', e)
|
||
|
|
this.formData.photoList.forEach((item, index) => {
|
||
|
|
if (index == e.index) {
|
||
|
|
if (item.fileId) {
|
||
|
|
this.formData.fileId.push(item.fileId)
|
||
|
|
}
|
||
|
|
this.formData.photoList.splice(index, 1)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
console.log('🚀 ~ deleteImg ~ this.formData:', this.formData)
|
||
|
|
},
|
||
|
|
async submitForm() {
|
||
|
|
console.log('🚀 ~ submitForm ~ 点击:')
|
||
|
|
console.log('🚀 ~ submitForm ~ this.formData:', this.formData)
|
||
|
|
this.isLoading = true
|
||
|
|
this.$refs.uForm
|
||
|
|
.validate()
|
||
|
|
.then(async valid => {
|
||
|
|
console.log('🚀 ~ submitForm ~ this.formData:', this.formData)
|
||
|
|
console.log('🚀 ~ submitForm ~ valid:', valid)
|
||
|
|
// 调用上传
|
||
|
|
const uploadPromises = this.formData.photoList.map(item => {
|
||
|
|
if (item.uuid) {
|
||
|
|
return this.upload(item.path)
|
||
|
|
}
|
||
|
|
return Promise.resolve()
|
||
|
|
})
|
||
|
|
|
||
|
|
Promise.all(uploadPromises)
|
||
|
|
.then(() => {
|
||
|
|
// 所有上传操作完成后再提交
|
||
|
|
setTimeout(() => {
|
||
|
|
this.submit()
|
||
|
|
}, 800)
|
||
|
|
})
|
||
|
|
.catch(error => {
|
||
|
|
// 处理上传失败的情况
|
||
|
|
console.error('上传失败', error)
|
||
|
|
this.isLoading = false
|
||
|
|
})
|
||
|
|
})
|
||
|
|
.catch(() => {
|
||
|
|
this.isLoading = false
|
||
|
|
})
|
||
|
|
},
|
||
|
|
// 提交
|
||
|
|
async submit() {
|
||
|
|
try {
|
||
|
|
this.formData.photoList = this.formData.photoType
|
||
|
|
this.formData.attachmentList = []
|
||
|
|
console.log('🚀 ~ submit ~ this.formData:', this.formData)
|
||
|
|
const res = await addSecurityCheckRecord(this.formData)
|
||
|
|
console.log('🚀 ~ submit ~ res:', res)
|
||
|
|
this.isLoading = false
|
||
|
|
uni.showToast({
|
||
|
|
title: '提交成功',
|
||
|
|
icon: 'success',
|
||
|
|
duration: 1500
|
||
|
|
})
|
||
|
|
uni.navigateBack()
|
||
|
|
} catch (error) {
|
||
|
|
console.log('🚀 ~ submit ~ error:', error)
|
||
|
|
this.isLoading = false
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
</script>
|
||
|
|
|
||
|
|
<style lang="scss">
|
||
|
|
.content {
|
||
|
|
padding: 0 20px;
|
||
|
|
.btn {
|
||
|
|
margin-top: 20px;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
</style>
|