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,
CloseOutlined,
DownloadOutlined,
UploadOutlined,
CheckOutlined,
} from "@ant-design/icons";
import { uploadFile } from "@/api/common";
import styles from "./base.module.scss";
import { posterTemplates } from "./base.data";
import GroupSelection from "@/components/GroupSelection";
import FileUpload from "@/components/Upload/FileUpload";
interface BasicSettingsProps {
isEdit: boolean;
@@ -78,18 +78,12 @@ const BasicSettings: React.FC<BasicSettingsProps> = ({
// 新增用于文件选择的ref
const uploadInputRef = useRef<HTMLInputElement>(null);
const uploadOrderInputRef = useRef<HTMLInputElement>(null);
// 初始化时,如果没有选择场景,默认选择海报获客
useEffect(() => {
if (!formData.scenario) {
onChange({ ...formData, scenario: "haibao" });
}
// 检查是否已经有上传的订单文件
if (formData.orderFileUploaded) {
setOrderUploaded(true);
}
}, [formData, onChange]);
useEffect(() => {
@@ -208,28 +202,6 @@ const BasicSettings: React.FC<BasicSettingsProps> = ({
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 = () => {
setIsPreviewOpen(false);
@@ -331,18 +303,23 @@ const BasicSettings: React.FC<BasicSettingsProps> = ({
</Button>
</div>
{/* 输入获客成功提示 */}
<div className={styles["basic-success-tip"]}>
<Input
type="text"
value={tips}
onChange={e => {
setTips(e.target.value);
onChange({ ...formData, tips: e.target.value });
}}
placeholder="请输入获客成功提示"
/>
</div>
{/* 输入获客成功提示 - 只有海报场景才显示 */}
{formData.scenario === 1 && (
<>
<div className={styles["basic-label"]}></div>
<div className={styles["basic-success-tip"]}>
<Input
type="text"
value={tips}
onChange={e => {
setTips(e.target.value);
onChange({ ...formData, tips: e.target.value });
}}
placeholder="请输入获客成功提示"
/>
</div>
</>
)}
{/* 选素材 */}
<div className={styles["basic-materials"]} style={openPoster}>
<div className={styles["basic-label"]}></div>
@@ -467,7 +444,22 @@ const BasicSettings: React.FC<BasicSettingsProps> = ({
)}
</Modal>
</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-label"]}></div>
<div className={styles["basic-order-upload-actions"]}>
@@ -477,34 +469,19 @@ const BasicSettings: React.FC<BasicSettingsProps> = ({
>
<DownloadOutlined style={{ fontSize: 18 }} />
</Button>
<Button
style={{
display: "flex",
alignItems: "center",
gap: 4,
...(orderUploaded && {
backgroundColor: "#52c41a",
color: "#fff",
borderColor: "#52c41a",
}),
}}
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 className={styles["basic-order-upload-file"]}>
<FileUpload
value={formData.orderFileUrl || ""}
onChange={url => onChange({ ...formData, orderFileUrl: url })}
acceptTypes={["excel"]}
maxCount={1}
maxSize={10}
showPreview={false}
/>
</div>
<div className={styles["basic-order-upload-tip"]}>
CSVExcel
Excel
</div>
</div>
{/* 电话获客设置区块,仅在选择电话获客场景时显示 */}

View File

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