|
@@ -14,24 +14,20 @@
|
|
</n-input>
|
|
</n-input>
|
|
</MeQueryItem>
|
|
</MeQueryItem>
|
|
<MeQueryItem label="状态" :label-width="50">
|
|
<MeQueryItem label="状态" :label-width="50">
|
|
- <n-select
|
|
|
|
- v-model:value="queryItems.enable" clearable :options="[
|
|
|
|
- { label: '启用', value: 1 },
|
|
|
|
- { label: '停用', value: 0 },
|
|
|
|
- ]"
|
|
|
|
- />
|
|
|
|
|
|
+ <n-select v-model:value="queryItems.enable" clearable :options="[
|
|
|
|
+ { label: '启用', value: 1 },
|
|
|
|
+ { label: '停用', value: 0 },
|
|
|
|
+ ]" />
|
|
</MeQueryItem>
|
|
</MeQueryItem>
|
|
</MeCrud>
|
|
</MeCrud>
|
|
|
|
|
|
<MeModal ref="modalRef" width="520px">
|
|
<MeModal ref="modalRef" width="520px">
|
|
<n-form ref="modalFormRef" label-placement="left" label-align="left" :label-width="80" :model="modalForm">
|
|
<n-form ref="modalFormRef" label-placement="left" label-align="left" :label-width="80" :model="modalForm">
|
|
- <n-form-item
|
|
|
|
- label="分类名" path="title" :rule="{
|
|
|
|
- required: true,
|
|
|
|
- message: '请输入分类名',
|
|
|
|
- trigger: ['input', 'blur'],
|
|
|
|
- }"
|
|
|
|
- >
|
|
|
|
|
|
+ <n-form-item label="分类名" path="title" :rule="{
|
|
|
|
+ required: true,
|
|
|
|
+ message: '请输入分类名',
|
|
|
|
+ trigger: ['input', 'blur'],
|
|
|
|
+ }">
|
|
<n-input v-model:value="modalForm.title" />
|
|
<n-input v-model:value="modalForm.title" />
|
|
</n-form-item>
|
|
</n-form-item>
|
|
<n-form-item label="上层分类" path="parentId">
|
|
<n-form-item label="上层分类" path="parentId">
|
|
@@ -40,6 +36,28 @@
|
|
<n-form-item label="备注" path="remark">
|
|
<n-form-item label="备注" path="remark">
|
|
<n-input v-model:value="modalForm.remark" />
|
|
<n-input v-model:value="modalForm.remark" />
|
|
</n-form-item>
|
|
</n-form-item>
|
|
|
|
+ <!-- {{ modalForm.translations }} -->
|
|
|
|
+ <n-tabs type="line" v-if="modalForm.translations.length > 0" animated>
|
|
|
|
+ <template v-for="(lang, index) in langs" :key="lang">
|
|
|
|
+ <n-tab-pane :name="lang" :tab="langLabel[lang]" :index="index">
|
|
|
|
+ <n-form-item label="名称" path="title" :rule="{
|
|
|
|
+ required: true,
|
|
|
|
+ message: '请输入名称',
|
|
|
|
+ trigger: ['input', 'blur'],
|
|
|
|
+ }">
|
|
|
|
+ <n-input v-model:value="modalForm.translations[index].title" />
|
|
|
|
+ </n-form-item>
|
|
|
|
+
|
|
|
|
+ <n-form-item label="描述" path="description" :rule="{
|
|
|
|
+ required: false,
|
|
|
|
+ message: '请输入描述',
|
|
|
|
+ trigger: ['input', 'blur'],
|
|
|
|
+ }">
|
|
|
|
+ <n-input v-model:value="modalForm.translations[index].description" type="textarea" />
|
|
|
|
+ </n-form-item>
|
|
|
|
+ </n-tab-pane>
|
|
|
|
+ </template>
|
|
|
|
+ </n-tabs>
|
|
|
|
|
|
<n-form-item label="状态" path="enable">
|
|
<n-form-item label="状态" path="enable">
|
|
<NSwitch v-model:value="modalForm.enable">
|
|
<NSwitch v-model:value="modalForm.enable">
|
|
@@ -63,6 +81,7 @@ import { useUserStore } from '@/store/index.js'
|
|
import { formatDateTime } from '@/utils'
|
|
import { formatDateTime } from '@/utils'
|
|
import { NButton, NSwitch } from 'naive-ui'
|
|
import { NButton, NSwitch } from 'naive-ui'
|
|
import { onMounted, watchEffect } from 'vue'
|
|
import { onMounted, watchEffect } from 'vue'
|
|
|
|
+import { initTranslations, langLabel, langs } from '@/utils/translations'
|
|
import api from './api'
|
|
import api from './api'
|
|
|
|
|
|
defineOptions({ name: 'Category' })
|
|
defineOptions({ name: 'Category' })
|
|
@@ -79,7 +98,10 @@ const { modalRef, modalFormRef, modalAction, modalForm, handleAdd, handleDelete,
|
|
doCreate: api.create,
|
|
doCreate: api.create,
|
|
doDelete: api.delete,
|
|
doDelete: api.delete,
|
|
doUpdate: api.update,
|
|
doUpdate: api.update,
|
|
- initForm: { enable: true },
|
|
|
|
|
|
+ initForm: {
|
|
|
|
+ enable: true,
|
|
|
|
+ translations: initTranslations({}, ['title', 'remark']).translations,
|
|
|
|
+ },
|
|
refresh: (_, keepCurrentPage) => $table.value?.handleSearch(keepCurrentPage),
|
|
refresh: (_, keepCurrentPage) => $table.value?.handleSearch(keepCurrentPage),
|
|
})
|
|
})
|
|
onMounted(() => {
|
|
onMounted(() => {
|