123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- <template>
- <CommonPage>
- <template #action>
- <NButton type="primary" @click="router.push('article/add')">
- <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"
- >
- <MeQueryItem label="标题" :label-width="50">
- <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 },
- ]"
- />
- </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-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>
- <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)"
- checkable check-on-click default-expand-all
- class="cus-scroll max-h-200 w-full"
- />
- </n-form-item>
- <n-form-item label="状态" path="enable">
- <NSwitch v-model:value="modalForm.enable">
- <template #checked>
- 启用
- </template>
- <template #unchecked>
- 停用
- </template>
- </NSwitch>
- </n-form-item>
- </n-form>
- </MeModal>
- </CommonPage>
- </template>
- <script setup>
- import { MeCrud, MeModal, MeQueryItem } from '@/components'
- import { useCrud } from '@/composables'
- import { NButton, NSwitch } from 'naive-ui'
- import api from './api'
- defineOptions({ name: 'RoleMgt' })
- const router = useRouter()
- const $table = ref(null)
- /** QueryBar筛选参数(可选) */
- const queryItems = ref({})
- onMounted(() => {
- $table.value?.handleSearch()
- })
- const { modalRef, modalFormRef, modalAction, modalForm, handleAdd, handleDelete, handleEdit }
- = useCrud({
- name: '文章',
- doCreate: api.create,
- doDelete: api.delete,
- doUpdate: api.update,
- initForm: { enable: true },
- refresh: (_, keepCurrentPage) => $table.value?.handleSearch(keepCurrentPage),
- })
- const columns = [
- { title: '标题名', key: 'title' },
- { title: '分类', key: 'category.title' },
- { title: '内容', key: 'content' },
- {
- title: '状态',
- key: 'enable',
- render: row =>
- h(
- NSwitch,
- {
- size: 'small',
- rubberBand: false,
- value: row.enable,
- loading: !!row.enableLoading,
- disabled: row.code === 'SUPER_ADMIN',
- onUpdateValue: () => handleEnable(row),
- },
- {
- checked: () => '启用',
- unchecked: () => '停用',
- },
- ),
- },
- {
- title: '操作',
- key: 'actions',
- width: 200,
- align: 'center',
- fixed: 'right',
- render(row) {
- return [
- h(
- NButton,
- {
- size: 'small',
- type: 'primary',
- style: 'margin-left: 12px;',
- disabled: row.code === 'SUPER_ADMIN',
- onClick: () => handleEdit(row),
- },
- {
- default: () => '编辑',
- icon: () => h('i', { class: 'i-material-symbols:edit-outline text-14' }),
- },
- ),
- h(
- NButton,
- {
- size: 'small',
- type: 'error',
- style: 'margin-left: 12px;',
- disabled: row.code === 'SUPER_ADMIN',
- onClick: () => handleDelete(row.id),
- },
- {
- default: () => '删除',
- icon: () => h('i', { class: 'i-material-symbols:delete-outline text-14' }),
- },
- ),
- ]
- },
- },
- ]
- async function handleEnable(row) {
- row.enableLoading = true
- try {
- await api.update({ id: row.id, enable: !row.enable })
- row.enableLoading = false
- $message.success('操作成功')
- $table.value?.handleSearch()
- }
- catch (error) {
- console.error(error)
- row.enableLoading = false
- }
- }
- const permissionTree = ref([])
- api.getAllPermissionTree().then(({ data = [] }) => (permissionTree.value = data))
- </script>
|