Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions internal/eslint-config/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,21 +29,21 @@
"eslint-plugin-command": "^0.2.7"
},
"devDependencies": {
"@eslint/js": "^9.31.0",
"@eslint/js": "^9.32.0",
"@types/eslint": "^9.6.1",
"@typescript-eslint/eslint-plugin": "^8.37.0",
"@typescript-eslint/parser": "^8.37.0",
"eslint": "^9.31.0",
"eslint-config-prettier": "^10.1.5",
"@typescript-eslint/eslint-plugin": "^8.39.0",
"@typescript-eslint/parser": "^8.39.0",
"eslint": "^9.32.0",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-eslint-comments": "^3.2.0",
"eslint-plugin-jsdoc": "^50.8.0",
"eslint-plugin-jsonc": "^2.20.1",
"eslint-plugin-no-only-tests": "^3.3.0",
"eslint-plugin-prettier": "^5.5.1",
"eslint-plugin-regexp": "^2.9.0",
"eslint-plugin-prettier": "^5.5.4",
"eslint-plugin-regexp": "^2.10.0",
"eslint-plugin-unicorn": "^56.0.1",
"eslint-plugin-unused-imports": "^4.1.4",
"eslint-plugin-vue": "^10.3.0",
"eslint-plugin-vue": "^10.4.0",
"globals": "^15.15.0",
"jsonc-eslint-parser": "^2.4.0",
"vue-eslint-parser": "^10.2.0"
Expand Down
2 changes: 1 addition & 1 deletion internal/prettier-config/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,6 @@
"prettier": "^3.6.2"
},
"devDependencies": {
"prettier-plugin-packagejson": "^2.5.18"
"prettier-plugin-packagejson": "^2.5.19"
}
}
2 changes: 1 addition & 1 deletion internal/stylelint-config/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
"postcss-html": "^1.8.0",
"postcss-scss": "^4.0.9",
"prettier": "^3.6.2",
"stylelint": "^16.22.0",
"stylelint": "^16.23.1",
"stylelint-config-recommended": "^14.0.1",
"stylelint-config-recommended-scss": "^14.1.0",
"stylelint-config-recommended-vue": "^1.6.1",
Expand Down
4 changes: 2 additions & 2 deletions internal/ts-config/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@
"web.json"
],
"dependencies": {
"@types/node": "^22.16.4"
"@types/node": "^22.17.0"
},
"devDependencies": {
"vite": "^7.0.5"
"vite": "^7.1.1"
}
}
8 changes: 4 additions & 4 deletions internal/vite-config/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,15 @@
"ant-design-vue": "^4.2.6",
"dayjs": "^1.11.13",
"dotenv": "^16.6.1",
"fs-extra": "^11.3.0",
"fs-extra": "^11.3.1",
"less": "^4.4.0",
"picocolors": "^1.1.1",
"pkg-types": "^1.3.1",
"postcss": "^8.5.6",
"rollup-plugin-visualizer": "^5.14.0",
"unbuild": "^3.5.0",
"unocss": "^66.3.3",
"vite": "^7.0.5",
"unbuild": "^3.6.0",
"unocss": "^66.4.2",
"vite": "^7.1.1",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-dts": "^3.9.1",
"vite-plugin-html": "^3.2.2",
Expand Down
52 changes: 26 additions & 26 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,13 @@
"@ant-design/icons-vue": "^7.0.1",
"@iconify/vue": "^4.3.0",
"@jiaminghi/color": "^1.1.3",
"@vue/shared": "^3.5.17",
"@vueuse/core": "^13.5.0",
"@vueuse/shared": "^13.5.0",
"@vue/shared": "^3.5.18",
"@vueuse/core": "^13.6.0",
"@vueuse/shared": "^13.6.0",
"@zxcvbn-ts/core": "^3.0.4",
"animate.css": "^4.1.1",
"ant-design-vue": "^4.2.6",
"axios": "^1.10.0",
"axios": "^1.11.0",
"bootstrap": "^5.3.7",
"codemirror": "5.65.16",
"cropperjs": "^1.6.2",
Expand All @@ -56,15 +56,15 @@
"sm-crypto": "^0.3.13",
"sortablejs": "^1.15.6",
"uuid": "^11.1.0",
"vue-data-ui": "^2.15.5",
"vue-i18n": "^11.1.10",
"vue-data-ui": "^2.17.11",
"vue-i18n": "^11.1.11",
"vue-json-pretty": "^2.5.0",
"vue-router": "^4.5.1",
"vue-types": "^6.0.0",
"vuedraggable": "^4.1.0"
},
"devDependencies": {
"@iconify/json": "^2.2.359",
"@iconify/json": "^2.2.367",
"@logicflow/core": "^1.2.28",
"@logicflow/extension": "^1.2.28",
"@mfish/core": "workspace:*",
Expand All @@ -82,18 +82,18 @@
"@rushstack/eslint-patch": "^1.12.0",
"@types/crypto-js": "^4.2.2",
"@types/fs-extra": "^11.0.4",
"@types/inquirer": "^9.0.8",
"@types/inquirer": "^9.0.9",
"@types/intro.js": "^5.1.5",
"@types/jsdom": "^21.1.7",
"@types/lodash-es": "^4.17.12",
"@types/node": "^22.16.4",
"@types/node": "^22.17.0",
"@types/nprogress": "^0.2.3",
"@types/qrcode": "^1.5.5",
"@types/qs": "^6.14.0",
"@types/sm-crypto": "^0.3.4",
"@types/sortablejs": "^1.15.8",
"@typescript-eslint/eslint-plugin": "^8.37.0",
"@typescript-eslint/parser": "^8.37.0",
"@typescript-eslint/eslint-plugin": "^8.39.0",
"@typescript-eslint/parser": "^8.39.0",
"@vitejs/plugin-legacy": "^6.1.1",
"@vitejs/plugin-vue": "^5.2.4",
"@vitejs/plugin-vue-jsx": "^4.2.0",
Expand All @@ -103,40 +103,40 @@
"autoprefixer": "^10.4.21",
"cross-env": "^7.0.3",
"dotenv": "^16.6.1",
"eslint": "^9.31.0",
"eslint-config-prettier": "^10.1.5",
"eslint-plugin-prettier": "^5.5.1",
"eslint-plugin-vue": "^10.3.0",
"eslint": "^9.32.0",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-prettier": "^5.5.4",
"eslint-plugin-vue": "^10.4.0",
"esno": "^4.8.0",
"fs-extra": "^11.3.0",
"inquirer": "^12.7.0",
"fs-extra": "^11.3.1",
"inquirer": "^12.9.0",
"jsdom": "^26.1.0",
"less": "^4.4.0",
"naive-ui": "^2.42.0",
"npm-run-all": "^4.1.5",
"picocolors": "^1.1.1",
"postcss": "^8.5.6",
"prettier": "^3.6.2",
"prettier-plugin-packagejson": "^2.5.18",
"prettier-plugin-packagejson": "^2.5.19",
"rimraf": "^6.0.1",
"rollup": "^4.45.1",
"rollup": "^4.46.2",
"rollup-plugin-visualizer": "^5.14.0",
"stylelint": "^16.22.0",
"stylelint": "^16.23.1",
"stylelint-config-standard": "^37.0.0",
"stylelint-order": "^6.0.4",
"terser": "^5.43.1",
"turbo": "^2.5.5",
"typescript": "^5.8.3",
"unbuild": "^3.5.0",
"unocss": "^66.3.3",
"vite": "^7.0.5",
"typescript": "^5.9.2",
"unbuild": "^3.6.0",
"unocss": "^66.4.2",
"vite": "^7.1.1",
"vite-plugin-html": "^3.2.2",
"vite-plugin-imagemin": "^0.6.1",
"vite-plugin-mkcert": "^1.17.8",
"vite-plugin-mock": "^3.0.2",
"vite-plugin-svg-icons": "^2.0.1",
"vite-plugin-vue-setup-extend": "^0.4.0",
"vue": "^3.5.17",
"vue": "^3.5.18",
"vue-eslint-parser": "^10.2.0",
"vue-tsc": "^2.2.12"
},
Expand Down Expand Up @@ -164,7 +164,7 @@
"node": ">=20",
"pnpm": ">=9"
},
"packageManager": "pnpm@10.13.0",
"packageManager": "pnpm@10.14.0",
"pnpm": {
"peerDependencyRules": {
"allowedVersions": {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
<template>
<VueJsonPretty v-bind="$props" />
<VueJsonPretty v-bind="$props" :theme="darkMode" />
</template>

<script lang="ts" setup>
import VueJsonPretty from "vue-json-pretty";
import "vue-json-pretty/lib/styles.css";
import { useRootSetting } from "@core/hooks";

defineProps({
deep: { type: Number, default: 3 },
showLength: { type: Boolean, default: true },
showLineNumber: { type: Boolean, default: true },
data: Object
});

const darkMode = useRootSetting().getDarkMode;
</script>
5 changes: 1 addition & 4 deletions packages/core/src/utils/HBuildUtils.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import { h } from "vue";
import { JsonPreview } from "@core/components/CodeEditor";
import { useRootSetting } from "@core/hooks";

/**
* @description: vue通过h动态创建组件
* @author: mfish
Expand All @@ -11,10 +9,9 @@ export function buildJsonPreview(data: any) {
if (data === undefined || data === null || data === "" || (!data.startsWith("{") && !data.startsWith("["))) {
return h("div", data);
}
const darkMode = useRootSetting().getDarkMode;
try {
const json = JSON.parse(data);
return h(JsonPreview, { data: json, theme: darkMode.value, deep: 2 });
return h(JsonPreview, { data: json, deep: 2 });
} catch {
return h("div", data);
}
Expand Down
1,401 changes: 752 additions & 649 deletions packages/custom-api/core/index.mjs

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions packages/nocode/core/DragInData.js
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ const fe = e({ __name: "DataSelectModal", props: { selectData: { type: Object }
t2[a3.name].value = a3.defaultValue, a3.defaultValue && g2({ [a3.name]: a3.defaultValue });
}
s2.getCurConfigComponent.chart.data.params = t2;
}(a2, e3) }, { default: o(() => [p(n(x), { class: "radio-button", value: n(ae).CONSTANT }, { default: o(() => l3[1] || (l3[1] = [I("常量")])), _: 1, __: [1] }, 8, ["value"]), p(n(x), { class: "radio-button", value: n(ae).VARIABLE }, { default: o(() => l3[2] || (l3[2] = [I("变量")])), _: 1, __: [2] }, 8, ["value"]), p(n(x), { class: "radio-button", value: n(ae).EVENT }, { default: o(() => l3[3] || (l3[3] = [I("事件")])), _: 1, __: [3] }, 8, ["value"])]), _: 2 }, 1032, ["value", "onUpdate:value", "onChange"])) : C("", true)]), _: 2 }, 1024)]), n(s2).getCurConfigComponent.chart.data.params && n(s2).getCurConfigComponent.chart.data.params[e3.name] && n(s2).getCurConfigComponent.chart.data.params[e3.name].type === n(ae).CONSTANT ? (t(), c("div", Re, [p(n(A), { value: n(s2).getCurConfigComponent.chart.data.params[e3.name].value, "onUpdate:value": (a2) => n(s2).getCurConfigComponent.chart.data.params[e3.name].value = a2, placeholder: "请输入常量参数", onChange: (a2) => n(h2)(a2, e3) }, null, 8, ["value", "onUpdate:value", "onChange"])])) : C("", true), n(s2).getCurConfigComponent.chart.data.params && n(s2).getCurConfigComponent.chart.data.params[e3.name] && n(s2).getCurConfigComponent.chart.data.params[e3.name].type === n(ae).VARIABLE ? (t(), c("div", be, [p(de, { "filter-self": true, variable: n(s2).getCurConfigComponent.chart.data.params[e3.name].value, onOk: (a2) => function(e4, a3) {
}(a2, e3) }, { default: o(() => [p(n(x), { class: "radio-button", value: n(ae).CONSTANT }, { default: o(() => l3[1] || (l3[1] = [I("常量", -1)])), _: 1, __: [1] }, 8, ["value"]), p(n(x), { class: "radio-button", value: n(ae).VARIABLE }, { default: o(() => l3[2] || (l3[2] = [I("变量", -1)])), _: 1, __: [2] }, 8, ["value"]), p(n(x), { class: "radio-button", value: n(ae).EVENT }, { default: o(() => l3[3] || (l3[3] = [I("事件", -1)])), _: 1, __: [3] }, 8, ["value"])]), _: 2 }, 1032, ["value", "onUpdate:value", "onChange"])) : C("", true)]), _: 2 }, 1024)]), n(s2).getCurConfigComponent.chart.data.params && n(s2).getCurConfigComponent.chart.data.params[e3.name] && n(s2).getCurConfigComponent.chart.data.params[e3.name].type === n(ae).CONSTANT ? (t(), c("div", Re, [p(n(A), { value: n(s2).getCurConfigComponent.chart.data.params[e3.name].value, "onUpdate:value": (a2) => n(s2).getCurConfigComponent.chart.data.params[e3.name].value = a2, placeholder: "请输入常量参数", onChange: (a2) => n(h2)(a2, e3) }, null, 8, ["value", "onUpdate:value", "onChange"])])) : C("", true), n(s2).getCurConfigComponent.chart.data.params && n(s2).getCurConfigComponent.chart.data.params[e3.name] && n(s2).getCurConfigComponent.chart.data.params[e3.name].type === n(ae).VARIABLE ? (t(), c("div", be, [p(de, { "filter-self": true, variable: n(s2).getCurConfigComponent.chart.data.params[e3.name].value, onOk: (a2) => function(e4, a3) {
const t2 = H(s2.getCurConfigComponent.chart.data.params);
t2[a3.name].value = e4, 1 === e4.paramType ? g2(d2(e4, a3)) : g2({ [a3.name]: e4.defaultValue }), s2.getCurConfigComponent.chart.data.params = t2;
}(a2, e3) }, null, 8, ["variable", "onOk"])])) : C("", true), n(s2).getCurConfigComponent.chart.data.params && n(s2).getCurConfigComponent.chart.data.params[e3.name] && n(s2).getCurConfigComponent.chart.data.params[e3.name].type === n(ae).EVENT ? (t(), c("div", De, [p(ue, { "filter-self": true, events: n(s2).getCurConfigComponent.chart.data.params[e3.name].value, onOk: (a2) => function(e4, a3) {
Expand Down Expand Up @@ -229,9 +229,9 @@ const fe = e({ __name: "DataSelectModal", props: { selectData: { type: Object }
x2();
}, { immediate: true }), s(() => g2.getCurConfigComponent?.chart.data.id, () => {
0 !== g2.getCurConfigComponent?.chart.data.type && x2();
}), (l3, s2) => (t(), a(n(ce), null, { default: o(() => [f("div", { class: m(n(h2)) }, [f("div", Te, [s2[7] || (s2[7] = I(" 数据类型 ")), p(n(T), { value: n(g2).getCurConfigComponent.chart.data.type, "onUpdate:value": s2[0] || (s2[0] = (e3) => n(g2).getCurConfigComponent.chart.data.type = e3), options: v2, "option-type": "button", "button-style": "solid", size: "small", onChange: s2[1] || (s2[1] = () => {
}), (l3, s2) => (t(), a(n(ce), null, { default: o(() => [f("div", { class: m(n(h2)) }, [f("div", Te, [s2[7] || (s2[7] = I(" 数据类型 ", -1)), p(n(T), { value: n(g2).getCurConfigComponent.chart.data.type, "onUpdate:value": s2[0] || (s2[0] = (e3) => n(g2).getCurConfigComponent.chart.data.type = e3), options: v2, "option-type": "button", "button-style": "solid", size: "small", onChange: s2[1] || (s2[1] = () => {
r2("dataTypeChange", n(g2).getCurConfigComponent.chart.data.type);
}) }, null, 8, ["value"])]), p(n(V), { style: { margin: "0" } }), 0 === n(g2).getCurConfigComponent.chart.data.type ? i(l3.$slots, "static-data", { key: 0 }, void 0, true) : (t(), c(_, { key: 1 }, [f("div", xe, [p(n(E), { title: "点击右侧输入框切换数据源", placement: "left" }, { default: o(() => s2[8] || (s2[8] = [I(" 数据来源")])), _: 1, __: [8] }), p(ve, { "select-data": e2.selectData, "data-id": n(g2).getCurConfigComponent.chart.data.id, "data-name": n(g2).getCurConfigComponent.chart.data.name, "is-resource": n(g2).getCurConfigComponent.chart.isResource, "screen-id": n(g2).getId, onDataChange: D2, onDataRefresh: x2 }, { default: o(() => [i(l3.$slots, "data-select", {}, void 0, true)]), _: 3 }, 8, ["select-data", "data-id", "data-name", "is-resource", "screen-id"])]), f("div", Ae, [p(n(E), { title: "接口允许返回数据的最大条数", placement: "left" }, { default: o(() => s2[9] || (s2[9] = [I(" 数据限制")])), _: 1, __: [9] }), p(n(ie), { value: n(g2).getCurConfigComponent.chart.data.limit, "onUpdate:value": s2[2] || (s2[2] = (e3) => n(g2).getCurConfigComponent.chart.data.limit = e3), max: n(g2).getCurConfigComponent.chart.data.maxLimit <= 0 ? 1 / 0 : n(g2).getCurConfigComponent.chart.data.maxLimit, min: 1, suffix: "条" }, null, 8, ["value", "max"])]), p(le, { title: "刷新设置" }, { default: o(() => [f("div", Ve, [p(n(E), { title: "数据按照刷新间隔时间更新数据(编辑环境不生效)", placement: "left" }, { default: o(() => [p(n(M), { checked: N2.open, "onUpdate:checked": s2[3] || (s2[3] = (e3) => N2.open = e3) }, { default: o(() => s2[10] || (s2[10] = [I(" 自动刷新")])), _: 1, __: [10] }, 8, ["checked"])]), _: 1 }), N2.open ? (t(), c("div", Me, [p(n(O), { style: { margin: "0" }, "tip-formatter": (e3) => `刷新间隔 ${e3}(分钟)`, value: N2.interval, "onUpdate:value": s2[4] || (s2[4] = (e3) => N2.interval = e3), min: 0.5, max: 60, step: 0.5 }, null, 8, ["tip-formatter", "value"])])) : C("", true)]), f("div", Oe, [p(n(E), { title: "通过其他组件事件触发数据更新", placement: "left" }, { default: o(() => [p(n(M), { checked: b2.open, "onUpdate:checked": s2[5] || (s2[5] = (e3) => b2.open = e3) }, { default: o(() => s2[11] || (s2[11] = [I(" 事件刷新")])), _: 1, __: [11] }, 8, ["checked"])]), _: 1 }), b2.open ? (t(), a(ue, { key: 0, "filter-self": true, "hide-param": true, events: b2.events, onOk: S2, onDelete: w2 }, null, 8, ["events"])) : C("", true)])]), _: 1 }), k2.value && k2.value.length > 0 ? (t(), a(le, { key: 0, title: "参数设置" }, { default: o(() => [p(Ee, { params: k2.value, onParamChange: s2[6] || (s2[6] = () => {
}) }, null, 8, ["value"])]), p(n(V), { style: { margin: "0" } }), 0 === n(g2).getCurConfigComponent.chart.data.type ? i(l3.$slots, "static-data", { key: 0 }, void 0, true) : (t(), c(_, { key: 1 }, [f("div", xe, [p(n(E), { title: "点击右侧输入框切换数据源", placement: "left" }, { default: o(() => s2[8] || (s2[8] = [I(" 数据来源", -1)])), _: 1, __: [8] }), p(ve, { "select-data": e2.selectData, "data-id": n(g2).getCurConfigComponent.chart.data.id, "data-name": n(g2).getCurConfigComponent.chart.data.name, "is-resource": n(g2).getCurConfigComponent.chart.isResource, "screen-id": n(g2).getId, onDataChange: D2, onDataRefresh: x2 }, { default: o(() => [i(l3.$slots, "data-select", {}, void 0, true)]), _: 3 }, 8, ["select-data", "data-id", "data-name", "is-resource", "screen-id"])]), f("div", Ae, [p(n(E), { title: "接口允许返回数据的最大条数", placement: "left" }, { default: o(() => s2[9] || (s2[9] = [I(" 数据限制", -1)])), _: 1, __: [9] }), p(n(ie), { value: n(g2).getCurConfigComponent.chart.data.limit, "onUpdate:value": s2[2] || (s2[2] = (e3) => n(g2).getCurConfigComponent.chart.data.limit = e3), max: n(g2).getCurConfigComponent.chart.data.maxLimit <= 0 ? 1 / 0 : n(g2).getCurConfigComponent.chart.data.maxLimit, min: 1, suffix: "条" }, null, 8, ["value", "max"])]), p(le, { title: "刷新设置" }, { default: o(() => [f("div", Ve, [p(n(E), { title: "数据按照刷新间隔时间更新数据(编辑环境不生效)", placement: "left" }, { default: o(() => [p(n(M), { checked: N2.open, "onUpdate:checked": s2[3] || (s2[3] = (e3) => N2.open = e3) }, { default: o(() => s2[10] || (s2[10] = [I(" 自动刷新", -1)])), _: 1, __: [10] }, 8, ["checked"])]), _: 1 }), N2.open ? (t(), c("div", Me, [p(n(O), { style: { margin: "0" }, "tip-formatter": (e3) => `刷新间隔 ${e3}(分钟)`, value: N2.interval, "onUpdate:value": s2[4] || (s2[4] = (e3) => N2.interval = e3), min: 0.5, max: 60, step: 0.5 }, null, 8, ["tip-formatter", "value"])])) : C("", true)]), f("div", Oe, [p(n(E), { title: "通过其他组件事件触发数据更新", placement: "left" }, { default: o(() => [p(n(M), { checked: b2.open, "onUpdate:checked": s2[5] || (s2[5] = (e3) => b2.open = e3) }, { default: o(() => s2[11] || (s2[11] = [I(" 事件刷新", -1)])), _: 1, __: [11] }, 8, ["checked"])]), _: 1 }), b2.open ? (t(), a(ue, { key: 0, "filter-self": true, "hide-param": true, events: b2.events, onOk: S2, onDelete: w2 }, null, 8, ["events"])) : C("", true)])]), _: 1 }), k2.value && k2.value.length > 0 ? (t(), a(le, { key: 0, title: "参数设置" }, { default: o(() => [p(Ee, { params: k2.value, onParamChange: s2[6] || (s2[6] = () => {
r2("refreshData");
}) }, null, 8, ["params"])]), _: 1 })) : C("", true), y2.value && y2.value.length > 0 ? (t(), a(le, { key: 1, title: "数据设置", "allow-collapse": false }, { default: o(() => [f("div", Se, [s2[12] || (s2[12] = f("div", null, "源数据", -1)), p(n(U), { icon: "ant-design:double-right-outlined" }), s2[13] || (s2[13] = f("div", null, "目标数据", -1))]), f("div", we, [p(_e, { "field-list": y2.value }, null, 8, ["field-list"]), s2[14] || (s2[14] = f("div", { class: "divide-line" }, null, -1)), f("div", Le, [i(l3.$slots, "target-data", {}, void 0, true)])])]), _: 3 })) : C("", true)], 64)), i(l3.$slots, "default", {}, void 0, true)], 2)]), _: 3 }));
} }), $e = K(Ue, [["__scopeId", "data-v-bf4c43d4"]]), je = ["onMouseenter"], Pe = { class: "title" }, Be = e({ __name: "DragInData", props: { fields: { type: Array, default: () => [] }, maxCount: { type: Number, default: 9999 }, height: { type: Number, default: 0 } }, emits: ["dataChange"], setup(e2, { emit: i2 }) {
Expand Down
Loading