Skip to content

Commit ef263f5

Browse files
committed
导入功能
1 parent bd57714 commit ef263f5

File tree

3 files changed

+45
-16
lines changed

3 files changed

+45
-16
lines changed

src/App.vue

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,14 @@
1515
:key="dataItem.key"
1616
/>
1717
</VueDraggable>
18-
<div
19-
class="plot-data add-data"
20-
@click="graphData.push({ key: Math.random() })"
21-
>
22-
+ 添加
18+
<div class="plot-data add-data">
19+
<div
20+
@click="graphData.push({ key: Math.random() })"
21+
class="add-data-opt add"
22+
>
23+
+ 添加
24+
</div>
25+
<div @click="handleImport()" class="add-data-opt import">↓ 导入</div>
2326
</div>
2427
</div>
2528
<CodeDisplay :dataArr="cloneDeep(graphData)" />
@@ -42,9 +45,10 @@ import Graph from "./components/graph.vue";
4245
import DataBlock from "./components/dataBlock.vue";
4346
import CodeDisplay from "./components/codeDisplay.vue";
4447
import { VueDraggable } from "vue-draggable-plus";
45-
import type { FunctionPlotDatum } from "function-plot";
48+
import type { FunctionPlotDatum, FunctionPlotOptions } from "function-plot";
4649
import { onMounted, ref, watch } from "vue";
4750
import { cloneDeep } from "lodash-es";
51+
import JSON5 from "json5";
4852
const graphData = ref<(FunctionPlotDatum & { key: number })[]>([
4953
{ fn: "x^2", key: 1 },
5054
]);
@@ -77,6 +81,15 @@ function handleDrag() {
7781
handleResize();
7882
});
7983
}
84+
function handleImport() {
85+
const raw = prompt("源数据:");
86+
if (!raw) return;
87+
graphData.value =
88+
(<FunctionPlotOptions>JSON5.parse(raw)).data?.map((item) => ({
89+
key: Math.random(),
90+
...item,
91+
})) ?? [];
92+
}
8093
</script>
8194

8295
<style>
@@ -125,15 +138,27 @@ function handleDrag() {
125138
overflow: hidden;
126139
}
127140
.add-data {
128-
padding-top: 10px;
129-
padding-bottom: 10px;
130-
margin-bottom: 50px;
141+
padding: 0;
142+
display: flex;
143+
flex-direction: row;
131144
cursor: default;
132145
}
133-
.add-data:hover {
146+
.add-data-opt {
147+
padding: 10px 30px;
148+
}
149+
.add-data-opt.add {
150+
flex-grow: 1;
151+
}
152+
.add-data-opt:not(:nth-child(1)) {
153+
border-left: 1px solid var(--c-border);
154+
}
155+
.editor-inner {
156+
padding-bottom: 50px;
157+
}
158+
.add-data-opt:hover {
134159
background: var(--c-bk3);
135160
}
136-
.add-data:active {
161+
.add-data-opt:active {
137162
background: var(--c-bk1);
138163
}
139164

src/components/dataBlockInner/coordArrInputs.vue

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
:placeholder="fnType.coordArr.placeholder[1]"
2626
/>
2727
<span class="coord-label">{{ fnType.coordArr.fin }}</span>
28-
<span class="coordarr-delete" @click="privateData.splice(index, 1)">×</span>
28+
<span class="coordarr-delete" @click="privateData.splice(index, 1)"
29+
>×</span
30+
>
2931
</div>
3032
</VueDraggable>
3133
<div
@@ -45,7 +47,7 @@
4547
<script setup lang="ts">
4648
import { FnType } from "../../consts";
4749
import { FunctionPlotDatum } from "function-plot";
48-
import { computed, onMounted, ref, watch } from "vue";
50+
import { onMounted, ref, watch } from "vue";
4951
import { VueDraggable } from "vue-draggable-plus";
5052
5153
const { dataItem, fnType } = defineProps<{
@@ -97,12 +99,12 @@ onMounted(() => {
9799
border-radius: 50%;
98100
line-height: var(--d);
99101
text-align: center;
100-
border:transparent 1px solid
102+
border: transparent 1px solid;
101103
}
102104
.coordarr-delete:hover {
103105
opacity: 1;
104-
background-color: var(--c-red);
105-
border-color:var(--c-red2)
106+
background-color: var(--c-red);
107+
border-color: var(--c-red2);
106108
}
107109
.coordarr-delete:active {
108110
opacity: 1;

src/components/dataBlockInner/coordInputs.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@
99
<span class="coord-label">{{ input.label }}</span>
1010
<input
1111
type="number"
12+
:value="dataItem[input.value]?.[0] ?? ''"
1213
@input="handleCoordInput(dataItem!, input, 0, $event)"
1314
:placeholder="input.placeholder[0]"
1415
/>
1516
<span class="coord-label">{{ input.sep }}</span>
1617
<input
1718
type="number"
19+
:value="dataItem[input.value]?.[1] ?? ''"
1820
@input="handleCoordInput(dataItem!, input, 1, $event)"
1921
:placeholder="input.placeholder[1]"
2022
/>

0 commit comments

Comments
 (0)