|
<!--
* @Author: Devin
* @Date: 2023-02-01 15:50:21
* @LastEditors: Devin
* @LastEditTime: 2023-02-20 14:11:57
* @Description: table-demo
-->
<template>
<common-page-panel
:search-params="pageConfig.searchParams"
:form-values="pageConfig.formValues"
:table-header="pageConfig.tableHeader"
:function-buttons="pageConfig.btns"
:table-data="pageConfig.tableData"
:page="pageConfig.page"
></common-page-panel>
<!-- 弹窗 -->
<common-dialog
v-if="showDialog"
title="新增项"
:width="dialogSize"
:fullscreen="fullscreen"
@close-dialog="closeDialog"
@confirm-dialog="confirmDialog"
>
<common-form :forms="forms"></common-form>
</common-dialog>
<!-- 抽屉 -->
<common-drawer v-if="showDrawer" title="批量导入">
<common-form :forms="forms"></common-form>
</common-drawer>
<common-dialog
v-if="showCustomDialog"
title="自定义弹窗"
:dialog-data="dialogData"
@close-dialog="handelCancel"
></common-dialog>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const pageConfig = ref<any>({
searchParams: [
{
label: '模板名称',
name: 'specIdOrName',
type: 'input',
value: '',
col: 6,
attrs: {
clearable: true
}
}
],
btns: [
// eslint-disable-next-line no-use-before-define
{ label: '大尺寸弹窗', name: 'batchDelete', onClick: bigDialog },
// eslint-disable-next-line no-use-before-define
{ label: '中尺寸弹窗', name: 'batchImport', onClick: middleDialog },
// eslint-disable-next-line no-use-before-define
{ label: '小尺寸弹窗', name: 'batchImport', onClick: smallDialog },
// eslint-disable-next-line no-use-before-define
{ label: '自定义弹窗', name: 'batchImport', onClick: customDialog },
// eslint-disable-next-line no-use-before-define
{ label: '满屏弹窗', name: 'batchImport', onClick: fullDialog },
{
label: '自定义弹窗按钮',
name: 'batchImport',
// eslint-disable-next-line no-use-before-define
onClick: handelCustomButtons
}
],
formValues: {
specIdOrName: ''
},
tableHeader: [
{ label: '姓名', name: 'name', width: '100' },
{ label: '年龄', name: 'age', 'min-width': '100' }
],
tableData: [],
page: {
pageSize: 10,
current: 1,
total: 0
}
});
const showDialog = ref<any>(false);
const dialogSize = ref<any>('middle');
const fullscreen = ref<any>(false);
// 显示弹窗
function handelShowDialog(size: any) {
showDialog.value = true;
dialogSize.value = size;
if (size === 'full') {
fullscreen.value = true;
} else {
fullscreen.value = false;
}
}
function bigDialog() {
handelShowDialog('big');
}
// 新增
function middleDialog() {
handelShowDialog('middle');
}
// 新增
function smallDialog() {
handelShowDialog('small');
}
// 新增
function customDialog() {
handelShowDialog(1100);
}
// 新增
function fullDialog() {
handelShowDialog('full');
}
function closeDialog() {
showDialog.value = false;
}
function confirmDialog() {
console.log('确定');
}
// 弹窗项
const forms = ref<any>([
{
label: '姓名',
name: 'name',
type: 'input',
span: 12,
value: '',
attrs: {
clearable: true,
placeholder: '请输入姓名'
}
},
{
label: '年龄',
name: 'age',
type: 'input',
span: 12,
value: '',
attrs: {
clearable: true,
placeholder: '请输入年龄',
rules: []
}
}
]);
// 导入
const showDrawer = ref<any>(false);
const showCustomDialog = ref(false);
function handelCustomButtons() {
showCustomDialog.value = true;
}
function handelCancel() {
showCustomDialog.value = false;
}
function handelClose() {
showCustomDialog.value = false;
}
function handelConfirm() {
showCustomDialog.value = false;
}
const dialogData = ref({
btns: [
{ label: '取消', name: 'cancel', onClick: handelCancel },
{ label: '关闭', type: 'danger', name: 'close', onClick: handelClose },
{ label: '确认', type: 'promary', name: 'confirm', onClick: handelConfirm }
]
});
</script>
<style scoped lang="scss"></style>
|