refactor: datasource vxe

plp
xingyu4j 4 years ago
parent 3dd2203803
commit 519b08f251

@ -11,6 +11,7 @@ export type ConfigVO = {
remark: string remark: string
createTime: string createTime: string
} }
export interface ConfigPageReqVO extends PageParam { export interface ConfigPageReqVO extends PageParam {
name?: string name?: string
type?: number type?: number

@ -1,5 +1,13 @@
import request from '@/config/axios' import request from '@/config/axios'
import type { DataSourceConfigVO } from './types'
export type DataSourceConfigVO = {
id: number
name: string
url: string
username: string
password: string
createTime: string
}
// 查询数据源配置列表 // 查询数据源配置列表
export const getDataSourceConfigListApi = () => { export const getDataSourceConfigListApi = () => {

@ -1,7 +1,7 @@
import { reactive } from 'vue' import { reactive } from 'vue'
import { required } from '@/utils/formRules' import { required } from '@/utils/formRules'
import { useI18n } from '@/hooks/web/useI18n' import { useI18n } from '@/hooks/web/useI18n'
import { CrudSchema, useCrudSchemas } from '@/hooks/web/useCrudSchemas' import { VxeCrudSchema, useVxeCrudSchemas } from '@/hooks/web/useVxeCrudSchemas'
// 国际化 // 国际化
const { t } = useI18n() const { t } = useI18n()
// 表单校验 // 表单校验
@ -12,24 +12,17 @@ export const rules = reactive({
password: [required] password: [required]
}) })
// 新增 + 修改 // 新增 + 修改
const crudSchemas = reactive<CrudSchema[]>([ const crudSchemas = reactive<VxeCrudSchema>({
primaryKey: 'id',
primaryType: 'seq',
action: true,
columns: [
{ {
label: t('common.index'), title: '数据源名称',
field: 'id',
type: 'index',
form: {
show: false
},
detail: {
show: false
}
},
{
label: '数据源名称',
field: 'name' field: 'name'
}, },
{ {
label: '数据源连接', title: '数据源连接',
field: 'url', field: 'url',
form: { form: {
component: 'Input', component: 'Input',
@ -43,42 +36,20 @@ const crudSchemas = reactive<CrudSchema[]>([
} }
}, },
{ {
label: '用户名', title: '用户名',
field: 'username' field: 'username'
}, },
{ {
label: '密码', title: '密码',
field: 'password', field: 'password',
table: { isTable: false
show: false
}
}, },
{ {
label: t('common.createTime'), title: t('common.createTime'),
field: 'createTime', field: 'createTime',
form: { formatter: 'formatDate',
show: false isForm: false
},
search: {
show: true,
component: 'DatePicker',
componentProps: {
type: 'datetimerange',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
defaultTime: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)]
} }
} ]
}, })
{ export const { allSchemas } = useVxeCrudSchemas(crudSchemas)
field: 'action',
width: '240px',
label: t('table.action'),
form: {
show: false
},
detail: {
show: false
}
}
])
export const { allSchemas } = useCrudSchemas(crudSchemas)

@ -1,24 +1,99 @@
<template>
<ContentWrap>
<!-- 列表 -->
<vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar">
<template #toolbar_buttons>
<XButton
type="primary"
preIcon="ep:zoom-in"
:title="t('action.add')"
v-hasPermi="['infra:data-source-config:create']"
@click="handleCreate()"
/>
</template>
<template #actionbtns_default="{ row }">
<!-- 操作修改 -->
<XTextButton
preIcon="ep:edit"
:title="t('action.edit')"
v-hasPermi="['infra:data-source-config:update']"
@click="handleUpdate(row.id)"
/>
<!-- 操作详情 -->
<XTextButton
preIcon="ep:view"
:title="t('action.detail')"
v-hasPermi="['infra:data-source-config:query']"
@click="handleDetail(row.id)"
/>
<!-- 操作删除 -->
<XTextButton
preIcon="ep:delete"
:title="t('action.del')"
v-hasPermi="['infra:data-source-config:delete']"
@click="handleDelete(row.id)"
/>
</template>
</vxe-grid>
</ContentWrap>
<XModal v-model="dialogVisible" :title="dialogTitle">
<!-- 对话框(添加 / 修改) -->
<Form
v-if="['create', 'update'].includes(actionType)"
:schema="allSchemas.formSchema"
:rules="rules"
ref="formRef"
/>
<!-- 对话框(详情) -->
<Descriptions
v-if="actionType === 'detail'"
:schema="allSchemas.detailSchema"
:data="detailData"
/>
<!-- 操作按钮 -->
<template #footer>
<!-- 按钮保存 -->
<XButton
v-if="['create', 'update'].includes(actionType)"
type="primary"
:title="t('action.save')"
:loading="loading"
@click="submitForm()"
/>
<!-- 按钮关闭 -->
<XButton :loading="loading" :title="t('dialog.close')" @click="dialogVisible = false" />
</template>
</XModal>
</template>
<script setup lang="ts"> <script setup lang="ts">
import { onMounted, ref, unref } from 'vue' // import
import dayjs from 'dayjs' import { ref, unref } from 'vue'
import { ElMessage } from 'element-plus' import { useI18n } from '@/hooks/web/useI18n'
import { useMessage } from '@/hooks/web/useMessage'
import { useVxeGrid } from '@/hooks/web/useVxeGrid'
import { VxeGridInstance } from 'vxe-table'
import { FormExpose } from '@/components/Form' import { FormExpose } from '@/components/Form'
import { rules, allSchemas } from './dataSourceConfig.data' // import
import type { DataSourceConfigVO } from '@/api/infra/dataSourceConfig/types'
import * as DataSourceConfiggApi from '@/api/infra/dataSourceConfig' import * as DataSourceConfiggApi from '@/api/infra/dataSourceConfig'
import { useI18n } from '@/hooks/web/useI18n' import { rules, allSchemas } from './dataSourceConfig.data'
const { t } = useI18n() // const { t } = useI18n() //
const tableData = ref() const message = useMessage() //
const getList = async () => { //
const res = await DataSourceConfiggApi.getDataSourceConfigListApi() const xGrid = ref<VxeGridInstance>() // Grid Ref
tableData.value = res const { gridOptions, getList, deleteData } = useVxeGrid<DataSourceConfiggApi.DataSourceConfigVO>({
} allSchemas: allSchemas,
isList: true,
getListApi: DataSourceConfiggApi.getDataSourceConfigListApi,
deleteApi: DataSourceConfiggApi.deleteDataSourceConfigApi
})
// ========== CRUD ========== // ========== CRUD ==========
const loading = ref(false) // const loading = ref(false) //
const actionType = ref('') // const actionType = ref('') //
const dialogVisible = ref(false) // const dialogVisible = ref(false) //
const dialogTitle = ref('edit') // const dialogTitle = ref('edit') //
const formRef = ref<FormExpose>() // Ref const formRef = ref<FormExpose>() // Ref
const detailData = ref() // Ref
// //
const setDialogTile = (type: string) => { const setDialogTile = (type: string) => {
@ -33,13 +108,26 @@ const handleCreate = () => {
} }
// //
const handleUpdate = async (row: DataSourceConfigVO) => { const handleUpdate = async (rowId: number) => {
setDialogTile('update') setDialogTile('update')
// //
const res = await DataSourceConfiggApi.getDataSourceConfigApi(row.id) const res = await DataSourceConfiggApi.getDataSourceConfigApi(rowId)
unref(formRef)?.setValues(res) unref(formRef)?.setValues(res)
} }
//
const handleDetail = async (rowId: number) => {
//
const res = await DataSourceConfiggApi.getDataSourceConfigApi(rowId)
detailData.value = res
setDialogTile('detail')
}
//
const handleDelete = async (rowId: number) => {
await deleteData(xGrid, rowId)
}
// //
const submitForm = async () => { const submitForm = async () => {
const elForm = unref(formRef)?.getElFormRef() const elForm = unref(formRef)?.getElFormRef()
@ -49,114 +137,21 @@ const submitForm = async () => {
loading.value = true loading.value = true
// //
try { try {
const data = unref(formRef)?.formModel as DataSourceConfigVO const data = unref(formRef)?.formModel as DataSourceConfiggApi.DataSourceConfigVO
if (actionType.value === 'create') { if (actionType.value === 'create') {
await DataSourceConfiggApi.createDataSourceConfigApi(data) await DataSourceConfiggApi.createDataSourceConfigApi(data)
ElMessage.success(t('common.createSuccess')) message.success(t('common.createSuccess'))
} else { } else {
await DataSourceConfiggApi.updateDataSourceConfigApi(data) await DataSourceConfiggApi.updateDataSourceConfigApi(data)
ElMessage.success(t('common.updateSuccess')) message.success(t('common.updateSuccess'))
} }
//
dialogVisible.value = false dialogVisible.value = false
await getList()
} finally { } finally {
loading.value = false loading.value = false
//
await getList(xGrid)
} }
} }
}) })
} }
//
const handleDelete = async (row: DataSourceConfigVO) => {
await DataSourceConfiggApi.deleteDataSourceConfigApi(row.id)
ElMessage.success(t('common.delSuccess'))
}
// ========== ==========
const detailRef = ref() // Ref
//
const handleDetail = async (row: DataSourceConfigVO) => {
//
detailRef.value = row
setDialogTile('detail')
}
onMounted(async () => {
await getList()
})
</script> </script>
<template>
<ContentWrap>
<!-- 操作工具栏 -->
<div class="mb-10px">
<el-button
v-hasPermi="['infra:data-source-config:create']"
type="primary"
@click="handleCreate"
>
<Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}
</el-button>
</div>
<Table :columns="allSchemas.tableColumns" :data="tableData">
<template #createTime="{ row }">
<span>{{ row.createTime ? dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') : '' }}</span>
</template>
<template #action="{ row }">
<el-button
link
type="primary"
v-hasPermi="['infra:data-source-config:update']"
@click="handleUpdate(row)"
>
<Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
</el-button>
<el-button
link
type="primary"
v-hasPermi="['infra:data-source-config:update']"
@click="handleDetail(row)"
>
<Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
</el-button>
<el-button
link
type="primary"
v-hasPermi="['infra:data-source-config:delete']"
@click="handleDelete(row)"
>
<Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
</el-button>
</template>
</Table>
</ContentWrap>
<XModal v-model="dialogVisible" :title="dialogTitle">
<!-- 对话框(添加 / 修改) -->
<Form
v-if="['create', 'update'].includes(actionType)"
:schema="allSchemas.formSchema"
:rules="rules"
ref="formRef"
/>
<!-- 对话框(详情) -->
<Descriptions
v-if="actionType === 'detail'"
:schema="allSchemas.detailSchema"
:data="detailRef"
/>
<!-- 操作按钮 -->
<template #footer>
<!-- 按钮保存 -->
<XButton
v-if="['create', 'update'].includes(actionType)"
type="primary"
:title="t('action.save')"
:loading="loading"
@click="submitForm()"
/>
<!-- 按钮关闭 -->
<XButton :loading="loading" :title="t('dialog.close')" @click="dialogVisible = false" />
</template>
</XModal>
</template>

Loading…
Cancel
Save