page
Some checks failed
test / Run tests (push) Failing after 12s
build / Build (push) Failing after 21s

This commit is contained in:
王一之 2025-03-16 22:46:22 +08:00
parent fcd4682aff
commit 0a025f1b50
5 changed files with 61 additions and 57 deletions

View File

@ -92,12 +92,12 @@ export default defineConfig({
],
},
{
type: "asset",
type: "asset/source",
test: /\.d\.ts$/,
exclude: /node_modules/,
},
{
type: "asset",
type: "asset/source",
test: /\.tpl$/,
exclude: /node_modules/,
},

View File

@ -91,6 +91,10 @@ export class ScriptDAO extends Repo<Script> {
return super._save(val.uuid, val);
}
findByUUID(uuid: string) {
return this.get(uuid);
}
getAndCode(uuid: string): Promise<ScriptAndCode | undefined> {
return Promise.all([this.get(uuid), this.scriptCodeDAO.get(uuid)]).then(([script, code]) => {
if (!script || !code) {
@ -131,6 +135,10 @@ export class ScriptCodeDAO extends Repo<ScriptCode> {
super("scriptCode");
}
findByUUID(uuid: string) {
return this.get(uuid);
}
public save(val: ScriptCode) {
return super._save(val.uuid, val);
}

View File

@ -6,7 +6,6 @@ import {
Input,
Layout,
Menu,
Message,
Modal,
Space,
Typography,
@ -88,31 +87,31 @@ const MainLayout: React.FC<{
onClick={() => {
const el = document.getElementById("import-local");
el!.onchange = (e: Event) => {
const scriptCtl = IoC.instance(ScriptController) as ScriptController;
try {
// 获取文件
// @ts-ignore
const file = e.target.files[0];
// 实例化 FileReader对象
const reader = new FileReader();
reader.onload = async (processEvent) => {
// 创建blob url
const blob = new Blob(
// @ts-ignore
[processEvent.target!.result],
{
type: "application/javascript",
}
);
const url = URL.createObjectURL(blob);
await scriptCtl.importByUrl(url);
Message.success(t("import_local_success"));
};
// 调用readerAsText方法读取文本
reader.readAsText(file);
} catch (error) {
Message.error(`${t("import_local_failure")}: ${e}`);
}
// const scriptCtl = IoC.instance(ScriptController) as ScriptController;
// try {
// // 获取文件
// // @ts-ignore
// const file = e.target.files[0];
// // 实例化 FileReader对象
// const reader = new FileReader();
// reader.onload = async (processEvent) => {
// // 创建blob url
// const blob = new Blob(
// // @ts-ignore
// [processEvent.target!.result],
// {
// type: "application/javascript",
// }
// );
// const url = URL.createObjectURL(blob);
// await scriptCtl.importByUrl(url);
// Message.success(t("import_local_success"));
// };
// // 调用readerAsText方法读取文本
// reader.readAsText(file);
// } catch (error) {
// Message.error(`${t("import_local_failure")}: ${e}`);
// }
};
el!.click();
}}

View File

@ -194,7 +194,7 @@ const Sider: React.FC = () => {
<Routes>
<Route index element={<ScriptList />} />
<Route path="/script/editor">
<Route path=":id" element={<ScriptEditor />} />
<Route path=":uuid" element={<ScriptEditor />} />
<Route path="" element={<ScriptEditor />} />
</Route>
<Route path="/subscribe" element={<SubscribeList />} />

View File

@ -1,4 +1,4 @@
import { Script, ScriptDAO } from "@App/app/repo/scripts";
import { Script, ScriptCodeDAO, ScriptDAO } from "@App/app/repo/scripts";
import CodeEditor from "@App/pages/components/CodeEditor";
import React, { useEffect, useRef, useState } from "react";
import { useNavigate, useParams, useSearchParams } from "react-router-dom";
@ -143,8 +143,7 @@ const popstate = () => {
function ScriptEditor() {
const scriptDAO = new ScriptDAO();
const scriptCtrl = IoC.instance(ScriptController) as ScriptController;
const runtimeCtrl = IoC.instance(RuntimeController) as RuntimeController;
const scriptCodeDAO = new ScriptCodeDAO();
const template = useSearchParams()[0].get("template") || "";
const target = useSearchParams()[0].get("target") || "";
const navigate = useNavigate();
@ -167,6 +166,8 @@ function ScriptEditor() {
uuid: string;
selectSciptButtonAndTab: string;
}>();
const { uuid } = useParams();
const setShow = (key: visibleItem, show: boolean) => {
Object.keys(visible).forEach((k) => {
visible[k] = false;
@ -174,8 +175,6 @@ function ScriptEditor() {
visible[key] = show;
setVisible({ ...visible });
};
const { id } = useParams();
const save = (script: Script, e: editor.IStandaloneCodeEditor): Promise<Script> => {
// 解析code生成新的script并更新
return new Promise((resolve) => {
@ -363,19 +362,17 @@ function ScriptEditor() {
});
});
useEffect(() => {
scriptDAO.table
.orderBy("sort")
.toArray()
.then((scripts) => {
scriptDAO.all().then(async (scripts) => {
scripts.sort((a, b) => a.sort - b.sort);
setScriptList(scripts);
// 如果有id则打开对应的脚本
if (id) {
const iId = parseInt(id, 10);
if (uuid) {
for (let i = 0; i < scripts.length; i += 1) {
if (scripts[i].id === iId) {
if (scripts[i].uuid === uuid) {
const code = await scriptCodeDAO.findByUUID(uuid);
editors.push({
script: scripts[i],
code: scripts[i].code,
code: code!.code,
active: true,
hotKeys,
isChanged: false,
@ -387,7 +384,7 @@ function ScriptEditor() {
}
}
});
if (!id) {
if (!uuid) {
emptyScript(template || "", hotKeys, target).then((e) => {
editors.push(e);
setEditors([...editors]);