Procházet zdrojové kódy

小程序投流列表新增「备注」筛选输入框(精确等值),与人群包/标题/时间叠加 AND 过滤;refresh/分页/导出三处都透传 remark,已选视频导出自动跟随当前筛选。

顺手修结束日期 off-by-one:dateRange[1].unix()*1000 → dateRange[1].add(1,'day').startOf('day').valueOf(),选 1 号现在能包含 1 号全天数据,与导出 modal 已有写法对齐。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
刘立冬 před 1 dnem
rodič
revize
17e5f8f263

+ 3 - 0
src/views/publishContent/xcxTouliu/hooks/useXcxPlanList.ts

@@ -19,6 +19,7 @@ export interface XcxPlanDataType {
 interface XcxPlanListParams {
 	audiencePackage?: string;
 	title?: string;
+	remark?: string;
 	createTimestampStart?: number;
 	createTimestampEnd?: number;
 	pageNum: number;
@@ -39,6 +40,7 @@ export const useXcxPlanList = () => {
 	const getXcxPlanList = async ({
 		audiencePackage,
 		title,
+		remark,
 		createTimestampStart,
 		createTimestampEnd,
 		pageNum,
@@ -50,6 +52,7 @@ export const useXcxPlanList = () => {
 			const data = await request.post<XcxPlanListResponse>(getXcxPlanListApi, {
 				audiencePackage,
 				title,
+				remark,
 				createTimestampStart,
 				createTimestampEnd,
 				pageNum,

+ 21 - 5
src/views/publishContent/xcxTouliu/index.tsx

@@ -22,6 +22,7 @@ const TableHeight = window.innerHeight - 380;
 const XcxTouliuContent: React.FC = () => {
 	const [audiencePackage, setAudiencePackage] = useState<string>('');
 	const [videoTitle, setVideoTitle] = useState<string>('');
+	const [remark, setRemark] = useState<string>('');
 	const [dateRange, setDateRange] = useState<[Dayjs | null, Dayjs | null]>();
 	const [isShowAddPunlishPlan, setIsShowAddPunlishPlan] = useState<boolean>(false);
 	const [isSubmiting, setIsSubmiting] = useState<boolean>(false);
@@ -219,6 +220,7 @@ const XcxTouliuContent: React.FC = () => {
 		http.post<string>(xcxPlanExportApi, {
 			audiencePackage: audiencePackage || undefined,
 			title: videoTitle || undefined,
+			remark: remark || undefined,
 			createTimestampStart: exportDateRange?.[0] ? exportDateRange[0].startOf('day').valueOf() : undefined,
 			createTimestampEnd: exportDateRange?.[1] ? exportDateRange[1].add(1, 'day').startOf('day').valueOf() : undefined,
 		}).then(res => {
@@ -282,8 +284,9 @@ const XcxTouliuContent: React.FC = () => {
 			pageSize,
 			audiencePackage: audiencePackage || undefined,
 			title: videoTitle || undefined,
-			createTimestampStart: dateRange?.[0]?.unix() ? dateRange[0].unix() * 1000 : undefined,
-			createTimestampEnd: dateRange?.[1]?.unix() ? dateRange[1].unix() * 1000 : undefined,
+			remark: remark || undefined,
+			createTimestampStart: dateRange?.[0] ? dateRange[0].startOf('day').valueOf() : undefined,
+			createTimestampEnd: dateRange?.[1] ? dateRange[1].add(1, 'day').startOf('day').valueOf() : undefined,
 		});
 	};
 
@@ -331,6 +334,18 @@ const XcxTouliuContent: React.FC = () => {
 						/>
 					</div>
 
+					<div className="flex items-center gap-2">
+						<span className="text-gray-600">备注:</span>
+						<Input
+							placeholder="按备注精确筛选"
+							style={{ width: 180 }}
+							value={remark}
+							allowClear
+							onPressEnter={handleSearch}
+							onChange={(e) => setRemark(e.target.value)}
+						/>
+					</div>
+
 					<div className="flex items-center gap-2">
 						<RangePicker
 							placeholder={['开始时间', '结束时间']}
@@ -365,8 +380,9 @@ const XcxTouliuContent: React.FC = () => {
 								pageSize: size,
 								audiencePackage: audiencePackage || undefined,
 								title: videoTitle || undefined,
-								createTimestampStart: dateRange?.[0]?.unix() ? dateRange[0].unix() * 1000 : undefined,
-								createTimestampEnd: dateRange?.[1]?.unix() ? dateRange[1].unix() * 1000 : undefined,
+								remark: remark || undefined,
+								createTimestampStart: dateRange?.[0] ? dateRange[0].startOf('day').valueOf() : undefined,
+								createTimestampEnd: dateRange?.[1] ? dateRange[1].add(1, 'day').startOf('day').valueOf() : undefined,
 							});
 						},
 					}}
@@ -438,7 +454,7 @@ const XcxTouliuContent: React.FC = () => {
 						/>
 					</div>
 					<div className="text-gray-400 text-sm">
-						不选日期默认导出当天数据;最多导出 2000 条;会沿用当前页的「人群包 / 视频标题」筛选条件。
+						不选日期默认导出当天数据;最多导出 2000 条;会沿用当前页的「人群包 / 视频标题 / 备注」筛选条件。
 					</div>
 				</Modal>
 			</div>