You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

490 lines
14 KiB

<template>
<view class="project-add">
<!-- 项目新增表单卡片 -->
<view class="cc-card form-card">
<view class="form-title">{{ pageTitle }}</view>
<view class="form-item">
<text class="form-label">隐患名称</text>
<view class="form-content">
<input v-model="form.hazardName" class="form-input" placeholder="请输入隐患名称" />
</view>
</view>
<view class="form-item">
<text class="form-label">项目名称</text>
<view class="form-content">
<input v-model="form.entryName" class="form-input" placeholder="请输入项目名称" />
</view>
</view>
<view class="form-item">
<text class="form-label">排查计划</text>
<view class="form-content">
<input v-model="form.investigationPlan" class="form-input" placeholder="请输入排查计划" type="number" />
</view>
</view>
<view class="form-item">
<text class="form-label">检查单位</text>
<view class="form-content">
<input v-model="form.inspectionUnit" class="form-input" placeholder="请输入检查单位" />
</view>
</view>
<view class="form-item">
<text class="form-label">检查责任人</text>
<view class="form-content">
<input v-model="form.personCgeInspection" class="form-input" placeholder="请输入检查责任人" />
</view>
</view>
<view class="form-item">
<text class="form-label">检查周期</text>
<view class="form-content">
<input v-model="form.inspectionCycle" class="form-input" placeholder="请输入检查周期" />
</view>
</view>
<view class="form-item">
<text class="form-label">检查人列表信息</text>
<view class="form-content">
<input v-model="form.checkerListInfo" class="form-input" placeholder="请输入检查人列表信息" />
</view>
</view>
<view class="form-item">
<text class="form-label">隐患描述</text>
<view class="form-content">
<input v-model="form.hazardDescription" class="form-input" placeholder="请输入隐患描述" />
</view>
</view>
<view class="form-item">
<text class="form-label">隐患所在区域</text>
<view class="form-content">
<input v-model="form.hazardLocationArea" class="form-input" placeholder="请输入隐患所在区域" />
</view>
</view>
<view class="form-item">
<text class="form-label">隐患类型</text>
<view class="form-content">
<input v-model="form.hazardType" class="form-input" placeholder="请输入隐患类型" />
</view>
</view>
<view class="form-item">
<text class="form-label">隐患等级</text>
<view class="form-content">
<input v-model="form.hazardLevel" class="form-input" placeholder="请输入隐患等级" />
</view>
</view>
<view class="form-item">
<text class="form-label">整改期限</text>
<view class="form-content">
<input v-model="form.rectificationDeadline" class="form-input" placeholder="请输入整改期限" />
</view>
</view>
<view class="form-item">
<text class="form-label">整改责任单位</text>
<view class="form-content">
<input v-model="form.rectificationResponsibleUnit" class="form-input" placeholder="请输入整改责任单位" />
</view>
</view>
</view>
<view class="cc-form-card" style="margin-top: 16px;margin-bottom: 16px;">
<view class="form-title">
<view>图片</view>
<view class="form-tips">支持png、jpg等格式,不大于5M</view>
</view>
<view class="form-item" style="margin-bottom: 0;">
<div class="img-box">
<div class="img-list">
<div
v-for="(item, index) in imgPreviewList"
:key="index"
class="img-item"
>
<image :src="item" @click="previewImage(index)" />
<button class="delete-btn" @click="deleteImage(index)">删除</button>
</div>
<div class="file-select" @click="chooseAttachment"></div>
</div>
</div>
</view>
</view>
<view class="cc-operation-row operation-row">
<view class="buttons-group">
<view class="button primary-button" @click="handleConfirm">确定</view>
<view class="button default-button" @click="handleCancle">取消</view>
</view>
</view>
</view>
</template>
<script>
import {
listRecord,
getRecord,
addRecord,
updateRecord,
delRecord,
exportRecord,
} from "@/api/system/hazardRecord";
import {baseUrl} from "@/config";
import {getToken} from "@/utils/auth";
export default {
data() {
return {
form: {
id: this.$route.query.monitorId,
hazardName: '',
entryName: '',
investigationPlan: '',
inspectionUnit: '',
personCgeInspection: '',
inspectionCycle: '',
checkerListInfo: '',
hazardDescription: '',
hazardType: '',
hazardLevel: '',
rectificationDeadline: '',
rectificationResponsibleUnit: '',
hazardAttachment: '',
proNo: this.$route.query.proNo
},
pageTitle: '添加隐患登记信息',
imagePath: '', // 用于存储选中的图片路径
proNo: this.$route.query.proNo,
proCode: this.$route.query.proCode,
projectName: this.$route.query.projectName,
headers: {
jianwei: "jwtech " + getToken(),
},
imgList: [],
imgPreviewList: [],
// imgPreviewList: ["http://gips2.baidu.com/it/u=195724436,3554684702&fm=3028&app=3028&f=JPEG&fmt=auto?w=1280&h=960", "http://gips1.baidu.com/it/u=3874647369,3220417986&fm=3028&app=3028&f=JPEG&fmt=auto?w=720&h=1280"]
};
},
created () {
this.handleJudgeTitle()
this.getDetailInfo()
},
methods: {
// 处理标题名称
handleJudgeTitle() {
let operateType = this.$route.query.operateType
if (operateType === 'add') {
this.pageTitle = '添加隐患登记信息'
} else {
this.pageTitle = '编辑隐患登记信息'
}
},
getDetailInfo() {
if (this.form.id) {
getRecord(this.form.id).then(res => {
if (res.data.hazardAttachment) {
this.imgList = JSON.parse(res.data.hazardAttachment)
this.imgPreviewList = this.imgList.map(item => {
item.url
})
}
this.form = res.data
})
}
},
handleConfirm() {
if (!this.judgeAttrWrite()) {
return
}
uni.showLoading({
title: '提交中...',
mask: true
})
if (this.imgList && this.imgList.length>0) {
this.form.hazardAttachment = JSON.stringify(this.imgList)
}
if (this.form.id) {
updateRecord(this.form).then(res => {
uni.showToast({
title: '提交成功',
icon: 'none'
})
this.$tab.redirectTo(`/pages/danger/list?operateType=add&proNo=${this.proNo}&proCode=${this.proCode}&menuType=${0}&projectName=${this.projectName}`)
// uni.navigateTo({
// url: '/pages/danger/list?tabNum=1&id=' + this.$route.query.id + '&proNo='
// })
uni.hideLoading()
})
} else {
addRecord(this.form).then(res => {
uni.showToast({
title: '提交成功',
icon: 'none'
})
uni.hideLoading()
// uni.navigateTo({
// url: '/pages/danger/list?tabNum=1&id=' + this.$route.query.id
// })
this.$tab.redirectTo(`/pages/danger/list?operateType=add&proNo=${this.proNo}&proCode=${this.proCode}&menuType=${0}&projectName=${this.projectName}`)
})
}
},
handleCancle() {
uni.navigateBack()
},
// 判断必填项是否填写
judgeAttrWrite() {
const form = this.form
if (!form.hazardName) {
uni.showToast({
title: `隐患名称不能为空!`,
icon: 'none'
})
return false
}
if (!form.entryName) {
uni.showToast({
title: `项目名称不能为空!`,
icon: 'none'
})
return false
}
if (!form.investigationPlan) {
uni.showToast({
title: `排查计划不能为空!`,
icon: 'none'
})
return false
}
if (!form.inspectionUnit) {
uni.showToast({
title: `检查单位不能为空!`,
icon: 'none'
})
return false
}
if (!form.personCgeInspection) {
uni.showToast({
title: `检查责任人不能为空!`,
icon: 'none'
})
return false
}
if (!form.inspectionCycle) {
uni.showToast({
title: `检查周期不能为空!`,
icon: 'none'
})
return false
}
if (!form.checkerListInfo) {
uni.showToast({
title: `检查人列表信息不能为空!`,
icon: 'none'
})
return false
}
if (!form.hazardDescription) {
uni.showToast({
title: `隐患描述不能为空!`,
icon: 'none'
})
return false
}
if (!form.hazardLocationArea) {
uni.showToast({
title: `隐患所在区域不能为空!`,
icon: 'none'
})
return false
}
if (!form.hazardType) {
uni.showToast({
title: `隐患类型不能为空!`,
icon: 'none'
})
return false
}
if (!form.hazardLevel) {
uni.showToast({
title: `隐患等级不能为空!`,
icon: 'none'
})
return false
}
if (!form.rectificationDeadline) {
uni.showToast({
title: `整改期限不能为空!`,
icon: 'none'
})
return false
}
if (!form.rectificationResponsibleUnit) {
uni.showToast({
title: `整改责任单位不能为空!`,
icon: 'none'
})
return false
}
return true
},
// 选择上传附件
chooseAttachment() {
uni.showActionSheet({
itemList: ['照相机', '图册'],
success: (res) => {
if (res.tapIndex === 0) {
// 选择拍照
this.takePhoto();
} else if (res.tapIndex === 1) {
// 选择从相册选择
this.chooseFromGallery();
}
},
fail: (err) => {
console.log('选择附件失败', err);
}
});
},
// 拍照
takePhoto() {
uni.chooseImage({
count: 1, // 选择1张图片
sourceType: ['camera'], // 仅允许拍照
success: (res) => {
const tempFilePath = res.tempFilePaths[0];
const fileName = res.tempFiles[0].name
this.uploadFile(tempFilePath, fileName); // 上传文件
},
fail: (err) => {
console.log('拍照失败', err);
}
});
},
// 从相册选择
chooseFromGallery() {
uni.chooseImage({
count: 1, // 选择1张图片
sourceType: ['album'], // 仅允许从相册选择
success: (res) => {
const tempFilePath = res.tempFilePaths[0];
const fileName = res.tempFiles[0].name
this.uploadFile(tempFilePath, fileName); // 上传文件
},
fail: (err) => {
console.log('从相册选择失败', err);
}
});
},
// 上传文件
uploadFile(filePath, fileName) {
console.log('上传成功', fileName)
let token="jwtech " + getToken()
// 替换为你的后端接口地址
const uploadUrl = baseUrl+'/common/upload';
uni.uploadFile({
header: {
'jianwei':token,
},
url: uploadUrl, // 你的服务器上传接口
filePath: filePath,
name: 'file',
success: (uploadFileRes) => {
let imageItem = JSON.parse(uploadFileRes.data)
// 将选择的图片添加到 imageList
imageItem.name = fileName
this.imgList.push(imageItem)
this.imgPreviewList.push(imageItem.url)
console.log('上传成功', this.imgPreviewList)
// 你可以在这里处理返回的数据
},
fail: (uploadFileErr) => {
console.log('上传失败', uploadFileErr);
}
});
},
// 图片放大查看
previewImage(index) {
uni.previewImage({
current: index, // 当前显示的图片索引
urls: this.imgPreviewList // 图片列表
});
},
// 删除图片
deleteImage(index) {
this.imgPreviewList.splice(index, 1);
this.imgList.splice(index, 1);
}
}
};
</script>
<style lang="scss" scoped>
.project-add {
padding: 16px 20px 80px;
.file-select {
width: 72px;
height: 72px;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid #e7e7e7;
border-radius: 4px;
font-size: 0;
uni-button {
display: none;
}
&::after {
content: '+';
font-size: 38px;
color: #00B39D;
}
}
.img-box {
.img-list {
width: 100%;
display: flex;
align-items: center;
flex-wrap: wrap;
.img-item {
position: relative;
image {
width: 72px;
// width: calc(calc(100% - 30px) / 4);
height: 72px;
border: 1px solid #e7e7e7;
}
.delete-btn {
position: absolute;
top: 5px;
right: 5px;
background-color: #3b3838;
font-size: 12px;
color: white;
border: none;
padding: 0 2px;
border-radius: 50%;
cursor: pointer;
}
}
}
}
}
</style>