Browse Source
- 移除新增收货地址页面 - 删除 ShopArticle 相关代码 - 优化优惠券详情页面布局- 更新优惠券筛选和使用逻辑 - 调整 app配置,重新启用优惠券功能 - 优化 Tailwind CSS配置,禁用不必要功能master
7 changed files with 20 additions and 333 deletions
@ -1,4 +0,0 @@ |
|||||
export default definePageConfig({ |
|
||||
navigationBarTitleText: '新增收货地址', |
|
||||
navigationBarTextStyle: 'black' |
|
||||
}) |
|
@ -1,323 +0,0 @@ |
|||||
import {useEffect, useState, useRef} from "react"; |
|
||||
import {useRouter} from '@tarojs/taro' |
|
||||
import {Button, Loading, CellGroup, Input, TextArea, Form, Switch, InputNumber, Radio, Image} from '@nutui/nutui-react-taro' |
|
||||
import {Edit, Upload as UploadIcon} from '@nutui/icons-react-taro' |
|
||||
import Taro from '@tarojs/taro' |
|
||||
import {View} from '@tarojs/components' |
|
||||
import {ShopArticle} from "@/api/shop/shopArticle/model"; |
|
||||
import {getShopArticle, addShopArticle, updateShopArticle} from "@/api/shop/shopArticle"; |
|
||||
import FixedButton from "@/components/FixedButton"; |
|
||||
|
|
||||
const AddShopArticle = () => { |
|
||||
const {params} = useRouter(); |
|
||||
const [loading, setLoading] = useState<boolean>(true) |
|
||||
const [formData, setFormData] = useState<ShopArticle>({ |
|
||||
type: 0, // 默认常规文章
|
|
||||
status: 0, // 默认已发布
|
|
||||
permission: 0, // 默认所有人可见
|
|
||||
recommend: 0, // 默认不推荐
|
|
||||
showType: 10, // 默认小图展示
|
|
||||
virtualViews: 0, // 默认虚拟阅读量
|
|
||||
actualViews: 0, // 默认实际阅读量
|
|
||||
sortNumber: 0 // 默认排序
|
|
||||
}) |
|
||||
const formRef = useRef<any>(null) |
|
||||
|
|
||||
// 判断是编辑还是新增模式
|
|
||||
const isEditMode = !!params.id |
|
||||
const articleId = params.id ? Number(params.id) : undefined |
|
||||
|
|
||||
// 文章类型选项
|
|
||||
const typeOptions = [ |
|
||||
{ text: '常规文章', value: 0 }, |
|
||||
{ text: '视频文章', value: 1 } |
|
||||
] |
|
||||
|
|
||||
// 状态选项
|
|
||||
const statusOptions = [ |
|
||||
{ text: '已发布', value: 0 }, |
|
||||
{ text: '待审核', value: 1 }, |
|
||||
{ text: '已驳回', value: 2 }, |
|
||||
{ text: '违规内容', value: 3 } |
|
||||
] |
|
||||
|
|
||||
// 可见性选项
|
|
||||
const permissionOptions = [ |
|
||||
{ text: '所有人可见', value: 0 }, |
|
||||
{ text: '登录可见', value: 1 }, |
|
||||
{ text: '密码可见', value: 2 } |
|
||||
] |
|
||||
|
|
||||
// 显示方式选项
|
|
||||
const showTypeOptions = [ |
|
||||
{ text: '小图展示', value: 10 }, |
|
||||
{ text: '大图展示', value: 20 } |
|
||||
] |
|
||||
|
|
||||
const reload = async () => { |
|
||||
// 如果是编辑模式,加载文章数据
|
|
||||
if (isEditMode && articleId) { |
|
||||
try { |
|
||||
const article = await getShopArticle(articleId) |
|
||||
setFormData(article) |
|
||||
// 更新表单值
|
|
||||
if (formRef.current) { |
|
||||
formRef.current.setFieldsValue(article) |
|
||||
} |
|
||||
} catch (error) { |
|
||||
console.error('加载文章失败:', error) |
|
||||
Taro.showToast({ |
|
||||
title: '加载文章失败', |
|
||||
icon: 'error' |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
// 图片上传处理
|
|
||||
const handleImageUpload = async () => { |
|
||||
try { |
|
||||
const res = await Taro.chooseImage({ |
|
||||
count: 1, |
|
||||
sizeType: ['compressed'], |
|
||||
sourceType: ['album', 'camera'] |
|
||||
}); |
|
||||
|
|
||||
if (res.tempFilePaths && res.tempFilePaths.length > 0) { |
|
||||
// 这里应该调用上传接口,暂时使用本地路径
|
|
||||
const imagePath = res.tempFilePaths[0]; |
|
||||
setFormData({ |
|
||||
...formData, |
|
||||
image: imagePath |
|
||||
}); |
|
||||
|
|
||||
Taro.showToast({ |
|
||||
title: '图片选择成功', |
|
||||
icon: 'success' |
|
||||
}); |
|
||||
} |
|
||||
} catch (error) { |
|
||||
Taro.showToast({ |
|
||||
title: '图片选择失败', |
|
||||
icon: 'error' |
|
||||
}); |
|
||||
} |
|
||||
}; |
|
||||
|
|
||||
// 提交表单
|
|
||||
const submitSucceed = async (values: any) => { |
|
||||
try { |
|
||||
// 准备提交的数据
|
|
||||
const submitData = { |
|
||||
...formData, |
|
||||
...values, |
|
||||
}; |
|
||||
|
|
||||
// 如果是编辑模式,添加id
|
|
||||
if (isEditMode && articleId) { |
|
||||
submitData.articleId = articleId; |
|
||||
} |
|
||||
|
|
||||
// 执行新增或更新操作
|
|
||||
if (isEditMode) { |
|
||||
await updateShopArticle(submitData); |
|
||||
} else { |
|
||||
await addShopArticle(submitData); |
|
||||
} |
|
||||
|
|
||||
Taro.showToast({ |
|
||||
title: `${isEditMode ? '更新' : '保存'}成功`, |
|
||||
icon: 'success' |
|
||||
}); |
|
||||
|
|
||||
setTimeout(() => { |
|
||||
Taro.navigateBack(); |
|
||||
}, 1000); |
|
||||
|
|
||||
} catch (error) { |
|
||||
console.error('保存失败:', error); |
|
||||
Taro.showToast({ |
|
||||
title: `${isEditMode ? '更新' : '保存'}失败`, |
|
||||
icon: 'error' |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
const submitFailed = (error: any) => { |
|
||||
console.log(error, 'err...') |
|
||||
} |
|
||||
|
|
||||
useEffect(() => { |
|
||||
// 动态设置页面标题
|
|
||||
Taro.setNavigationBarTitle({ |
|
||||
title: isEditMode ? '编辑文章' : '新增文章' |
|
||||
}); |
|
||||
|
|
||||
reload().then(() => { |
|
||||
setLoading(false) |
|
||||
}) |
|
||||
}, [isEditMode]); |
|
||||
|
|
||||
if (loading) { |
|
||||
return <Loading className={'px-2'}>加载中</Loading> |
|
||||
} |
|
||||
|
|
||||
return ( |
|
||||
<> |
|
||||
<Form |
|
||||
ref={formRef} |
|
||||
divider |
|
||||
initialValues={formData} |
|
||||
labelPosition="left" |
|
||||
onFinish={(values) => submitSucceed(values)} |
|
||||
onFinishFailed={(errors) => submitFailed(errors)} |
|
||||
> |
|
||||
{/* 基本信息 */} |
|
||||
<CellGroup title="基本信息"> |
|
||||
<Form.Item |
|
||||
name="title" |
|
||||
label="文章标题" |
|
||||
required |
|
||||
rules={[{ required: true, message: '请输入文章标题' }]} |
|
||||
initialValue={formData.title} |
|
||||
> |
|
||||
<Input placeholder="请输入文章标题" maxLength={100}/> |
|
||||
</Form.Item> |
|
||||
|
|
||||
<Form.Item name="overview" label="文章概述" initialValue={formData.overview}> |
|
||||
<TextArea placeholder="请输入文章概述,用于列表展示" maxLength={200} rows={3}/> |
|
||||
</Form.Item> |
|
||||
|
|
||||
<Form.Item |
|
||||
name="detail" |
|
||||
label="文章内容" |
|
||||
required |
|
||||
rules={[{ required: true, message: '请输入文章内容' }]} |
|
||||
initialValue={formData.detail} |
|
||||
> |
|
||||
<TextArea placeholder="请输入文章内容" maxLength={10000} rows={8}/> |
|
||||
</Form.Item> |
|
||||
|
|
||||
<Form.Item name="author" label="作者" initialValue={formData.author}> |
|
||||
<Input placeholder="请输入作者名称" maxLength={50}/> |
|
||||
</Form.Item> |
|
||||
|
|
||||
<Form.Item name="source" label="来源" initialValue={formData.source}> |
|
||||
<Input placeholder="请输入文章来源" maxLength={100}/> |
|
||||
</Form.Item> |
|
||||
</CellGroup> |
|
||||
|
|
||||
{/* 文章设置 */} |
|
||||
<CellGroup title="文章设置"> |
|
||||
<Form.Item name="type" label="文章类型" initialValue={formData.type}> |
|
||||
<Radio.Group direction="horizontal" value={formData.type}> |
|
||||
{typeOptions.map(option => ( |
|
||||
<Radio key={option.value} value={option.value}> |
|
||||
{option.text} |
|
||||
</Radio> |
|
||||
))} |
|
||||
</Radio.Group> |
|
||||
</Form.Item> |
|
||||
|
|
||||
<Form.Item name="status" label="发布状态" initialValue={formData.status}> |
|
||||
<Radio.Group direction="horizontal" value={formData.status}> |
|
||||
{statusOptions.map(option => ( |
|
||||
<Radio key={option.value} value={option.value}> |
|
||||
{option.text} |
|
||||
</Radio> |
|
||||
))} |
|
||||
</Radio.Group> |
|
||||
</Form.Item> |
|
||||
|
|
||||
<Form.Item name="permission" label="可见性" initialValue={formData.permission}> |
|
||||
<Radio.Group direction="horizontal" value={formData.permission}> |
|
||||
{permissionOptions.map(option => ( |
|
||||
<Radio key={option.value} value={option.value}> |
|
||||
{option.text} |
|
||||
</Radio> |
|
||||
))} |
|
||||
</Radio.Group> |
|
||||
</Form.Item> |
|
||||
|
|
||||
<Form.Item name="showType" label="显示方式" initialValue={formData.showType}> |
|
||||
<Radio.Group direction="horizontal" value={formData.showType}> |
|
||||
{showTypeOptions.map(option => ( |
|
||||
<Radio key={option.value} value={option.value}> |
|
||||
{option.text} |
|
||||
</Radio> |
|
||||
))} |
|
||||
</Radio.Group> |
|
||||
</Form.Item> |
|
||||
</CellGroup> |
|
||||
|
|
||||
{/* 高级设置 */} |
|
||||
<CellGroup title="高级设置"> |
|
||||
<Form.Item name="recommend" label="推荐文章" initialValue={formData.recommend}> |
|
||||
<Switch |
|
||||
checked={formData.recommend === 1} |
|
||||
onChange={(checked) => |
|
||||
setFormData({...formData, recommend: checked ? 1 : 0}) |
|
||||
} |
|
||||
/> |
|
||||
</Form.Item> |
|
||||
|
|
||||
<Form.Item name="price" label="付费金额" initialValue={formData.price}> |
|
||||
<Input placeholder="0.00" type="number"/> |
|
||||
<View className="text-xs text-gray-500 mt-1">单位:元</View> |
|
||||
</Form.Item> |
|
||||
|
|
||||
<Form.Item name="virtualViews" label="虚拟阅读量" initialValue={formData.virtualViews}> |
|
||||
<InputNumber min={0} defaultValue={formData.virtualViews || 0}/> |
|
||||
</Form.Item> |
|
||||
|
|
||||
<Form.Item name="actualViews" label="实际阅读量" initialValue={formData.actualViews}> |
|
||||
<InputNumber min={0} defaultValue={formData.actualViews || 0}/> |
|
||||
</Form.Item> |
|
||||
|
|
||||
<Form.Item name="sortNumber" label="排序" initialValue={formData.sortNumber}> |
|
||||
<InputNumber min={0} defaultValue={formData.sortNumber || 0}/> |
|
||||
<View className="text-xs text-gray-500 mt-1">数字越小越靠前</View> |
|
||||
</Form.Item> |
|
||||
|
|
||||
<Form.Item name="tags" label="标签" initialValue={formData.tags}> |
|
||||
<Input placeholder="请输入标签,多个标签用逗号分隔" maxLength={200}/> |
|
||||
</Form.Item> |
|
||||
|
|
||||
<Form.Item name="topic" label="话题" initialValue={formData.topic}> |
|
||||
<Input placeholder="请输入话题" maxLength={100}/> |
|
||||
</Form.Item> |
|
||||
</CellGroup> |
|
||||
|
|
||||
{/* 图片上传 */} |
|
||||
<CellGroup title="文章图片"> |
|
||||
<Form.Item name="image" label="封面图片" initialValue={formData.image}> |
|
||||
<View className="flex items-center gap-3"> |
|
||||
{formData.image && ( |
|
||||
<Image |
|
||||
src={formData.image} |
|
||||
width="80" |
|
||||
height="80" |
|
||||
radius="8" |
|
||||
/> |
|
||||
)} |
|
||||
<Button |
|
||||
size="small" |
|
||||
type="primary" |
|
||||
fill="outline" |
|
||||
icon={<UploadIcon />} |
|
||||
onClick={handleImageUpload} |
|
||||
> |
|
||||
{formData.image ? '更换图片' : '上传图片'} |
|
||||
</Button> |
|
||||
</View> |
|
||||
</Form.Item> |
|
||||
</CellGroup> |
|
||||
|
|
||||
{/* 提交按钮 */} |
|
||||
<FixedButton text={isEditMode ? '更新文章' : '发布文章'} onClick={submitSucceed} icon={<Edit />} /> |
|
||||
</Form> |
|
||||
</> |
|
||||
); |
|
||||
}; |
|
||||
|
|
||||
export default AddShopArticle; |
|
Loading…
Reference in new issue