FEAT => 本次更新项目为:優化基本設置頁面,新增文件上傳組件,調整樣式及顯示邏輯

This commit is contained in:
超级老白兔
2025-08-06 17:54:41 +08:00
parent f59ce8809d
commit 7ebece0491
2 changed files with 47 additions and 70 deletions

View File

@@ -5,12 +5,12 @@ import {
EyeOutlined, EyeOutlined,
CloseOutlined, CloseOutlined,
DownloadOutlined, DownloadOutlined,
UploadOutlined,
CheckOutlined,
} from "@ant-design/icons"; } from "@ant-design/icons";
import { uploadFile } from "@/api/common"; import { uploadFile } from "@/api/common";
import styles from "./base.module.scss"; import styles from "./base.module.scss";
import { posterTemplates } from "./base.data"; import { posterTemplates } from "./base.data";
import GroupSelection from "@/components/GroupSelection";
import FileUpload from "@/components/Upload/FileUpload";
interface BasicSettingsProps { interface BasicSettingsProps {
isEdit: boolean; isEdit: boolean;
@@ -78,18 +78,12 @@ const BasicSettings: React.FC<BasicSettingsProps> = ({
// 新增用于文件选择的ref // 新增用于文件选择的ref
const uploadInputRef = useRef<HTMLInputElement>(null); const uploadInputRef = useRef<HTMLInputElement>(null);
const uploadOrderInputRef = useRef<HTMLInputElement>(null);
// 初始化时,如果没有选择场景,默认选择海报获客 // 初始化时,如果没有选择场景,默认选择海报获客
useEffect(() => { useEffect(() => {
if (!formData.scenario) { if (!formData.scenario) {
onChange({ ...formData, scenario: "haibao" }); onChange({ ...formData, scenario: "haibao" });
} }
// 检查是否已经有上传的订单文件
if (formData.orderFileUploaded) {
setOrderUploaded(true);
}
}, [formData, onChange]); }, [formData, onChange]);
useEffect(() => { useEffect(() => {
@@ -208,28 +202,6 @@ const BasicSettings: React.FC<BasicSettingsProps> = ({
window.URL.revokeObjectURL(url); window.URL.revokeObjectURL(url);
}; };
// 修改订单表格上传逻辑,使用 uploadFile 公共方法
const [orderUploaded, setOrderUploaded] = useState(false);
const handleOrderFileUpload = async (
event: React.ChangeEvent<HTMLInputElement>,
) => {
const file = event.target.files?.[0];
if (file) {
try {
await uploadFile(file); // 默认接口即可
setOrderUploaded(true);
onChange({ ...formData, orderFileUploaded: true });
// 可用 toast 或其它方式提示成功
// alert('上传成功');
} catch (err) {
// 可用 toast 或其它方式提示失败
// alert('上传失败');
}
event.target.value = "";
}
};
// 图片预览关闭 // 图片预览关闭
const handleImagePreviewClose = () => { const handleImagePreviewClose = () => {
setIsPreviewOpen(false); setIsPreviewOpen(false);
@@ -331,18 +303,23 @@ const BasicSettings: React.FC<BasicSettingsProps> = ({
</Button> </Button>
</div> </div>
{/* 输入获客成功提示 */} {/* 输入获客成功提示 - 只有海报场景才显示 */}
<div className={styles["basic-success-tip"]}> {formData.scenario === 1 && (
<Input <>
type="text" <div className={styles["basic-label"]}></div>
value={tips} <div className={styles["basic-success-tip"]}>
onChange={e => { <Input
setTips(e.target.value); type="text"
onChange({ ...formData, tips: e.target.value }); value={tips}
}} onChange={e => {
placeholder="请输入获客成功提示" setTips(e.target.value);
/> onChange({ ...formData, tips: e.target.value });
</div> }}
placeholder="请输入获客成功提示"
/>
</div>
</>
)}
{/* 选素材 */} {/* 选素材 */}
<div className={styles["basic-materials"]} style={openPoster}> <div className={styles["basic-materials"]} style={openPoster}>
<div className={styles["basic-label"]}></div> <div className={styles["basic-label"]}></div>
@@ -467,7 +444,22 @@ const BasicSettings: React.FC<BasicSettingsProps> = ({
)} )}
</Modal> </Modal>
</div> </div>
{/* 订单导入区块优化 */} {/* 群选择 - 只有微信群场景才显示 */}
{formData.scenario === 7 && (
<div className={styles["basic-group-selection"]}>
<div className={styles["basic-label"]}></div>
<GroupSelection
selectedGroups={formData.groupSelected || []}
onSelect={groups =>
onChange({ ...formData, groupSelected: groups })
}
placeholder="请选择微信群"
className={styles["basic-group-selector"]}
/>
</div>
)}
{/* 订单导入区块 - 使用FileUpload组件 */}
<div className={styles["basic-order-upload"]} style={openOrder}> <div className={styles["basic-order-upload"]} style={openOrder}>
<div className={styles["basic-order-upload-label"]}></div> <div className={styles["basic-order-upload-label"]}></div>
<div className={styles["basic-order-upload-actions"]}> <div className={styles["basic-order-upload-actions"]}>
@@ -477,34 +469,19 @@ const BasicSettings: React.FC<BasicSettingsProps> = ({
> >
<DownloadOutlined style={{ fontSize: 18 }} /> <DownloadOutlined style={{ fontSize: 18 }} />
</Button> </Button>
<Button </div>
style={{ <div className={styles["basic-order-upload-file"]}>
display: "flex", <FileUpload
alignItems: "center", value={formData.orderFileUrl || ""}
gap: 4, onChange={url => onChange({ ...formData, orderFileUrl: url })}
...(orderUploaded && { acceptTypes={["excel"]}
backgroundColor: "#52c41a", maxCount={1}
color: "#fff", maxSize={10}
borderColor: "#52c41a", showPreview={false}
}), />
}}
onClick={() => uploadOrderInputRef.current?.click()}
>
<span className="iconfont" style={{ fontSize: 18 }}>
{orderUploaded ? <CheckOutlined /> : <UploadOutlined />}
</span>{" "}
{orderUploaded ? "已上传" : "上传订单表格"}
<input
ref={uploadOrderInputRef}
type="file"
accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
style={{ display: "none" }}
onChange={handleOrderFileUpload}
/>
</Button>
</div> </div>
<div className={styles["basic-order-upload-tip"]}> <div className={styles["basic-order-upload-tip"]}>
CSVExcel Excel
</div> </div>
</div> </div>
{/* 电话获客设置区块,仅在选择电话获客场景时显示 */} {/* 电话获客设置区块,仅在选择电话获客场景时显示 */}

View File

@@ -49,10 +49,10 @@
.basic-custom-tag-input { .basic-custom-tag-input {
display: flex; display: flex;
gap: 8px; gap: 8px;
margin-bottom: 16px;
} }
.basic-success-tip { .basic-success-tip {
display: flex; display: flex;
padding-top: 16px;
} }
.basic-materials { .basic-materials {
margin: 16px 0; margin: 16px 0;