这是基于vue-vben-admin 模板适用于abp vNext的前端管理项目
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.
 
 
 
 
 
 

130 lines
3.2 KiB

<template>
<Card :title="L('DisplayName:DisplayNames')">
<BasicForm @register="registerForm" @submit="handleSubmit" />
<BasicTable @register="registerTable" :data-source="dataSource">
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
color: 'error',
icon: 'ant-design:delete-outlined',
label: L('Delete'),
onClick: handleDelete.bind(null, record),
},
]"
/>
</template>
</template>
</BasicTable>
</Card>
</template>
<script lang="ts" setup>
import { computed, ref } from 'vue';
import { Card } from 'ant-design-vue';
import { useLocalization } from '/@/hooks/abp/useLocalization';
import { BasicForm, useForm } from '/@/components/Form';
import { BasicTable, TableAction, useTable } from '/@/components/Table';
import { getList as getLanguages } from '/@/api/localization/languages';
const emits = defineEmits(['create', 'delete']);
const props = defineProps({
displayNames: {
type: Object as PropType<Recordable>,
default: () => {},
},
});
const { L } = useLocalization(['AbpOpenIddict', 'AbpLocalization', 'AbpUi']);
const modelRef = ref({});
const [registerForm, { resetFields }] = useForm({
model: modelRef,
schemas: [
{
field: 'culture',
component: 'ApiSelect',
label: L('DisplayName:CultureName'),
colProps: { span: 24 },
required: true,
componentProps: {
api: getLanguages,
params: {
skipCount: 0,
maxResultCount: 100,
},
resultField: 'items',
labelField: 'displayName',
valueField: 'cultureName',
},
},
{
field: 'displayName',
component: 'Input',
label: L('DisplayName:DisplayName'),
colProps: { span: 24 },
required: true,
},
],
showResetButton: false,
submitButtonOptions: {
text: L('DisplayName:AddNew'),
// icon: 'ant-design:plus-outlined',
},
});
const [registerTable] = useTable({
rowKey: 'culture',
showHeader: false,
columns: [
{
dataIndex: 'culture',
align: 'left',
width: 100,
sorter: true,
},
{
dataIndex: 'displayName',
align: 'left',
width: 'auto',
sorter: true,
},
],
pagination: false,
striped: false,
useSearchForm: false,
showTableSetting: false,
showIndexColumn: false,
bordered: false,
actionColumn: {
width: 200,
title: L('Actions'),
dataIndex: 'action',
},
});
const dataSource = computed(() => {
if (!props.displayNames) {
return [];
}
return Object.keys(props.displayNames).map((key) => {
return {
culture: key,
displayName: props.displayNames[key]
}
});
});
function handleSubmit(input) {
emits('create', input);
resetFields();
}
function handleDelete(record) {
emits('delete', record);
}
</script>
<style lang="less" scoped>
.title {
margin-bottom: 20px;
}
</style>