车间能级提升-智能设备管理系统
zhuguifei
2025-04-16 609b918b24e8dbbe75bf2eaef7a532308d83a708
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<script setup lang="ts">
import type { Recordable } from '@vben/types';
 
import { reactive, ref, watch } from 'vue';
 
import { $t } from '@vben/locales';
import { getVxePopupContainer } from '@vben/utils';
 
import { Popconfirm, Space } from 'ant-design-vue';
 
import { useVbenVxeGrid, type VxeGridProps, vxeSortEvent } from '#/adapter/vxe-table';
 
 
interface Props {
  title?: string;
  columns?: VxeGridProps['columns'];
  data: any;
  isUpdate?: boolean;
}
const props = defineProps<Props>();
 
const responsiveData = reactive(props.data);
defineExpose({
  tableData
});
 
watch(
  () => props.data,
  (data) => {
    responsiveData.splice(0, responsiveData.length, ...data);
  }
);
 
const gridOptions: VxeGridProps = {
  checkboxConfig: {
    // 高亮
    highlight: true,
    // 翻页时保留选中状态
    reserve: true
    // 点击行选中
    // trigger: 'row'
  },
  columns: props.columns,
  height: 'auto',
  keepSource: true,
  data: responsiveData,
  pagerConfig: {
    enabled: false
  },
  toolbarConfig: {
    enabled: false
  },
  rowConfig: {
    isHover: true,
    keyField: 'id'
  },
  sortConfig: {
    // 远程排序
    remote: true,
    // 支持多字段排序 默认关闭
    multiple: true
  },
  editConfig: {
    mode: 'cell',
    trigger: 'click'
  },
  id: 'local-table'
};
 
const [BasicTable, tableApi] = useVbenVxeGrid({
  gridOptions,
  gridEvents: {
    sortChange: (sortParams) => vxeSortEvent(tableApi, sortParams)
  }
});
 
function handleDelete(row: Recordable<any>) {
  const index = responsiveData.findIndex((item: any) => item.id === row.id);
  if (index !== -1) {
    responsiveData.splice(index, 1);
  }
}
// 选中数据
function tableData() {
  return tableApi.grid.getData();
}
 
 
/**
 * TODO 后续扩展点击事件
 */
const slotName = ref<string>('equName');
</script>
 
<template>
  <div class="w-full h-min">
    <BasicTable :table-title="title" size="small">
      <template #[slotName]="{ row }">
        <Space>
          <span>{{ row[slotName] }}</span>
        </Space>
      </template>
 
      <template #action="{ row }">
        <Space>
          <Popconfirm :get-popup-container="getVxePopupContainer" placement="left" title="确认删除?" @confirm="handleDelete(row)">
            <ghost-button :disabled="isUpdate" danger @click.stop="">
              {{ $t('pages.common.delete') }}
            </ghost-button>
          </Popconfirm>
        </Space>
      </template>
    </BasicTable>
  </div>
</template>
 
<style lang="scss" scoped>
:deep(.p-2) {
  padding: 0;
}
</style>