chore: hide export range selector

This commit is contained in:
admin123 2026-05-19 17:57:09 +08:00
parent 75294ca8c7
commit 703a095c08
7 changed files with 32 additions and 41 deletions

View File

@ -3561,6 +3561,7 @@
applyToolbarRootStyles(root); applyToolbarRootStyles(root);
const exportRangeSelect = document2.createElement("select"); const exportRangeSelect = document2.createElement("select");
exportRangeSelect.dataset.pluginExportRange = "select"; exportRangeSelect.dataset.pluginExportRange = "select";
exportRangeSelect.hidden = true;
appendOption(exportRangeSelect, "current", "\u5F53\u524D\u9875"); appendOption(exportRangeSelect, "current", "\u5F53\u524D\u9875");
appendOption(exportRangeSelect, "first-5", "\u524D5\u9875"); appendOption(exportRangeSelect, "first-5", "\u524D5\u9875");
appendOption(exportRangeSelect, "first-10", "\u524D10\u9875"); appendOption(exportRangeSelect, "first-10", "\u524D10\u9875");
@ -3765,7 +3766,8 @@
toolbar.exportStatusText.textContent = text; toolbar.exportStatusText.textContent = text;
} }
function syncCustomPagesInputVisibility(toolbar) { function syncCustomPagesInputVisibility(toolbar) {
toolbar.exportCustomPagesInput.hidden = toolbar.exportRangeSelect.value !== "custom"; toolbar.exportRangeSelect.hidden = true;
toolbar.exportCustomPagesInput.hidden = true;
} }
function ensureToolbarMounted(root, document2) { function ensureToolbarMounted(root, document2) {
const actionRow = findNativeActionRow(document2); const actionRow = findNativeActionRow(document2);

View File

@ -190,7 +190,6 @@ https://xingtu.cn/ad/creator/market
在星图页面中,插件会新增一组自己的操作区,常见元素包括: 在星图页面中,插件会新增一组自己的操作区,常见元素包括:
- 导出范围下拉框
- `导出选中达人数据` 按钮 - `导出选中达人数据` 按钮
- `提交批次` 按钮 - `提交批次` 按钮
- 状态提示文字 - 状态提示文字
@ -216,7 +215,7 @@ https://xingtu.cn/ad/creator/market
- 如果你勾选了达人,再点击导出或提交,系统会优先处理你勾选的这些达人 - 如果你勾选了达人,再点击导出或提交,系统会优先处理你勾选的这些达人
- 导出达人数据必须先勾选达人 - 导出达人数据必须先勾选达人
- 提交批次时,如果你没有勾选任何达人,则默认按当前导出范围处理全部达人 - 提交批次时,如果你没有勾选任何达人,则默认处理当前列表范围内的达人
--- ---
@ -233,19 +232,7 @@ https://xingtu.cn/ad/creator/market
- 导出达人数据会额外读取达人详情页数据 - 导出达人数据会额外读取达人详情页数据
- 为了避免请求太多,只处理你勾选的达人 - 为了避免请求太多,只处理你勾选的达人
### 2. 选择导出范围 ### 2. 可选:选择需要导出的字段
在插件工具栏中,你会看到导出范围下拉框,可选:
- `当前页`
- `前5页`
- `前10页`
- `全部`
- `自定义`
如果选择 `自定义`,需要再输入页数。
### 3. 可选:选择需要导出的字段
如果只想导出一部分字段,点击: 如果只想导出一部分字段,点击:
@ -266,7 +253,7 @@ https://xingtu.cn/ad/creator/market
保存后,下次再导出 CSV会自动沿用这次勾选结果不需要重新勾选。 保存后,下次再导出 CSV会自动沿用这次勾选结果不需要重新勾选。
### 4. 点击导出 ### 3. 点击导出
点击: 点击:
@ -278,7 +265,7 @@ https://xingtu.cn/ad/creator/market
然后把达人 ID 粘贴进去,每行一个。 然后把达人 ID 粘贴进去,每行一个。
### 5. 导出内容 ### 4. 导出内容
CSV 会包含: CSV 会包含:
@ -287,7 +274,7 @@ CSV 会包含:
- 画像 - 画像
- 秒思 api 数据 - 秒思 api 数据
### 6. 等待导出完成 ### 5. 等待导出完成
页面上会显示状态,例如: 页面上会显示状态,例如:
@ -308,27 +295,17 @@ CSV 会包含:
## 十一、提交批次的方法 ## 十一、提交批次的方法
### 1. 选择范围 ### 1. 如果只想提交部分达人
和导出一样,先选择导出范围:
- 当前页
- 前5页
- 前10页
- 全部
- 自定义
### 2. 如果只想提交部分达人
先勾选想提交的达人。 先勾选想提交的达人。
### 3. 点击提交 ### 2. 点击提交
点击: 点击:
- `提交批次` - `提交批次`
### 4. 输入批次名称 ### 3. 输入批次名称
这时会弹出一个自定义输入框,不再是浏览器原生弹窗。 这时会弹出一个自定义输入框,不再是浏览器原生弹窗。
@ -345,7 +322,7 @@ CSV 会包含:
- `食品饮料-KOL测试批次` - `食品饮料-KOL测试批次`
- `5月女装达人候选` - `5月女装达人候选`
### 5. 确认提交 ### 4. 确认提交
输入后点击: 输入后点击:
@ -353,7 +330,7 @@ CSV 会包含:
也可以直接按回车提交。 也可以直接按回车提交。
### 6. 提交成功的提示 ### 5. 提交成功的提示
如果成功,页面状态会显示: 如果成功,页面状态会显示:
@ -507,7 +484,7 @@ CSV 会包含:
3. 点击插件图标确认登录状态 3. 点击插件图标确认登录状态
4. 打开星图达人市场页 4. 打开星图达人市场页
5. 等待页面数据加载完成 5. 等待页面数据加载完成
6. 先勾选需要的人,或直接选择范围 6. 先勾选需要的人
7. 需要表格时点 `导出选中达人数据` 7. 需要表格时点 `导出选中达人数据`
8. 需要进入后续流程时点 `提交批次` 8. 需要进入后续流程时点 `提交批次`

View File

@ -77,7 +77,6 @@ https://xingtu.cn/ad/creator/market
当你需要导出达人的内容数据、效果预估、画像时使用: 当你需要导出达人的内容数据、效果预估、画像时使用:
- 先勾选你想导出数据的达人 - 先勾选你想导出数据的达人
- 选择范围:当前页 / 前5页 / 全部
- 点击 **"导出选中达人数据"** - 点击 **"导出选中达人数据"**
- 等待下载完成 - 等待下载完成
- 文件自动下载到电脑的"下载"文件夹 - 文件自动下载到电脑的"下载"文件夹

View File

@ -61,6 +61,7 @@ export function ensurePluginToolbar(
const exportRangeSelect = document.createElement("select"); const exportRangeSelect = document.createElement("select");
exportRangeSelect.dataset.pluginExportRange = "select"; exportRangeSelect.dataset.pluginExportRange = "select";
exportRangeSelect.hidden = true;
appendOption(exportRangeSelect, "current", "当前页"); appendOption(exportRangeSelect, "current", "当前页");
appendOption(exportRangeSelect, "first-5", "前5页"); appendOption(exportRangeSelect, "first-5", "前5页");
appendOption(exportRangeSelect, "first-10", "前10页"); appendOption(exportRangeSelect, "first-10", "前10页");
@ -304,8 +305,8 @@ export function setToolbarExportStatus(
} }
function syncCustomPagesInputVisibility(toolbar: PluginToolbarDom): void { function syncCustomPagesInputVisibility(toolbar: PluginToolbarDom): void {
toolbar.exportCustomPagesInput.hidden = toolbar.exportRangeSelect.hidden = true;
toolbar.exportRangeSelect.value !== "custom"; toolbar.exportCustomPagesInput.hidden = true;
} }
function ensureToolbarMounted(root: HTMLElement, document: Document): void { function ensureToolbarMounted(root: HTMLElement, document: Document): void {

View File

@ -324,7 +324,17 @@ describe("market-content-entry", () => {
expect(document.querySelector('[data-plugin-sort-field="select"]')).toBeNull(); expect(document.querySelector('[data-plugin-sort-field="select"]')).toBeNull();
expect(document.body.firstElementChild).not.toBe(toolbar); expect(document.body.firstElementChild).not.toBe(toolbar);
expect(document.querySelector('[data-plugin-export-range="select"]')).not.toBeNull(); expect(
(document.querySelector('[data-plugin-export-range="select"]') as HTMLSelectElement | null)
?.hidden
).toBe(true);
expect(
(
document.querySelector(
'[data-plugin-export-custom-pages="input"]'
) as HTMLInputElement | null
)?.hidden
).toBe(true);
expect( expect(
(document.querySelector('[data-plugin-export="button"]') as HTMLButtonElement | null) (document.querySelector('[data-plugin-export="button"]') as HTMLButtonElement | null)
?.hidden ?.hidden
@ -1123,7 +1133,7 @@ describe("market-content-entry", () => {
expect(readDivAuthorOrder()).toEqual(["达人 B", "达人 A"]); expect(readDivAuthorOrder()).toEqual(["达人 B", "达人 A"]);
}); });
test("toolbar defaults export range to the first 5 pages and reveals custom input on demand", async () => { test("toolbar keeps export range controls hidden while retaining the internal default range", async () => {
document.body.innerHTML = buildMarketFixture(); document.body.innerHTML = buildMarketFixture();
const { createMarketController } = await import("../src/content/market/index"); const { createMarketController } = await import("../src/content/market/index");
@ -1146,6 +1156,7 @@ describe("market-content-entry", () => {
) as HTMLInputElement | null; ) as HTMLInputElement | null;
expect(exportRangeSelect?.value).toBe("first-5"); expect(exportRangeSelect?.value).toBe("first-5");
expect(exportRangeSelect?.hidden).toBe(true);
expect(customPagesInput?.hidden).toBe(true); expect(customPagesInput?.hidden).toBe(true);
expect( expect(
document.querySelector('[data-plugin-batch-submit="button"]') document.querySelector('[data-plugin-batch-submit="button"]')
@ -1154,7 +1165,8 @@ describe("market-content-entry", () => {
setSelectValue('[data-plugin-export-range="select"]', "custom"); setSelectValue('[data-plugin-export-range="select"]', "custom");
dispatchChange('[data-plugin-export-range="select"]'); dispatchChange('[data-plugin-export-range="select"]');
expect(customPagesInput?.hidden).toBe(false); expect(exportRangeSelect?.hidden).toBe(true);
expect(customPagesInput?.hidden).toBe(true);
}); });
test("export uses the current page ordering without triggering a full scan", async () => { test("export uses the current page ordering without triggering a full scan", async () => {