A modern vue admin. It is based on Vue3, vite and TypeScript. It's fast!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

191 lines
4.9 KiB

<template>
<div class="full-height page-container">
<SmartLayoutSeparate first-size="240px" :show-line="false" class="full-height">
<template #first>
<div class="full-height system-container">
<SystemSimpleList
@current-change="handleSelectSystemChange"
:row-config="{ isHover: true, isCurrent: true }"
height="auto"
/>
</div>
</template>
<template #second>
<SmartTable @register="registerTable" :size="getTableSize">
<template #table-operation="{ row }">
<SmartVxeTableAction :actions="getActions(row)" />
</template>
<template #form-publicKeyFile="{ model }">
<Upload
v-model:fileList="model.publicKeyFileList"
accept=".keystore"
:max-count="1"
:beforeUpload="() => false"
>
<a-button>Upload</a-button>
</Upload>
</template>
<template #form-privateKeyFile="{ model }">
<Upload
v-model:fileList="model.privateKeyFileList"
accept=".keystore"
:max-count="1"
:beforeUpload="() => false"
>
<a-button>Upload</a-button>
</Upload>
</template>
</SmartTable>
</template>
</SmartLayoutSeparate>
</div>
</template>
<script lang="ts" setup>
import { ref, unref } from 'vue';
import { useI18n } from '@/hooks/web/useI18n';
import { useSizeSetting } from '@/hooks/setting/UseSizeSetting';
import { Upload } from 'ant-design-vue';
import {
ActionItem,
SmartTable,
SmartVxeTableAction,
useSmartTable,
} from '@/components/SmartTable';
import SmartLayoutSeparate from '@/components/SmartLayoutSeparate/src/SmartLayoutSeparate';
import SystemSimpleList from '@/modules/smart-system/components/system/SystemSimpleList.vue';
import { hasPermission } from '@/utils/auth';
import {
getTableColumns,
getFormSchemas,
getSearchFormSchemas,
} from './SmartAuthSecretKeyListView.config';
import {
listApi,
deleteApi,
getByIdApi,
saveUpdateApi,
download,
} from './SmartAuthSecretKeyListView.api';
const { t } = useI18n();
const { getTableSize } = useSizeSetting();
/**
* 系统变更时触发:更新数据
*/
const currentSystemRef = ref<Recordable>({});
const handleSelectSystemChange = (system) => {
currentSystemRef.value = system;
query();
};
const getActions = (row: Recordable): ActionItem[] => {
return [
{
label: t('common.button.edit'),
auth: 'auth:secret:update',
onClick: () => {
editByRowModal(row);
},
},
{
label: t('common.button.download'),
auth: 'auth:secret:download',
onClick: () => {
download(row.id);
},
},
];
};
const [registerTable, { editByRowModal, query }] = useSmartTable({
columns: getTableColumns(),
height: 'auto',
pagerConfig: true,
useSearchForm: true,
stripe: true,
highlightHoverRow: true,
columnConfig: {
resizable: true,
},
border: true,
authConfig: {
authHandler: hasPermission,
toolbar: {
ModalAdd: 'auth:secret:save',
delete: 'auth:secret:delete',
},
},
sortConfig: {
remote: true,
defaultSort: {
field: 'seq',
order: 'asc',
},
},
searchFormConfig: {
schemas: getSearchFormSchemas(t),
searchWithSymbol: true,
colon: true,
layout: 'inline',
actionColOptions: {
span: undefined,
},
compact: true,
},
addEditConfig: {
formConfig: {
schemas: getFormSchemas(t),
baseColProps: { span: 24 },
labelCol: { span: 6 },
wrapperCol: { span: 17 },
colon: true,
},
},
proxyConfig: {
ajax: {
query: (params) => {
const parameter = {
...params.ajaxParameter,
systemId: unref(currentSystemRef)?.id,
};
return listApi(parameter);
},
save: ({ body: { insertRecords, updateRecords } }) => {
const dataList = [...insertRecords, ...updateRecords];
return saveUpdateApi({
...dataList[0],
systemId: unref(currentSystemRef).id,
});
},
delete: ({ body: { removeRecords } }) => deleteApi(removeRecords),
getById: (params) => getByIdApi(params.id),
},
},
importConfig: {},
exportConfig: {},
toolbarConfig: {
zoom: true,
refresh: true,
column: {
columnOrder: true,
},
buttons: [
{
code: 'ModalAdd',
},
{
code: 'delete',
},
],
},
});
</script>
<style lang="less" scoped>
.system-container {
margin-right: 5px;
background: white;
}
</style>