Files
sifa-mp/onlineSheetPages/pages/newForensicRequest.vue
T
2025-05-22 10:33:32 +08:00

392 lines
15 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view class="min-height bg-main-light p-30">
<HeaderItem title="司法鉴定预约"/>
<TitleItem title="基础信息"/>
<view class="card mt-25 p-30">
<u-form label-width="160rpx" :label-style="{fontSize: '24rpx'}">
<u-form-item label="司法鉴定机构" border-bottom @click="showOrg = true">
<u-input v-model="orgName" border="none" placeholder="请选择司法鉴定机构" readonly>
<u-icon
slot="right"
name="arrow-right"
></u-icon>
</u-input>
</u-form-item>
<template v-if="formData.orgId">
<u-form-item label="委托人姓名" border-bottom>
<u-input v-model="formData.name" border="none" placeholder="请输入委托人姓名"/>
</u-form-item>
<u-form-item label="性别" border-bottom>
<view class="flex justify-start items-center">
<view class="tag" @click="formData.gender = 0" :class="[formData.gender === 0 ? 'tag-active' : '']">男
</view>
<view class="tag ml-20" @click="formData.gender = 1" :class="[formData.gender === 1 ? 'tag-active' : '']">
女
</view>
</view>
</u-form-item>
<u-form-item label="联系电话" border-bottom>
<u-input v-model="formData.phone" border="none" placeholder="请输入联系电话"/>
</u-form-item>
<u-form-item label="出生日期" border-bottom @click="showDate = true">
<u-input v-model="formData.birthday" border="none" placeholder="请输入出生日期" readonly>
<u-icon
slot="right"
name="arrow-right"
></u-icon>
</u-input>
</u-form-item>
<u-form-item label="身份证号" border-bottom>
<u-input v-model="formData.idCard" border="none" placeholder="请输入身份证号"/>
</u-form-item>
<u-form-item label="住所地址" border-bottom>
<u-input v-model="formData.liveAddress" border="none" placeholder="请输入住所地址"/>
</u-form-item>
<u-form-item label="户籍地址" border-bottom>
<u-input v-model="formData.householdAddress" border="none" placeholder="请输入户籍地址"/>
</u-form-item>
<u-form-item label="基本案情" border-bottom>
<u-textarea maxlength="-1" v-model="formData.detail" border="none"
placeholder="请输入与鉴定又关的基本案情"/>
</u-form-item>
<template v-if="formData.orgId === 25">
<u-form-item label="委托鉴定事项" border-bottom>
<u-textarea maxlength="-1" v-model="formData.content" border="none" placeholder="请输入委托鉴定事项"/>
</u-form-item>
<u-form-item label="是否重新鉴定" border-bottom>
<view class="flex justify-start items-center">
<view class="tag" style="width: 200rpx" @click="formData.isNew = 0"
:class="[formData.isNew === 0 ? 'tag-active' : '']">不属于重新鉴定
</view>
<view class="tag ml-20" style="width: 200rpx" @click="formData.isNew = 1"
:class="[formData.isNew === 1 ? 'tag-active' : '']">
属于重新鉴定
</view>
</view>
</u-form-item>
</template>
<template v-else-if="formData.orgId === 26">
<u-form-item label="委托鉴定事项" border-bottom>
<view class="flex flex-col justify-start items-start">
<view v-for="(item, index) in contentConfigList" :key="index" class="mb-15">
<u-icon @click="changeContent(item)"
:label="item" label-pos="right"
:name="contentList.includes(item) ? '/onlineSheetPages/static/checkbox-selected.png' : '/onlineSheetPages/static/checkbox.png'"/>
</view>
</view>
</u-form-item>
<u-form-item label="鉴定用途" border-bottom>
<view class="flex flex-col justify-start items-start">
<view class="mb-15">
<u-icon label="诉讼" label-pos="right" @click="changeApplication('诉讼')"
:name="applicationList.includes('诉讼') ? '/onlineSheetPages/static/checkbox-selected.png' : '/onlineSheetPages/static/checkbox.png'"/>
</view>
<view class="mb-15">
<u-icon label="仲裁" label-pos="right" @click="changeApplication('仲裁')"
:name="applicationList.includes('仲裁') ? '/onlineSheetPages/static/checkbox-selected.png' : '/onlineSheetPages/static/checkbox.png'"/>
</view>
<view class="mb-15">
<u-icon label="调解" label-pos="right" @click="changeApplication('调解')"
:name="applicationList.includes('调解') ? '/onlineSheetPages/static/checkbox-selected.png' : '/onlineSheetPages/static/checkbox.png'"/>
</view>
<u-icon label="行政执法" label-pos="right" @click="changeApplication('行政执法')"
:name="applicationList.includes('行政执法') ? '/onlineSheetPages/static/checkbox-selected.png' : '/onlineSheetPages/static/checkbox.png'"/>
</view>
</u-form-item>
</template>
</template>
</u-form>
</view>
<template v-if="formData.orgId">
<TitleItem title="鉴定要求/标准"/>
<view class="card mt-25 p-30">
<view class="flex justify-start items-center py-20 border-bottom"
@click="changeStandard(item.title)"
v-for="(item, index) in standardList" :key="index">
<u-icon
:name="standardSelectedList.includes(item.title) ? '/onlineSheetPages/static/checkbox-selected.png' : '/onlineSheetPages/static/checkbox.png'"/>
<text class="text-25 mb-15">{{ item.title }}</text>
</view>
</view>
<TitleItem title="鉴定材料"/>
<view class="card mt-25 p-30">
<view class="flex flex-col justify-start items-start py-20 border-bottom"
v-for="(item, index) in fileList" :key="index">
<text class="text-25 mb-15">{{ item.title }}</text>
<view class="flex flex-col justify-start items-start">
<view class="flex justify-start items-start flex-wrap">
<view class="album-item pos-r" v-for="(file, fileIndex) in item.fileList" :key="fileIndex">
<u-image :src="file" width="190rpx" height="190rpx"/>
<view class="del-wrap" @click="removeFile(index, fileIndex)">
<u-icon name="trash" color="white" size="30rpx"/>
</view>
</view>
</view>
<view>
<u-button size="mini" @click="uploadFile(index)" type="primary" icon="arrow-upward">上传材料</u-button>
</view>
</view>
</view>
</view>
</template>
<view class="mt-30">
<u-button type="primary" shape="circle" @click="save"
:hairline="false"
:custom-style="{border: 0, background: 'linear-gradient(91.28deg, rgba(14,146,252,1) 27.63%,rgba(29,188,188,1) 80.08%);'}">
提交
</u-button>
</view>
<u-datetime-picker
:show="showDate"
v-model="checkDate"
mode="date"
:min-date="minDate"
@confirm="selectDate"
@cancel="showDate = false"
/>
<u-picker :show="showOrg" :columns="[orgList]" @cancel="showOrg = false"
@confirm="selectOrg" key-name="title"
/>
</view>
</template>
<script>
import HeaderItem from "@/components/HeaderItem.vue";
import TitleItem from "@/components/TitleItem.vue";
import dayjs from "dayjs";
import {
lawLegalAidReq,
lawLegalAppraisalReq,
lawLegalArbitrateReq,
lawOrgCheckActionReq,
listLawOrgReq
} from "@/api/lawOrg";
import {chooseImg} from "@/util";
export default {
name: "newRequest",
components: {TitleItem, HeaderItem},
data() {
return {
formData: {
name: '',
gender: 0,
isNew: 0,
phone: '',
birthday: '',
idCard: '',
liveAddress: '',
householdAddress: '',
content: '',
orgId: '',
detail: '',
fileList: '',
standard: '',
},
showDate: false,
showOrg: false,
orgName: '',
checkDate: Number(new Date()),
minDate: dayjs().subtract(100, 'year').valueOf(),
orgList: [],
fileList: [],
standardList: [],
standardSelectedList: [],
contentList: [],
contentConfigList: ['损伤程度鉴定', '致残程度鉴定', '劳动能力鉴定', '护理依赖评定', '听觉功能评定视觉功能评定', '误工、护理、营养时限评定',
'伤病关系鉴定', '后续治疗项目和时限评定', '医疗过错评定医疗损害后果评定', '治疗时限评定医疗费合理性评定', '致伤物和致伤方式推',],
applicationList: [],
}
},
methods: {
setFileData() {
switch (this.formData.orgId) {
case 25 : {
this.fileList = [
{
title: '道路交通事故现场图',
fileList: []
},
{
title: '现场勘查笔录',
fileList: []
},
{
title: '现场照片',
fileList: []
},
{
title: '现场复核照片',
fileList: []
},
{
title: '询问笔录',
fileList: []
},
{
title: '相关视频监控资料',
fileList: []
},
{
title: '行驶证复印件',
fileList: []
},
{
title: '行驶证复印件、机动车信息查询结果单',
fileList: []
},
{
title: '其他材料',
fileList: []
},
]
}
break;
case 26 : {
this.fileList = [
{
title: '交通事故责任认定书复印件',
fileList: []
},
{
title: '身份复印件',
fileList: []
},
{
title: '病历复印件',
fileList: []
},
{
title: '放射片',
fileList: []
},
{
title: '其他材料',
fileList: []
},
]
}
break;
}
},
setStandardList() {
switch (this.formData.orgId) {
case 25 : {
this.standardList = [
{title: '《道路交通事故现场痕迹物证勘验》(GA/T41-2019)'},
{title: '《道路交通事故痕迹鉴定》(GA/T1087-2021)'},
{title: '《道路交通事故车辆安全技术检验鉴定》(GA/T642-2020)'},
{title: '《机动车运行安全技术条件》(GB7258-2017)'},
{title: '《道路交通事故车辆速度鉴定》(GB/T33195-2016)'},
{title: '《基于视频图像的车辆行驶速度技术鉴定》(GA/T1133-2014)'},
{title: '《手印鉴定程序》(GA/T724-2007)'},
]
}
break;
case 26: {
this.standardList = [
{title: '《法医临床检验规范》(SF/T 0111-2021)'},
{title: '《人身损害护理依赖程度评定》GB/T31147-2014'},
{title: '《人身伤害致残程度评定(试行)》'},
{title: '《人体损伤程度鉴定标准》'},
{title: '《道路交通事故受伤人员治疗终结时间》GA/T 1088-2013'},
{title: '《人身损害后续诊疗项目评定指南》(试用)/《法庭科学 人身损害后续诊疗项目评定技术规程》'},
{title: '《人身损害误工期、护理期、营养期评定规范》GA/T1193-2014'},
{title: '《人身保险伤残评定标准及代码》GB/T 44893-2024'},
{title: '《劳动能力鉴定 职工工伤与职业病致残等级》GB/T16180-2014'},
{title: '《人体损伤致残程度分级》'},
{title: '《人身损害与疾病因果关系判定指南》(SF/T0095 2021)'},
]
}
}
},
changeApplication(content) {
const index = this.applicationList.findIndex(i => i === content)
if (index === -1) this.applicationList.push(content)
else this.applicationList.splice(index, 1)
},
changeContent(content) {
const index = this.contentList.findIndex(i => i === content)
if (index === -1) this.contentList.push(content)
else this.contentList.splice(index, 1)
},
changeStandard(content) {
const index = this.standardSelectedList.findIndex(i => i === content)
if (index === -1) this.standardSelectedList.push(content)
else this.standardSelectedList.splice(index, 1)
},
selectDate({value}) {
this.showDate = false
this.formData.birthday = dayjs(value).format("YYYY-MM-DD")
},
selectOrg({value}) {
this.formData.orgId = value[0].id
this.orgName = value[0].title
this.showOrg = false
this.setFileData()
this.setStandardList()
},
async save() {
if (!this.formData.name) return this.$toast('请输入姓名')
if (!this.formData.phone) return this.$toast('请输入联系方式')
if (!this.formData.idCard) return this.$toast('请输入身份证号')
if (!this.formData.orgId) return this.$toast('请选择鉴定机构')
if (this.formData.orgId === 25 && !this.formData.content) return this.$toast('请输入委托鉴定事项')
if (!this.formData.detail) return this.$toast('请输入基本案情')
if (this.standardSelectedList.length) {
this.formData.standard = this.standardSelectedList.join(',')
}
if (this.applicationList.length) {
this.formData.application = this.applicationList.join(',')
}
if (this.formData.orgId === 26){
if (!this.contentList.length) return this.$toast('请选择鉴定事项')
else this.formData.content = this.contentList.join(',')
}
this.formData.fileList = JSON.stringify(this.fileList)
const res = await lawLegalAppraisalReq(this.formData)
if (res) {
this.$toast('提交成功')
setTimeout(() => {
uni.navigateBack()
}, 500)
}
},
async uploadFile(index) {
const res = await chooseImg(9)
this.fileList[index].fileList = [...this.fileList[index].fileList, ...res.map(item => item.path)]
},
removeFile(index, fileIndex) {
this.fileList[index].fileList.splice(fileIndex, 1)
},
async getOrgList() {
const {data} = await listLawOrgReq({
type: '司法鉴定机构'
})
this.orgList = data
}
},
onLoad() {
this.getOrgList()
}
}
</script>
<style lang="scss" scoped>
.tag {
border: 1px dashed #999;
padding: 10rpx;
border-radius: 15rpx;
color: #999;
font-size: 25rpx;
width: 60rpx;
display: flex;
align-items: center;
justify-content: center;
}
.tag-active {
color: #3c9cff !important;
border-color: #3c9cff !important;
}
</style>