xytSk-App/pages/mypage/compents/xcrw/detail/dbForm.vue

394 lines
11 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="contentItem">
<uni-collapse>
<uni-collapse-item title-border="none" v-for="(item,index) in listData" :key="index" :border="false"
:show-animation="true">
<template v-slot:title>
<view style="display: flex;align-items: center;">
<text class="yuandian"></text>
<text>{{item.name}}</text>
</view>
</template>
<view class="xj-content">
<view class="xj-text" v-for="(o,i) in item.children" :key="i">
<view style="display: flex;align-items: center;">
<text>{{o.itemDesc}}</text>
<text>{{o.isNormal == 0?'异常':'正常'}}{{o.isHandle?'已处理':'未处理'}}</text>
</view>
<view class="" v-if="o.isNormal == 0">
<view style="">
<text>现场图片</text>
<view class="" v-for="item in o.inspectPics">
<image :src="item.url" style="width: 80px;height: 80px;margin: 5px;" ></image>
</view>
</view>
<view v-if="o.inspectVideos.length">
<text>现场视频</text>
<view class="" v-for="item in o.inspectVideos">
<video :src="item.url" style="width: 80px;height: 80px;margin: 5px;" show-fullscreen-btn :show-progress='false'></video>
</view>
</view>
<view style="display: flex;justify-content: space-between;">
<text>问题描述</text>
<text>{{o.itemProblemDesc}}</text>
</view>
</view>
<view class="" v-if="o.isHandle == 1">
<view style="">
<text>处理图片</text>
<view class="" v-for="item in o.handlePics">
<image :src="item.url" style="width: 80px;height: 80px;margin: 5px;"></image>
</view>
</view>
<view style="" v-if="o.handleVideos.length">
<text>处理视频</text>
<view class="" v-for="item in o.handleVideos">
<video :src="item.url" style="width: 80px;height: 80px;margin: 5px;" show-fullscreen-btn></video>
</view>
</view>
<view style="display: flex;justify-content: space-between;">
<text>问题描述</text <text>{{o.handleDesc}}</text>
</view>
</view>
<view style="display: flex;justify-content: space-between;" v-if="o.isHandle == 0">
<text>责任人</text>
<text>{{o.handleUserName}}</text>
</view>
<view class="subsectioin">
<!-- <u--form labelPosition="left" :model="o" ref="uForm">
<u-form-item label="状态" prop="isNormal" borderBottom required>
<u-subsection :list="list" :current="getNormal(o.isNormal)" mode="subsection" disabled
@change="(e)=>change(e,o,index,i,'isNormal')"
style="width:200px;margin-left: 10px"></u-subsection>
</u-form-item>
<view class="" v-if="o.isNormal">
<u-form-item label="现场图片" prop="inspectPics" borderBottom required>
<u-upload accept="image" :fileList="o.inspectPics" disabled
@afterRead="(e)=>afterRead(e,o,index,i)"
@delete="(e)=>deletePic(e,o,index,i)" name="inspectPics" multiple
:maxCount="10"></u-upload>
</u-form-item>
<u-form-item label="现场视频" prop="inspectVideos" borderBottom>
<u-upload accept="video" :fileList="o.inspectVideos" disabled
@afterRead="(e)=>afterRead(e,o,index,i)"
@delete="(e)=>deletePic(e,o,index,i)" name="inspectVideos" multiple
:maxCount="10"></u-upload>
</u-form-item>
<u-form-item label="问题描述" prop="itemProblemDesc" borderBottom required>
<u--textarea v-model="o.itemProblemDesc" placeholder="请输入内容" disabled></u--textarea>
</u-form-item>
<u-form-item label="处理状态" prop="isHandle" borderBottom required>
<u-subsection :list="listStatus" :current="getHandle(o.isHandle)" disabled
mode="subsection" @change="(e)=>change(e,o,index,i,'isHandle')"
style="width:200px;margin-left: 10px"></u-subsection>
</u-form-item>
<view class="" v-if="o.isHandle !== 0">
<u-form-item label="处理图片" prop="handlePics" borderBottom required>
<u-upload accept="image" :fileList="o.handlePics" disabled
@afterRead="(e)=>afterRead(e,o,index,i)"
@delete="(e)=>deletePic(e,o,index,i)" name="handlePics" multiple
:maxCount="10"></u-upload>
</u-form-item>
<u-form-item label="处理视频" prop="handleVideos" borderBottom>
<u-upload accept="video" :fileList="o.handleVideos" disabled
@afterRead="(e)=>afterRead(e,o,index,i)"
@delete="(e)=>deletePic(e,o,index,i)" name="handleVideos" multiple
:maxCount="10"></u-upload>
</u-form-item>
<u-form-item label="问题描述" prop="handleDesc" borderBottom required>
<u--textarea v-model="o.handleDesc" placeholder="请输入内容" disabled></u--textarea>
</u-form-item>
</view>
<view class="" v-if="o.isHandle == 0">
<u-form-item label="责任人" prop="handleUserId" borderBottom
@click="showSex = true; hideKeyboard()" required>
<u--input v-model="o.handleUserId" disabled disabledColor="#ffffff"
placeholder="请选择性别" border="none"></u--input>
<u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item>
</view>
</view>
</u--form>
<u-action-sheet :show="showSex" :actions="actions" title="请选择性别" description="如果选择保密会报错"
@close="showSex = false" @select="sexSelect">
</u-action-sheet> -->
</view>
</view>
</view>
</uni-collapse-item>
</uni-collapse>
</view>
</template>
<script>
export default {
props: {
xjItem: Array
},
data() {
return {
list: ["正常", "异常"],
listStatus: ["已处理", "未处理"],
current: 0,
listData: [],
showSex: false,
actions: [{
name: '男',
},
{
name: '女',
},
{
name: '保密',
},
],
}
},
mounted() {
// this.listData = this.xjItem
},
watch: {
xjItem: function(n, o) {
this.listData = n.map(item => {
item.childen = item.children.map(i => {
i.handlePics?.map(item1=>{
item1.url ='http://223.75.53.141:9102/test.by-lyf.tmp' + item1.filePath
return item1
})
i.handleVideos?.map(item1=>{
item1.url ='http://223.75.53.141:9102/test.by-lyf.tmp' + item1.filePath
return item1
})
i.inspectPics?.map(item1=>{
item1.url ='http://223.75.53.141:9102/test.by-lyf.tmp' + item1.filePath
return item1
})
i.inspectVideos?.map(item1=>{
item1.url ='http://223.75.53.141:9102/test.by-lyf.tmp' + item1.filePath
return item1
})
if (!i.handlePics) {
i.handlePics = []
}
if (!i.handleVideos) {
i.handleVideos = []
}
if (!i.inspectPics) {
i.inspectPics = []
}
if (!i.inspectVideos) {
i.inspectVideos = []
}
return i
})
return item
})
console.log(n, this.listData, 'this.listData ');
}
},
methods: {
getIsItem(arr) {
return arr.filter(item1 => item1.isNormal !== 1 && item1.isNormal !== 0).length
},
getNormal(isNormal) {
if (isNormal == 0) {
return 0
}
if (isNormal == 1) {
return 1
}
if (isNormal == null) {
return 3
}
},
getHandle(isHandle) {
if (isHandle == 0) {
return 0
}
if (isHandle == 1) {
return 1
}
if (isHandle == null) {
return 3
}
},
async uploadContent() {
try {
let params = {
status: 2,
list: []
}
this.listData.map(i => {
params.list.push(i.children)
})
const {
data
} = await uni.$http.post(`/gunshiApp/xyt/inspect/task/finish`, params)
} catch (error) {
uni.$showMsg();
}
},
submit() {
let tigger = true
//判断是否符合提交条件
this.listData.forEach(item => {
item.ab = item.children.filter(i => {
if (i.isNormal == 1) {
if (i.inspectPics?.length && i.itemProblemDesc) {
tigger = true
} else {
tigger = false
}
if (i.isHandle == 0) {
if (i.handlePics?.length && i.handleDesc) {
tigger = true
} else {
tigger = false
}
} else if (i.isHandle == 1) {
tigger = true
}
} else if (i.isNormal == 0) {
tigger = true
}
})
return item
})
console.log(tigger, 'arr');
if (tigger) {
this.uploadContent()
}
//
// if()
},
// 删除图片
deletePic(event, o, index, index1) {
this.listData[index].children[index1][event.name].splice(event.index, 1)
},
// 新增图片
async afterRead(event, o, index, index1) {
console.log(event, index1, this.listData[index]);
// let file
// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
let lists = [].concat(event.file)
let fileListLen = this.listData[index].children[index1][event.name]?.length
lists.map((item) => {
this.listData[index].children[index1][event.name].push({
...item,
status: 'uploading',
message: '上传中'
})
})
for (let i = 0; i < lists.length; i++) {
const result = await this.uploadFilePromise(lists[i].url, event.name, index, index1)
console.log(result);
let item = this.listData[index].children[index1][event.name][fileListLen]
this.listData[index].children[index1][event.name].splice(fileListLen, 1, Object.assign(item, {
status: 'success',
message: '',
...result
}))
fileListLen++
}
},
uploadFilePromise(url, name, index, index1) {
return new Promise((resolve, reject) => {
let a = uni.uploadFile({
url: 'http://local.gunshiiot.com:18083/gunshiApp/xyt/maintain/service/file/upload/singleSimple', // 仅为示例,非真实的接口地址
filePath: url,
name: 'file',
formData: {
user: 'test'
},
success: (res) => {
setTimeout(() => {
// this.listData[index].children[index1][name].push({...res.data.data,url:res.data.data.filePath})
console.log(res.data)
resolve(JSON.parse(res.data).data)
}, 1000)
}
});
// resolve(a)
})
},
change(e, o, index, i, key) {
this.listData[index].children[i][key] = e;
this.$forceUpdate()
},
sexSelect(e) {
// this.model1.userInfo.sex = e.name
// this.$refs.uForm.validateField('userInfo.sex')
},
}
}
</script>
<style lang="scss" scoped>
.contentItem {
height: 260px;
overflow: auto;
.itemC {
display: flex;
justify-content: space-between;
display: flex;
color: #666666;
padding: 10px;
border-bottom: 1px solid #f0f0f0;
}
.itemNo {
color: #666666;
padding: 10px;
}
}
.circle-btn {
width: 120px;
height: 120px;
background-color: #007aff;
border-radius: 50%;
color: #fff;
text-align: center;
line-height: 120px;
}
.yuandian {
display: inline-block;
width: 10px;
height: 10px;
background-color: #409eff;
border-radius: 50%;
margin-right: 10px;
}
.xj-content {
height: 300px;
overflow-y: auto;
}
.xj-text {
margin-left: 10%;
margin-top: 2%;
font-size: 16px;
border-bottom:1px solid #f0f0f0 ;
}
.subsectioin {
display: flex;
column-gap: 10px;
align-items: center;
margin-top: 10px;
}
</style>