Commit 6bfb907f authored by hcyhuchaoyue's avatar hcyhuchaoyue

feat:Ag Grid 表格树

parent 55f44f6c
...@@ -9,7 +9,7 @@ defineProps<{ ...@@ -9,7 +9,7 @@ defineProps<{
<template> <template>
<div class="my-ag-grid-loading-overlay-component"> <div class="my-ag-grid-loading-overlay-component">
<div class="my-ag-grid-loading-overlay-component-conten"> <div class="my-ag-grid-loading-overlay-component-conten">
<q-spinner-clock size="3em" style="color: rgb(166, 150, 200)" /> <q-spinner-clock size="3em" style="color: var(--my-ag-grid-primary)" />
<span>加载中...</span> <span>加载中...</span>
</div> </div>
</div> </div>
...@@ -29,7 +29,7 @@ defineProps<{ ...@@ -29,7 +29,7 @@ defineProps<{
box-sizing: border-box; box-sizing: border-box;
width: 100%; width: 100%;
height: calc(100% - 50px); height: calc(100% - 50px);
color: rgb(166, 150, 200); color: var(--my-ag-grid-primary);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
......
...@@ -56,7 +56,7 @@ defineProps<{ ...@@ -56,7 +56,7 @@ defineProps<{
left: 50%; left: 50%;
transform: translate(-50px, 38px); transform: translate(-50px, 38px);
box-sizing: border-box; box-sizing: border-box;
color: rgb(166, 150, 200); color: var(--my-ag-grid-primary);
} }
} }
} }
......
...@@ -2,46 +2,46 @@ ...@@ -2,46 +2,46 @@
export default { export default {
// Set Filter // Set Filter
selectAll: '(Select All)', selectAll: '(全选)',
selectAllSearchResults: '(Select All Search Results)', selectAllSearchResults: '(选择所有搜索结果)',
searchOoo: '搜索...', searchOoo: '搜索...',
blanks: '(Blanks)', blanks: '()',
noMatches: 'No matches', noMatches: '无匹配结果',
// Number Filter & Text Filter // Number Filter & Text Filter
filterOoo: 'Filter...', filterOoo: '过滤...',
equals: 'Equals', equals: '等于',
notEqual: 'Not equal', notEqual: '不等于',
blank: 'Blank', blank: '',
notBlank: 'Not blank', notBlank: '非空',
empty: 'Choose One', empty: '选择其中之一',
// Number Filter // Number Filter
lessThan: 'Less than', lessThan: '小于',
greaterThan: 'Greater than', greaterThan: '大于',
lessThanOrEqual: 'Less than or equal', lessThanOrEqual: '小于或等于',
greaterThanOrEqual: 'Greater than or equal', greaterThanOrEqual: '大于或等于',
inRange: 'In range', inRange: '在范围内',
inRangeStart: 'from', inRangeStart: '',
inRangeEnd: 'to', inRangeEnd: '',
// Text Filter // Text Filter
contains: 'Contains', contains: '包含',
notContains: 'Not contains', notContains: '不包含',
startsWith: 'Starts with', startsWith: '开始于',
endsWith: 'Ends with', endsWith: '结束于',
// Date Filter // Date Filter
dateFormatOoo: 'yyyy-mm-dd', dateFormatOoo: 'yyyy-mm-dd',
// Filter Conditions // Filter Conditions
andCondition: 'AND', andCondition: '',
orCondition: 'OR', orCondition: '',
// Filter Buttons // Filter Buttons
applyFilter: 'Apply', applyFilter: '应用',
resetFilter: 'Reset', resetFilter: '重置',
clearFilter: 'Clear', clearFilter: '清空',
cancelFilter: 'Cancel', cancelFilter: 'Cancel',
// Filter Titles // Filter Titles
...@@ -72,9 +72,9 @@ export default { ...@@ -72,9 +72,9 @@ export default {
// Other // Other
loadingOoo: '加载中...', loadingOoo: '加载中...',
loadingError: 'ERR', loadingError: '错误',
noRowsToShow: 'No Rows To Show', noRowsToShow: '暂无数据',
enabled: 'Enabled', enabled: '启用',
// Menu // Menu
pinColumn: '固定列', pinColumn: '固定列',
...@@ -91,8 +91,8 @@ export default { ...@@ -91,8 +91,8 @@ export default {
addToLabels: 'Add ${variable} to labels', addToLabels: 'Add ${variable} to labels',
removeFromLabels: 'Remove ${variable} from labels', removeFromLabels: 'Remove ${variable} from labels',
resetColumns: '重置列', resetColumns: '重置列',
expandAll: 'Expand All', expandAll: '全部展开',
collapseAll: 'Close All', collapseAll: '全部折叠',
copy: '复制', copy: '复制',
ctrlC: 'Ctrl+C', ctrlC: 'Ctrl+C',
copyWithHeaders: '带标题的复制', copyWithHeaders: '带标题的复制',
......
...@@ -77,24 +77,38 @@ a:hover { ...@@ -77,24 +77,38 @@ a:hover {
// Ag Grid // Ag Grid
.ag-theme-alpine { .ag-theme-alpine {
--ag-foreground-color: #7e2e84 !important; // 菜单等主要 UI 元素中文本和图标的颜色 // 选中的复选框、范围选择、行悬停、行选择、选定的选项卡下划线、输入焦点轮廓
--ag-background-color: rgb(247, 247, 252) !important; // 不要和标题行背景色一样
--ag-header-foreground-color: #ffffff !important; --ag-alpine-active-color: var(--my-ag-grid-active) !important;
--ag-header-background-color: rgb(166, 150, 200) !important;
--ag-odd-row-background-color: rgb(247, 247, 252) !important; // 菜单等主要 UI 元素中文本和图标的颜色
--ag-header-column-resize-handle-color: #7e2e84 !important; // 不要和标题行背景色一样
--ag-foreground-color: var(--my-ag-grid-active) !important;
// 背景色
--ag-background-color: Var(--my-ag-grid-text) !important;
--ag-alpine-active-color: rgb(166, 150, 200) !important; // 标题行字体色
--ag-selected-row-background-color: rgba(166, 150, 200, 0.1) !important; --ag-header-foreground-color: var(--my-ag-grid-text) !important;
--ag-range-selection-background-color: rgba(166, 150, 200, 0.2) !important; // 标题行背景色
--ag-row-hover-color: rgba(166, 150, 200, 0.1) !important; --ag-header-background-color: var(--my-ag-grid-primary) !important;
--ag-column-hover-color: rgba(166, 150, 200, 0.1) !important;
--ag-input-focus-border-color: rgba(166, 150, 200, 0.1) !important;
--ag-border-color: rgb(166, 150, 200) !important; // index为奇数的背景色
--ag-row-border-color: rgba(166, 150, 200, 0.2) !important; --ag-odd-row-background-color: var(--my-ag-grid-primary-light) !important;
// 标题列调整大小句柄颜色
--ag-header-column-resize-handle-color: var(--my-ag-grid-active) !important;
--ag-font-size: 17px; --ag-selected-row-background-color: var(--my-ag-grid-primary-1) !important;
--ag-font-family: monospace; --ag-range-selection-background-color: var(--my-ag-grid-primary-2) !important;
--ag-row-hover-color: var(--my-ag-grid-primary-1) !important;
--ag-column-hover-color: var(--my-ag-grid-primary-1) !important;
--ag-input-focus-border-color: var(--my-ag-grid-primary-1) !important;
--ag-border-color: var(--my-ag-grid-primary) !important;
--ag-row-border-color: var(--my-ag-grid-primary-1) !important;
--ag-input-disabled-background-color: #fff !important;
.ag-input-field-input,
.ag-text-field-input {
color: var(--my-ag-grid-primary) !important;
}
} }
...@@ -56,3 +56,13 @@ $gray-text: rgba(0, 0, 0, 0.871); ...@@ -56,3 +56,13 @@ $gray-text: rgba(0, 0, 0, 0.871);
$gray-light-text: rgba(0, 0, 0, 0.596); $gray-light-text: rgba(0, 0, 0, 0.596);
$header-heigyht: 50px; $header-heigyht: 50px;
:root {
--my-ag-grid-primary: rgb(165, 189, 22);
--my-ag-grid-primary-light: rgba(165, 189, 22, 0.05);
--my-ag-grid-primary-1: rgba(165, 189, 22, 0.1);
--my-ag-grid-primary-2: rgba(165, 189, 22, 0.2);
--my-ag-grid-active: rgb(127, 143, 37);
--my-ag-grid-text: #fff7f7;
}
...@@ -17,6 +17,7 @@ import TransformationAnimation from './element/TransformationAnimation.vue'; ...@@ -17,6 +17,7 @@ import TransformationAnimation from './element/TransformationAnimation.vue';
import AgGridStudy from './element/AgGridStudy2.vue'; import AgGridStudy from './element/AgGridStudy2.vue';
import AgGridMaster from './element/AgGridMaster.vue'; import AgGridMaster from './element/AgGridMaster.vue';
import AgGridDetailGrids from './element/AgGridDetailGrids.vue'; import AgGridDetailGrids from './element/AgGridDetailGrids.vue';
import AgGridTreeData from './element/AgGridTreeData.vue';
const listData = [ const listData = [
{ {
...@@ -51,10 +52,14 @@ const listData = [ ...@@ -51,10 +52,14 @@ const listData = [
title: 'Vue Data Grid: Master / Detail - Detail Grids', title: 'Vue Data Grid: Master / Detail - Detail Grids',
name: 'ag-grid-detail-grids', name: 'ag-grid-detail-grids',
}, },
{
title: 'Ag Grid 表格树',
name: 'ag-grid-tree-data',
},
]; ];
const isShow = ref(true); const isShow = ref(true);
const elementName = ref('ag-grid-detail-grids'); const elementName = ref('ag-grid-tree-data');
const elementTitle = ref('Vue Data Grid: Master / Detail - Detail Grids'); const elementTitle = ref('Ag Grid 表格树');
function onclick(data: any) { function onclick(data: any) {
elementTitle.value = data.title; elementTitle.value = data.title;
...@@ -95,6 +100,7 @@ function goBack() { ...@@ -95,6 +100,7 @@ function goBack() {
<ag-grid-study v-if="elementName === 'ag-grid-study'" /> <ag-grid-study v-if="elementName === 'ag-grid-study'" />
<ag-grid-master v-if="elementName === 'ag-grid-master'" /> <ag-grid-master v-if="elementName === 'ag-grid-master'" />
<ag-grid-detail-grids v-if="elementName === 'ag-grid-detail-grids'" /> <ag-grid-detail-grids v-if="elementName === 'ag-grid-detail-grids'" />
<ag-grid-tree-data v-if="elementName === 'ag-grid-tree-data'" />
</div> </div>
</div> </div>
<div v-else> <div v-else>
......
[
{
"name": "sys/user/read",
"title": "System Setting/User Management/Read",
"i18n": {
"en-US": "System Setting/User Management/Read",
"zh-CN": "系统设置/用户管理/查看",
"zh-TW": "系統設置/用戶管理/查看"
}
},
{
"name": "sys/user/create",
"title": "System Setting/User Management/Create",
"i18n": {
"en-US": "System Setting/User Management/Create",
"zh-CN": "系统设置/用户管理/新建",
"zh-TW": "系統設置/用戶管理/新建"
}
},
{
"name": "sys/user/edit",
"title": "System Setting/User Management/Edit",
"i18n": {
"en-US": "System Setting/User Management/Edit",
"zh-CN": "系统设置/用户管理/编辑",
"zh-TW": "系統設置/用戶管理/編輯"
}
},
{
"name": "sys/user/delete",
"title": "System Setting/User Management/Delete",
"i18n": {
"en-US": "System Setting/User Management/Delete",
"zh-CN": "系统设置/用户管理/删除",
"zh-TW": "系統設置/用戶管理/删除"
}
},
{
"name": "sys/user/reset_pwd",
"title": "System Setting/User Management/Reset Password",
"i18n": {
"en-US": "System Setting/User Management/Reset Password",
"zh-CN": "系统设置/用户管理/重置密码",
"zh-TW": "系統設置/用戶管理/重置密碼"
}
},
{
"name": "sys/role/read",
"title": "System Setting/Role Management/Read",
"i18n": {
"en-US": "System Setting/Role Management/Read",
"zh-CN": "系统设置/角色管理/查看",
"zh-TW": "系統設置/角色管理/查看"
}
},
{
"name": "sys/role/create",
"title": "System Setting/Role Management/Create",
"i18n": {
"en-US": "System Setting/Role Management/Create",
"zh-CN": "系统设置/角色管理/新建",
"zh-TW": "系統設置/角色管理/新建"
}
},
{
"name": "sys/role/edit",
"title": "System Setting/Role Management/Edit",
"i18n": {
"en-US": "System Setting/Role Management/Edit",
"zh-CN": "系统设置/角色管理/编辑",
"zh-TW": "系統設置/角色管理/編輯"
}
},
{
"name": "sys/role/viewConnectedUsers",
"title": "System Setting/Role Management/View connected users",
"i18n": {
"en-US": "System Setting/Role Management/View connected users",
"zh-CN": "系统设置/角色管理/查看关联用户",
"zh-TW": "系統設置/角色管理/查看關聯用戶"
}
},
{
"title": "物流任务管理/历史任务管理/查看用户任务",
"name": "logistics_task_mgt/History_mgt/History_User_view",
"i18n": {
"en-US": "Logistics Task/History Task Mgt/History View User Task",
"zh-CN": "物流任务管理/历史任务管理/查看用户任务",
"zh-TW": "物流任務管理/歷史任務管理/查看用戶任務"
}
},
{
"title": "物流任务管理/历史任务管理/查看部门任务",
"name": "logistics_task_mgt/History_mgt/History_Workcenter_view",
"i18n": {
"en-US": "Logistics Task/History Task Mgt/History View Workcenter Task",
"zh-CN": "物流任务管理/历史任务管理/查看部门任务",
"zh-TW": "物流任務管理/歷史任務管理/查看部門任務"
}
},
{
"title": "物流任务管理/历史任务管理/查看所有任务",
"name": "logistics_task_mgt/History_mgt/History_All_view",
"i18n": {
"en-US": "Logistics Task/History Task Mgt/History View All Task",
"zh-CN": "物流任务管理/历史任务管理/查看所有任务",
"zh-TW": "物流任務管理/歷史任務管理/查看所有任務"
}
},
{
"title": "物流任务管理/历史任务管理/导出任务",
"name": "logistics_task_mgt/History_mgt/History_Export_task",
"i18n": {
"en-US": "Logistics Task/History Task Mgt/History Export Task",
"zh-CN": "物流任务管理/历史任务管理/导出任务",
"zh-TW": "物流任務管理/歷史任務管理/導出任務"
}
},
{
"title": "物流任务管理/AGV任务记录/查看",
"name": "logistics_task_mgt/agv_task_record/read",
"i18n": {
"en-US": "Logistics task mgt/AGV Task Record/Read",
"zh-CN": "物流任务管理/AGV任务记录/查看",
"zh-TW": "物流任務管理/AGV任務記錄/查看"
}
},
{
"title": "物流任务管理/AGV任务记录/导出",
"name": "logistics_task_mgt/agv_task_record/export",
"i18n": {
"en-US": "Logistics task mgt/AGV Task Record/Export",
"zh-CN": "物流任务管理/AGV任务记录/导出",
"zh-TW": "物流任務管理/AGV任務記錄/導出"
}
}
]
import DATA from './auth.json';
export const getData = function () {
const myMap1 = new Map();
const myMap2 = new Map();
const rowData = DATA.map((item: any) => {
const data = item.i18n;
// Map1
const nameArr1 = item.name.split('/');
const key1 = nameArr1[0] + '/' + nameArr1[1];
const title1 = data['zh-TW'].split('/');
const origin1 = data['en-US'].split('/');
const type1 = data['zh-CN'].split('/');
const obj1 = {
title: title1[1],
origin: origin1[1],
type: [type1[0], type1[1]],
};
if (!myMap1.has(key1)) {
myMap1.set(key1, obj1);
}
// Map2
const key2 = nameArr1[0];
const obj2 = {
title: title1[0],
origin: origin1[0],
type: [type1[0]],
};
if (!myMap2.has(key2)) {
myMap1.set(key2, obj2);
}
return {
title: data['zh-TW'].split('/')[2],
origin: data['en-US'].split('/')[2],
type: data['zh-CN'].split('/'),
};
});
for (const value of myMap1.values()) {
rowData.push(value);
}
for (const value of myMap2.values()) {
rowData.push(value);
}
return rowData;
// const rowData = [
// {
// title: '系統設置',
// origin: 'System Setting',
// type: ['系统设置'],
// },
// {
// title: '用戶管理',
// origin: 'User Management',
// type: ['系统设置', '用户管理'],
// },
// {
// title: '查看',
// origin: 'Read',
// type: ['系统设置', '用户管理', '查看'],
// },
// {
// title: '新建',
// origin: 'Create',
// type: ['系统设置', '用户管理', '新建'],
// },
// ];
};
...@@ -9,8 +9,9 @@ import Com from 'src/components'; ...@@ -9,8 +9,9 @@ import Com from 'src/components';
import AG_GRID_LOCALE from 'src/config/ag-grid-locale'; import AG_GRID_LOCALE from 'src/config/ag-grid-locale';
const defaultColDef = { const defaultColDef = {
resizable: true,
flex: 1, flex: 1,
suppressMenu: true, // 禁用标题行菜单 suppressMenu: false, // 是否禁用标题行菜单
}; };
const gridApi = ref<any>(null); const gridApi = ref<any>(null);
......
...@@ -25,7 +25,7 @@ const gridApi = ref<any>(null); ...@@ -25,7 +25,7 @@ const gridApi = ref<any>(null);
const state = reactive({ const state = reactive({
columnDefs: [ columnDefs: [
{ field: 'age' }, { field: 'age', headerName: '年龄' },
{ field: 'year' }, { field: 'year' },
{ {
field: 'country', field: 'country',
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { h, ref, reactive, onMounted } from 'vue'; import { h, ref, reactive, onMounted } from 'vue';
import { AgGridVue } from 'ag-grid-vue3'; import { AgGridVue } from 'ag-grid-vue3';
import AG_GRID_LOCALE from 'src/config/ag-grid-locale';
import AgGridStudyCom from './AgGridStudyCom.vue'; import AgGridStudyCom from './AgGridStudyCom.vue';
import AgGridStudyYearFilter from './AgGridStudyYearFilter.vue'; import AgGridStudyYearFilter from './AgGridStudyYearFilter.vue';
...@@ -40,10 +41,11 @@ const savedFilterModel = ref<any>(null); ...@@ -40,10 +41,11 @@ const savedFilterModel = ref<any>(null);
const state = reactive({ const state = reactive({
columnDefs: [ columnDefs: [
{ field: 'age', filter: 'agNumberColumnFilter' }, { field: 'age', headerName: '年龄', filter: 'agNumberColumnFilter' },
// { field: 'year', filter: 'agSetColumnFilter' }, // 企业版 https://ag-grid.com/vue-data-grid/filter-set/ // { field: 'year', filter: 'agSetColumnFilter' }, // 企业版 https://ag-grid.com/vue-data-grid/filter-set/
{ {
field: 'year', field: 'year',
headerName: '年份',
filter: AgGridStudyYearFilter, filter: AgGridStudyYearFilter,
filterParams: { filterParams: {
title: '标题', title: '标题',
...@@ -52,6 +54,7 @@ const state = reactive({ ...@@ -52,6 +54,7 @@ const state = reactive({
{ {
field: 'date', field: 'date',
headerName: '日期',
filter: 'agDateColumnFilter', filter: 'agDateColumnFilter',
// https://ag-grid.com/vue-data-grid/filter-date/#date-filter-comparator // https://ag-grid.com/vue-data-grid/filter-date/#date-filter-comparator
// add extra parameters for the date filter // add extra parameters for the date filter
...@@ -84,6 +87,7 @@ const state = reactive({ ...@@ -84,6 +87,7 @@ const state = reactive({
}, },
{ {
field: 'country', field: 'country',
headerName: '国家',
filter: 'agMultiColumnFilter', // 企业版 https://ag-grid.com/vue-data-grid/filter-multi/ filter: 'agMultiColumnFilter', // 企业版 https://ag-grid.com/vue-data-grid/filter-multi/
cellRenderer: AgGridStudyCom, cellRenderer: AgGridStudyCom,
cellRendererParams: { cellRendererParams: {
...@@ -96,14 +100,16 @@ const state = reactive({ ...@@ -96,14 +100,16 @@ const state = reactive({
}, },
{ {
field: 'sport', field: 'sport',
headerName: '运动',
cellRenderer: SimpleComp, cellRenderer: SimpleComp,
}, },
{ field: 'gold' }, { field: 'gold', headerName: '金牌' },
{ field: 'silver' }, { field: 'silver', headerName: '银牌' },
{ {
field: 'bronze', field: 'bronze',
headerName: '铜牌',
cellRendererSelector: (data: any) => { cellRendererSelector: (data: any) => {
if (data.value > 2) { if (data.value < 2) {
return { component: SimpleComp }; return { component: SimpleComp };
} else { } else {
return { return {
...@@ -165,6 +171,7 @@ function applyFilterState() { ...@@ -165,6 +171,7 @@ function applyFilterState() {
<ag-grid-vue <ag-grid-vue
style="height: 500px" style="height: 500px"
class="ag-theme-alpine" class="ag-theme-alpine"
:localeText="AG_GRID_LOCALE"
:popupParent="state.popupParent" :popupParent="state.popupParent"
:columnDefs="state.columnDefs" :columnDefs="state.columnDefs"
:rowData="state.rowData" :rowData="state.rowData"
......
<!--
* AG-grid 表格树
* https://www.ag-grid.com/vue-data-grid/tree-data/
-->
<script setup lang="ts">
import { ref, reactive, onMounted } from 'vue';
import { AgGridVue } from 'ag-grid-vue3';
import AG_GRID_LOCALE from 'src/config/ag-grid-locale';
import { getData } from '../config';
const defaultColDef = {
resizable: true,
flex: 1,
suppressMenu: false, // 是否禁用标题行菜单
};
const gridApi = ref<any>(null);
const gridColumnApi = ref<any>(null);
const state = reactive({
columnDefs: [
{ field: 'title', headerName: '繁体' },
{ field: 'origin', headerName: '英文' },
],
rowData: [] as any,
});
const autoGroupColumnDef = reactive({
headerName: '名称',
minWidth: 300,
cellRendererParams: {
suppressMenu: true,
},
});
onMounted(() => {
setTimeout(() => {
state.rowData = getData();
console.log('rowData', state.rowData);
}, 1000);
});
function onGridReady(params: any) {
gridApi.value = params.api;
gridColumnApi.value = params.columnApi;
}
function getDataPath(data: any) {
return data.type;
}
</script>
<template>
<div class="box">
<!--
rowSelection="multiple":多选,按住control键多选;【control+shift+鼠标点击】可选中多行
animateRows=true:启用行动画
:masterDetail="true" 启用展开的细节网格行
:isRowMaster="isRowMaster" 确定哪一个行该展开
-->
<div>
<ag-grid-vue
style="height: 500px"
class="ag-theme-alpine"
:localeText="AG_GRID_LOCALE"
:columnDefs="state.columnDefs"
:rowData="state.rowData"
:defaultColDef="defaultColDef"
:animateRows="true"
:pagination="true"
:paginationPageSize="5"
@grid-ready="onGridReady"
:treeData="true"
:getDataPath="getDataPath"
:autoGroupColumnDef="autoGroupColumnDef"
:groupDefaultExpanded="-1"
>
</ag-grid-vue>
</div>
</div>
</template>
<style lang="scss" scoped></style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment