Files
crawler-plugin/app/assets/convert.js

2 lines
9.3 KiB
JavaScript

import { d as A, o as H, a as l, c as n, b as z, B as K, e as s, F as w, r as F, t as i, f as _, n as P, w as M, u as j, x as q, g as d, h as E, y as J, i as k, E as r, z as L, A as O, C as G, D as Q, _ as W, q as X, s as Y } from "./pywebview-C66x_2Dh.js"; import { e as Z } from "./brand-BZije8D7.js"; const ee = { class: "page-shell module-page" }, se = { class: "main-content" }, te = { class: "left-panel" }, ae = { class: "upload-zone" }, le = { class: "selected-files clean-placeholder" }, ne = { key: 0, class: "more-line" }, oe = { key: 1 }, re = { class: "option-group" }, ie = ["value"], ce = { class: "template-item-content" }, ue = { class: "label" }, de = { key: 0, class: "template-tag" }, ve = { key: 1, class: "template-tag muted" }, pe = { key: 2, class: "template-tag custom" }, _e = { class: "desc" }, fe = { key: 0, class: "empty-option" }, me = { class: "option-group" }, he = { class: "radio-item active" }, ye = { class: "desc" }, ge = { class: "run-row" }, be = ["disabled"], we = { class: "loading-msg" }, ke = { class: "right-panel" }, Ce = { class: "task-list-wrap" }, xe = { class: "clean-result-summary" }, Fe = { class: "summary-card" }, Ie = { class: "summary-card" }, Pe = { class: "summary-card" }, Ee = { class: "result-list-wrap" }, Te = { key: 0, class: "empty-tasks" }, Be = { key: 1, class: "task-list clean-result-list" }, De = { class: "left" }, Ne = ["title"], Re = { key: 0, class: "files" }, $e = { key: 1, class: "files" }, Se = { class: "task-right" }, Ue = ["onClick"], Ve = ["onClick"], Ae = A({ __name: "BrandConvertTab", setup(ze) { const p = d([]), g = d(""), f = d([]), m = d(!1), b = d([]), h = d({ total: 0, successCount: 0, failedCount: 0, items: [] }), v = d([]), u = d(""), C = E(() => p.value.slice(0, 8)), T = E(() => v.value.find(a => a.id === u.value) || null); async function I(a) { const e = k(); if (!e?.upload_file_to_java) throw new Error("当前桌面端未提供文件上传桥接能力"); const t = []; for (const o of a) { const c = typeof o == "string" ? o : o.absolutePath, V = typeof o == "string" ? void 0 : o.relativePath, y = await e.upload_file_to_java(c, V); if (!y?.success || !y.data) throw new Error(y?.error || y?.message || `上传失败:${c}`); t.push(y.data) } return t } async function B(a) { const e = await J(); v.value = e || []; const t = v.value.find(c => c.id === u.value); if (t) { u.value = t.id; return } const o = v.value.find(c => c.isDefault); if (o) { u.value = o.id; return } u.value = v.value[0]?.id || "" } async function D(a, e) { p.value = a, g.value = "", f.value = await I(a), r.success(e) } async function N() { const a = k(); if (!a?.select_brand_xlsx_files) { r.warning("当前环境不支持文件选择,请在本机客户端中打开"); return } try { const e = await a.select_brand_xlsx_files(); if (!e?.length) return; await D(e, `已选择 ${e.length} 个待转换文件`) } catch (e) { r.error(e instanceof Error ? e.message : "选择失败") } } async function R() { const a = k(); if (!a?.select_brand_folder) { r.warning("当前环境不支持文件夹选择,请在本机客户端中打开"); return } try { const e = await a.select_brand_folder(); if (!e) return; g.value = e.split(/[/\\]/).filter(Boolean).pop() || ""; const t = await Z(e); if (t.success && t.items?.length) { p.value = t.items.map(o => o.relativePath), f.value = await I(t.items), r.success(`已选择文件夹内 ${t.items.length} 个 xlsx 文件`); return } r.warning(t.error || "该文件夹下没有 xlsx 文件") } catch (e) { r.error(e instanceof Error ? e.message : "选择失败") } } async function $() { if (!f.value.length) { r.warning("请先选择待转换 Excel 文件或文件夹"); return } if (!u.value) { r.warning("请先选择模板"); return } try { m.value = !0; const a = await L({ files: f.value.map(e => ({ fileKey: e.fileKey, originalFilename: e.originalFilename, relativePath: e.relativePath })), templateId: u.value, archiveName: f.value.some(e => !!e.relativePath) && g.value ? g.value : void 0 }); h.value = a, b.value = a.items || [], await x(), r.success("格式转换完成") } catch (a) { r.error(a instanceof Error ? a.message : "格式转换失败") } finally { m.value = !1 } } async function x() { try { const a = await O(); b.value = a.items || [], h.value = { total: a.items?.length || 0, successCount: a.items?.filter(e => e.success).length || 0, failedCount: a.items?.filter(e => !e.success).length || 0, items: a.items || [] } } catch { } } async function S(a) { try { await G(a), await x(), r.success("已删除") } catch (e) { r.error(e instanceof Error ? e.message : "删除失败") } } async function U(a) { const e = k(), t = a.downloadUrl || (a.resultId ? Q(a.resultId) : ""); if (!t) { r.warning("当前结果没有下载地址"); return } const o = a.outputFilename || `${new Date().toISOString().slice(0, 10).replace(/-/g, "")}.txt`; if (e?.save_file_from_url_new) { const c = await e.save_file_from_url_new(t, o); c.success ? r.success(`已保存:${c.path || o}`) : c.error && c.error !== "用户取消" && r.error(c.error); return } } return H(() => { B().catch(() => { }), x().catch(() => { }) }), (a, e) => (l(), n("div", ee, [z(K, { active: "convert" }), s("div", se, [s("aside", te, [e[5] || (e[5] = s("div", { class: "section-title" }, "选择文件", -1)), s("div", ae, [e[1] || (e[1] = s("div", { class: "hint" }, "选择需要转换的 Excel 文件或文件夹,将按所选模板生成 txt 文件。", -1)), s("div", { class: "btns" }, [s("button", { type: "button", class: "opt-btn", onClick: N }, "选择 Excel 文件"), s("button", { type: "button", class: "opt-btn", onClick: R }, "选择文件夹")]), s("div", le, [p.value.length ? (l(), n(w, { key: 0 }, [(l(!0), n(w, null, F(C.value, t => (l(), n("span", { key: t }, i(t), 1))), 128)), p.value.length > C.value.length ? (l(), n("span", ne, " 还有 " + i(p.value.length - C.value.length) + " 个文件未展开显示 ", 1)) : _("", !0)], 64)) : (l(), n("span", oe, "暂未选择待转换文件"))])]), e[6] || (e[6] = s("div", { class: "section-title" }, "模板选择", -1)), s("div", re, [(l(!0), n(w, null, F(v.value, t => (l(), n("label", { key: t.id, class: P(["radio-item", { active: u.value === t.id }]) }, [M(s("input", { "onUpdate:modelValue": e[0] || (e[0] = o => u.value = o), type: "radio", value: t.id, name: "convert-template" }, null, 8, ie), [[j, u.value]]), s("div", ce, [s("div", null, [s("span", ue, [q(i(t.templateName) + " ", 1), t.isDefault ? (l(), n("span", de, "默认")) : t.builtIn ? (l(), n("span", ve, "内置")) : (l(), n("span", pe, "自定义"))]), s("div", _e, "输出文件:" + i(t.outputFilename), 1)])])], 2))), 128)), v.value.length ? _("", !0) : (l(), n("div", fe, "暂无可用模板"))]), e[7] || (e[7] = s("div", { class: "section-title" }, "转换说明", -1)), s("div", me, [s("label", he, [e[3] || (e[3] = s("input", { type: "checkbox", checked: "", disabled: "" }, null, -1)), s("div", null, [e[2] || (e[2] = s("span", { class: "label" }, "按当前模板输出", -1)), s("div", ye, "当前模板:" + i(T.value?.templateName || "未加载模板"), 1)])]), e[4] || (e[4] = s("label", { class: "radio-item active" }, [s("input", { type: "checkbox", checked: "", disabled: "" }), s("div", null, [s("span", { class: "label" }, "SKU 使用雪花ID-序号"), s("div", { class: "desc" }, "例如 1773816146796-1")])], -1))]), s("div", ge, [s("button", { type: "button", class: "btn-run", disabled: m.value, onClick: $ }, i(m.value ? "转换中..." : "开始转换"), 9, be), s("span", we, i(m.value ? "正在生成并上传结果,请稍候…" : "选择文件后即可执行格式转换,结果会显示在右侧供下载"), 1)])]), s("section", ke, [e[12] || (e[12] = s("div", { class: "panel-header" }, "转换结果", -1)), s("div", Ce, [s("div", xe, [s("div", Fe, [e[8] || (e[8] = s("span", { class: "summary-label" }, "已处理文件", -1)), s("strong", null, i(h.value.total), 1)]), s("div", Ie, [e[9] || (e[9] = s("span", { class: "summary-label" }, "成功结果", -1)), s("strong", null, i(h.value.successCount), 1)]), s("div", Pe, [e[10] || (e[10] = s("span", { class: "summary-label" }, "失败文件", -1)), s("strong", null, i(h.value.failedCount), 1)])]), s("div", Ee, [e[11] || (e[11] = s("div", { class: "result-list-header" }, [s("span", null, "生成的结果压缩包列表")], -1)), b.value.length === 0 ? (l(), n("div", Te, " 暂无转换结果,完成格式转换后会在这里展示结果压缩包 ")) : (l(), n("ul", Be, [(l(!0), n(w, null, F(b.value, t => (l(), n("li", { key: `${t.resultId || t.outputFilename || t.sourceFilename}`, class: "task-item" }, [s("div", De, [s("span", { class: "id", title: t.sourceFilename }, i(t.sourceFilename || "-"), 9, Ne), t.outputFilename ? (l(), n("div", Re, "压缩包文件:" + i(t.outputFilename), 1)) : _("", !0), t.error ? (l(), n("div", $e, "错误信息:" + i(t.error), 1)) : _("", !0)]), s("div", Se, [s("span", { class: P(["status", t.success ? "success" : "failed"]) }, i(t.success ? "已完成" : "失败"), 3), t.success && (t.downloadUrl || t.resultId) ? (l(), n("button", { key: 0, type: "button", class: "download", onClick: o => U(t) }, " 下载压缩包 ", 8, Ue)) : _("", !0), t.resultId ? (l(), n("button", { key: 1, type: "button", class: "btn-delete", onClick: o => S(t.resultId) }, " 删除 ", 8, Ve)) : _("", !0)])]))), 128))]))])])])])])) } }), He = W(Ae, [["__scopeId", "data-v-0e58908e"]]); X(He).use(Y).mount("#app");