|
@@ -34,10 +34,39 @@
|
|
|
>
|
|
|
<n-input v-model:value="modalForm.title" />
|
|
|
</n-form-item>
|
|
|
-
|
|
|
- <n-form-item label="备注" path="remark">
|
|
|
- <n-input v-model:value="modalForm.remark" />
|
|
|
+ <n-form-item label="封面" path="cover">
|
|
|
+ <n-upload
|
|
|
+ :multiple="false"
|
|
|
+ :default-upload="true"
|
|
|
+ list-type="image-card"
|
|
|
+ :custom-request="uploadCover"
|
|
|
+ :max="1"
|
|
|
+ :default-file-list="previewFileList"
|
|
|
+ @preview="handlePreview"
|
|
|
+ @remove="handleCoverRemove"
|
|
|
+ />
|
|
|
+ <n-modal
|
|
|
+ v-model:show="showModal"
|
|
|
+ preset="card"
|
|
|
+ style="width: 600px"
|
|
|
+ title=""
|
|
|
+ >
|
|
|
+ <img :src="previewImageUrl" style="width: 100%">
|
|
|
+ </n-modal>
|
|
|
+ </n-form-item>
|
|
|
+ <n-form-item
|
|
|
+ label="分类" path="categoryId" :rule="{
|
|
|
+ required: false,
|
|
|
+ type: 'number',
|
|
|
+ trigger: ['change', 'blur'],
|
|
|
+ message: '请输入分类',
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <n-select
|
|
|
+ v-model:value="modalForm.categoryId" :options="allCategory" clearable filterable tag
|
|
|
+ />
|
|
|
</n-form-item>
|
|
|
+
|
|
|
<n-form-item label="是否显示" path="isPublish">
|
|
|
<NSwitch v-model:value="modalForm.isPublish">
|
|
|
<template #checked>
|
|
@@ -70,12 +99,18 @@ import { useUserStore } from '@/store/index.js'
|
|
|
import { formatDateTime } from '@/utils'
|
|
|
import { NButton, NSwitch } from 'naive-ui'
|
|
|
import { useRoute, useRouter } from 'vue-router'
|
|
|
+import categoryApi from '../category/api'
|
|
|
import api from './api.js'
|
|
|
|
|
|
const $table = ref(null)
|
|
|
|
|
|
const router = useRouter()
|
|
|
const { userId } = useUserStore()
|
|
|
+
|
|
|
+const previewFileList = ref([])
|
|
|
+const showModal = ref(false)
|
|
|
+const previewImageUrl = ref('')
|
|
|
+
|
|
|
const route = useRoute()
|
|
|
const detail = ref({
|
|
|
title: '',
|
|
@@ -146,7 +181,7 @@ const columns = [
|
|
|
type: 'primary',
|
|
|
style: 'margin-left: 12px;',
|
|
|
disabled: row.code === 'SUPER_ADMIN',
|
|
|
- onClick: () => handleEdit(row),
|
|
|
+ onClick: () => handleFormEdit(row),
|
|
|
},
|
|
|
{
|
|
|
default: () => '编辑',
|
|
@@ -196,4 +231,51 @@ onMounted(() => {
|
|
|
$table.value?.handleSearch()
|
|
|
getMenuDetail()
|
|
|
})
|
|
|
+
|
|
|
+async function uploadCover({ file }) {
|
|
|
+ const data = new FormData()
|
|
|
+ data.append('file', file.file)
|
|
|
+ const res = await api.uploadImage(data)
|
|
|
+ modalForm.value.cover = res.data
|
|
|
+ file.url = res.data
|
|
|
+ file.thumbnailUrl = res.data
|
|
|
+ previewFileList.value = [{
|
|
|
+ id: '0',
|
|
|
+ status: 'finished',
|
|
|
+ url: res.data,
|
|
|
+ }]
|
|
|
+}
|
|
|
+
|
|
|
+function handlePreview(file) {
|
|
|
+ const { url } = file
|
|
|
+ previewImageUrl.value = url
|
|
|
+ showModal.value = true
|
|
|
+}
|
|
|
+
|
|
|
+async function handleFormEdit(data = {}) {
|
|
|
+ modalForm.value = {
|
|
|
+ ...data,
|
|
|
+ userId,
|
|
|
+ }
|
|
|
+ console.log('handleFormEdit', modalForm.value)
|
|
|
+ if (modalForm.value.cover) {
|
|
|
+ previewFileList.value = [{
|
|
|
+ id: '0',
|
|
|
+ status: 'finished',
|
|
|
+ url: modalForm.value.cover,
|
|
|
+ }]
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ previewFileList.value = []
|
|
|
+ }
|
|
|
+ handleEdit(data)
|
|
|
+}
|
|
|
+function handleCoverRemove() {
|
|
|
+ modalForm.value.cover = ''
|
|
|
+ previewFileList.value = []
|
|
|
+ previewImageUrl.value = ''
|
|
|
+}
|
|
|
+
|
|
|
+const allCategory = ref([])
|
|
|
+categoryApi.getAll().then(({ data = [] }) => (allCategory.value = data.map(item => ({ label: item.title, value: item.id }))))
|
|
|
</script>
|