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.
80 lines
1.8 KiB
80 lines
1.8 KiB
6 months ago
|
<template>
|
||
|
<div class="table-footer">
|
||
|
<template v-for="item in getActions" :key="item.name">
|
||
|
<ns-button
|
||
|
@click="item.finalHandle(data, item.name)"
|
||
|
:disabled="item.dynamicDisabled"
|
||
|
:type="item.type"
|
||
|
>
|
||
|
{{ item.label }}
|
||
|
</ns-button>
|
||
|
</template>
|
||
|
</div>
|
||
|
</template>
|
||
|
|
||
|
<script lang="ts">
|
||
|
import { computed, defineComponent, inject } from 'vue';
|
||
|
import { cloneDeep } from 'lodash-es';
|
||
|
import { Action, useAction } from '/nerv-lib/use/use-action';
|
||
|
import NsButton from '../form/button/button.vue';
|
||
|
import { useRoute } from 'vue-router';
|
||
|
|
||
|
export default defineComponent({
|
||
|
name: 'NsTableFooter',
|
||
|
components: {
|
||
|
NsButton,
|
||
|
},
|
||
|
props: {
|
||
|
data: {
|
||
|
type: Object,
|
||
|
default: () => ({}),
|
||
|
},
|
||
|
footerActions: {
|
||
|
type: [Array],
|
||
|
default: () => [],
|
||
|
},
|
||
|
},
|
||
|
setup(props) {
|
||
|
const reload = inject('reload', () => {});
|
||
|
const { filterAction, transformAction } = useAction({ reload });
|
||
|
const getData = computed(() => {
|
||
|
return {
|
||
|
...props.data,
|
||
|
};
|
||
|
});
|
||
|
|
||
|
const getActions = computed(() => {
|
||
|
let actions = cloneDeep(props.footerActions);
|
||
|
actions = actions
|
||
|
.filter((action: Action) => {
|
||
|
return filterAction(action, getData.value);
|
||
|
})
|
||
|
.map((action: Action) => {
|
||
|
return transformAction(action, getData.value);
|
||
|
});
|
||
|
return actions;
|
||
|
});
|
||
|
|
||
|
return { getActions, getData };
|
||
|
},
|
||
|
});
|
||
|
</script>
|
||
|
|
||
|
<style lang="less" scoped>
|
||
|
.table-footer {
|
||
|
min-width: 800px;
|
||
|
user-select: none;
|
||
|
margin-bottom: 17px;
|
||
|
margin-top: 17px;
|
||
|
text-align: right;
|
||
|
padding: 0 24px;
|
||
|
position: relative;
|
||
|
line-height: 30px;
|
||
|
color: #121212;
|
||
|
|
||
|
.ant-btn {
|
||
|
margin-left: 6px;
|
||
|
}
|
||
|
}
|
||
|
</style>
|