赞
踩
1.普通的表格组件效果
ComtableListR.vue组件
- <template>
- <div class="tableBox">
- <div class="btn-add">
- <a-space>
- <a-upload v-model:file-list="fileList" v-if="hasImport" name="file" accept=".xls,.xlsx"
- action="" :headers="headers" @change="handleChange">
- <a-button type="primary"> 导入 </a-button>
- </a-upload>
- <a-button type="primary" v-if="hasExport" @click="handleAllExport">导出全部</a-button>
- <a-button type="primary" v-if="allDel">全部删除</a-button>
- <a-button :disabled="dataSource.length === 0 || flagselectedRowKeys" v-if="rowSelection"
- @click="delEvent(selecrowdata, 'many')">批量删除</a-button>
- <a-button :disabled="dataSource.length === 0 || flagselectedRowKeys" v-if="markread"
- @click="handleFlagRead(selecrowdata, 'hasread')">标记已读</a-button>
- <a-button type="primary" v-if="operatingButton?.addbtn" @click="editEvent('add')">{{addbtnName?addbtnName:'添加'}}</a-button>
- <a-button type="primary" v-if="hasgoback" @click="handlegoback">返回</a-button>
- </a-space>
- </div>
- <a-table :dataSource="dataSource" :columns="columns" :loading="loading" :scroll="{ x: tableOtherobj.scroll }"
- :expandIconColumnIndex="expandIconSet.expandIconColumnIndex" :expandIconAsCell="expandIconSet.expandIconAsCell"
- @expand="handleexpand" @expandedRowsChange="expandedRowsChange" :row-selection="rowSelection || markread || rowSelection2
- ? { ...objrowSelection }
- : null
- " :pagination="pagination ? objArray.pagination : false">
- <template #bodyCell="{ column, record, index }">
- <slot name="customtable" :column="column" :record="record"></slot>
- <template v-if="column.key === 'operation'">
- <span>
- <slot name="operation" :column="column" :record="record"></slot>
- <a @click="editEvent('download', record)" v-if="operatingButton?.reportdownload">
- 报表下载</a>
- <a-divider type="vertical" v-if="dividerbutton?.reportdownload" />
- <a @click="editEvent('detail', record)" v-if="operatingButton?.detail">
- 查看</a>
- <a-divider type="vertical" v-if="dividerbutton?.detail" />
- <a @click="editEvent('edit', record)" v-if="operatingButton?.edit">修改</a>
- <a-divider type="vertical" v-if="dividerbutton?.edit" />
- <a @click="delEvent(record)" v-if="operatingButton?.del" style="color: red">删除</a>
- <a-divider type="vertical" v-if="dividerbutton?.del" />
- </span>
- </template>
- <template v-if="column.key === 'index'">
- <span>{{
- `${(objArray.pagination.current - 1) * objArray.pagination.pageSize +
- index +
- 1
- }`
- }}</span>
- </template>
- <template v-if="column.key === objType.typeName && objType.isshow">
- <span :style="{
- color: objTypecolor.isshow
- ? objTypecolor[record[objType.typeName]]
- : null,
- }">{{ objType[record[objType.typeName]] }}</span>
- <!-- <span :style="{color:`#FF0000`}">{{
- objType[record[objType.typeName]]
- }}</span> -->
- </template>
- <template v-if="column.key === obj2Type?.typeName && obj2Type?.isshow">
- <span>{{ obj2Type[record[obj2Type.typeName]] }}</span>
- </template>
- </template>
- </a-table>
- </div>
- </template>
- <script setup>
- import { reactive, ref, watch, toRefs } from "vue";
-
-
-
- const props = defineProps({
- addbtnName: {
- type: String,
- default: ''
- },
- operatingButton: {
- //操作按钮
- reportdownload: {
- type: Boolean,
- default: false,
- },
- edit: {
- type: Boolean,
- default: true,
- },
- del: {
- type: Boolean,
- default: true,
- },
- detail: {
- type: Boolean,
- default: false,
- },
- },
- dividerbutton: {
- //操作按钮之间的分割线
- reportdownload: {
- type: Boolean,
- default: false,
- },
- edit: {
- type: Boolean,
- default: true,
- },
- del: {
- type: Boolean,
- default: false,
- },
- detail: {
- type: Boolean,
- default: false,
- },
- },
-
- allDel: {
- //按钮:全部删除
- type: Boolean,
- default: false,
- },
- columns: {
- //表格表头
- type: Array,
- default: [],
- },
- formessagedivider: {
- type: Boolean,
- default: false,
- },
- hasImport: {
- //按钮:导入
- type: Boolean,
- default: false,
- },
- hasExport: {
- //按钮:导出
- type: Boolean,
- default: false,
- },
- markread: {
- // 按钮:标记已读
- type: Boolean,
- default: false,
- },
- hasDetail: {
- //表格详情
- type: Boolean,
- default: false,
- },
- tableOtherobj: {
- type: Object,
- default: {
- // hasAddbtn: true,// 表格上是否有添加按钮
- // hasDetail: false,//操作中是否有详情
- scroll: false, //表格是否有横向滚动,以及x,方向的 值是多少 number
- actionwidth: "120",
- },
- },
- hasedit: {
- //表格修改
- type: Boolean,
- default: true,
- },
- hasdel: {
- //表格删除
- type: Boolean,
- default: true,
- },
- hasseeprocess: {
- //表格查看过程
- type: Boolean,
- default: false,
- },
-
- pagination: {
- //分页
- type: Boolean,
- default: true,
- },
-
- // 是否有批量操作
- rowSelection: {
- type: Boolean,
- default: false,
- },
- rowSelection2: {
- // 是否可以选择
- type: Boolean,
- default: false,
- },
- hasgoback: {
- //返回按钮
- type: Boolean,
- default: false,
- },
- searchkey: {
- // 查询的字段
- type: Object,
- default: {},
- },
- objType: {
- //后台返回摸个字段,不能直接显示,而是根据不同值显示对应的其他内容
- type: Object,
- default: {
- isshow: false, //是否显示
- typeName: "type", // 属性值 '需要转义的表格字段,当type=1时显示公司级;当typ=2时显示部门级'
- 1: "公司级",
- 2: "部门级",
- },
- },
- obj2Type: {
- //页面需要两个字段都用枚举时
- type: Object,
- default: {
- isshow: false, //是否显示
- typeName: "type", // 属性值 '需要转义的表格字段,当type=1时显示公司级;当typ=2时显示部门级'
- 1: "公司级",
- 2: "部门级",
- },
- },
- objTypecolor: {
- type: Object,
- default: {
- isshow: false, //是否显示
- typeName: "monitorDataReportType", // 属性值 '需要设置颜色的字段'
- day: "#FF0000",
- month: "#FFFF00",
- },
- },
- expandIconSet: {
- // 表格嵌套时,那个控制的展开折叠图表的位置
- type: Object,
- default: {
- expandIconColumnIndex: 2, //想让展开图标放在第几列
- expandIconAsCell: false, 想让展开图标放在第几列 设置的配套属性
- },
- },
-
- loading: false, //表格loading
- });
- const {
- objTypecolor,
- obj2Type,
- operatingButton,
- dividerbutton,
- formessagedivider,
- markread,
- columns,
- hasImport,
- hasExport,
- hasDetail,
- tableOtherobj,
- hasedit,
- hasdel,
- hasseeprocess,
- pagination,
- rowSelection,
- hasgoback,
- searchkey,
- objType,
- expandIconSet,
- } = toRefs(props);
-
-
-
- // 发送给父组件的方法
- const emits = defineEmits([
- "openModel",
- "handleDelTable",
- "getData",
- "FlagRead",
- "handleTableRowSelec",
- "exportXlsx",
- "importXlsx",
- ]);
-
- // 批量删除
- let flagselectedRowKeys = ref(true);
- let selecrowdata = ref();
- const objrowSelection = {
- // selectedRowKeys: selectedRowKeys,
-
- //selectedRowKeys 选中行的datasource 中元素key的值; selectedRows为所选元素中datasource 是一个数组。
- onChange: (selectedRowKeys, selectedRows) => {
- let falg = selectedRowKeys.length ? false : true;
- flagselectedRowKeys.value = falg;
- selecrowdata.value = [...selectedRowKeys];
- // console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);
- emits("handleTableRowSelec", selectedRowKeys, selectedRows);
- },
- };
-
- // 返回
- const handlegoback = () => {
- history.back();
- };
- // 操作
- const editEvent = (param1, param2) => {
- emits("openModel", param1, param2);
- };
- const delEvent = (param1, param2) => {
- emits("handleDelTable", param1);
- };
- const handleFlagRead = () => {
- emits("FlagRead", selecrowdata);
- };
- // 分页方法
- let objArray = reactive({
- // 请求参数
- searchParams: {},
- // 分页信息
- pagination: {
- current: 1,
- total: 0,
- pageSize: 25,
- showSizeChanger: true,
- showTotal: (total) => `共 ${total} 条`,
- pageSizeOptions: ['1',"15", "20", "25", "30", "40"],
- onChange: (page, pageSize) => {
- handleSizeChange(page, pageSize);
- },
- },
- // 批量选中
- selectedRowKeys: [],
- // 选中的行数据
- selectedRows: [],
- });
-
- const handleSizeChange = (page, pageSize) => {
- if (objArray.pagination.pageSize != pageSize) {
- objArray.pagination.current = 1;
- objArray.pagination.pageSize = pageSize;
- } else {
- objArray.pagination.current = page;
- }
- emits("getData", props.searchkey, objArray.pagination);
- };
- // 嵌套子表格
- const handleexpand = (expanded, record) => {
- console.log(expanded, record, "expanded, record");
- };
- const expandedRowsChange = (expandedRows) => {
- console.log(expandedRows, "expandedRows");
- };
-
- // 导出全部
- const handleAllExport = () => {
- emits("exportXlsx");
- };
- // 导入
- const headers = {
- authorization: "authorization-text",
- };
- const fileList = ref([]);
- const handleChange = (info) => {
- if (info.file.status !== "uploading") {
- console.log(info.file, info.fileList);
- }
- if (info.file.status === "done") {
- message.success(`${info.file.name} file uploaded successfully`);
- } else if (info.file.status === "error") {
- message.error(`${info.file.name} file upload failed.`);
- }
- emits("importXlsx", info);
- };
- const handleImportant = () => { };
- const dataSource = ref([]);
- const getData = (data, total) => {
-
- dataSource.value = data;
- objArray.pagination.total = total;
- };
- const setpage = (pageojb) => {
- objArray.pagination.current = pageojb.current
- objArray.pagination.pageSize = pageojb.pageSize
- }
- defineExpose({ getData, setpage });
- </script>
- <style lang="less" scoped>
- .btn-add {
- text-align: right;
- /* margin-bottom: 20px; */
- /* margin-top: 20px; */
- }
-
- :deep(.ant-select-single:not(.ant-select-customize-input)) {
- .ant-select-selector {
- height: 24px !important;
- }
- }
-
- :deep(.ant-select-single) {
- .ant-select-selector {
- .ant-select-selection-item {
- line-height: 22px !important;
- }
- }
- }
- </style>
使用:
- <ComtableListR ref="tablistRef" :hasImport="false" :loading="loading" :hasExport="false"
- :dividerbutton="dividerbutton" :operatingButton="operatingButton" @getData="getData" :columns="columns"
- @openModel="openModel">
- <template #operation="{ column, record }">
- <a @click="openModal('准则类型', record)"> 准则类型</a>
- <a-divider type="vertical" />
- <a @click="openModal('等级判定', record)"> 等级判定</a>
- <a-divider type="vertical" />
- </template>
- </ComtableListR>
- import {
- columns,
- formListEdit,
- dividerbutton,
- operatingButton,
- } from "./data";
- import ComtableListR from "@/components/ComtableListR.vue";
-
-
- const getData = async (from, param2) => {
- let params = {
- SkipCount: ((param2?.current ? param2?.current : 1) - 1) * (param2?.pageSize ? param2?.pageSize : 25),
- MaxResultCount: (param2?.pageSize ? param2?.pageSize : 25),
- };
- loading.value = true
- const res = await getRiskEvaluation(params);
- loading.value = false
- tablistRef.value.getData([...res.Items], Number(res.TotalCount));
- };
-
- const openModel = (param1, param2) => {
- mainedit.value = true
- switch (param1) {
- case "edit":
- formList.value = [...formListEdit];
- title.value = "修改";
- detailData(param2.Id).then((res) => {
- // res.createtime = dayjs(res.createtime);
- res.RiskEvaluationMethodDisplayName = res?.RiskEvaluationMethod?.DisplayName ? res?.RiskEvaluationMethod?.DisplayName : ""
- refcomDrawer.value.showModal(true, res);
- });
- visible.value = true;
- drawerBtn.value = true;
- break;
- }
- };
-
- const openModal = (type, record) => {
- mainedit.value = false
- modalId.value = record.Id
- switch (type) {
- case "准则类型":
- modalTitle.value = type;
- modalRef.value.showModal(true);
- modalColumns.value = typeColumns;
- nextTick(() => {
- getModalData();
- });
- break;
- case "准则配置":
- modalTitle.value = '准则配置';
- modalRef2.value.showModal(true);
- nextTick(() => {
- getConfigData()
- });
- break;
- case "等级判定":
- modalTitle.value = type;
- modalRef.value.showModal(true);
- modalColumns.value = judgeColumns;
- nextTick(() => {
- getModalData();
- });
- break;
- }
- };
data.js
- export const columns = [
- {
- title: '序号',
- dataIndex: 'index',
- key: 'index', align: 'center',
- width: 80,
- ellipsis: true
- },
- {
- title: '名称',
- dataIndex: 'DisplayName',
- key: 'DisplayName', align: 'center',
- width: 80,
- ellipsis: true
- },
- {
- title: '函数地址',
- dataIndex: 'ResultCalculateApi',
- key: 'ResultCalculateApi', align: 'center',
- width: 80,
- ellipsis: true
- },
- {
- title: '创建人',
- dataIndex: 'CreatorDisplayName',
- key: 'CreatorDisplayName', align: 'center',
- customRender: ({ text ,record}) => {
- // console.log(record,'rrrrrrrrr')
- return record?.Creator?.DisplayName?record?.Creator?.DisplayName:""
- },
- width: 80,
- ellipsis: true
- },
- {
- title: '创建时间',
- dataIndex: 'CreationTime',
- key: 'CreationTime', align: 'center',
- customRender: ({text})=>{
- return dayjs(text).format('YYYY-MM-DD HH:mm:ss')
- },
- width:160,
- ellipsis: true
- },
- {
- title: '上次修改人',
- dataIndex: 'LastModifierDisplayName',
- key: 'LastModifierDisplayName', align: 'center',
- customRender: ({ text ,record}) => {
- // console.log(record,'rrrrrrrrr')
- return record?.LastModifier?.DisplayName?record?.LastModifier?.DisplayName:""
- },
- width: 80,
- ellipsis: true
- },
- {
- title: '上次修改时间',
- dataIndex: 'LastModificationTime',
- key: 'LastModificationTime',
- align: 'center',
- customRender: ({ text }) => {
- let onetext=dayjs(text).format('YYYY-MM-DD HH:mm:ss')
- let TwoText= text?onetext :""
- return TwoText
- },
- width: 160,
- ellipsis: true
- },
- { title: "操作", dataIndex: "operation", key: "operation", align: 'center',
- width: 200},
- ]
- // operating button 操作按钮
- export const operatingButton = {
- reportdownload: false,
- edit: true,
- del: false,
- detail: false,
- addbtn: false
- }
- export const dividerbutton = {
- reportdownload: false,
- edit: false,
- detail: false
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。