refactor(frontend): use composition api

This commit is contained in:
syuilo
2023-05-14 11:43:56 +09:00
parent 238d0fa667
commit 3d4a90b08a
7 changed files with 125 additions and 381 deletions

View File

@@ -9,49 +9,41 @@
</Sortable>
</template>
<script lang="ts">
import { defineComponent, defineAsyncComponent } from 'vue';
<script lang="ts" setup>
import { defineAsyncComponent } from 'vue';
import XSection from './els/page-editor.el.section.vue';
import XText from './els/page-editor.el.text.vue';
import XImage from './els/page-editor.el.image.vue';
import XNote from './els/page-editor.el.note.vue';
export default defineComponent({
components: {
Sortable: defineAsyncComponent(() => import('vuedraggable').then(x => x.default)),
XSection, XText, XImage, XNote,
},
const Sortable = defineAsyncComponent(() => import('vuedraggable').then(x => x.default));
props: {
modelValue: {
type: Array,
required: true,
},
},
const props = defineProps<{
modelValue: any[];
}>();
emits: ['update:modelValue'],
const emit = defineEmits<{
(ev: 'update:modelValue', value: any[]): void;
}>();
methods: {
updateItem(v) {
const i = this.modelValue.findIndex(x => x.id === v.id);
const newValue = [
...this.modelValue.slice(0, i),
v,
...this.modelValue.slice(i + 1),
];
this.$emit('update:modelValue', newValue);
},
function updateItem(v) {
const i = props.modelValue.findIndex(x => x.id === v.id);
const newValue = [
...props.modelValue.slice(0, i),
v,
...props.modelValue.slice(i + 1),
];
emit('update:modelValue', newValue);
}
removeItem(el) {
const i = this.modelValue.findIndex(x => x.id === el.id);
const newValue = [
...this.modelValue.slice(0, i),
...this.modelValue.slice(i + 1),
];
this.$emit('update:modelValue', newValue);
},
},
});
function removeItem(el) {
const i = props.modelValue.findIndex(x => x.id === el.id);
const newValue = [
...props.modelValue.slice(0, i),
...props.modelValue.slice(i + 1),
];
emit('update:modelValue', newValue);
}
</script>
<style lang="scss" module>

View File

@@ -1,5 +1,5 @@
<template>
<div class="cpjygsrt" :class="{ error: error != null, warn: warn != null }">
<div class="cpjygsrt">
<header>
<div class="title"><slot name="header"></slot></div>
<div class="buttons">
@@ -16,58 +16,40 @@
</button>
</div>
</header>
<p v-show="showBody" v-if="error != null" class="error">{{ i18n.t('_pages.script.typeError', { slot: error.arg + 1, expect: i18n.t(`script.types.${error.expect}`), actual: i18n.t(`script.types.${error.actual}`) }) }}</p>
<p v-show="showBody" v-if="warn != null" class="warn">{{ i18n.t('_pages.script.thereIsEmptySlot', { slot: warn.slot + 1 }) }}</p>
<div v-show="showBody" class="body">
<slot></slot>
</div>
</div>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
<script lang="ts" setup>
import { ref } from 'vue';
import { i18n } from '@/i18n';
export default defineComponent({
props: {
expanded: {
type: Boolean,
default: true,
},
removable: {
type: Boolean,
default: true,
},
draggable: {
type: Boolean,
default: false,
},
error: {
required: false,
default: null,
},
warn: {
required: false,
default: null,
},
},
emits: ['toggle', 'remove'],
data() {
return {
showBody: this.expanded,
i18n,
};
},
methods: {
toggleContent(show: boolean) {
this.showBody = show;
this.$emit('toggle', show);
},
remove() {
this.$emit('remove');
},
},
const props = withDefaults(defineProps<{
expanded?: boolean;
removable?: boolean;
draggable?: boolean;
}>(), {
expanded: true,
removable: true,
});
const emit = defineEmits<{
(ev: 'toggle', show: boolean): void;
(ev: 'remove'): void;
}>();
const showBody = ref(props.expanded);
function toggleContent(show: boolean) {
showBody.value = show;
emit('toggle', show);
}
function remove() {
emit('remove');
}
</script>
<style lang="scss" scoped>
@@ -128,20 +110,6 @@ export default defineComponent({
}
}
> .warn {
color: #b19e49;
margin: 0;
padding: 16px 16px 0 16px;
font-size: 14px;
}
> .error {
color: #f00;
margin: 0;
padding: 16px 16px 0 16px;
font-size: 14px;
}
> .body {
::v-deep(.juejbjww), ::v-deep(.eiipwacr) {
&:not(.inline):first-child {