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