修复已知问题

This commit is contained in:
2025-06-03 15:16:50 +08:00
parent 60326ca516
commit 3ac3fd8cb2
27 changed files with 1361 additions and 178 deletions

View File

@@ -2,7 +2,6 @@ import {useEffect, useState} from "react";
import Taro from '@tarojs/taro'
import {ArrowLeft} from '@nutui/icons-react-taro'
import {NavBar, InfiniteLoading} from '@nutui/nutui-react-taro'
import {pageHjmCar} from "@/api/hjm/hjmCar";
import {HjmCar} from "@/api/hjm/hjmCar/model";
import BestSellers from "./BestSellers";
@@ -16,9 +15,7 @@ const Index = () => {
const reload = () => {
// 获取车辆列表
pageHjmCar({userId: Taro.getStorageSync('UserId')}).then(res => {
setList(res?.list || [])
})
setList([])
}
useEffect(() => {
@@ -49,7 +46,7 @@ const Index = () => {
</>
}
>
<span></span>
<span></span>
</NavBar>
<InfiniteLoading
className={'w-full fixed left-0 top-24'}

View File

@@ -16,7 +16,7 @@ const Index = () => {
const reload = () => {
// 获取车辆列表
pageHjmCar({}).then(res => {
pageHjmCar({driverId: Taro.getStorageSync('UserId')}).then(res => {
setList(res?.list || [])
})
}

View File

@@ -5,6 +5,7 @@ import {ConfigProvider} from '@nutui/nutui-react-taro'
import Taro, {getCurrentInstance} from '@tarojs/taro'
import {getUserInfo, updateUserInfo} from "@/api/layout";
import {TenantId} from "@/utils/config";
import { TextArea } from '@nutui/nutui-react-taro'
import './profile.scss'
const {router} = getCurrentInstance()
@@ -12,7 +13,7 @@ import {
Form,
Button,
Input,
Radio
Radio,
} from '@nutui/nutui-react-taro'
import {DictData} from "@/api/system/dict-data/model";
import {pageDictData} from "@/api/system/dict-data";
@@ -20,7 +21,6 @@ import {User} from "@/api/system/user/model";
function Profile() {
const formId = Number(router?.params.id)
const [form] = Form.useForm()
const [sex, setSex] = useState<DictData[]>()
const [FormData, setFormData] = useState<User>(
{
@@ -34,12 +34,7 @@ function Profile() {
comments: undefined
}
)
const [user, setUser] = useState<any>({
nickname: '',
avatar: undefined,
username: '',
mobile: ''
})
const reload = () => {
// 获取数据字典
pageDictData({limit: 200}).then(res => {
@@ -47,8 +42,8 @@ function Profile() {
})
// 获取用户信息
getUserInfo().then((data) => {
setUser(data)
setFormData(data)
// 更新表单数据
setFormData(data);
})
}
@@ -60,7 +55,7 @@ function Profile() {
Taro.showToast({title: `保存成功`, icon: 'success'})
setTimeout(() => {
return Taro.navigateBack()
},1000)
}, 1000)
}).catch(() => {
Taro.showToast({
title: '保存失败',
@@ -73,8 +68,8 @@ function Profile() {
}
const uploadAvatar = ({detail}) => {
setUser({
...user,
setFormData({
...FormData,
avatar: `${detail.avatarUrl}`,
})
Taro.uploadFile({
@@ -89,7 +84,7 @@ function Profile() {
const data = JSON.parse(res.data);
if (data.code === 0) {
updateUserInfo({
userId: user.userId,
userId: FormData?.userId,
avatar: `${data.data.thumbnail}`
}).then(() => {
Taro.showToast({
@@ -101,9 +96,18 @@ function Profile() {
})
}
// 获取微信昵称
const getWxNickname = (nickname: string) => {
// 更新表单数据
setFormData({
...FormData,
nickname: nickname
});
}
useEffect(() => {
reload()
}, [form]);
}, []);
return (
<>
@@ -112,13 +116,13 @@ function Profile() {
<Cell title={'头像'} align={'center'} extra={
<>
<Button open-type="chooseAvatar" style={{height: '58px'}} onChooseAvatar={uploadAvatar}>
<Avatar src={user.avatar} size="54"/>
<Avatar src={FormData?.avatar} size="54"/>
</Button>
<ArrowRight color="#cccccc" className={'ml-1'} size={20}/>
</>
}
/>
<Cell title={'手机号码'} align={'center'} extra={user.mobile}/>
<Cell title={'手机号码'} align={'center'} extra={FormData?.phone}/>
</Cell.Group>
<ConfigProvider>
<Form
@@ -145,17 +149,15 @@ function Profile() {
label={'昵称'}
name="nickname"
initialValue={FormData.nickname}
rules={[{message: '请输入昵称'}]}
rules={[{message: '请获取微信昵称'}]}
>
<Input placeholder="请输入昵称" type="text"/>
</Form.Item>
<Form.Item
label={'真实姓名'}
name="realName"
initialValue={FormData.realName}
rules={[{message: '请输入真实姓名'}]}
>
<Input placeholder="请输入真实姓名或单位名称" type="text"/>
<Input
type="nickname"
className="info-content__input"
placeholder="请输入昵称"
value={FormData?.nickname}
onInput={(e) => getWxNickname(e.detail.value)}
/>
</Form.Item>
<Form.Item
label="性别"
@@ -165,7 +167,7 @@ function Profile() {
{message: '请选择性别'}
]}
>
<Radio.Group defaultValue={FormData.sex} direction="horizontal">
<Radio.Group value={FormData?.sex} direction="horizontal">
{
sex?.map((item, index) => (
<Radio key={index} value={item.dictDataCode}>
@@ -175,20 +177,17 @@ function Profile() {
}
</Radio.Group>
</Form.Item>
<Form.Item
label={'联系地址'}
name="address"
initialValue={FormData.address}
rules={[{message: '请输入联系地址'}]}
>
<Input placeholder="请输入联系地址" type="text"/>
</Form.Item>
<Form.Item
label="备注信息"
name="comments"
initialValue={FormData.comments}
rules={[{message: '备注信息'}]}
>
<TextArea
placeholder={'个性签名'}
value={FormData?.comments}
onChange={(value) => setFormData({...FormData, comments: value})}
/>
<Input placeholder={'个性签名'} />
</Form.Item>
</Form>

View File

@@ -0,0 +1,3 @@
export default definePageConfig({
navigationBarTitleText: '实名认证'
})

View File

@@ -0,0 +1,314 @@
import {useEffect, useState} from "react";
import {Image, Tag} from '@nutui/nutui-react-taro'
import {ConfigProvider} from '@nutui/nutui-react-taro'
import Taro from '@tarojs/taro'
import {
Form,
Button,
Input,
Radio,
} from '@nutui/nutui-react-taro'
import {UserVerify} from "@/api/system/userVerify/model";
import {addUserVerify, myUserVerify, updateUserVerify} from "@/api/system/userVerify";
import {uploadFile} from "@/api/system/file";
function Index() {
const [isUpdate, setIsUpdate] = useState<boolean>(false)
const [FormData, setFormData] = useState<UserVerify>({
userId: undefined,
type: undefined,
phone: undefined,
avatar: undefined,
realName: undefined,
idCard: undefined,
birthday: undefined,
sfz1: undefined,
sfz2: undefined,
zzCode: undefined,
zzImg: undefined,
status: undefined,
statusText: undefined,
comments: undefined
})
const reload = () => {
myUserVerify({}).then(data => {
if (data) {
setIsUpdate(true);
setFormData(data)
} else {
setFormData({
type: 0
})
}
})
}
// 提交表单
const submitSucceed = (values: any) => {
console.log('提交表单', values);
if (FormData.status != 2 && FormData.status != undefined) return false;
if (FormData.type == 0) {
if (!FormData.sfz1 || !FormData.sfz2) {
Taro.showToast({
title: '请上传身份证正反面',
icon: 'none'
});
return false;
}
if (!FormData.realName || !FormData.idCard) {
Taro.showToast({
title: '请填写真实姓名和身份证号码',
icon: 'none'
});
return false;
}
}
if (FormData.type == 1) {
if (!FormData.zzImg) {
Taro.showToast({
title: '请上传营业执照',
icon: 'none'
});
return false;
}
if (!FormData.name || !FormData.zzCode) {
Taro.showToast({
title: '请填写主体名称和营业执照号码',
icon: 'none'
});
return false;
}
}
const saveOrUpdate = isUpdate ? updateUserVerify : addUserVerify;
saveOrUpdate({...FormData, status: 0}).then(() => {
Taro.showToast({title: `提交成功`, icon: 'success'})
setTimeout(() => {
return Taro.navigateBack()
}, 1000)
}).catch(() => {
Taro.showToast({
title: '提交失败',
icon: 'error'
});
}).finally(() => {
reload();
})
}
const submitFailed = (error: any) => {
console.log(error, 'err...')
}
const uploadSfz1 = () => {
if (FormData.status != 2 && FormData.status != undefined) return false;
uploadFile().then(data => {
setFormData({
...FormData,
sfz1: data.url
})
});
}
const uploadSfz2 = () => {
if (FormData.status != 2 && FormData.status != undefined) return false;
uploadFile().then(data => {
setFormData({
...FormData,
sfz2: data.url
})
});
}
const uploadZzImg = () => {
if (FormData.status != 2 && FormData.status != undefined) return false;
uploadFile().then(data => {
setFormData({
...FormData,
zzImg: data.url
})
});
}
useEffect(() => {
reload()
}, []);
return (
<>
<div className={'p-4'}>
<ConfigProvider>
<Form
divider
initialValues={FormData}
labelPosition="left"
onFinish={(values) => submitSucceed(values)}
onFinishFailed={(errors) => submitFailed(errors)}
footer={
FormData.status != 1 && (
<div
style={{
display: 'flex',
justifyContent: 'center',
width: '100%'
}}
>
<Button nativeType="submit" block type={'info'}
disabled={FormData.status != 2 && FormData.status != undefined}>
</Button>
</div>
)
}
>
<Form.Item
label="类型"
name="type"
initialValue={FormData.type}
required
>
<Radio.Group value={FormData?.type} direction="horizontal"
disabled={FormData.status != 2 && FormData.status != undefined}
onChange={(value) => setFormData({...FormData, type: value})}>
<Radio key={0} value={0}>
</Radio>
<Radio key={1} value={1}>
</Radio>
</Radio.Group>
</Form.Item>
{
// 个人类型
FormData.type == 0 && (
<>
<Form.Item
label={'真实姓名'}
name="realName"
required
initialValue={FormData.realName}
rules={[{message: '请输入真实姓名'}]}
>
<Input
placeholder={'请输入真实姓名'}
type="text"
disabled={FormData.status != 2 && FormData.status != undefined}
value={FormData?.realName}
onChange={(value) => setFormData({...FormData, realName: value})}
/>
</Form.Item>
<Form.Item
label={'身份证号码'}
name="idCard"
required
initialValue={FormData.idCard}
rules={[{message: '请输入身份证号码'}]}
>
<Input
placeholder="请输入身份证号码"
type="text"
value={FormData?.idCard}
disabled={FormData.status != 2 && FormData.status != undefined}
maxLength={18}
onChange={(value) => setFormData({...FormData, idCard: value})}
/>
</Form.Item>
<Form.Item
label={'上传证件'}
name="image"
required
rules={[{message: '请上传身份证正反面'}]}
>
<div className={'flex gap-2'}>
<div onClick={uploadSfz1}>
<Image src={FormData.sfz1}
radius="10%" width="80" height="80"/>
</div>
<div onClick={uploadSfz2}>
<Image src={FormData.sfz2} mode={'scaleToFill'}
radius="10%" width="80" height="80"/>
</div>
</div>
</Form.Item>
</>
)
}
{
// 企业类型
FormData.type == 1 && (
<>
<Form.Item
label={'主体名称'}
name="name"
required
initialValue={FormData.name}
rules={[{message: '请输入公司名称或单位名称'}]}
>
<Input
placeholder={'请输入主体名称'}
type="text"
value={FormData?.name}
onChange={(value) => setFormData({...FormData, name: value})}
/>
</Form.Item>
<Form.Item
label={'营业执照号码'}
name="zzCode"
required
initialValue={FormData.zzCode}
rules={[{message: '请输入营业执照号码'}]}
>
<Input
placeholder="请输入营业执照号码"
type="text"
value={FormData?.zzCode}
maxLength={18}
onChange={(value) => setFormData({...FormData, zzCode: value})}
/>
</Form.Item>
<Form.Item
label={'上传营业执照'}
name="zzImg"
required
rules={[{message: '请上传营业执照'}
]}
>
<div onClick={uploadZzImg}>
<Image src={FormData.zzImg} mode={'scaleToFill'}
radius="10%" width="80" height="80"/>
</div>
</Form.Item>
</>
)
}
{
FormData.status != undefined && (
<Form.Item
label={'审核状态'}
name="status"
>
<Tag plain>{FormData.statusText}</Tag>
</Form.Item>
)
}
{FormData.status == 2 && (
<Form.Item
label={'驳回原因'}
name="comments"
>
<div className={'flex text-orange-500'}>
{FormData.comments}
</div>
</Form.Item>
)}
</Form>
</ConfigProvider>
</div>
</>
)
}
export default Index