智能导入

This commit is contained in:
筱野
2025-09-18 21:39:05 +08:00
parent ffdb0bda26
commit c096d265ab
11 changed files with 508 additions and 96 deletions

View File

@@ -11,8 +11,10 @@ import { PublishBallFormData } from '../../../types/publishBall';
import PublishService from '@/services/publishService';
import { getNextHourTime, getEndTime, delay } from '@/utils';
import images from '@/config/images'
import { useUserInfo } from '@/store/userStore'
import styles from './index.module.scss'
import dayjs from 'dayjs'
import { usePublishBallData, usePublishBallActions } from '@/store/publishBallStore'
const defaultFormData: PublishBallFormData = {
title: '',
@@ -43,19 +45,21 @@ const defaultFormData: PublishBallFormData = {
},
is_substitute_supported: true,
is_wechat_contact: true,
wechat_contact: '14223332214'
wechat_contact: ''
}
const PublishBall: React.FC = () => {
const [activityType, setActivityType] = useState<ActivityType>('individual')
const [isSubmitDisabled, setIsSubmitDisabled] = useState(false)
const userInfo = useUserInfo();
const publishAiData = usePublishBallData()
const { clearPublishData } = usePublishBallActions()
// 获取页面参数并设置导航标题
const [optionsConfig, setOptionsConfig] = useState<FormFieldConfig[]>(publishBallFormSchema)
const [formData, setFormData] = useState<PublishBallFormData[]>([
defaultFormData
])
console.log(userInfo, 'userInfo');
const [formData, setFormData] = useState<PublishBallFormData[]>([defaultFormData])
const [checked, setChecked] = useState(true)
// 删除确认弹窗状态
const [deleteConfirm, setDeleteConfirm] = useState<{
visible: boolean;
@@ -77,14 +81,6 @@ const PublishBall: React.FC = () => {
}
// 处理活动类型变化
const handleActivityTypeChange = (type: ActivityType) => {
if (type === 'group') {
setFormData([defaultFormData])
} else {
setFormData([defaultFormData])
}
}
// 检查相邻两组数据是否相同
const checkAdjacentDataSame = (formDataArray: PublishBallFormData[]) => {
@@ -165,17 +161,17 @@ const PublishBall: React.FC = () => {
}
const validateFormData = (formData: PublishBallFormData, isOnSubmit: boolean = false) => {
const { activityInfo, image_list, title, timeRange } = formData;
const { activityInfo, title, timeRange } = formData;
const { play_type, price, location_name } = activityInfo;
if (!image_list?.length) {
if (!isOnSubmit) {
Taro.showToast({
title: `请上传活动封面`,
icon: 'none'
})
}
return false
}
// if (!image_list?.length) {
// if (!isOnSubmit) {
// Taro.showToast({
// title: `请上传活动封面`,
// icon: 'none'
// })
// }
// return false
// }
if (!title) {
if (!isOnSubmit) {
Taro.showToast({
@@ -277,8 +273,8 @@ const PublishBall: React.FC = () => {
// 如果是个人球局,则跳转到详情页,并自动分享
// 如果是畅打,则跳转第一个球局详情页,并自动分享 @刘杰
Taro.navigateTo({
// @ts-expect-error: id
url: `/game_pages/detail/index?id=${res.data.id || 1}&from=publish&autoShare=1`
// @ts-expect-error: id
url: `/pages/detail/index?id=${(res as any).data?.id || 1}&from=publish&autoShare=1`
})
} else {
Taro.showToast({
@@ -323,8 +319,8 @@ const PublishBall: React.FC = () => {
// 如果是个人球局,则跳转到详情页,并自动分享
// 如果是畅打,则跳转第一个球局详情页,并自动分享 @刘杰
Taro.navigateTo({
// @ts-expect-error: id
url: `/game_pages/detail/index?id=${res.data?.[0].id || 1}&from=publish&autoShare=1`
// @ts-expect-error: id
url: `/pages/detail/index?id=${(res as any).data?.[0]?.id || 1}&from=publish&autoShare=1`
})
} else {
Taro.showToast({
@@ -362,19 +358,48 @@ const PublishBall: React.FC = () => {
}, [] as FormFieldConfig[])
setOptionsConfig(newFormSchema)
setFormData([defaultFormData])
}
// 根据type设置导航标题
if (type === 'group') {
Taro.setNavigationBarTitle({
title: '发布畅打活动'
})
} else {
Taro.setNavigationBarTitle({
Taro.setNavigationBarTitle({
title: '发布'
})
const userPhone = (userInfo as any)?.phone || ''
setFormData([{...defaultFormData, wechat_contact: userPhone }])
}
} else if (type === 'ai') {
// 从 Store 注入 AI 生成的表单 JSON
const mergeWithDefault = (data: PublishBallFormData): PublishBallFormData => {
return {
...defaultFormData,
...data,
timeRange: {
...defaultFormData.timeRange,
...(data?.timeRange || {}),
},
activityInfo: {
...defaultFormData.activityInfo,
...(data?.activityInfo || {}),
},
descriptionInfo: {
...defaultFormData.descriptionInfo,
...(data?.descriptionInfo || {}),
},
}
}
if (publishAiData) {
if (Array.isArray(publishAiData)) {
const merged = publishAiData.map(item => mergeWithDefault(item))
setFormData(merged.length ? merged : [defaultFormData])
} else {
setFormData([mergeWithDefault(publishAiData)])
}
} else {
setFormData([defaultFormData])
}
}
handleActivityTypeChange(type)
}
}
const onCheckedChange = (checked: boolean) => {
@@ -394,6 +419,7 @@ const PublishBall: React.FC = () => {
initFormData()
}, [])
console.log(formData, 'formDataformDataformData');
return (
<View className={styles['publish-ball']}>
{/* 活动类型切换 */}
@@ -471,7 +497,7 @@ const PublishBall: React.FC = () => {
activityType === 'individual' && (
<Text className={styles['submit-tip']}>
<Text className={styles['link']}></Text>
<Text className={styles['link']} onClick={() => Taro.navigateTo({url: '/pages/publishBall/footballRules/index'})}></Text>
</Text>
)
}