Files

255 lines
6.8 KiB
Vue
Raw Permalink Normal View History

2025-07-28 14:57:35 +08:00
<template>
<view class="container">
<view class="example">
<!-- 基础用法不包含校验规则 -->
<uni-forms ref="SafetyDeclarationTable" :rules="customRules" :modelValue="SafetyDeclarationTable"
label-width="80px">
<uni-forms-item label="隐患类别" name="declarationType" required>
<uni-data-select :disabled="id!=null" v-model="SafetyDeclarationTable.declarationType"
:localdata="selectList"></uni-data-select>
</uni-forms-item>
<uni-forms-item label="隐患内容" name="requirementDescription" required>
<uni-easyinput :disabled="id!=null" v-model="SafetyDeclarationTable.requirementDescription"
placeholder="请输入申报内容" />
</uni-forms-item>
<!-- <uni-forms-item label="隐患时间" name="occurTime" required>
<uni-datetime-picker :disabled="id!=null" type="datetime" v-model="SafetyDeclarationTable.occurTime" />
</uni-forms-item> -->
<uni-forms-item label="备注" name="remark">
<uni-easyinput :disabled="id!=null" type="textarea" v-model="SafetyDeclarationTable.remark"
placeholder="请输入备注" />
</uni-forms-item>
<uni-forms-item label="图片上传">
<view class="example-body">
<uni-file-picker :readonly="id!=null" limit="9" :value="img" title="最多选择9张图片" file-mediatype="image"
@delete="deleteImg" @select="upload" :auto-upload="false"></uni-file-picker>
</view>
</uni-forms-item>
</uni-forms>
<view class="button-group">
<button type="primary" size="mini" flex="1" v-if="!id" @click="cancellation()">取消</button>
<button type="primary" size="mini" flex="1" v-if="!id" @click="submit('SafetyDeclarationTable')">提交</button>
</view>
</view>
</view>
</template>
<script>
import { checkRole,checkPermi } from "@/utils/permission"; // 权限判断函数
import config from '@/config'
const baseUrl = config.baseUrl
import store from "@/store"
import {
listData
} from '@/api/system/dict/data.js'
import {
uploadImg
} from "@/api/system/user"
import {
addSafetyDeclaration,
getSafetyDeclaration
} from "@/api/sidebar/sidebar.js"
export default {
data() {
return {
id: null,
msgType: "",
messageText: "",
// 选择框数据
selectList: [],
img: [],
SafetyDeclarationTable: {
declarationType: 0,
requirementDescription: "",
occurTime: "",
declarationImg: "",
remark: "",
ImgUrl: []
},
selectedImg: "",
customRules: {
declarationType: {
rules: [{
required: true,
errorMessage: '请选择申报类型'
}]
},
requirementDescription: {
rules: [{
required: true,
errorMessage: '申报内容不能为空'
}]
},
// occurTime: {
// rules: [{
// required: true,
// errorMessage: '申报时间不能为空'
// }]
// }
}
}
},
mounted() {
// 需要在onReady中设置规则
this.$refs.SafetyDeclarationTable.setRules(this.customRules)
},
onLoad(option) {
if (option.id) {
this.id = option.id
this.getData();
}
},
methods: {
// 注册
checkPermi,
checkRole,
getData() {
getSafetyDeclaration(this.id).then(res => {
this.SafetyDeclarationTable.declarationType = res.data.declarationType * 1.
this.SafetyDeclarationTable = res.data
if (res.data.declarationImg != "") {
let filePathArray = res.data.declarationImg.split(",");
filePathArray.forEach(item => {
this.img.push({
url: baseUrl + item
})
console.log(this.img);
console.log(baseUrl);
})
// console.log("filePathArray",filePathArray);
}
})
},
deleteImg(e) {
console.log("deleteImg", e.tempFile.uuid);
// console.log("deleteImg",this.SafetyDeclarationTable.ImgUrl);
const index = this.img.findIndex(f => f.uuid === e.tempFile.uuid); // 假设文件通过 url 唯一标识
console.log(index);
if (index !== -1) {
// 移除文件
this.selectList.splice(index, 1);
this.SafetyDeclarationTable.ImgUrl.splice(index, 1)
// console.log();
}
},
submit(ref) {
this.$refs[ref].validate().then(res => {
this.SafetyDeclarationTable.declarationImg = this.joinList()
console.log("提交成功");
console.log("this.SafetyDeclarationTable", this.SafetyDeclarationTable);
addSafetyDeclaration(this.SafetyDeclarationTable).then(res => {
uni.showToast({
title: '提交成功',
icon: 'success', // 成功图标
duration: 1000 // 持续时间为2000ms
});
// 延时执行,确保弹窗有足够的时间显示
setTimeout(() => {
this.$tab.navigateBack(); // 假设这是正确的页面跳转方法,具体方法可能因框架而异
}, 1000);
})
}).catch(err => {
console.log('err', err);
})
},
cancellation() {
this.$tab.navigateBack();
},
// 上传图片
upload(e) {
console.log(e);
this.img.push(e.tempFiles[0])
e.tempFilePaths.forEach(item => {
uploadImg({
filePath: item
}).then(res => {
console.log(res);
this.SafetyDeclarationTable.ImgUrl.push(res.fileName)
})
})
},
// 初始化字典
async initDictType() {
const typeData = await listData({
dictType: "hs_declaration_type"
});
typeData.rows.forEach(item => {
let data = {
value: 0,
text: ""
}
data.value = item.dictValue
data.text = item.dictLabel
this.selectList.push(data)
// console.log(this.selectList);
})
},
// 定义一个方法用于将list拼接成字符串
joinList() {
// 使用数组的join方法以逗号分隔元素
return this.SafetyDeclarationTable.ImgUrl.join(',');
}
},
created() {
this.initDictType();
}
}
</script>
<style lang="scss">
page {
display: flex;
flex-direction: column;
box-sizing: border-box;
background-color: #fff;
height: 90vh;
/* 使页面高度占满整个视口 */
}
.container {
flex: 1;
/* 让 container 占满剩余空间 */
display: flex;
flex-direction: column;
/* 设置为列方向 */
}
.example {
flex: 1;
/* 让 example 占满 container 的剩余空间 */
display: flex;
flex-direction: column;
/* 设置为列方向,确保子元素垂直排列 */
padding: 15px;
background-color: #fff;
}
.segmented-control {
margin-bottom: 15px;
}
.form-item {
display: flex;
align-items: center;
}
// 样式沉底
.button-group {
position: fixed;
bottom: 20px;
left: 0;
/* 使用 margin-top: auto 来将按钮组推到 example 容器的底部 */
display: flex;
width: 100%;
justify-content: space-around;
}
.button-group button {
flex: 1;
background: #fff;
color: #000;
/* 使按钮平分可用空间 */
/* 可能还需要设置一些其他的样式来确保按钮看起来正确,比如 text-align, padding 等 */
}
</style>