|
@@ -1,79 +1,42 @@
|
|
|
<template>
|
|
|
<CommonPage>
|
|
|
<template #action>
|
|
|
- <NButton type="primary" @click="router.push('article/add')">
|
|
|
+ <NButton type="primary" @click="handleAdd()">
|
|
|
<i class="i-material-symbols:add mr-4 text-18" />
|
|
|
- 新增文章
|
|
|
+ 新增
|
|
|
</NButton>
|
|
|
</template>
|
|
|
|
|
|
- <MeCrud
|
|
|
- ref="$table"
|
|
|
- v-model:query-items="queryItems"
|
|
|
- :scroll-x="1200"
|
|
|
- :columns="columns"
|
|
|
- :get-data="api.read"
|
|
|
- >
|
|
|
+ <MeCrud ref="$table" v-model:query-items="queryItems" :scroll-x="1200" :columns="columns" :get-data="api.read">
|
|
|
<MeQueryItem label="分类名称" :label-width="80">
|
|
|
<n-input v-model:value="queryItems.title" type="text" placeholder="请输入分类名称" clearable>
|
|
|
<template #password-visible-icon />
|
|
|
</n-input>
|
|
|
</MeQueryItem>
|
|
|
<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>
|
|
|
</MeCrud>
|
|
|
|
|
|
<MeModal ref="modalRef" width="520px">
|
|
|
- <n-form
|
|
|
- ref="modalFormRef"
|
|
|
- label-placement="left"
|
|
|
- label-align="left"
|
|
|
- :label-width="80"
|
|
|
- :model="modalForm"
|
|
|
- >
|
|
|
- <n-form-item
|
|
|
- label="角色名"
|
|
|
- path="name"
|
|
|
- :rule="{
|
|
|
- required: true,
|
|
|
- message: '请输入角色名',
|
|
|
- trigger: ['input', 'blur'],
|
|
|
- }"
|
|
|
- >
|
|
|
- <n-input v-model:value="modalForm.name" />
|
|
|
+ <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-input v-model:value="modalForm.title" />
|
|
|
</n-form-item>
|
|
|
- <n-form-item
|
|
|
- label="角色编码"
|
|
|
- path="code"
|
|
|
- :rule="{
|
|
|
- required: true,
|
|
|
- message: '请输入角色编码',
|
|
|
- trigger: ['input', 'blur'],
|
|
|
- }"
|
|
|
- >
|
|
|
- <n-input v-model:value="modalForm.code" :disabled="modalAction !== 'add'" />
|
|
|
+ <n-form-item label="上层分类" path="parentId">
|
|
|
+ <n-select v-model:value="modalForm.parentId" :options="allCategory" clearable filterable tag />
|
|
|
</n-form-item>
|
|
|
- <n-form-item label="权限" path="permissionIds">
|
|
|
- <n-tree
|
|
|
- key-field="id"
|
|
|
- label-field="name"
|
|
|
- :selectable="false"
|
|
|
- :data="permissionTree"
|
|
|
- :checked-keys="modalForm.permissionIds"
|
|
|
- :on-update:checked-keys="(keys) => (modalForm.permissionIds = keys)"
|
|
|
-
|
|
|
- default-expand-all checkable check-on-click
|
|
|
- class="cus-scroll max-h-200 w-full"
|
|
|
- />
|
|
|
+ <n-form-item label="备注" path="remark">
|
|
|
+ <n-input v-model:value="modalForm.remark" />
|
|
|
</n-form-item>
|
|
|
+
|
|
|
<n-form-item label="状态" path="enable">
|
|
|
<NSwitch v-model:value="modalForm.enable">
|
|
|
<template #checked>
|
|
@@ -92,37 +55,47 @@
|
|
|
<script setup>
|
|
|
import { MeCrud, MeModal, MeQueryItem } from '@/components'
|
|
|
import { useCrud } from '@/composables'
|
|
|
+import { useUserStore } from '@/store/index.js'
|
|
|
+import { formatDateTime } from '@/utils'
|
|
|
import { NButton, NSwitch } from 'naive-ui'
|
|
|
+import { onMounted, watchEffect } from 'vue'
|
|
|
import api from './api'
|
|
|
|
|
|
-defineOptions({ name: 'RoleMgt' })
|
|
|
+defineOptions({ name: 'Category' })
|
|
|
|
|
|
const router = useRouter()
|
|
|
-
|
|
|
+const { userId } = useUserStore()
|
|
|
const $table = ref(null)
|
|
|
/** QueryBar筛选参数(可选) */
|
|
|
const queryItems = ref({})
|
|
|
|
|
|
-onMounted(() => {
|
|
|
- $table.value?.handleSearch()
|
|
|
-})
|
|
|
-
|
|
|
const { modalRef, modalFormRef, modalAction, modalForm, handleAdd, handleDelete, handleEdit }
|
|
|
= useCrud({
|
|
|
- name: '文章',
|
|
|
+ name: '分类',
|
|
|
doCreate: api.create,
|
|
|
doDelete: api.delete,
|
|
|
doUpdate: api.update,
|
|
|
initForm: { enable: true },
|
|
|
refresh: (_, keepCurrentPage) => $table.value?.handleSearch(keepCurrentPage),
|
|
|
})
|
|
|
-
|
|
|
+onMounted(() => {
|
|
|
+ $table.value?.handleSearch()
|
|
|
+})
|
|
|
+watchEffect(() => {
|
|
|
+ if (userId) {
|
|
|
+ modalForm.value.userId = userId
|
|
|
+ }
|
|
|
+})
|
|
|
const columns = [
|
|
|
{ title: '分类名称', key: 'title' },
|
|
|
{ title: '上级分类', key: 'parent.title' },
|
|
|
{ title: '备注', key: 'remark' },
|
|
|
{ title: '创建人', key: 'user.username' },
|
|
|
- { title: '创建时间', key: 'createTime' },
|
|
|
+ {
|
|
|
+ title: '创建时间',
|
|
|
+ key: 'createTime',
|
|
|
+ render: row => h('span', formatDateTime(row.createTime)),
|
|
|
+ },
|
|
|
{
|
|
|
title: '状态',
|
|
|
key: 'enable',
|
|
@@ -192,13 +165,12 @@ async function handleEnable(row) {
|
|
|
row.enableLoading = false
|
|
|
$message.success('操作成功')
|
|
|
$table.value?.handleSearch()
|
|
|
- }
|
|
|
- catch (error) {
|
|
|
+ } catch (error) {
|
|
|
console.error(error)
|
|
|
row.enableLoading = false
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-const permissionTree = ref([])
|
|
|
-api.getAllPermissionTree().then(({ data = [] }) => (permissionTree.value = data))
|
|
|
+const allCategory = ref([])
|
|
|
+api.getAll().then(({ data = [] }) => (allCategory.value = data.map(item => ({ label: item.title, value: item.id }))))
|
|
|
</script>
|