perf: dict perfect

This commit is contained in:
xiaoxian521
2021-05-05 18:01:21 +08:00
parent 105409a278
commit c10e38cdf2
8 changed files with 254 additions and 27 deletions

View File

@@ -0,0 +1,177 @@
<template>
<div class="config">
<el-drawer
:model-value="drawer"
:title="drawTitle"
:direction="direction"
:before-close="handleClose"
destroy-on-close
size="620px"
>
<el-divider></el-divider>
<!-- 列表 -->
<div class="list">
<vxe-table
ref="xTable"
border
:data="tableData"
@checkbox-change="checkboxChangeEvent"
@checkbox-all="checkboxChangeEvent"
>
<vxe-table-column type="checkbox" width="60"></vxe-table-column>
<vxe-table-column field="name" title="名称"></vxe-table-column>
<vxe-table-column field="dataval" title="数据值"></vxe-table-column>
<vxe-table-column title="操作" fixed="right">
<template #default="{ row }">
<vxe-button type="text" icon="el-icon-edit" @click="editConfig(row)">编辑</vxe-button>
<vxe-button type="text" icon="el-icon-delete" @click="delConfig(row)">删除</vxe-button>
</template>
</vxe-table-column>
</vxe-table>
<vxe-pager
perfect
v-model:current-page="tablePage.currentPage"
v-model:page-size="tablePage.pageSize"
:total="tablePage.total"
:layouts="['PrevJump', 'PrevPage', 'Number', 'NextPage', 'NextJump', 'Sizes', 'FullJump', 'Total']"
>
<template #left>
<span class="page-left">
<vxe-checkbox
v-model="isAllChecked"
:indeterminate="isIndeterminate"
@change="changeAllEvent"
></vxe-checkbox>
<span class="select-count">已选中{{ selectRecords.length }}</span>
<vxe-button>删除</vxe-button>
</span>
</template>
</vxe-pager>
</div>
</el-drawer>
</div>
</template>
<script lang="ts">
import { defineComponent, reactive, toRefs, ref } from "vue";
import { propTypes } from "/@/utils/propTypes";
import { VxeTableEvents } from "vxe-table";
import { templateRef } from "@vueuse/core";
export default defineComponent({
props: {
drawer: propTypes.bool.def(false),
drawTitle: propTypes.string.def(""),
direction: propTypes.string.def("rtl")
},
emits: ["handleClose"],
setup(props, ctx) {
const { emit } = ctx;
const xTable = templateRef<any>("xTable", null);
const configData = reactive({
tableData: [
{
name: "禁用",
dataval: "0"
},
{
name: "启用",
dataval: "1"
}
],
isAllChecked: false,
isIndeterminate: false,
selectRecords: [] as any[],
tablePage: {
total: 0,
currentPage: 1,
pageSize: 10
}
});
// 抽屉关闭
function handleClose(done) {
configData.isAllChecked = false;
configData.isIndeterminate = false;
emit("handleClose");
}
function editConfig(row) {
console.log(
"%crow===>>>: ",
"color: MidnightBlue; background: Aquamarine; font-size: 20px;",
row
);
}
function delConfig(row) {
console.log(
"%crow===>>>: ",
"color: MidnightBlue; background: Aquamarine; font-size: 20px;",
row
);
}
const changeAllEvent = () => {
setTimeout(() => {
console.log(xTable);
}, 1000);
const $table = xTable.value;
$table.setAllCheckboxRow(configData.isAllChecked);
configData.selectRecords = $table.getCheckboxRecords();
};
const checkboxChangeEvent: VxeTableEvents.CheckboxChange = ({
records
}) => {
const $table = xTable.value;
configData.isAllChecked = $table.isAllCheckboxChecked();
configData.isIndeterminate = $table.isCheckboxIndeterminate();
configData.selectRecords = records;
};
return {
...toRefs(configData),
handleClose,
editConfig,
delConfig,
changeAllEvent,
checkboxChangeEvent
};
}
});
</script>
<style lang="scss" scoped>
.list {
padding: 10px;
.page-left {
position: absolute;
left: 10px;
top: 50%;
transform: translateY(-50%);
z-index: 10;
}
}
:deep(.select-count) {
margin-right: 5px;
}
:deep(.el-drawer__header) {
margin-bottom: 0;
}
:deep(.el-drawer__header span) {
color: rgba(0, 0, 0, 0.85);
font-weight: 500;
font-size: 16px;
}
:deep(.el-divider--horizontal) {
margin: 13px 0;
}
:deep(.el-icon-close) {
&:hover {
color: red;
}
}
</style>