FEAT => 本次更新项目为:優化基本設置頁面,新增文件上傳組件,調整樣式及顯示邏輯
This commit is contained in:
@@ -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"]}>
|
||||||
支持 CSV、Excel 格式,上传后将文件保存到服务器
|
支持 Excel 格式,上传后将文件保存到服务器
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/* 电话获客设置区块,仅在选择电话获客场景时显示 */}
|
{/* 电话获客设置区块,仅在选择电话获客场景时显示 */}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user