hn_ldlz/ldlz-H5/pages/aqlz/problem.vue

486 lines
11 KiB
Vue
Raw Normal View History

2025-05-19 10:24:16 +08:00
<template>
<page-meta :page-font-size="$store.state.vuex_fontsize+'px'" :root-font-size="$store.state.vuex_fontsize+'px'"></page-meta>
<view>
<view class="title-box" v-if="detail!='' && isOther==false">{{detail.children[classIndex].name}}</view>
<view class="title-box" v-else>其他情况</view>
<view class="content-box" v-if="detail!=''">
<view class="content-name">
{{(1+parseInt(classIndex2))+'. '+detail.children[classIndex].children[classIndex2].name}}
</view>
<view class="content-content">
{{detail.children[classIndex].children[classIndex2].content}}
</view>
</view>
<view class="problem-top-box">
<view class="problem-title" style="margin-left: 15px;">发现问题</view>
<!-- <view class="jc-one-btns">
<u-icon class="jc-one-icon" size="18" name="checkmark-circle" color="rgb(96, 98, 102)"
@click="noProblem"></u-icon>
<u-icon class="jc-one-icon" size="18" name="warning-fill" color="#F56C6C"
style="margin-left:100%">
</u-icon>
</view> -->
</view>
<view class="problem-box" v-for="(itemForm,index) in form" :key="index">
<view class="problem-form-box">
<view class="delDiv">
<u-icon v-if="index!=0" name="minus-circle" color="#F56C6C" size="22" class="delBtn"
@click="delProblem(index)"></u-icon>
</view>
<u--form labelPosition="left" :model="form[index]" :ref="'uForm'+index" :rules="rules">
<u-form-item label="现场情况" prop="remark" borderBottom labelWidth="70">
<u--input v-model="form[index].remark" border="none"></u--input>
</u-form-item>
<u-form-item v-if="isShow()" label="责任人" prop="responsiblePerson" borderBottom labelWidth="70">
<u--input v-model="form[index].responsiblePerson" border="none"></u--input>
</u-form-item>
<u-form-item label="照片" prop="photo" :ref="'upLoad'+index" labelWidth="70">
<u-upload :fileList="form[index].img" @afterRead="afterRead(index,$event)"
@delete="deletePic(index,$event)" multiple :maxCount="9">
</u-upload>
</u-form-item>
</u--form>
</view>
</view>
<view class="problem-add-box" @click="addProblem">+ 添加问题</view>
<view style="display:flex;">
<u-button type="primary" text="确定"
style="margin: 30px auto; width: 30%;background-color:#00b27b;border-color:#00b27b;"
@click="submiProblem"></u-button>
<u-button type="default" plain text="取消" style="margin: 30px auto; width: 30%;" @click="noProblem">
</u-button>
</view>
</view>
</template>
<script>
import {
baseUrl
} from '../../config.js'
import {
getToken
} from '@/utils/auth'
import {
gethandbookInfo
} from '@/api/handbook.js'
import auth from "@/plugins/auth.js"
export default {
data() {
return {
id: "", // 页面id
tid: "", // 子记录id
address: "", // 地图页面的地址
otherUser: "", // 同行人
projectName: "", // 工程名称
form: [],
rules: {
'remark': {
type: 'string',
required: true,
message: '请填写现场情况',
trigger: ['blur', 'change']
},
'responsiblePerson': {
type: 'string',
required: true,
message: '请填写责任人',
trigger: ['blur', 'change']
},
},
formTem: {
indexId: "",
type: '1',
responsiblePerson: "",
remark: "",
img: [],
},
fileList1: [],
detail: "",
classIndex: "",
classIndex2: "",
key: "",
isOther: false,
}
},
// onBackPress(options) {
// if (options.from === 'navigateBack') {
// uni.showModal({
// title: '提示',
// content: '确定要退出吗?',
// success: function(res) {
// if (res.confirm) {
// // 用户点击了确定,正常进行返回行为
// return true;
// } else if (res.cancel) {
// // 用户点击了取消,不执行返回行为
// return false;
// }
// }
// });
// }
// // 如果不是 navigateBack 触发的返回,比如导航栏的返回按钮或者系统返回按钮,则不会阻止默认行为
// return false;
// },
onLoad(option) {
if (option.isOther == 1) {
this.isOther = true;
this.otherInit();
} else {
this.id = option.id;
this.classIndex = option.classIndex;
this.classIndex2 = option.classIndex2;
this.gethandbookInfo(this.id);
}
},
methods: {
isShow() {
console.log(auth.hasPermi('system:config:showResponsiblePerson'));
return auth.hasPermi('system:config:showResponsiblePerson');
},
beforeRouteLeave(to, from, next) {
// 在这里编写你离开当前页面前需要执行的操作
// 例如:提示用户是否确认离开
uni.showModal({
title: '提示',
content: '您确定要离开此页面吗?',
success: function(res) {
if (res.confirm) {
// 用户点击确定通过next()方法继续路由跳转
next();
} else if (res.cancel) {
// 用户点击取消,不执行路由跳转
// 不调用next()方法,即不进行路由跳转
}
}
});
},
gethandbookInfo(id) {
this.key = this.classIndex + '_' + this.classIndex2;
gethandbookInfo(id).then(res => {
console.log(this.$store.getters.problemList, this.key);
this.detail = res.data;
this.formTem.indexId = this.detail.children[this.classIndex].children[this.classIndex2].id;
if (this.$store.getters.problemList.hasOwnProperty(this.key)) {
if (this.$store.getters.problemList[this.key].length > 0) {
this.form = this.$store.getters.problemList[this.key];
} else {
this.form = [];
this.form.push({
...this.formTem
});
}
} else {
this.form = [];
this.form.push({
...this.formTem
});
}
})
},
otherInit() {
this.key = 'other';
this.formTem.indexId = '1';
if (this.$store.getters.problemList.hasOwnProperty(this.key)) {
this.form = this.$store.getters.problemList[this.key];
} else {
this.form = [];
this.form.push({
...this.formTem
});
}
},
addProblem() {
this.formTem.img = [];
this.form.push({
...this.formTem
});
},
delProblem(index) {
this.form.splice(index, 1);
},
noProblem(index) {
let flag = 0;
this.form.forEach(item => {
if (item.remark != "" && item.remark != null) {
uni.$u.toast('现场情况不能为空')
flag = 1;
}
})
if (flag == 1) {
uni.showModal({
title: '提示',
content: '是否清除问题?',
success: (res)=> {
if (res.confirm) {
this.$store.commit('SET_PL', {
key: this.key,
value: []
})
uni.navigateBack({
delta: 1
})
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
}else{
this.$store.commit('SET_PL', {
key: this.key,
value: []
})
uni.navigateBack({
delta: 1
})
}
},
submiProblem() {
let flag = 0;
this.form.forEach(item => {
if (item.remark == "" || item.remark == null) {
uni.$u.toast('现场情况不能为空')
flag = 1;
}
})
if (flag == 1) {
return false;
}
this.$store.commit('SET_PL', {
key: this.key,
value: this.form
})
uni.navigateBack({
delta: 1
})
// console.log(this.$refs['uForm'+0]);
// for(let i=0; i<this.form.length;i++){
// this.$refs['uForm'+i].validate().then(res => {
// uni.$u.toast('校验通过')
// }).catch(errors => {
// uni.$u.toast('校验失败')
// })
// }
// console.log(this.form);
},
// 删除图片
deletePic(index, event) {
this.form[index].img.splice(event.index, 1)
},
// 新增图片
async afterRead(index, event) {
console.log(index, event);
// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
let lists = [].concat(event.file)
let fileListLen = this.form[index].img.length
lists.map((item) => {
this.form[index].img.push({
...item,
status: 'uploading',
message: '上传中'
})
})
for (let i = 0; i < lists.length; i++) {
const result = await this.uploadFilePromise(lists[i].url)
console.log("result>>", result);
let item = this.form[index].img[fileListLen]
this.form[index].img.splice(fileListLen, 1, Object.assign(item, {
status: 'success',
message: '',
url: result
}))
fileListLen++
}
},
uploadFilePromise(url) {
return new Promise((resolve, reject) => {
let a = uni.uploadFile({
url: baseUrl + '/common/upload', // 仅为示例,非真实的接口地址
filePath: url,
name: 'file',
header: {
Authorization: 'Bearer ' + getToken()
},
formData: {
user: 'test'
},
success: (res) => {
if (res.data) {
let imgUrl = JSON.parse(res.data).fileName;
setTimeout(() => {
resolve(imgUrl)
}, 1000)
}
}
});
})
},
}
}
</script>
<style lang="scss" scoped>
.title-box {
margin: 10px;
min-height: 38px;
overflow: auto;
display: flex;
font-family: "微软雅黑 Bold", "微软雅黑 Regular", 微软雅黑, sans-serif;
font-weight: 700;
font-style: normal;
font-size: 19px;
padding: 5px;
}
.content-box {
margin: 10px;
border-width: 1px;
border-style: solid;
border-color: rgb(242, 242, 242);
box-sizing: border-box;
box-shadow: rgba(102, 102, 102, 0.35) 0px 0px 5px;
background: #ffffff;
padding: 5px;
.content-name {
font-family: 'Arial Negreta', 'Arial Normal', 'Arial', sans-serif;
font-weight: 700;
font-style: normal;
font-size: 16px;
color: #000000;
text-align: left;
line-height: 28px;
}
.content-content {
background: inherit;
background-color: rgba(255, 255, 255, 1);
box-sizing: border-box;
border-width: 1px;
border-style: solid;
border-color: rgba(228, 228, 228, 1);
box-shadow: none;
font-size: 14px;
color: #000000;
text-align: left;
line-height: 20px;
padding: 5px;
}
}
.problem-top-box {
display: flex;
align-items: center;
.problem-title {
font-family: "微软雅黑 Bold", "微软雅黑 Regular", 微软雅黑, sans-serif;
font-weight: bold;
font-style: normal;
font-size: 16px;
color: rgb(217, 0, 27);
text-align: left;
line-height: 28px;
}
.jc-one-btns {
display: flex;
align-items: center;
margin-left: 50%;
}
}
.problem-box {
margin: 10px;
border-width: 1px;
border-style: solid;
border-color: rgb(242, 242, 242);
box-sizing: border-box;
box-shadow: rgba(102, 102, 102, 0.35) 0px 0px 5px;
background: #ffffff;
padding: 5px;
.problem-form-box {
position: relative;
}
}
.problem-add-box {
display: flex;
align-items: center;
justify-content: center;
color: #c1c1c1;
font-family: 'Arial Normal', 'Arial', sans-serif;
font-weight: 400;
font-style: normal;
font-size: 13px;
letter-spacing: normal;
margin: 10px;
border-width: 1px;
border-style: solid;
border-color: #ffffff;
box-sizing: border-box;
box-shadow: #ffffff 0px 0px 5px;
background: #ffffff;
border-radius: 8px;
padding: 10px;
}
.delDiv {
display: flex;
justify-content: end;
.delBtn {
margin-top: 8px;
margin-right: 8px;
}
}
::v-deep .u-button__text{
font-size:14px !important;
}
</style>