refactor: routes and file

This commit is contained in:
张传龙 2022-09-04 12:18:47 +08:00
parent f1bc9edbac
commit bb171866b6
12 changed files with 43 additions and 244 deletions

View File

@ -25,7 +25,7 @@ export const basicRoutes = [
meta: { meta: {
title: '外部链接', title: '外部链接',
icon: 'mdi:link-variant', icon: 'mdi:link-variant',
order: 2, order: 4,
}, },
children: [ children: [
{ {

View File

@ -2,11 +2,11 @@ const Layout = () => import('@/layout/index.vue')
export default { export default {
name: 'Test', name: 'Test',
path: '/test', path: '/base',
component: Layout, component: Layout,
redirect: '/test/unocss', redirect: '/base/unocss',
meta: { meta: {
title: '基础功能测试', title: '基础功能',
customIcon: 'logo', customIcon: 'logo',
order: 1, order: 1,
}, },

View File

@ -19,8 +19,6 @@
import MdEditor from 'md-editor-v3' import MdEditor from 'md-editor-v3'
import 'md-editor-v3/lib/style.css' import 'md-editor-v3/lib/style.css'
const router = useRouter()
// refs // refs
let post = ref({}) let post = ref({})
let btnLoading = ref(false) let btnLoading = ref(false)
@ -31,7 +29,6 @@ function handleSavePost(e) {
setTimeout(() => { setTimeout(() => {
$message.success('保存成功') $message.success('保存成功')
btnLoading.value = false btnLoading.value = false
router.push('/example/table/post')
}, 2000) }, 2000)
} }
</script> </script>

39
src/views/demo/route.js Normal file
View File

@ -0,0 +1,39 @@
const Layout = () => import('@/layout/index.vue')
export default {
name: 'Demo',
path: '/demo',
component: Layout,
redirect: '/demo/crud-table',
meta: {
title: '示例页面',
customIcon: 'logo',
role: ['admin'],
requireAuth: true,
order: 3,
},
children: [
{
name: 'CrudTable',
path: 'crud-table',
component: () => import('./table/index.vue'),
meta: {
title: '文章列表',
icon: 'mdi:table',
role: ['admin'],
requireAuth: true,
},
},
{
name: 'MDEditor',
path: 'md-editor',
component: () => import('./editor/md-editor.vue'),
meta: {
title: 'MD编辑器',
icon: 'icon-park:editor',
role: ['admin'],
requireAuth: true,
},
},
],
}

View File

@ -1,3 +0,0 @@
<template>
<router-view></router-view>
</template>

View File

@ -1,181 +0,0 @@
import { h } from 'vue'
import { NButton, NSwitch } from 'naive-ui'
import { formatDateTime } from '@/utils'
import { renderIcon } from '@/utils/icon'
import api from './api'
export const usePostTable = () => {
// refs
const loading = ref(false)
const tableData = ref([])
const columns = ref([])
async function initTableData() {
loading.value = true
tableData.value = await getTableData()
loading.value = false
}
function handleDelete(row) {
if (row && row.id) {
$dialog.confirm({
content: '确定删除?',
confirm() {
$message.success('删除成功')
initTableData()
},
cancel() {
$message.success('已取消')
},
})
}
}
function handleEdit(row) {
if (row && row.id) {
$dialog.confirm({
content: '确定删除?',
confirm() {
$message.success('删除成功')
initTableData()
},
cancel() {
$message.success('已取消')
},
})
}
}
async function handleRecommend(row) {
if (row && row.id) {
row.recommending = true
setTimeout(() => {
row.isRecommend = !row.isRecommend
row.recommending = false
$message.success(row.isRecommend ? '已推荐' : '已取消推荐')
}, 800)
}
}
async function handlePublish(row) {
if (row && row.id) {
row.publishing = true
setTimeout(() => {
row.isPublish = !row.isPublish
row.publishing = false
$message.success(row.isPublish ? '已发布' : '已取消发布')
}, 800)
}
}
function initColumns() {
columns.value = [
{ type: 'selection' },
{ title: '标题', key: 'title', width: 150, ellipsis: { tooltip: true } },
{ title: '分类', key: 'category', width: 80, ellipsis: { tooltip: true } },
{
title: '描述',
key: 'description',
width: 200,
ellipsis: { tooltip: true },
},
{ title: '创建人', key: 'author', width: 80 },
{
title: '创建时间',
key: 'createDate',
width: 150,
render(row) {
return h('span', formatDateTime(row['createDate']))
},
},
{
title: '最后更新时间',
key: 'updateDate',
width: 150,
render(row) {
return h('span', formatDateTime(row['updateDate']))
},
},
{
title: '推荐',
key: 'isRecommend',
width: 120,
align: 'center',
fixed: 'right',
render(row) {
return h(NSwitch, {
size: 'small',
value: row['isRecommend'],
rubberBand: false,
loading: !!row.recommending,
onUpdateValue: () => handleRecommend(row),
})
},
},
{
title: '发布',
key: 'isPublish',
width: 120,
align: 'center',
fixed: 'right',
render(row) {
return h(NSwitch, {
size: 'small',
rubberBand: false,
value: row['isPublish'],
loading: !!row.publishing,
onUpdateValue: () => handlePublish(row),
})
},
},
{
title: '操作',
key: 'actions',
width: 200,
align: 'center',
fixed: 'right',
render(row) {
return [
h(
NButton,
{
size: 'small',
type: 'primary',
onClick: () => handleEdit(row),
},
{ default: () => '编辑', icon: renderIcon('material-symbols:edit-outline', { size: 14 }) }
),
h(
NButton,
{
size: 'small',
type: 'error',
style: 'margin-left: 15px;',
onClick: () => handleDelete(row),
},
{ default: () => '删除', icon: renderIcon('material-symbols:delete-outline', { size: 14 }) }
),
]
},
},
]
}
async function getTableData() {
try {
const { data } = await api.getPosts()
return data
} catch (error) {
console.error(error)
return []
}
}
return {
loading,
columns,
tableData,
initColumns,
initTableData,
}
}

View File

@ -1,53 +0,0 @@
const Layout = () => import('@/layout/index.vue')
export default {
name: 'Example',
path: '/example',
component: Layout,
redirect: '/example/table',
meta: {
title: '组件示例',
icon: 'mdi:menu',
role: ['admin'],
requireAuth: true,
order: 3,
},
children: [
{
name: 'Table',
path: 'table',
component: () => import('./index.vue'),
redirect: '/example/table/post',
meta: {
title: '表格',
icon: 'mdi:table',
role: ['admin'],
requireAuth: true,
},
children: [
{
name: 'PostList',
path: 'post',
component: () => import('./post/index.vue'),
meta: {
title: '文章列表',
icon: 'material-symbols:auto-awesome-outline-rounded',
role: ['admin'],
requireAuth: true,
},
},
{
name: 'PostCreate',
path: 'post-create',
component: () => import('./post/PostCreate.vue'),
meta: {
title: '创建文章',
icon: 'material-symbols:auto-awesome-outline-rounded',
role: ['admin'],
requireAuth: true,
},
},
],
},
],
}