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.

120 lines
3.3 KiB

<script lang="ts" setup>
import {defineExpose, h, onMounted, reactive, ref, watch} from 'vue'
import { autoCompleteProps } from 'ant-design-vue/es/auto-complete'
import PointModal from '../../exa/history/PointModal.vue'
import { columns } from './point.data'
import { BasicTable, TableAction, useTable } from '@/components/Table'
import { useI18n } from '@/hooks/web/useI18n'
import { IconEnum } from '@/enums/appEnum'
import { useModal } from '@/components/Modal'
import {Tag} from 'ant-design-vue'
defineOptions({ name: 'ModelTable' })
const props = defineProps({
data: {
type: Array<Recordable>,
default: () => [],
},
type: {
type: Boolean,
default: false,
},
})
const { t } = useI18n()
const updateIndex = ref<number>(0)
const [registerPointModal, { openModal: openPointModal }] = useModal()
function handlePoint(record) {
openPointModal(true, record)
console.log(record)
updateIndex.value = record.LAY_TABLE_INDEX
}
const [registerTable, { setColumns, getDataSource, updateTableDataRecord }] = useTable({
title: '测点列表',
maxHeight: 300,
dataSource: props.data,
size: 'small',
columns,
useSearchForm: false,
showTableSetting: false,
showIndexColumn: true,
actionColumn: {
width: 140,
title: t('common.action'),
dataIndex: 'action',
fixed: 'right',
},
})
// 自动请求并暴露内部方法
onMounted(() => {
console.log(props.type)
if (props.type) {
console.log('改变列')
setColumns([...columns, {
title: '测点类型',
dataIndex: 'type',
width: 80,
// slots: { customRender: 'type' },
customRender: ({ record }) => {
return h(
Tag,
{
color: record.type ? 'default' : 'blue',
},
() => (record.type ? '输出' : '输入'),
)
}
}])
}
})
const source = ref<string>('run')
const rowSelectType = ref<string>('radio')
function updateTableData(selectedData) {
const item = getDataSource()[updateIndex.value]
item.PointId = selectedData[0].itemName
item.Description = selectedData[0].descriptor
item.Unit = selectedData[0].engUnits
updateTableDataRecord(updateIndex.value, item)
console.log(selectedData)
// 替换测点列表中的测点
console.log('更新表格数据')
}
function getPointTableData() {
const tableData = getDataSource()
return tableData
}
// <!-- 使用defineExpose将组件中的数据交给外部,这样父组件中的demoRef.value才可以访问到如下数据 -->
defineExpose({ getPointTableData })
</script>
<template>
<div>
<BasicTable @register="registerTable">
<!-- <template #type="{ record }">-->
<!-- {{ record.type ? '输出' : '输入' }}-->
<!-- </template>-->
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<TableAction
:actions="[{ icon: IconEnum.CHANGE, label: t('action.pointConfig'), auth: 'run:instant:update', onClick: handlePoint.bind(null, record) },
]"
/>
</template>
</template>
</BasicTable>
<PointModal :source="source" :row-select-type="rowSelectType" @register="registerPointModal" @success="updateTableData" />
</div>
</template>
<style lang="less" scoped>
:deep(.ant-table-body){
height:100% !important;
max-height:100% !important
}
</style>