first commit

This commit is contained in:
2025-05-22 10:33:32 +08:00
commit f2ef63d910
581 changed files with 53162 additions and 0 deletions
@@ -0,0 +1,392 @@
<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>