Browse Source

表格优化提交

main
likunming 1 year ago
parent
commit
f75f8bb7b7
  1. 321
      io.sc.platform.core.frontend/src/views/likm/Grid.vue

321
io.sc.platform.core.frontend/src/views/likm/Grid.vue

@ -1,11 +1,73 @@
<template> <template>
<div> <div style="height: 100%">
<!-- <q-splitter v-model="splitterModel">
<template #before>
<q-tabs v-model="tab" vertical class="text-teal">
<q-tab name="mails" icon="mail" label="Mails" />
<q-tab name="alarms" icon="alarm" label="Alarms" />
<q-tab name="movies" icon="movie" label="Movies" />
</q-tabs>
</template>
<template #after>
<q-tab-panels v-model="tab" animated swipeable vertical transition-prev="jump-up" transition-next="jump-up">
<q-tab-panel name="mails">
</q-tab-panel>
<q-tab-panel name="alarms">
<w-grid
ref="grid2"
:title="testGrid.title"
draggable
dense
:data-url="testGrid.tableDataUrl"
:checkbox-selection="true"
selection="multiple"
:query-form-cols-num="2"
:columns="testGrid.tableColumns"
:toolbar-actions="testGrid.toolbar"
:query-form-fields="testGrid.queryForm"
:editor="{
form: {
colsNum: 1,
fields: [
{ label: '登录名', name: 'loginName', type: 'w-text' },
{ label: '用户名', name: 'userName', type: 'w-text' },
{ label: '密码', name: 'password', type: 'w-text' },
{ label: '是否可用1111', name: 'enable', type: 'w-checkbox' },
{
name: 'urlOpenType',
label: 'urlOpenType',
type: 'select',
options: Options.enum(UrlOpenTypeEnum, false),
defaultValue: 'NEW_WINDOW',
},
],
},
}"
:viewer="testGrid.view"
></w-grid>
</q-tab-panel>
<q-tab-panel name="movies">
<div class="text-h4 q-mb-md">Movies</div>
<w-form ref="form" :fields="[{ name: 'a', label: 'a', type: 'text' }]"></w-form>
</q-tab-panel>
</q-tab-panels>
</template>
</q-splitter> -->
<w-grid <w-grid
ref="gridRef"
:title="testGrid.title" :title="testGrid.title"
draggable draggable
:dense="state.dense"
:hide-bottom="false"
:data-url="testGrid.tableDataUrl" :data-url="testGrid.tableDataUrl"
:auto-fetch-data="false"
:checkbox-selection="true" :checkbox-selection="true"
selection="multiple" selection="multiple"
:query-form-cols-num="6"
:columns="testGrid.tableColumns" :columns="testGrid.tableColumns"
:toolbar-actions="testGrid.toolbar" :toolbar-actions="testGrid.toolbar"
:query-form-fields="testGrid.queryForm" :query-form-fields="testGrid.queryForm"
@ -31,21 +93,35 @@
@update-ticked="updateTicked" @update-ticked="updateTicked"
@row-click="rowClick" @row-click="rowClick"
@row-db-click="rowDbClick" @row-db-click="rowDbClick"
@after-request-data="
() => {
// console.info('1111111111111111111111111111');
}
"
></w-grid> ></w-grid>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, nextTick, reactive } from 'vue'; import { ref, onMounted, nextTick, reactive, computed } from 'vue';
import { axios, Environment, EnumTools, Options } from '@/platform'; import { axios, Environment, EnumTools, Options } from '@/platform';
import EnableIcon from '@/platform/components/grid/EnableIcon.vue'; import EnableIcon from '@/platform/components/grid/EnableIcon.vue';
import { IconEnum } from '@/platform/enums'; import { IconEnum } from '@/platform/enums';
const dialogRef = ref();
const gridRef = ref();
const grid2 = ref();
const form = ref();
const tab = ref('mails');
const splitterModel = ref(10);
const UrlOpenTypeEnum = await EnumTools.fetch('io.sc.platform.system.enums.UrlOpenType'); const UrlOpenTypeEnum = await EnumTools.fetch('io.sc.platform.system.enums.UrlOpenType');
const updateTicked = (event, row) => { const updateTicked = (event, row) => {
console.info('grid.updateTicked.event====', event); console.info('grid.updateTicked.event====', event);
console.info('grid.updateTicked.row====', row); console.info('grid.updateTicked.row====', row);
}; };
const state = reactive({
dense: false,
});
const startY = ref(0); const startY = ref(0);
const endY = ref(0); const endY = ref(0);
@ -66,15 +142,77 @@ const rowClick = (evt, row, index) => {
// } // }
// startY.value = 0; // startY.value = 0;
// endY.value = 0; // endY.value = 0;
// console.info('grid.rowClick.row====', row);
// tab.value = 'alarms';
// nextTick(() => {
// grid2.value.getQueryForm().setFieldValue('loginName', row.id);
// });
// tab.value = 'movies';
// nextTick(() => {
// form.value.setFieldValue('a', row.id);
// });
console.info('grid.rowClick.row====', row); console.info('grid.rowClick.row====', row);
}; };
const rowDbClick = (evt, row, index) => { const rowDbClick = (evt, row, index) => {
console.info('grid.rowDbClick.row====', row); console.info('grid.rowDbClick.row====', row);
}; };
const testGrid = reactive({ //
const getElementViewPosition = (element) => {
//x
let actualLeft = element.offsetLeft;
let xcurrent = element.offsetParent;
while (xcurrent !== null) {
actualLeft += xcurrent.offsetLeft + xcurrent.clientLeft;
xcurrent = xcurrent.offsetParent;
}
let elementScrollLeft = document.documentElement.scrollLeft;
if (document.compatMode == 'BackCompat') {
elementScrollLeft = document.body.scrollLeft;
}
const left = actualLeft - elementScrollLeft;
//y
let actualTop = element.offsetTop;
let ycurrent = element.offsetParent;
while (ycurrent !== null) {
actualTop += ycurrent.offsetTop + ycurrent.clientTop;
ycurrent = ycurrent.offsetParent;
}
let elementScrollTop = document.documentElement.scrollTop;
if (document.compatMode == 'BackCompat') {
elementScrollTop = document.body.scrollTop;
}
var right = actualTop - elementScrollTop;
//
return { x: left, y: right };
};
// const gridHeightComputed = computed(() => {
// // if (dialogRef?.value && gridRef?.value) {
// // const height = dialogRef.value.getContentHeight();
// // const tableContentY = getElementViewPosition(gridRef.value.$el.getElementsByClassName('q-table__middle')[0]);
// // console.info('height==========', height);
// // console.info('gridRef==============', tableContentY);
// // if (height && tableContentY) {
// // return height.height - (tableContentY.y - height.y);
// // }
// // }
// if (dialogRef?.value && dialogRef.value.getContent()) {
// const height = dialogRef.value.getContent().clientHeight;
// console.info('dialogRef.value.getContent()====', height);
// if (height > 0) {
// return height;
// }
// }
// return 0;
// });
const aaaaaaaaaaaaaaaa = ref(false);
const testGrid = {
hideBottom: false, hideBottom: false,
autoLoadData: true, autoLoadData: false,
tableLeftColumnStickyNumber: 1, tableLeftColumnStickyNumber: 1,
title: '用户列表', title: '用户列表',
tableDataUrl: Environment.apiContextPath('api/system/user'), tableDataUrl: Environment.apiContextPath('api/system/user'),
@ -86,32 +224,41 @@ const testGrid = reactive({
toolbar: [ toolbar: [
['query', 'separator', 'moreQuery'], ['query', 'separator', 'moreQuery'],
'reset', 'reset',
'refresh', {
extend: 'refresh',
click: () => {
state.dense = !state.dense;
},
},
'separator', 'separator',
{ {
name: 'custBtn', extend: 'resetDefaultValues',
extend: 'add',
icon: undefined, icon: undefined,
label: '自定义按钮', label: 'aasdfFFF',
enableIf: (selected) => { loadingIf: (selected, ticked, grid) => {
if (selected && selected.length > 0) { if (selected.length === 0) {
return true; return true;
} }
return false; return false;
}, },
// enableIf: (selected) => {
// if (selected && selected.length > 0) {
// return true;
// }
// return false;
// },
// beforeClick: (selected, context, grid) => { // beforeClick: (selected, context, grid) => {
// console.info('before'); // console.info('before');
// context.aaa = '111'; // context.aaa = '111';
// }, // },
click: (selected, context, _click, grid) => { click: (args) => {
// grid.setQueryCriteria({ // grid.setQueryCriteria({
// fieldName: 'loginName', // fieldName: 'loginName',
// operator: 'contains', // operator: 'contains',
// value: 'admin', // value: 'admin',
// }); // });
grid.setFetchDataUrl('a.action'); console.info('args=====', args);
grid.refresh(); args._click();
// _click();
}, },
afterClick: (selected, context, grid) => { afterClick: (selected, context, grid) => {
// grid.addEditFormRef.setFieldValue('userName', ''); // grid.addEditFormRef.setFieldValue('userName', '');
@ -138,7 +285,14 @@ const testGrid = reactive({
{ label: '登录名', name: 'loginName', type: 'w-text' }, { label: '登录名', name: 'loginName', type: 'w-text' },
{ label: '用户名', name: 'userName', type: 'w-text' }, { label: '用户名', name: 'userName', type: 'w-text' },
{ label: '描述', name: 'description', type: 'w-text' }, { label: '描述', name: 'description', type: 'w-text' },
{ label: '是否可用', name: 'enable', type: 'w-select' }, { label: '用户名', name: 'userName1', type: 'w-text' },
{ label: '描述', name: 'description1', type: 'w-text' },
{
label: '是否可用',
name: 'enable',
type: 'select',
options: [{ label: '监管报表-G4B-1表内信用风险加权资产计算表(权重法)', value: '0a981b42-d0df-4f02-94c4-edc20620ba9f' }],
},
// { label: '', name: 'email', type: 'w-text' }, // { label: '', name: 'email', type: 'w-text' },
// { label: '', name: 'phone', type: 'w-text' }, // { label: '', name: 'phone', type: 'w-text' },
// { label: '', name: 'mobile', type: 'w-number' }, // { label: '', name: 'mobile', type: 'w-number' },
@ -146,37 +300,52 @@ const testGrid = reactive({
// { label: '', name: 'lastModifyDate', type: 'w-date' }, // { label: '', name: 'lastModifyDate', type: 'w-date' },
], ],
tableColumns: [ tableColumns: [
// { {
// name: 'info', name: 'info',
// label: '', label: '用户信息',
// hidden: true, columns: [
// childrenColumns: [ { name: 'loginName', label: '登录名', align: 'right' },
// { name: 'loginName', label: '', align: 'right' }, { name: 'userName', label: '用户名' },
// { name: 'userName', label: '' }, ],
// ], },
// }, // { name: 'loginName', label: '', align: 'right' },
// { // { name: 'userName', label: '' },
// name: 'lxxx', {
// label: '', name: 'lxxx',
// childrenColumns: [ label: '联系方式',
// { name: 'email', label: '' }, columns: [
// { {
// name: 'tx', name: 'email',
// label: '', label: '邮箱地址',
// childrenColumns: [ columns: [
// { name: 'phone', label: '' }, { width: 100, name: 'auc', label: 'auc' },
// { name: 'mobile', label: '' }, { width: 100, name: 'ar', label: 'ar' },
// ], { width: 100, name: 'ks', label: 'ks' },
// }, ],
// { name: 'qq', label: 'QQ' }, },
// ], {
// }, name: 'tx',
{ name: 'loginName', label: '登录名', align: 'right' }, label: '通讯',
{ name: 'userName', label: '用户名' }, columns: [
{ name: 'email', label: '邮箱地址' }, { name: 'phone', label: '电话' },
{ name: 'phone', label: '电话' }, { name: 'mobile', label: '手机号' },
{ name: 'mobile', label: '手机号' }, ],
{ name: 'qq', label: 'QQ' }, },
{
name: 'qq',
label: 'QQ',
// columns: [
// { width: 100, name: 'aucQualitative', label: 'aucQualitative' },
// { width: 100, name: 'arQualitative', label: 'arQualitative' },
// { width: 100, name: 'ksQualitative', label: 'ksQualitative' },
// ],
},
],
},
// { name: 'email', label: '' },
// { name: 'phone', label: '' },
// { name: 'mobile', label: '' },
// { name: 'qq', label: 'QQ' },
{ name: 'description', label: '描述', width: 400 }, { name: 'description', label: '描述', width: 400 },
{ {
name: 'enable', name: 'enable',
@ -184,15 +353,21 @@ const testGrid = reactive({
align: 'center', align: 'center',
width: 400, width: 400,
format: (val, row) => { format: (val, row) => {
// return '1<br/>2';
return { return {
componentType: 'q-icon', componentType: 'q-checkbox',
bindModelValue: true,
attrs: { attrs: {
name: val ? IconEnum.是状态 : IconEnum.否状态, dense: true,
color: val ? 'green' : 'red',
size: 'xs',
}, },
}; };
// return {
// componentType: 'q-icon',
// attrs: {
// name: val ? IconEnum. : IconEnum.,
// color: val ? 'green' : 'red',
// size: 'xs',
// },
// };
}, },
}, },
// { name: 'loginName', label: '', align: 'right' }, // { name: 'loginName', label: '', align: 'right' },
@ -239,9 +414,49 @@ const testGrid = reactive({
], ],
}, },
}, },
}); };
onMounted(() => { onMounted(() => {
// testGridRef.value.replaceRowsFun([{ typeName: '', typeDesc: '', lastModifier: 'admin', lastModifyDate: '2023-12-26' }]); gridRef.value.setLocalData([
{
loginName: 'admin1',
},
{
loginName: 'admin2',
},
{
loginName: 'admin3',
},
{
loginName: 'admin4',
},
{
loginName: 'admin5',
},
{
loginName: 'admin6',
},
{
loginName: 'admin7',
},
{
loginName: 'admin8',
},
{
loginName: 'admin9',
},
{
loginName: 'admin10',
},
{
loginName: 'admin11',
},
{
loginName: 'admin12',
},
{
loginName: 'admin13',
},
]);
}); });
</script> </script>

Loading…
Cancel
Save