Browse Source

Merge pull request 'feat:修改系统配置' (#30) from YKS into master

Reviewed-on: http://120.26.116.243:3000/root/alert-front/pulls/30
xiaojinfei-patch-3
chenjiale 3 weeks ago
parent
commit
4bd7433f06
  1. 3
      src/api/system/config/Company.ts
  2. 61
      src/views/system/config/Company/Company.ts
  3. 10
      src/views/system/config/Company/CompanyModal.vue
  4. 27
      src/views/system/config/Company/index.vue
  5. 79
      src/views/system/unit/Company/Company.ts

3
src/api/system/unit/Company.ts → src/api/system/config/Company.ts

@ -2,15 +2,14 @@ import { defHttp } from '@/utils/http/axios'
export interface CompanyVO { export interface CompanyVO {
id?: number id?: number
num: number// 集团序号
name: string // 集团名称 name: string // 集团名称
short: string // 集团简称 short: string // 集团简称
status: number // 状态
createTime: Date // 创建时间 createTime: Date // 创建时间
} }
export interface CompanyPageReqVO { export interface CompanyPageReqVO {
name?: string name?: string
status?: number
} }
// 查询集团列表 // 查询集团列表

61
src/views/system/config/Company/Company.ts

@ -0,0 +1,61 @@
import dayjs from 'dayjs'
import utc from 'dayjs/plugin/utc'
import type { BasicColumn, FormSchema } from '@/components/Table'
// 初始化 UTC 插件
dayjs.extend(utc)
export const columns: BasicColumn[] = [
{
title: '集团序号',
dataIndex: 'num',
width: 120,
},
{
title: '集团名称',
dataIndex: 'name',
width: 260,
},
{
title: '集团简称',
dataIndex: 'shortName',
width: 60,
},
{
title: '创建时间',
dataIndex: 'createTime',
width: 180,
// 推荐的新写法(Ant Design Vue 2.2+)
customRender: ({ text }) => {
// 假设 text 是 UTC 时间(如 "2025-05-28T17:02:44")
return dayjs.utc(text).local().format('YYYY-MM-DD HH:mm:ss')
},
},
]
export const formSchema: FormSchema[] = [
{
label: '编号',
field: 'id',
show: false,
component: 'Input',
},
{
label: '集团序号',
field: 'num',
required: true,
component: 'Input',
},
{
label: '集团名称',
field: 'name',
required: true,
component: 'Input',
},
{
label: '集团简称',
field: 'shortName',
required: true,
component: 'Input',
},
]

10
src/views/system/unit/Company/CompanyModal.vue → src/views/system/config/Company/CompanyModal.vue

@ -5,7 +5,7 @@ import { useI18n } from '@/hooks/web/useI18n'
import { useMessage } from '@/hooks/web/useMessage' import { useMessage } from '@/hooks/web/useMessage'
import { BasicForm, useForm } from '@/components/Form' import { BasicForm, useForm } from '@/components/Form'
import { BasicModal, useModalInner } from '@/components/Modal' import { BasicModal, useModalInner } from '@/components/Modal'
import { createCompany, getCompany, updateCompany } from '@/api/system/unit/Company' import { createCompany, getCompany, updateCompany } from '@/api/system/config/Company'
defineOptions({ name: 'CompanyModal' }) defineOptions({ name: 'CompanyModal' })
@ -40,7 +40,6 @@ async function handleSubmit() {
await updateCompany(values) await updateCompany(values)
else else
await createCompany(values) await createCompany(values)
closeModal() closeModal()
emit('success') emit('success')
createMessage.success(t('common.saveSuccessText')) createMessage.success(t('common.saveSuccessText'))
@ -53,11 +52,12 @@ async function handleSubmit() {
<template> <template>
<BasicModal <BasicModal
v-bind="$attrs" :title="isUpdate ? t('action.edit') : t('action.create')" @register="registerModal" v-bind="$attrs" :title="isUpdate ? t('action.edit') : t('action.create')" :width="600"
:auto-height="true"
:style="{ maxHeight: '500px' }"
@register="registerModal"
@ok="handleSubmit" @ok="handleSubmit"
> >
<BasicForm @register="registerForm" /> <BasicForm @register="registerForm" />
</BasicModal> </BasicModal>
</template> </template>
./Company
@/api/system/unit/Company

27
src/views/system/unit/Company/index.vue → src/views/system/config/Company/index.vue

@ -1,12 +1,12 @@
<script lang="ts" setup> <script lang="ts" setup>
import CompanyModal from './CompanyModal.vue' import CompanyModal from './CompanyModal.vue'
import { columns, searchFormSchema } from './Company' import { columns } from './Company'
import { useI18n } from '@/hooks/web/useI18n' import { useI18n } from '@/hooks/web/useI18n'
import { useMessage } from '@/hooks/web/useMessage' import { useMessage } from '@/hooks/web/useMessage'
import { useModal } from '@/components/Modal' import { useModal } from '@/components/Modal'
import { IconEnum } from '@/enums/appEnum' import { IconEnum } from '@/enums/appEnum'
import { BasicTable, TableAction, useTable } from '@/components/Table' import { BasicTable, TableAction, useTable } from '@/components/Table'
import { deleteCompany, getCompanyPage } from '@/api/system/unit/Company' import { deleteCompany, getCompanyPage } from '@/api/system/config/Company'
defineOptions({ name: 'UnitCompany' }) defineOptions({ name: 'UnitCompany' })
@ -20,9 +20,9 @@ const [register, { getForm, reload }] = useTable({
api: getList, api: getList,
columns, columns,
rowKey: 'id', rowKey: 'id',
formConfig: { labelWidth: 120, schemas: searchFormSchema }, formConfig: { labelWidth: 120 },
pagination: true, pagination: true,
useSearchForm: true, useSearchForm: false,
showTableSetting: true, showTableSetting: true,
showIndexColumn: false, showIndexColumn: false,
actionColumn: { actionColumn: {
@ -54,10 +54,10 @@ async function handleDelete(record: Recordable) {
</script> </script>
<template> <template>
<div> <div style="height: calc(100vh - 200px); overflow: auto;">
<BasicTable @register="register"> <BasicTable @register="register">
<template #toolbar> <template #toolbar>
<a-button v-auth="['system:unit:create']" type="primary" :pre-icon="IconEnum.ADD" @click="handleCreate"> <a-button v-auth="['system:company:create']" type="primary" :pre-icon="IconEnum.ADD" @click="handleCreate">
{{ t('action.create') }} {{ t('action.create') }}
</a-button> </a-button>
</template> </template>
@ -65,12 +65,12 @@ async function handleDelete(record: Recordable) {
<template v-if="column.key === 'action'"> <template v-if="column.key === 'action'">
<TableAction <TableAction
:actions="[ :actions="[
{ icon: IconEnum.EDIT, label: t('action.edit'), auth: 'system:unit:update', onClick: handleEdit.bind(null, record) }, { icon: IconEnum.EDIT, label: t('action.edit'), auth: 'system:company:update', onClick: handleEdit.bind(null, record) },
{ {
icon: IconEnum.DELETE, icon: IconEnum.DELETE,
danger: true, danger: true,
label: t('action.delete'), label: t('action.delete'),
auth: 'system:unit:delete', auth: 'system:company:delete',
popConfirm: { popConfirm: {
title: t('common.delMessage'), title: t('common.delMessage'),
placement: 'left', placement: 'left',
@ -85,5 +85,12 @@ async function handleDelete(record: Recordable) {
<CompanyModal @register="registerModal" @success="reload()" /> <CompanyModal @register="registerModal" @success="reload()" />
</div> </div>
</template> </template>
./Company
@/api/system/unit/Company <style scoped>
/* 深度选择器覆盖 Ant Design 内部样式 */
:deep(.ant-table-body) {
height: auto !important;
min-height: 200px;
max-height: 300 !important;
}
</style>

79
src/views/system/unit/Company/Company.ts

@ -1,79 +0,0 @@
import type { BasicColumn, FormSchema } from '@/components/Table'
import { useRender } from '@/components/Table'
import { DICT_TYPE, getDictOptions } from '@/utils/dict'
export const columns: BasicColumn[] = [
{
title: '集团名称',
dataIndex: 'name',
width: 260,
},
{
title: '集团简称',
dataIndex: 'shortName', // 注意:后端是 shortName,不是 short!
width: 60,
},
{
title: '状态',
dataIndex: 'status',
width: 180,
customRender: ({ text }) => {
return useRender.renderDict(text, DICT_TYPE.COMMON_STATUS)
},
},
{
title: '创建时间',
dataIndex: 'createTime',
width: 180,
customRender: ({ text }) => {
return useRender.renderDate(text)
},
},
]
export const searchFormSchema: FormSchema[] = [
{
label: '集团名称',
field: 'name',
component: 'Input',
colProps: { span: 8 },
},
{
label: '状态',
field: 'status',
component: 'Select',
componentProps: {
options: getDictOptions(DICT_TYPE.COMMON_STATUS),
},
colProps: { span: 8 },
},
]
export const formSchema: FormSchema[] = [
{
label: '编号',
field: 'id',
show: false,
component: 'Input',
},
{
label: '集团名称',
field: 'name',
required: true,
component: 'Input',
},
{
label: '集团简称',
field: 'shortName', // 注意:后端是 shortName,不是 short!
required: true,
component: 'Input',
},
{
label: '集团状态',
field: 'status',
component: 'Select',
componentProps: {
options: getDictOptions(DICT_TYPE.COMMON_STATUS),
},
},
]
Loading…
Cancel
Save