ow
This commit is contained in:
1 parent
6417562c4f
commit
f1e6e116c3
31 files changed
+2065
-309
No files matched your search
@@ -37,6 +37,7 @@ import familyPersonService from "@/service/master/familyPersonService";
|
||||
import familyTreeService from "@/service/master/familyTreeService";
|
||||
import dmsFileService from "@/service/master/dmsFileService";
|
||||
import { useLoginProfileStore } from "@/stores";
|
||||
import { chooseFiles } from "@/utils/chooseFiles";
|
||||
|
||||
/** ready:组件挂载完成通知(时序口径见文件底部 onMounted 注释) */
|
||||
const emit = defineEmits<{ (e: "ready"): void }>();
|
||||
@@ -1334,22 +1335,50 @@ function clearLocalFile(): void {
|
||||
localFileName.value = "";
|
||||
}
|
||||
|
||||
/** uni.chooseFile 选本地 .fm 并读文本(H5 原生 File.text / App FileSystemManager),与服务器列表通道互斥 */
|
||||
// #ifdef APP-PLUS
|
||||
// 项目 types 未含 plus 声明,App 运行时真实存在,本地宽松兜底
|
||||
// eslint-disable-next-line ts/no-explicit-any
|
||||
declare const plus: any;
|
||||
|
||||
/** App 侧读文本:plus.io FileReader(uni.getFileSystemManager 仅小程序可用,App 上调会 undefined) */
|
||||
function readLocalText(filePath: string): Promise<string> {
|
||||
return new Promise((resolve, reject) => {
|
||||
plus.io.resolveLocalFileSystemURL(
|
||||
filePath,
|
||||
(entry: any) => {
|
||||
entry.file(
|
||||
(file: any) => {
|
||||
const reader = new plus.io.FileReader();
|
||||
reader.onloadend = (event: any) => resolve(String(event.target.result ?? ""));
|
||||
reader.onerror = (error: any) => reject(error);
|
||||
reader.readAsText(file, "utf-8");
|
||||
},
|
||||
reject,
|
||||
);
|
||||
},
|
||||
reject,
|
||||
);
|
||||
});
|
||||
}
|
||||
// #endif
|
||||
|
||||
/** 选本地 .fm 并读文本(H5 File.text / 小程序 FileSystemManager / App plus.io FileReader),与服务器列表通道互斥 */
|
||||
async function pickLocalFile(): Promise<void> {
|
||||
try {
|
||||
const picked: any = await new Promise((resolve, reject) => {
|
||||
uni.chooseFile({ count: 1, extension: [".fm"], success: resolve, fail: reject });
|
||||
});
|
||||
const file = picked.tempFiles?.[0];
|
||||
const name = String(file?.name || picked.tempFilePaths?.[0]?.split("/").pop() || "exchange.fm");
|
||||
// 选文件统一走 chooseFiles:uni.chooseFile 在 App 端不存在(官方仅 H5/小程序支持)
|
||||
const picked = await chooseFiles(1, { extension: [".fm"] });
|
||||
const file = picked[0];
|
||||
if (!file) {
|
||||
return;
|
||||
}
|
||||
let text = "";
|
||||
// #ifdef H5
|
||||
text = await file.text();
|
||||
text = await (file.raw as File).text();
|
||||
// #endif
|
||||
// #ifndef H5
|
||||
// #ifdef MP
|
||||
const res: any = await new Promise((resolve, reject) => {
|
||||
uni.getFileSystemManager().readFile({
|
||||
filePath: picked.tempFilePaths[0],
|
||||
filePath: file.filePath,
|
||||
encoding: "utf8",
|
||||
success: resolve,
|
||||
fail: reject,
|
||||
@@ -1357,17 +1386,20 @@ async function pickLocalFile(): Promise<void> {
|
||||
});
|
||||
text = String(res.data ?? "");
|
||||
// #endif
|
||||
// #ifdef APP-PLUS
|
||||
text = await readLocalText(file.filePath);
|
||||
// #endif
|
||||
if (!text.trim()) {
|
||||
toast(t("FamilyTreePage.exchangeLocalBad"));
|
||||
return;
|
||||
}
|
||||
localFileText.value = text;
|
||||
localFileName.value = name;
|
||||
localFileName.value = file.name;
|
||||
pickedFileName.value = "";
|
||||
}
|
||||
catch (e: any) {
|
||||
// 用户取消不算错(errMsg 含 cancel),其余给统一读失败提示
|
||||
if (!String(e?.errMsg ?? e ?? "").includes("cancel")) {
|
||||
if (!String(e?.errMsg ?? e?.message ?? e ?? "").includes("cancel")) {
|
||||
toast(t("FamilyTreePage.exchangeLocalBad"));
|
||||
console.warn("[familyTreeExchange] choose local file failed:", e);
|
||||
}
|
||||
@@ -2702,7 +2734,8 @@ defineExpose({
|
||||
.tree-page__body--list {
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
padding: 20rpx;
|
||||
/* 顶部让出系统状态栏(App 端 navigationStyle:custom 会顶到状态栏;H5 下变量为 0) */
|
||||
padding: calc(20rpx + var(--status-bar-height, 0px)) 20rpx 20rpx;
|
||||
}
|
||||
|
||||
/* ===== 顶部两张卡片:用户身份 + 网盘用量(白底圆角,与下方族谱面板同宽同调) ===== */
|
||||
|
||||
Reference in new issue
Block a user