20260325稳定版

This commit is contained in:
2026-03-25 15:54:56 +08:00
parent f2ef63d910
commit 7b30030d9b
22 changed files with 1391 additions and 58 deletions
+1 -1
View File
@@ -53,7 +53,7 @@
<view class="pos-a w-100p" style="left: 0; top: 10rpx">
<view class="text-center text-main">{{ title }}</view>
</view>
<view style="height: 50vh" class="overflow-y mt-25">
<view style="height: 80vh" class="overflow-y mt-25">
<u-parse :content="content"/>
</view>
</view>
@@ -0,0 +1,435 @@
<template>
<view class="min-height bg-main-light p-30">
<HeaderItem title="经济困难状况说明表"/>
<u-steps current="1">
<u-steps-item title="法律援助申请"/>
<u-steps-item title="经济困难状况说明"/>
</u-steps>
<!-- 家庭成员月收入状况 -->
<TitleItem title="申请人及共同生活的家庭成员月收入状况"/>
<view class="card mt-25 p-30">
<view v-for="(member, index) in peopleList" :key="index" class="member-item">
<view class="member-header">
<text class="member-title">成员 {{ index + 1 }}</text>
<u-icon v-if="peopleList.length > 1" name="close-circle" color="#f56c6c" size="20"
@click="removeMember(index)"></u-icon>
</view>
<u-form label-width="200rpx">
<u-form-item label="姓名" border-bottom>
<u-input v-model="member.name" border="none" placeholder="请输入姓名"/>
</u-form-item>
<u-form-item label="与申请人关系" border-bottom>
<u-input v-model="member.relation" border="none" placeholder="请输入关系"/>
</u-form-item>
<u-form-item label="职业及所在单位" border-bottom>
<u-input v-model="member.occupation" border="none" placeholder="请输入职业及所在单位"/>
</u-form-item>
<u-form-item label="工资性收入(元)" border-bottom>
<u-input v-model="member.salaryIncome" type="number" border="none" placeholder="请输入工资性收入"
@input="calculateMemberTotal(index)"/>
</u-form-item>
<u-form-item label="生产经营性收入(元)" border-bottom>
<u-input v-model="member.businessIncome" type="number" border="none" placeholder="请输入生产经营性收入"
@input="calculateMemberTotal(index)"/>
</u-form-item>
<u-form-item label="其他收入(元)" border-bottom>
<u-input v-model="member.otherIncome" type="number" border="none" placeholder="请输入其他收入"
@input="calculateMemberTotal(index)"/>
</u-form-item>
<u-form-item label="合计(元)" border-bottom>
<u-input :value="getMemberTotal(index)" border="none" readonly disabled/>
</u-form-item>
</u-form>
</view>
<view class="add-btn" @click="addMember">
<u-icon name="plus-circle" color="#3c9cff" size="20"></u-icon>
<text class="add-text">添加家庭成员</text>
</view>
</view>
<!-- 收入汇总 -->
<TitleItem title="收入汇总"/>
<view class="card mt-25 p-30">
<u-form label-width="200rpx">
<u-form-item label="总计(元)" border-bottom>
<u-input :value="totalIncome" border="none" readonly disabled/>
</u-form-item>
<u-form-item label="家庭人均月收入(元)" border-bottom>
<u-input :value="averageIncome" border="none" readonly disabled/>
</u-form-item>
</u-form>
</view>
<!-- 房产情况 -->
<TitleItem title="房产情况"/>
<view class="card mt-25 p-30">
<u-form label-width="200rpx">
<u-form-item label="是否有房产" border-bottom>
<view class="flex justify-start items-center">
<view class="tag" @click="formData.hasHouse = true"
:class="[formData.hasHouse === true ? 'tag-active' : '']">有
</view>
<view class="tag ml-20" @click="formData.hasHouse = false"
:class="[formData.hasHouse === false ? 'tag-active' : '']">无
</view>
</view>
</u-form-item>
<template v-if="formData.hasHouse">
<u-form-item label="房产套数" border-bottom>
<u-input v-model="formData.houseNum" type="number" border="none" placeholder="请输入房产套数"/>
</u-form-item>
<u-form-item label="总面积(㎡)" border-bottom>
<u-input v-model="formData.houseArea" type="number" border="none" placeholder="请输入总面积"/>
</u-form-item>
<u-form-item label="位置" border-bottom>
<u-textarea v-model="formData.houseAddress" border="none" placeholder="请输入房产位置"/>
</u-form-item>
</template>
</u-form>
</view>
<!-- 汽车情况 -->
<TitleItem title="汽车情况"/>
<view class="card mt-25 p-30">
<u-form label-width="200rpx">
<u-form-item label="是否有汽车" border-bottom>
<view class="flex justify-start items-center">
<view class="tag" @click="formData.hasCar = true" :class="[formData.hasCar === true ? 'tag-active' : '']">
有
</view>
<view class="tag ml-20" @click="formData.hasCar = false"
:class="[formData.hasCar === false ? 'tag-active' : '']">无
</view>
</view>
</u-form-item>
<template v-if="formData.hasCar">
<u-form-item label="品牌型号" border-bottom>
<u-textarea v-model="formData.car" border="none" placeholder="请输入汽车品牌型号"/>
</u-form-item>
</template>
</u-form>
</view>
<!-- 资产情况 -->
<TitleItem title="资产情况"/>
<view class="card mt-25 p-30">
<u-form label-width="200rpx">
<u-form-item label="现金、存款、有价证券等资产(元)" border-bottom>
<u-input v-model="formData.cash" type="number" border="none" placeholder="请输入资产金额"/>
</u-form-item>
<u-form-item label="其他需要说明的资产" border-bottom>
<u-textarea v-model="formData.otherProperty" border="none" placeholder="请输入其他资产说明"/>
</u-form-item>
</u-form>
</view>
<!-- 重大支出 -->
<TitleItem title="重大支出"/>
<view class="card mt-25 p-30">
<u-form label-width="200rpx">
<u-form-item label="重大支出说明" border-bottom>
<u-textarea v-model="formData.outcome" border="none" placeholder="请输入重大支出说明"/>
</u-form-item>
</u-form>
</view>
<!-- 申请人信息 -->
<TitleItem title="申请人信息"/>
<view class="card mt-25 p-30">
<u-form label-width="200rpx">
<u-form-item label="姓名" border-bottom>
<u-input v-model="formData.name" border="none" placeholder="请输入姓名"/>
</u-form-item>
<u-form-item label="手机号" border-bottom>
<u-input v-model="formData.phone" type="number" border="none" placeholder="请输入手机号"/>
</u-form-item>
</u-form>
</view>
<!-- 提交按钮 -->
<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>
</view>
</template>
<script>
import HeaderItem from "@/components/HeaderItem.vue";
import TitleItem from "@/components/TitleItem.vue";
import {submitEconomicDifficulty} from "@/api/economicDifficulty";
export default {
name: "economicDifficulty",
components: {TitleItem, HeaderItem},
data() {
return {
formData: {
aidId: 0,
// 家庭成员月收入状况
peopleList: '',
// 房产情况
hasHouse: false,
houseNum: '',
houseArea: '',
houseAddress: '',
// 汽车情况
hasCar: false,
car: '',
// 资产情况
cash: '',
otherProperty: '',
// 重大支出
outcome: '',
// 申请人信息
name: '',
phone: ''
},
peopleList: [
{
name: '',
relation: '',
occupation: '',
salaryIncome: '',
businessIncome: '',
otherIncome: '',
totalIncome: ''
}
],
}
},
computed: {
// 计算总收入
totalIncome() {
const total = this.peopleList.reduce((sum, member) => {
const salary = parseFloat(member.salaryIncome) || 0;
const business = parseFloat(member.businessIncome) || 0;
const other = parseFloat(member.otherIncome) || 0;
return sum + salary + business + other;
}, 0);
return total.toFixed(2);
},
// 计算人均月收入
averageIncome() {
const memberCount = this.peopleList.length;
if (memberCount === 0) return '0.00';
const avg = parseFloat(this.totalIncome) / memberCount;
return avg.toFixed(2);
}
},
methods: {
// 计算单个成员的收入合计
getMemberTotal(index) {
const member = this.peopleList[index];
if (!member) return '0.00';
const salary = parseFloat(member.salaryIncome) || 0;
const business = parseFloat(member.businessIncome) || 0;
const other = parseFloat(member.otherIncome) || 0;
const total = salary + business + other;
return total.toFixed(2);
},
// 计算成员收入合计(用于输入时触发)
calculateMemberTotal(index) {
const member = this.peopleList[index];
if (!member) return;
const salary = parseFloat(member.salaryIncome) || 0;
const business = parseFloat(member.businessIncome) || 0;
const other = parseFloat(member.otherIncome) || 0;
member.totalIncome = (salary + business + other).toFixed(2);
},
// 添加家庭成员
addMember() {
this.peopleList.push({
name: '',
relation: '',
occupation: '',
salaryIncome: '',
businessIncome: '',
otherIncome: '',
totalIncome: ''
});
},
// 删除家庭成员
removeMember(index) {
if (this.peopleList.length > 1) {
this.peopleList.splice(index, 1);
}
},
// 表单验证
validate() {
if (this.peopleList.length === 0) {
this.$toast('请至少添加一个家庭成员');
return false;
}
for (let i = 0; i < this.peopleList.length; i++) {
const member = this.peopleList[i];
if (!member.name) {
this.$toast(`请输入成员${i + 1}的姓名`);
return false;
}
if (!member.relation) {
this.$toast(`请输入成员${i + 1}与申请人的关系`);
return false;
}
if (!member.occupation) {
this.$toast(`请输入成员${i + 1}的职业及所在单位`);
return false;
}
// 至少需要填写一项收入
if (!member.salaryIncome && !member.businessIncome && !member.otherIncome) {
this.$toast(`请至少填写成员${i + 1}的一项收入`);
return false;
}
}
if (this.formData.hasHouse === null) {
this.$toast('请选择是否有房产');
return false;
}
if (this.formData.hasHouse) {
if (!this.formData.houseNum) {
this.$toast('请输入房产套数');
return false;
}
if (!this.formData.houseArea) {
this.$toast('请输入房产总面积');
return false;
}
if (!this.formData.houseAddress) {
this.$toast('请输入房产位置');
return false;
}
}
if (this.formData.hasCar === null) {
this.$toast('请选择是否有汽车');
return false;
}
if (this.formData.hasCar && !this.formData.car) {
this.$toast('请输入汽车品牌型号');
return false;
}
if (!this.formData.name) {
this.$toast('请输入申请人姓名');
return false;
}
if (!this.formData.phone) {
this.$toast('请输入申请人手机号');
return false;
}
// 验证手机号格式
const phoneReg = /^1[3-9]\d{9}$/;
if (!phoneReg.test(this.formData.phone)) {
this.$toast('请输入正确的手机号');
return false;
}
return true;
},
// 提交表单
async save() {
if (!this.validate()) {
return;
}
// 准备提交的数据
const submitData = {
...this.formData,
peopleList: JSON.stringify(this.peopleList),
totalIncome: this.totalIncome,
avgIncome: this.averageIncome
};
try {
const res = await submitEconomicDifficulty(submitData);
if (res) {
this.$toast('提交成功');
setTimeout(() => {
uni.switchTab({url: '/pages/index/index'})
}, 500);
}
} catch (error) {
console.error('提交失败:', error);
this.$toast('提交失败,请重试');
}
}
},
onLoad({aidId}) {
this.formData.aidId = aidId
},
}
</script>
<style lang="scss" scoped>
.member-item {
margin-bottom: 30rpx;
padding-bottom: 30rpx;
border-bottom: 1px solid #f0f0f0;
&:last-child {
border-bottom: none;
}
}
.member-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20rpx;
}
.member-title {
font-size: 28rpx;
font-weight: bold;
color: #333;
}
.add-btn {
display: flex;
align-items: center;
justify-content: center;
padding: 20rpx;
border: 1px dashed #3c9cff;
border-radius: 10rpx;
margin-top: 20rpx;
cursor: pointer;
}
.add-text {
margin-left: 10rpx;
color: #3c9cff;
font-size: 28rpx;
}
.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>
<style>
.u-steps-item__wrapper {
background-color: #E0F2FE !important;
}
</style>
+1 -1
View File
@@ -53,7 +53,7 @@
<view class="pos-a w-100p" style="left: 0; top: 10rpx">
<view class="text-center text-main">{{ title }}</view>
</view>
<view style="height: 50vh" class="overflow-y mt-25">
<view style="height: 80vh" class="overflow-y mt-25">
<u-parse :content="content"/>
</view>
</view>
+1 -1
View File
@@ -54,7 +54,7 @@
<view class="pos-a w-100p" style="left: 0; top: 10rpx">
<view class="text-center text-main">{{ title }}</view>
</view>
<view style="height: 50vh" class="overflow-y mt-25">
<view style="height: 80vh" class="overflow-y mt-25">
<u-parse :content="content"/>
</view>
</view>
+133
View File
@@ -0,0 +1,133 @@
<template>
<view class="min-height bg p-30">
<HeaderItem title="人民调解"/>
<view class="rounded text-white flex justify-center items-center mr-10"
@click="$jump('/onlineSheetPages/pages/newRequestMediate')"
style="background: linear-gradient(91.28deg, rgba(14,146,252,1) 27.63%,rgba(29,188,188,1) 80.08%); height: 160rpx">
人民调解线上申请入口
</view>
<view class="flex justify-around items-center flex-wrap my-25">
<view class="card flex flex-col justify-center items-center" @click="openPopup('condition')"
style="flex: 0 0 40%; border-radius: 20rpx">
<u-icon name="/onlineSheetPages/static/v2_sua83h.png" size="120rpx"/>
<text class="text-25 mt-10">申请条件</text>
</view>
<view class="card flex flex-col justify-center items-center" @click="openPopup('stuff')"
style="flex: 0 0 40%; border-radius: 20rpx">
<u-icon name="/onlineSheetPages/static/v2_sua840.png" size="120rpx"/>
<text class="text-25 mt-10">申请材料</text>
</view>
</view>
<view class="flex justify-around items-center flex-wrap my-25">
<view class="card flex flex-col justify-center items-center" @click="openPopup('flow')"
style="flex: 0 0 40%; border-radius: 20rpx">
<u-icon name="/onlineSheetPages/static/v2_sua84m.png" size="120rpx"/>
<text class="text-25 mt-10">办理流程</text>
</view>
<view class="card flex flex-col justify-center items-center"
@click="$jump(`/articlePages/pages/list?title=政策法规&cateId=83`)"
style="flex: 0 0 40%; border-radius: 20rpx">
<u-icon name="/onlineSheetPages/static/v2_sua84z.png" size="120rpx"/>
<text class="text-25 mt-10">政策法规</text>
</view>
</view>
<view class="flex justify-around items-center flex-wrap my-25">
<view class="card flex flex-col justify-center items-center"
@click="$jump(`/articlePages/pages/list?title=典型案例&cateId=84`)"
style="flex: 0 0 40%; border-radius: 20rpx">
<u-icon name="/onlineSheetPages/static/v2_sue29e.png" size="120rpx"/>
<text class="text-25 mt-10">典型案例</text>
</view>
<!-- <view class="card flex flex-col justify-center items-center" @click="openPopup('fee')"-->
<!-- style="flex: 0 0 40%; border-radius: 20rpx">-->
<!-- <u-icon name="/onlineSheetPages/static/v2_suhlrq.png" size="120rpx"/>-->
<!-- <text class="text-25 mt-10">收费标准</text>-->
<!-- </view>-->
</view>
<u-popup :show="showContent" close-on-click-overlay @close="showContent = false" round="10"
:closeable="false"
:safe-area-inset-bottom="false">
<view class="p-50 pos-r" v-if="showContent">
<view class="pos-a" style="right: 10rpx; top: 10rpx;z-index: 999" @click="showContent = false">
<u-icon name="close-circle" :color="MAIN()" size="40rpx"/>
</view>
<view class="pos-a w-100p" style="left: 0; top: 10rpx">
<view class="text-center text-main">{{ title }}</view>
</view>
<view style="height: 80vh" class="overflow-y mt-25">
<u-parse :content="content"/>
</view>
</view>
</u-popup>
</view>
</template>
<script>
import HeaderItem from "@/components/HeaderItem.vue";
import {listArticleReq} from "@/api/common";
import {MAIN} from "@/config/color";
export default {
name: "legalAid",
components: {HeaderItem},
data() {
return {
articleList: [],
showContent: false,
title: '',
content: '',
}
},
methods: {
MAIN() {
return MAIN
},
async getArticleList() {
const {data} = await listArticleReq({
categoryId: 85
})
console.log(data)
this.articleList = data
},
openPopup(type) {
switch (type) {
case 'condition' : {
this.title = '申请条件'
const article = this.articleList.find(item => item.articleId === 155)
this.content = article.content
}
break;
case 'stuff' : {
this.title = '申请材料'
const article = this.articleList.find(item => item.articleId === 156)
this.content = article.content
}
break;
case 'flow' : {
this.title = '办理流程'
const article = this.articleList.find(item => item.articleId === 157)
this.content = article.content
}
break;
case 'fee' : {
this.title = '收费标准'
const article = this.articleList.find(item => item.articleId === 158)
this.content = article.content
}
break;
}
this.showContent = true
}
},
onLoad() {
this.getArticleList()
},
}
</script>
<style lang="scss" scoped>
.bg {
background: url("https://sifa-api.wsdns.cn/api/file/20250420/bg1.jpg") no-repeat;
background-size: cover;
}
</style>
+139
View File
@@ -0,0 +1,139 @@
<template>
<view class="min-height bg p-30">
<HeaderItem title="行政复议"/>
<view class="rounded text-white flex justify-center items-center"
@click="$jump('/onlineSheetPages/pages/newReviewRequest')"
style="background: linear-gradient(91.28deg, rgba(14,146,252,1) 27.63%,rgba(29,188,188,1) 80.08%); height: 160rpx">
行政复议线上申请入口
</view>
<view class="flex justify-around items-center flex-wrap my-25">
<view class="card flex flex-col justify-center items-center" @click="openPopup('condition')"
style="flex: 0 0 40%; border-radius: 20rpx">
<u-icon name="/onlineSheetPages/static/v2_sua83h.png" size="120rpx"/>
<text class="text-25 mt-10">申请条件</text>
</view>
<view class="card flex flex-col justify-center items-center" @click="openPopup('stuff')"
style="flex: 0 0 40%; border-radius: 20rpx">
<u-icon name="/onlineSheetPages/static/v2_sua840.png" size="120rpx"/>
<text class="text-25 mt-10">申请材料</text>
</view>
</view>
<view class="flex justify-around items-center flex-wrap my-25">
<view class="card flex flex-col justify-center items-center" @click="openPopup('flow')"
style="flex: 0 0 40%; border-radius: 20rpx">
<u-icon name="/onlineSheetPages/static/v2_sua84m.png" size="120rpx"/>
<text class="text-25 mt-10">办理流程</text>
</view>
<view class="card flex flex-col justify-center items-center"
@click="$jump(`/articlePages/pages/list?title=政策法规&cateId=80`)"
style="flex: 0 0 40%; border-radius: 20rpx">
<u-icon name="/onlineSheetPages/static/v2_sua84z.png" size="120rpx"/>
<text class="text-25 mt-10">政策法规</text>
</view>
</view>
<view class="flex justify-around items-center flex-wrap my-25">
<view class="card flex flex-col justify-center items-center"
@click="$jump(`/articlePages/pages/list?title=典型案例&cateId=82`)"
style="flex: 0 0 40%; border-radius: 20rpx">
<u-icon name="/onlineSheetPages/static/v2_sue29e.png" size="120rpx"/>
<text class="text-25 mt-10">典型案例</text>
</view>
<view class="card flex flex-col justify-center items-center"
@click="$jump(`/articlePages/pages/list?title=行政复议机关文书格式&cateId=86`)"
style="flex: 0 0 40%; border-radius: 20rpx">
<u-icon name="https://sifa-api.wsdns.cn/api/file/20260210/38d6b33e49a2477fb0b8dd68fcb72c30.png" size="120rpx"/>
<text class="text-25 mt-10">机关文书</text>
</view>
<!-- <view class="card flex flex-col justify-center items-center" @click="openPopup('fee')"-->
<!-- style="flex: 0 0 40%; border-radius: 20rpx">-->
<!-- <u-icon name="/onlineSheetPages/static/v2_suhlrq.png" size="120rpx"/>-->
<!-- <text class="text-25 mt-10">收费标准</text>-->
<!-- </view>-->
</view>
<u-popup :show="showContent" close-on-click-overlay @close="showContent = false" round="10"
:closeable="false"
:safe-area-inset-bottom="false">
<view class="p-50 pos-r" v-if="showContent">
<view class="pos-a" style="right: 10rpx; top: 10rpx;z-index: 999" @click="showContent = false">
<u-icon name="close-circle" :color="MAIN()" size="40rpx"/>
</view>
<view class="pos-a w-100p" style="left: 0; top: 10rpx">
<view class="text-center text-main">{{ title }}</view>
</view>
<view style="height: 80vh" class="overflow-y mt-25">
<u-parse :content="content"/>
</view>
</view>
</u-popup>
</view>
</template>
<script>
import HeaderItem from "@/components/HeaderItem.vue";
import {listArticleReq} from "@/api/common";
import {MAIN} from "@/config/color";
export default {
name: "legalAid",
components: {HeaderItem},
data() {
return {
articleList: [],
showContent: false,
title: '',
content: '',
}
},
methods: {
MAIN() {
return MAIN
},
async getArticleList() {
const {data} = await listArticleReq({
categoryId: 81
})
console.log(data)
this.articleList = data
},
openPopup(type) {
switch (type) {
case 'condition' : {
this.title = '申请条件'
const article = this.articleList.find(item => item.articleId === 151)
this.content = article.content
}
break;
case 'stuff' : {
this.title = '申请材料'
const article = this.articleList.find(item => item.articleId === 152)
this.content = article.content
}
break;
case 'flow' : {
this.title = '办理流程'
const article = this.articleList.find(item => item.articleId === 153)
this.content = article.content
}
break;
case 'fee' : {
this.title = '收费标准'
const article = this.articleList.find(item => item.articleId === 154)
this.content = article.content
}
break;
}
this.showContent = true
}
},
onLoad() {
this.getArticleList()
},
}
</script>
<style lang="scss" scoped>
.bg {
background: url("https://sifa-api.wsdns.cn/api/file/20250420/bg1.jpg") no-repeat;
background-size: cover;
}
</style>
+6 -1
View File
@@ -145,6 +145,7 @@ export default {
minDate: dayjs().subtract(100, 'year').valueOf(),
peopleList: [],
typeList: [],
originTypeList: [],
clickedIndex: 0,
selectedConfig: null,
fileList: [],
@@ -154,7 +155,11 @@ export default {
methods: {
async getConfigList() {
const {data} = await listNotaryConfigReq()
this.typeList = data
this.typeList = data.map(item => {
item.title = `${item.type}·${item.title}`
return item
})
this.originTypeList = JSON.parse(JSON.stringify(this.typeList))
this.selectedConfig = this.typeList[0]
this.formData.type = this.selectedConfig.title
this.fileList = []
+13 -3
View File
@@ -1,6 +1,10 @@
<template>
<view class="min-height bg-main-light p-30">
<HeaderItem title="法律援助预约"/>
<u-steps current="0">
<u-steps-item title="法律援助申请" />
<u-steps-item title="经济困难状况说明"/>
</u-steps>
<TitleItem title="基础信息"/>
<view class="card mt-25 p-30">
<u-form label-width="180rpx">
@@ -71,7 +75,7 @@
<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
@@ -114,7 +118,7 @@ export default {
proxyIdCard: '',
},
showDate: false,
checkDate: Number(new Date()),
checkDate: dayjs().subtract(18, 'years').valueOf(),
minDate: dayjs().subtract(100, 'year').valueOf()
}
},
@@ -133,7 +137,7 @@ export default {
if (res) {
this.$toast('提交成功')
setTimeout(() => {
uni.navigateBack()
this.$jump(`/onlineSheetPages/pages/economicDifficulty?aidId=${res.data.id}`)
}, 500)
}
}
@@ -159,4 +163,10 @@ export default {
color: #3c9cff !important;
border-color: #3c9cff !important;
}
</style>
<style>
.u-steps-item__wrapper{
background-color: #E0F2FE !important;
}
</style>
@@ -0,0 +1,200 @@
<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="180rpx">
<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.nation" border="none" placeholder="请输入民族"/>
</u-form-item>
<u-form-item label="年龄" border-bottom>
<u-input v-model="formData.age" border="none" placeholder="请输入年龄"/>
</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>
<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-input v-model="formData.companyName" border="none" placeholder="请输入工作单位"/>
</u-form-item>
<!-- <u-form-item label="电子邮箱" border-bottom>-->
<!-- <u-input v-model="formData.email" border="none" placeholder="请输入电子邮箱"/>-->
<!-- </u-form-item>-->
</u-form>
</view>
<TitleItem title="被申请人信息"/>
<view class="card mt-25 p-30">
<u-form label-width="180rpx">
<u-form-item label="姓名" border-bottom>
<u-input v-model="formData.respondent" border="none" placeholder="请输入申请人姓名"/>
</u-form-item>
<u-form-item label="性别" border-bottom>
<view class="flex justify-start items-center">
<view class="tag" @click="formData.respondentGender = 0" :class="[formData.respondentGender === 0 ? 'tag-active' : '']">男
</view>
<view class="tag ml-20" @click="formData.respondentGender = 1" :class="[formData.respondentGender === 1 ? 'tag-active' : '']">
女
</view>
</view>
</u-form-item>
<u-form-item label="民族" border-bottom>
<u-input v-model="formData.respondentNation" border="none" placeholder="请输入民族"/>
</u-form-item>
<u-form-item label="年龄" border-bottom>
<u-input v-model="formData.respondentAge" border="none" placeholder="请输入年龄"/>
</u-form-item>
<u-form-item label="身份证号" border-bottom>
<u-input v-model="formData.respondentIdCard" border="none" placeholder="请输入身份证号"/>
</u-form-item>
<u-form-item label="联系电话" border-bottom>
<u-input v-model="formData.respondentPhone" border="none" placeholder="请输入联系电话"/>
</u-form-item>
<u-form-item label="单位/住址" border-bottom>
<u-input v-model="formData.respondentAddress" border="none" placeholder="请输入单位/住址"/>
</u-form-item>
<u-form-item label="职务" border-bottom>
<u-input v-model="formData.respondentPosition" border="none" placeholder="请输入职务"/>
</u-form-item>
</u-form>
</view>
<TitleItem title="调解信息"/>
<view class="card mt-25 p-30">
<u-form label-width="180rpx">
<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>
<u-textarea maxlength="-1" v-model="formData.requestContent" border="none" placeholder="请输入当事人申请事项"/>
</u-form-item>
</u-form>
</view>
<view class="mt-30">
<u-button type="primary" shape="circle" @click="save"
:hairline="false" :disabled="disable"
: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"
/>
</view>
</template>
<script>
import HeaderItem from "@/components/HeaderItem.vue";
import TitleItem from "@/components/TitleItem.vue";
import dayjs from "dayjs";
import {lawLegalAidReq, lawLegalMediateReq, lawOrgCheckActionReq} from "@/api/lawOrg";
export default {
name: "newRequest",
components: {TitleItem, HeaderItem},
data() {
return {
formData: {
name: '',
gender: 0,
phone: '',
birthday: '',
idCard: '',
liveAddress: '',
householdAddress: '',
content: '',
nation: '',
companyName: '',
email: '',
age: '',
respondent: '',
respondentGender: 0,
respondentNation: '',
respondentAge: '',
respondentIdCard: '',
respondentPhone: '',
respondentAddress: '',
respondentPosition: '',
requestContent: '',
},
showDate: false,
disable: false,
checkDate: Number(new Date()),
minDate: dayjs().subtract(100, 'year').valueOf()
}
},
methods: {
selectDate({value}) {
this.showDate = false
this.formData.birthday = dayjs(value).format("YYYY-MM-DD")
},
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.content) return this.$toast('请输入纠纷简要情况')
if (!this.formData.requestContent) return this.$toast('请输入当事人申请事项')
if (!this.formData.nation) return this.$toast('请输入民族')
if (!this.formData.respondent) return this.$toast('请输入被申请人信息姓名')
if (!this.formData.respondentNation) return this.$toast('请输入被申请人信息民族')
if (!this.formData.respondentAge) return this.$toast('请输入被申请人信息年龄')
if (!this.formData.respondentIdCard) return this.$toast('请输入被申请人信息身份证号')
if (!this.formData.respondentPhone) return this.$toast('请输入被申请人信息联系电话')
if (!this.formData.respondentAddress) return this.$toast('请输入被申请人信息单位/住址')
if (!this.formData.respondentPosition) return this.$toast('请输入被申请人信息职务')
this.disable = true
const res = await lawLegalMediateReq(this.formData)
this.disable = false
if (res) {
this.$toast('提交成功')
setTimeout(() => {
uni.navigateBack()
}, 500)
}
}
}
}
</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>
+248
View File
@@ -0,0 +1,248 @@
<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="180rpx">
<u-form-item label="申请人姓名" border-bottom>
<u-input v-model="formData.name" border="none" placeholder="请输入申请人姓名"/>
</u-form-item>
<u-form-item label="法定代表人或者主要负责人" border-bottom>
<u-input v-model="formData.legalPerson" border="none" placeholder="请输入法定代表人或者主要负责人"/>
</u-form-item>
<u-form-item label="职务" border-bottom>
<u-input v-model="formData.position" 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.nation" border="none" placeholder="请输入民族"/>
</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-input v-model="formData.companyName" border="none" placeholder="请输入工作单位"/>-->
<!-- </u-form-item>-->
<!-- <u-form-item label="电子邮箱" border-bottom>-->
<!-- <u-input v-model="formData.email" border="none" placeholder="请输入电子邮箱"/>-->
<!-- </u-form-item>-->
</u-form>
</view>
<TitleItem title="请求信息"/>
<view class="card mt-25 p-30">
<u-form label-width="180rpx">
<u-form-item label="行政复议请求" border-bottom>
<u-textarea maxlength="-1" v-model="formData.requestContent" border="none" placeholder="请输入行政复议请求"/>
</u-form-item>
<u-form-item label="行政复议理由" border-bottom>
<u-textarea maxlength="-1" v-model="formData.requestReason" border="none" placeholder="请输入行政复议理由"/>
</u-form-item>
</u-form>
</view>
<TitleItem title="被申请人信息"/>
<view class="card mt-25 p-30">
<u-form label-width="180rpx">
<u-form-item label="被申请人" border-bottom>
<u-input v-model="formData.respondent" border="none" placeholder="请输入被申请人"/>
</u-form-item>
<u-form-item label="法定代表人或者主要负责人" border-bottom>
<u-input v-model="formData.respondentLegalPerson" border="none" placeholder="请输入法定代表人或者主要负责人"/>
</u-form-item>
<u-form-item label="职务" border-bottom>
<u-input v-model="formData.respondentPosition" border="none" placeholder="请输入职务"/>
</u-form-item>
<u-form-item label="所在地" border-bottom>
<u-input v-model="formData.respondentAddress" border="none" placeholder="请输入所在地"/>
</u-form-item>
</u-form>
</view>
<TitleItem title="代理人信息"/>
<view class="card mt-25 p-30">
<u-form label-width="180rpx">
<u-form-item label="姓名" border-bottom>
<u-input v-model="formData.proxyName" border="none" placeholder="请输入代理人姓名"/>
</u-form-item>
<u-form-item label="联系电话" border-bottom>
<u-input v-model="formData.proxyPhone" border="none" placeholder="请输入代理人联系电话"/>
</u-form-item>
<u-form-item label="与申请人关系" border-bottom>
<u-input v-model="formData.proxyRelation" border="none" placeholder="请输入与申请人关系"/>
</u-form-item>
<u-form-item label="身份证号" border-bottom>
<u-input v-model="formData.proxyIdCard" border="none" placeholder="请输入身份证号"/>
</u-form-item>
</u-form>
</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>
<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"
/>
</view>
</template>
<script>
import HeaderItem from "@/components/HeaderItem.vue";
import TitleItem from "@/components/TitleItem.vue";
import dayjs from "dayjs";
import {lawLegalAidReq, lawLegalReviewReq, lawOrgCheckActionReq} from "@/api/lawOrg";
import {chooseImg} from "@/util";
export default {
name: "newRequest",
components: {TitleItem, HeaderItem},
data() {
return {
formData: {
name: '',
gender: 0,
phone: '',
birthday: '',
idCard: '',
liveAddress: '',
householdAddress: '',
content: '',
nation: '',
companyName: '',
email: '',
proxyName: '',
proxyPhone: '',
proxyRelation: '',
proxyIdCard: '',
legalPerson: '',
position: '',
requestContent: '',
requestReason: '',
respondent: '',
respondentLegalPerson: '',
respondentPosition: '',
respondentAddress: '',
files: '',
},
fileList: [
{
title: '其他有关材料',
fileList: []
},
{
title: '申请人身份证明材料复印件',
fileList: []
},
{
title: '授权委托书(有委托代理人的)',
fileList: []
}
],
showDate: false,
checkDate: Number(new Date()),
minDate: dayjs().subtract(100, 'year').valueOf()
}
},
methods: {
selectDate({value}) {
this.showDate = false
this.formData.birthday = dayjs(value).format("YYYY-MM-DD")
},
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.requestContent) return this.$toast('请输入行政复议请求')
if (!this.formData.requestReason) return this.$toast('请输入行政复议理由')
if (!this.formData.respondent) return this.$toast('请输入被申请人')
if (!this.formData.respondentLegalPerson) return this.$toast('请输入被申请人法定代表人或者主要负责人')
if (!this.formData.respondentPosition) return this.$toast('请输入被申请人职务')
if (!this.formData.respondentAddress) return this.$toast('请输入被申请人所在地')
this.formData.files = JSON.stringify(this.fileList)
const res = await lawLegalReviewReq(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)
},
}
}
</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>
+1 -1
View File
@@ -61,7 +61,7 @@
<view class="pos-a w-100p" style="left: 0; top: 10rpx">
<view class="text-center text-main">{{ title }}</view>
</view>
<view style="height: 50vh" class="overflow-y mt-25">
<view style="height: 80vh" class="overflow-y mt-25">
<u-parse :content="content"/>
</view>
</view>