epic-designer-dev
Version:
基于vue3的设计器,可视化开发页面表单。在epic-designer的基础上新增了字典选择器
77 lines (76 loc) • 1.95 kB
JavaScript
import { effectScope as N, ref as c } from "vue";
/* empty css */
import "vuedraggable";
import { deepCompareAndModify as y, findSchemaById as E } from "../common/data.js";
import "@vueuse/core";
import "../../../hooks/src/store/index.js";
import "./pluginManager.js";
function B(l, v, f) {
const p = N(), u = c([]), o = c([]), t = c(null), h = 60, m = 150;
let s = 0;
const a = (e) => {
try {
const n = JSON.parse(e.pageSchema);
y(l, n);
const r = e.selectedId ? E(l.schemas, e.selectedId) : void 0;
f(r ?? void 0);
} catch (n) {
console.error("解析历史记录失败:", n);
}
}, i = (e) => {
var n;
return {
pageSchema: JSON.stringify(l),
selectedId: (n = v.selectedNode) == null ? void 0 : n.id,
type: e
};
};
function g(e = "插入组件") {
var r;
if (e === "加载数据" && ((r = t.value) == null ? void 0 : r.type) === "初始化") {
t.value = i(e);
return;
}
const n = Date.now();
s + m > n || (s = n, t.value !== null && (u.value.push(t.value), o.value = []), t.value = i(e), u.value.length > h && u.value.shift());
}
function R() {
if (u.value.length === 0)
return !1;
const e = u.value.pop();
return t.value !== null && o.value.push(t.value), t.value = e, a(e), !0;
}
function O() {
if (o.value.length === 0)
return !1;
const e = o.value.pop();
return t.value !== null && u.value.push(t.value), t.value = e, a(e), !0;
}
function d() {
u.value = [], o.value = [], t.value = null;
}
function S() {
return u.value.length;
}
function C() {
return o.value.length;
}
function I() {
p.stop(), d();
}
return {
currentRecord: t,
dispose: I,
getRedoCount: C,
getUndoCount: S,
push: g,
recordList: u,
redo: O,
reset: d,
undo: R,
undoList: o
};
}
export {
B as useRevoke
};