6 changed files with 887 additions and 437 deletions
@ -0,0 +1,380 @@ |
|||
<template> |
|||
<div class="full-height"> |
|||
<vxe-grid |
|||
ref="tableRef" |
|||
row-key |
|||
:size="tableSizeConfig" |
|||
:columns="columns" |
|||
:data="data" |
|||
align="center" |
|||
highlight-hover-row |
|||
stripe |
|||
v-bind="$attrs" |
|||
> |
|||
<template #table-drop="{ rowIndex }"> |
|||
<div class="table-drop" :data-id="rowIndex"> |
|||
<MenuOutlined /> |
|||
</div> |
|||
</template> |
|||
<template #table-title="{ row }"> |
|||
<a-input v-model:value="row.title" :disabled="!row.visible" :size="formSizeConfig" /> |
|||
</template> |
|||
<template #table-visible="{ row }"> |
|||
<a-checkbox v-model:checked="row.visible" :size="formSizeConfig" /> |
|||
</template> |
|||
<template #table-hidden="{ row }"> |
|||
<a-checkbox v-model:checked="row.hidden" :disabled="!row.visible" :size="formSizeConfig" /> |
|||
</template> |
|||
<template #table-readonly="{ row }"> |
|||
<a-checkbox |
|||
v-model:checked="row.readonly" |
|||
:disabled="!row.visible" |
|||
:size="formSizeConfig" |
|||
/> |
|||
</template> |
|||
<template #table-used="{ row }"> |
|||
<a-checkbox v-model:checked="row.used" :disabled="!row.visible" :size="formSizeConfig" /> |
|||
</template> |
|||
<template #table-searchSymbol="{ row }"> |
|||
<a-select |
|||
v-model:value="row.searchSymbol" |
|||
:disabled="!row.visible" |
|||
:size="formSizeConfig" |
|||
style="width: 100px" |
|||
> |
|||
<a-select-option v-for="item in searchSymbolList" :key="item" :value="item"> |
|||
{{ item }} |
|||
</a-select-option> |
|||
</a-select> |
|||
</template> |
|||
<template #table-useTableSearch="{ row }"> |
|||
<a-checkbox |
|||
v-model:checked="row.useTableSearch" |
|||
:disabled="!row.visible" |
|||
:size="formSizeConfig" |
|||
/> |
|||
</template> |
|||
<template #table-tableName="{ row }"> |
|||
<a-input |
|||
v-model:value="row.tableName" |
|||
:disabled="!(row.useTableSearch && row.visible)" |
|||
:size="formSizeConfig" |
|||
/> |
|||
</template> |
|||
<template #table-keyColumnName="{ row }"> |
|||
<a-input |
|||
v-model:value="row.keyColumnName" |
|||
:disabled="!(row.useTableSearch && row.visible)" |
|||
:size="formSizeConfig" |
|||
/> |
|||
</template> |
|||
<template #table-valueColumnName="{ row }"> |
|||
<a-input |
|||
v-model:value="row.valueColumnName" |
|||
:disabled="!(row.useTableSearch && row.visible)" |
|||
:size="formSizeConfig" |
|||
/> |
|||
</template> |
|||
<template #table-tableWhere="{ row }"> |
|||
<a-input v-model:value="row.tableWhere" :size="formSizeConfig" /> |
|||
</template> |
|||
<template #table-controlType="{ row }"> |
|||
<a-select |
|||
v-model:value="row.controlType" |
|||
:disabled="!row.visible" |
|||
style="width: 100px" |
|||
:size="formSizeConfig" |
|||
> |
|||
<a-select-option v-for="item in controlList" :key="item.key" :value="item.key"> |
|||
{{ $t(item.value) }} |
|||
</a-select-option> |
|||
</a-select> |
|||
<a-tooltip v-if="row.controlType === 'selectTable'" placement="top"> |
|||
<template #title> |
|||
<span>选择表格</span> |
|||
</template> |
|||
<PlusOutlined |
|||
:style="{ cursor: 'pointer', 'margin-left': '5px' }" |
|||
@click="() => handleShowChoseSelectTable(row)" |
|||
/> |
|||
</a-tooltip> |
|||
</template> |
|||
<template #table-rules="{ row }"> |
|||
<a-select |
|||
v-model:value="row.rules" |
|||
:disabled="!row.visible" |
|||
mode="multiple" |
|||
:size="formSizeConfig" |
|||
style="width: 160px" |
|||
> |
|||
<a-select-option v-for="item in ruleList" :key="item.key" :value="item.key"> |
|||
{{ item.value }} |
|||
</a-select-option> |
|||
</a-select> |
|||
</template> |
|||
<template #table-visible-header="{ column }"> |
|||
<a-checkbox v-model:checked="headerVisibleCheckboxChecked" :size="formSizeConfig" /> |
|||
{{ $t(column.title.replace('{', '').replace('}', '')) }} |
|||
</template> |
|||
<template #table-hidden-header="{ column }"> |
|||
<a-checkbox v-model:checked="headerHiddenCheckboxChecked" :size="formSizeConfig" /> |
|||
{{ $t(column.title.replace('{', '').replace('}', '')) }} |
|||
</template> |
|||
<template #table-readonly-header="{ column }"> |
|||
<a-checkbox v-model:checked="headerReadonlyCheckboxChecked" :size="formSizeConfig" /> |
|||
{{ $t(column.title.replace('{', '').replace('}', '')) }} |
|||
</template> |
|||
<template #table-used-header="{ column }"> |
|||
<a-checkbox v-model:checked="headerUseCheckboxChecked" :size="formSizeConfig" /> |
|||
{{ $t(column.title.replace('{', '').replace('}', '')) }} |
|||
</template> |
|||
</vxe-grid> |
|||
<PageAddendumTableChoseModal |
|||
@ok="handleChoseTable" |
|||
:select-table-list="currentRow.selectTableList == null ? [] : currentRow.selectTableList" |
|||
@register="registerSelectTableModal" |
|||
/> |
|||
</div> |
|||
</template> |
|||
|
|||
<script lang="ts"> |
|||
import { defineComponent, onMounted, ref, toRefs, watch } from 'vue'; |
|||
import type { Ref, PropType } from 'vue'; |
|||
|
|||
import { MenuOutlined, PlusOutlined } from '@ant-design/icons-vue'; |
|||
import PageAddendumTableChoseModal from '../PageAddendumTableChoseModal.vue'; |
|||
import { useSizeSetting } from '@/hooks/setting/UseSizeSetting'; |
|||
import { useVxeTableSortable } from '@/components/SmartTable'; |
|||
|
|||
import { |
|||
controlList, |
|||
getRuleList, |
|||
searchSymbolList, |
|||
vueTableHeaderCheckboxSupport, |
|||
vueChoseSelectTableSupport, |
|||
} from '../PageSettingSupport'; |
|||
import { useI18n } from '@/hooks/web/useI18n'; |
|||
|
|||
const copyField = [ |
|||
'columnName', |
|||
'remarks', |
|||
'nullable', |
|||
'javaProperty', |
|||
'extType', |
|||
'javaType', |
|||
'simpleJavaType', |
|||
]; |
|||
|
|||
/** |
|||
* 创建数据 |
|||
*/ |
|||
const createDataFromTableData = (tableData: Array<any>, editData: Ref | undefined) => { |
|||
if (editData && editData.value) { |
|||
return editData.value; |
|||
} |
|||
return tableData.map((item) => { |
|||
const data: any = {}; |
|||
copyField.forEach((field) => { |
|||
data[field] = item[field]; |
|||
}); |
|||
return Object.assign(data, { |
|||
title: data.remarks || data.javaProperty, |
|||
readonly: false, |
|||
visible: true, |
|||
hidden: false, |
|||
used: true, |
|||
controlType: 'INPUT', |
|||
searchSymbol: '=', |
|||
rules: [], |
|||
useTableSearch: false, |
|||
}); |
|||
}); |
|||
}; |
|||
|
|||
/** |
|||
* 搜索配置页面 |
|||
*/ |
|||
export default defineComponent({ |
|||
name: 'PageSearchSetting', |
|||
components: { |
|||
MenuOutlined, |
|||
PlusOutlined, |
|||
PageAddendumTableChoseModal, |
|||
}, |
|||
props: { |
|||
tableData: { |
|||
type: Array as PropType<Array<any>>, |
|||
default: () => [], |
|||
}, |
|||
editData: { |
|||
type: Array as PropType<Array<any>>, |
|||
}, |
|||
}, |
|||
setup(props) { |
|||
const { t } = useI18n(); |
|||
const { tableData, editData } = toRefs(props); |
|||
const sizeConfigHoops = useSizeSetting(); |
|||
const tableRef = ref(); |
|||
const data = ref<Array<any>>([]); |
|||
const currentRow = ref<any>({}); |
|||
watch(tableData, () => { |
|||
data.value = createDataFromTableData(tableData.value, editData); |
|||
}); |
|||
onMounted(() => { |
|||
data.value = createDataFromTableData(tableData.value, editData); |
|||
}); |
|||
const getData = () => { |
|||
return data.value; |
|||
}; |
|||
return { |
|||
...sizeConfigHoops, |
|||
data, |
|||
getData, |
|||
tableRef, |
|||
currentRow, |
|||
...vueChoseSelectTableSupport(currentRow), |
|||
...useVxeTableSortable(tableRef, '.table-drop', data), |
|||
ruleList: ref(getRuleList(t)), |
|||
controlList: ref(controlList), |
|||
searchSymbolList: ref(searchSymbolList), |
|||
headerVisibleCheckboxChecked: vueTableHeaderCheckboxSupport(data, 'visible').checked, |
|||
headerHiddenCheckboxChecked: vueTableHeaderCheckboxSupport(data, 'hidden', false).checked, |
|||
headerReadonlyCheckboxChecked: vueTableHeaderCheckboxSupport(data, 'readonly', false) |
|||
.checked, |
|||
headerUseCheckboxChecked: vueTableHeaderCheckboxSupport(data, 'used', true).checked, |
|||
}; |
|||
}, |
|||
data() { |
|||
return { |
|||
columns: [ |
|||
{ |
|||
title: '#', |
|||
field: 'drop', |
|||
width: 80, |
|||
slots: { |
|||
default: 'table-drop', |
|||
}, |
|||
}, |
|||
{ |
|||
title: '{generator.views.tableField.title.columnName}', |
|||
field: 'columnName', |
|||
width: 160, |
|||
align: 'left', |
|||
headerAlign: 'center', |
|||
}, |
|||
{ |
|||
title: '{generator.views.tableSetting.title.title}', |
|||
field: 'title', |
|||
width: 160, |
|||
align: 'left', |
|||
headerAlign: 'center', |
|||
slots: { |
|||
default: 'table-title', |
|||
}, |
|||
}, |
|||
{ |
|||
title: '{generator.views.formSetting.title.controlType}', |
|||
field: 'controlType', |
|||
width: 150, |
|||
slots: { |
|||
default: 'table-controlType', |
|||
}, |
|||
}, |
|||
{ |
|||
title: '{generator.views.formSetting.title.readonly}', |
|||
field: 'readonly', |
|||
width: 110, |
|||
slots: { |
|||
default: 'table-readonly', |
|||
header: 'table-readonly-header', |
|||
}, |
|||
}, |
|||
{ |
|||
title: '{generator.views.tableSetting.title.visible}', |
|||
field: 'visible', |
|||
width: 110, |
|||
slots: { |
|||
default: 'table-visible', |
|||
header: 'table-visible-header', |
|||
}, |
|||
}, |
|||
{ |
|||
title: '{generator.views.tableSetting.title.hidden}', |
|||
field: 'hidden', |
|||
width: 110, |
|||
slots: { |
|||
default: 'table-hidden', |
|||
header: 'table-hidden-header', |
|||
}, |
|||
}, |
|||
{ |
|||
title: '{generator.views.formSetting.title.used}', |
|||
field: 'used', |
|||
width: 120, |
|||
slots: { |
|||
default: 'table-used', |
|||
header: 'table-used-header', |
|||
}, |
|||
}, |
|||
{ |
|||
title: '{generator.views.searchSetting.title.searchSymbol}', |
|||
field: 'searchSymbol', |
|||
width: 120, |
|||
slots: { |
|||
default: 'table-searchSymbol', |
|||
}, |
|||
}, |
|||
{ |
|||
title: '{generator.views.formSetting.title.useTableSearch}', |
|||
field: 'useTableSearch', |
|||
width: 110, |
|||
slots: { |
|||
default: 'table-useTableSearch', |
|||
}, |
|||
}, |
|||
{ |
|||
title: '{generator.views.code.table.tableName}', |
|||
field: 'tableName', |
|||
width: 120, |
|||
slots: { |
|||
default: 'table-tableName', |
|||
}, |
|||
}, |
|||
{ |
|||
title: '{generator.views.formSetting.title.keyColumnName}', |
|||
field: 'keyColumnName', |
|||
width: 120, |
|||
slots: { |
|||
default: 'table-keyColumnName', |
|||
}, |
|||
}, |
|||
{ |
|||
title: '{generator.views.formSetting.title.valueColumnName}', |
|||
field: 'valueColumnName', |
|||
width: 120, |
|||
slots: { |
|||
default: 'table-valueColumnName', |
|||
}, |
|||
}, |
|||
{ |
|||
title: '{generator.views.formSetting.title.tableWhere}', |
|||
field: 'tableWhere', |
|||
minWidth: 180, |
|||
slots: { |
|||
default: 'table-tableWhere', |
|||
}, |
|||
}, |
|||
{ |
|||
title: '{generator.views.code.table.remarks}', |
|||
field: 'remarks', |
|||
minWidth: 160, |
|||
align: 'left', |
|||
headerAlign: 'center', |
|||
}, |
|||
], |
|||
}; |
|||
}, |
|||
}); |
|||
</script> |
|||
|
|||
<style scoped></style> |
|||
Loading…
Reference in new issue