✨(component): 新增 table 组件 getCheckboxProps 与 getRadioProps 方法
This commit is contained in:
parent
164d07fa93
commit
9ddf369176
@ -34,6 +34,8 @@ export interface LayTableRowProps {
|
|||||||
spanMethod: Function;
|
spanMethod: Function;
|
||||||
defaultExpandAll: boolean;
|
defaultExpandAll: boolean;
|
||||||
expandKeys: Recordable[];
|
expandKeys: Recordable[];
|
||||||
|
getCheckboxProps: Function;
|
||||||
|
getRadioProps: Function;
|
||||||
}
|
}
|
||||||
|
|
||||||
const slot = useSlots();
|
const slot = useSlots();
|
||||||
@ -272,6 +274,9 @@ const isAutoShow = (
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const checkboxProps = props.getCheckboxProps(props.data, props.index);
|
||||||
|
const radioProps = props.getRadioProps(props.data, props.index);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@ -334,7 +339,11 @@ const isAutoShow = (
|
|||||||
@click="handleExpand"
|
@click="handleExpand"
|
||||||
></lay-icon>
|
></lay-icon>
|
||||||
|
|
||||||
<lay-radio v-model="tableSelectedKey" :value="data[id]" />
|
<lay-radio
|
||||||
|
v-model="tableSelectedKey"
|
||||||
|
v-bind="radioProps"
|
||||||
|
:value="data[id]"
|
||||||
|
/>
|
||||||
</td>
|
</td>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -389,6 +398,7 @@ const isAutoShow = (
|
|||||||
|
|
||||||
<lay-checkbox
|
<lay-checkbox
|
||||||
v-model="tableSelectedKeys"
|
v-model="tableSelectedKeys"
|
||||||
|
v-bind="checkboxProps"
|
||||||
:value="data[id]"
|
:value="data[id]"
|
||||||
skin="primary"
|
skin="primary"
|
||||||
/>
|
/>
|
||||||
@ -602,6 +612,8 @@ const isAutoShow = (
|
|||||||
:rowClassName="rowClassName"
|
:rowClassName="rowClassName"
|
||||||
:spanMethod="spanMethod"
|
:spanMethod="spanMethod"
|
||||||
:defaultExpandAll="defaultExpandAll"
|
:defaultExpandAll="defaultExpandAll"
|
||||||
|
:getCheckboxProps="getCheckboxProps"
|
||||||
|
:getRadioProps="getRadioProps"
|
||||||
@row="rowClick"
|
@row="rowClick"
|
||||||
@row-double="rowDoubleClick"
|
@row-double="rowDoubleClick"
|
||||||
@row-contextmenu="rowContextmenu"
|
@row-contextmenu="rowContextmenu"
|
||||||
|
@ -50,6 +50,8 @@ export interface LayTableProps {
|
|||||||
defaultExpandAll?: boolean;
|
defaultExpandAll?: boolean;
|
||||||
expandKeys?: Recordable[];
|
expandKeys?: Recordable[];
|
||||||
loading?: boolean;
|
loading?: boolean;
|
||||||
|
getCheckboxProps?: Function;
|
||||||
|
getRadioProps?: Function;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<LayTableProps>(), {
|
const props = withDefaults(defineProps<LayTableProps>(), {
|
||||||
@ -71,6 +73,8 @@ const props = withDefaults(defineProps<LayTableProps>(), {
|
|||||||
spanMethod: () => {},
|
spanMethod: () => {},
|
||||||
expandKeys: () => [],
|
expandKeys: () => [],
|
||||||
loading: false,
|
loading: false,
|
||||||
|
getCheckboxProps: () => {},
|
||||||
|
getRadioProps: () => {}
|
||||||
});
|
});
|
||||||
|
|
||||||
const tableId = uuidv4();
|
const tableId = uuidv4();
|
||||||
@ -326,37 +330,41 @@ const print = function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* excel 导出
|
* excel 导出
|
||||||
*/
|
*/
|
||||||
const exportData = () => {
|
const exportData = () => {
|
||||||
var tableStr = ``;
|
var tableStr = ``;
|
||||||
for(let tableHeadColumn of tableHeadColumns.value){
|
for (let tableHeadColumn of tableHeadColumns.value) {
|
||||||
tableStr += '<tr>';
|
tableStr += "<tr>";
|
||||||
for(let column of tableHeadColumn){
|
for (let column of tableHeadColumn) {
|
||||||
tableStr += `<td colspan=${column.colspan} rowspan=${column.rowspan}>${column.title}</td>`
|
tableStr += `<td colspan=${column.colspan} rowspan=${column.rowspan}>${column.title}</td>`;
|
||||||
}
|
}
|
||||||
tableStr += '</tr>';
|
tableStr += "</tr>";
|
||||||
}
|
}
|
||||||
tableDataSource.value.forEach((item, rowIndex) => {
|
tableDataSource.value.forEach((item, rowIndex) => {
|
||||||
tableStr += '<tr>'
|
tableStr += "<tr>";
|
||||||
tableBodyColumns.value.forEach((tableColumn, columnIndex) => {
|
tableBodyColumns.value.forEach((tableColumn, columnIndex) => {
|
||||||
Object.keys(item).forEach((name) => {
|
Object.keys(item).forEach((name) => {
|
||||||
if (tableColumn.key === name) {
|
if (tableColumn.key === name) {
|
||||||
const rowColSpan = props.spanMethod(item, tableColumn, rowIndex, columnIndex);
|
const rowColSpan = props.spanMethod(
|
||||||
|
item,
|
||||||
|
tableColumn,
|
||||||
|
rowIndex,
|
||||||
|
columnIndex
|
||||||
|
);
|
||||||
const rowspan = rowColSpan ? rowColSpan[0] : 1;
|
const rowspan = rowColSpan ? rowColSpan[0] : 1;
|
||||||
const colspan = rowColSpan ? rowColSpan[1] : 1;
|
const colspan = rowColSpan ? rowColSpan[1] : 1;
|
||||||
if(rowspan != 0 && colspan != 0) {
|
if (rowspan != 0 && colspan != 0) {
|
||||||
tableStr += `<td colspan=${colspan} rowspan=${rowspan}>${item[name]}</td>`
|
tableStr += `<td colspan=${colspan} rowspan=${rowspan}>${item[name]}</td>`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
tableStr += '</tr>'
|
tableStr += "</tr>";
|
||||||
});
|
});
|
||||||
var worksheet = "Sheet1";
|
var worksheet = "Sheet1";
|
||||||
var uri = "data:application/vnd.ms-excel;base64,";
|
var uri = "data:application/vnd.ms-excel;base64,";
|
||||||
var exportTemplate =
|
var exportTemplate = `<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||||
`<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel"
|
|
||||||
xmlns="http://www.w3.org/TR/REC-html40">
|
xmlns="http://www.w3.org/TR/REC-html40">
|
||||||
<head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet>
|
<head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet>
|
||||||
<x:Name>${worksheet}</x:Name>
|
<x:Name>${worksheet}</x:Name>
|
||||||
@ -469,7 +477,7 @@ const slotsData = ref<string[]>([]);
|
|||||||
props.columns.map((value: any) => {
|
props.columns.map((value: any) => {
|
||||||
if (value.customSlot) {
|
if (value.customSlot) {
|
||||||
slotsData.value.push(value.customSlot);
|
slotsData.value.push(value.customSlot);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const currentIndentSize = ref(0);
|
const currentIndentSize = ref(0);
|
||||||
@ -783,6 +791,8 @@ const renderTotalRowCell = (column: any) => {
|
|||||||
:rowClassName="rowClassName"
|
:rowClassName="rowClassName"
|
||||||
:spanMethod="spanMethod"
|
:spanMethod="spanMethod"
|
||||||
:defaultExpandAll="defaultExpandAll"
|
:defaultExpandAll="defaultExpandAll"
|
||||||
|
:getCheckboxProps="getCheckboxProps"
|
||||||
|
:getRadioProps="getRadioProps"
|
||||||
@row="rowClick"
|
@row="rowClick"
|
||||||
@row-double="rowDoubleClick"
|
@row-double="rowDoubleClick"
|
||||||
@row-contextmenu="rowContextmenu"
|
@row-contextmenu="rowContextmenu"
|
||||||
|
@ -698,7 +698,7 @@ export default {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<lay-button @click="changeSelectedKeys">修改选中值 {{ selectedKeys5 }}</lay-button>
|
<lay-button @click="changeSelectedKeys">修改选中值 {{ selectedKeys5 }}</lay-button>
|
||||||
<lay-table :columns="columns23" :data-source="dataSource23" v-model:selectedKeys="selectedKeys5"></lay-table>
|
<lay-table :columns="columns23" :data-source="dataSource23" v-model:selectedKeys="selectedKeys5" :getCheckboxProps="getCheckboxProps"></lay-table>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@ -709,6 +709,13 @@ export default {
|
|||||||
|
|
||||||
const selectedKeys5 = ref(["1"]);
|
const selectedKeys5 = ref(["1"]);
|
||||||
|
|
||||||
|
const getCheckboxProps = (data,index) => {
|
||||||
|
if(index == 2) {
|
||||||
|
return {disabled: true}
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
const changeSelectedKeys = () => {
|
const changeSelectedKeys = () => {
|
||||||
selectedKeys5.value = ["2"]
|
selectedKeys5.value = ["2"]
|
||||||
}
|
}
|
||||||
@ -752,7 +759,8 @@ export default {
|
|||||||
columns23,
|
columns23,
|
||||||
dataSource23,
|
dataSource23,
|
||||||
selectedKeys5,
|
selectedKeys5,
|
||||||
changeSelectedKeys
|
changeSelectedKeys,
|
||||||
|
getCheckboxProps
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user