From 19861eb02053e9c00ce2f3802899d99bcc637300 Mon Sep 17 00:00:00 2001 From: cuckooent Date: Tue, 5 Nov 2024 14:31:55 +0800 Subject: [PATCH] =?UTF-8?q?{"Message":"=E6=9B=B4=E6=96=B0=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E5=8F=B0=EF=BC=8C=E5=A2=9E=E5=8A=A0=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=8F=8D=E9=A6=88=E6=A1=91=E5=9F=BA=E5=9B=BE=E3=80=81=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E6=88=90=E5=91=98=E5=85=B3=E7=B3=BB=E5=9B=BE","Messag?= =?UTF-8?q?eType":2,"Modules":[{"State":1,"Type":7,"Name":"Table/=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=88=90=E5=91=98=E8=A1=A8"},{"State":1,"Type":1,"Nam?= =?UTF-8?q?e":"PCPage/=E5=B7=A5=E4=BD=9C=E5=8F=B0=E9=A6=96=E9=A1=B5"}],"Ve?= =?UTF-8?q?rsion":"v1"}?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .collaboration | 25 +--- Pages/工作台/工作台首页.json | 235 +++++++++++++++++++++++++++++++++-- Pages/工作台/工作台首页.rd | 2 +- Tables/任务/任务成员表.json | 12 ++ 4 files changed, 239 insertions(+), 35 deletions(-) diff --git a/.collaboration b/.collaboration index cf44b367..02fa47f7 100644 --- a/.collaboration +++ b/.collaboration @@ -242,16 +242,7 @@ }, { "ModuleName": "Table/任务成员表", - "State": 1, - "LockedBy": { - "UserName": "cuckooent", - "Email": "phoben@qq.com" - }, - "LockDateTime": "2024-11-05T13:40:10.8820724+08:00", - "ModuleType": 7, - "ToRemoveFiles": [ - "Tables\\任务\\任务成员表.json" - ] + "ModuleType": 7 }, { "ModuleName": "Table/任务表", @@ -2279,19 +2270,7 @@ }, { "ModuleName": "PCPage/工作台首页", - "State": 1, - "LockedBy": { - "UserName": "cuckooent", - "Email": "phoben@qq.com" - }, - "LockDateTime": "2024-11-05T13:09:56.7361296+08:00", - "ModuleType": 1, - "ToRemoveFiles": [ - "Pages\\工作台\\工作台首页.json", - "Pages\\工作台\\工作台首页.rd", - "Pages\\3868fc7f40b841649f14b5adba61954.json", - "Pages\\3868fc7f40b841649f14b5adba61954.rd" - ] + "ModuleType": 1 }, { "ModuleName": "PCPage/项目负荷 (2)", diff --git a/Pages/工作台/工作台首页.json b/Pages/工作台/工作台首页.json index 2d429aa4..440a41b5 100644 --- a/Pages/工作台/工作台首页.json +++ b/Pages/工作台/工作台首页.json @@ -65,7 +65,7 @@ }, "12": { "GridRowColumnDefinition": { - "DesignLengthInPixel": 520.0 + "DesignLengthInPixel": 1000.0 } }, "13": { @@ -81,10 +81,20 @@ }, "15": { "GridRowColumnDefinition": { - "DesignLengthInPixel": 15.0 + "DesignLengthInPixel": 10.0 } }, "16": { + "GridRowColumnDefinition": { + "DesignLengthInPixel": 1000.0 + } + }, + "17": { + "GridRowColumnDefinition": { + "DesignLengthInPixel": 15.0 + } + }, + "18": { "GridRowColumnDefinition": { "DesignLengthInPixel": 32.0, "IsHidden": true @@ -92,9 +102,9 @@ } }, "InLogicalVisibleIndexes": [ - 16 + 18 ], - "Count": 17, + "Count": 19, "DefaultSize": 10.0 }, "Cols": { @@ -679,7 +689,70 @@ ], "JSONDataSources": [], "ImageDataSource": [], - "Config": "{\"option\":\"console.log(Context[\\\"recommands\\\"]);\\n\\n// 处理数据,生成节点和链接 \\nconst processData = (data) => {\\n // 收集所有唯一的节点 \\n const typeSet = new Set(data.map(item => item.类型||\\\"其他\\\"));\\n const projectSet = new Set(data.map(item => item.项目||\\\"未知项目\\\"));\\n const taskSet = new Set(data.map(item => item.任务||\\\"未知任务\\\"));\\n\\n // 预计算每个节点的总值 \\n const nodeValues = {};\\n\\n // 计算类型节点的值 \\n data.forEach(item => {\\n nodeValues[item.类型] = (nodeValues[item.类型] || 0) + item.数量;\\n nodeValues[item.项目] = (nodeValues[item.项目] || 0) + item.数量;\\n nodeValues[item.任务] = (nodeValues[item.任务] || 0) + item.数量;\\n });\\n\\n // 生成节点数组,确保节点按照类型、项目、任务的顺序排列 \\n const nodes = [\\n // 类型节点 \\n ...Array.from(typeSet).map((name) => ({\\n name: name,\\n depth: 0,\\n value: nodeValues[name], // 添加value值 \\n itemStyle: {\\n color: '#2196f3'\\n }\\n })),\\n // 项目节点 \\n ...Array.from(projectSet).map((name) => ({\\n name: name,\\n depth: 1,\\n value: nodeValues[name], // 添加value值 \\n itemStyle: {\\n color: '#ff5722'\\n }\\n })),\\n // 任务节点 \\n ...Array.from(taskSet).map((name) => ({\\n name: name,\\n depth: 2,\\n value: nodeValues[name], // 添加value值 \\n itemStyle: {\\n color: '#4caf50'\\n }\\n }))\\n ];\\n\\n // 生成连接数组 \\n const links = [];\\n\\n // 类型 -> 项目的链接 \\n data.forEach(item => {\\n const existingLink = links.find(\\n link => link.source === item.类型 && link.target === item.项目\\n );\\n if (existingLink) {\\n existingLink.value += item.数量;\\n } else {\\n links.push({\\n source: item.类型,\\n target: item.项目,\\n value: item.数量\\n });\\n }\\n });\\n\\n // 项目 -> 任务的链接 \\n data.forEach(item => {\\n const existingLink = links.find(\\n link => link.source === item.项目 && link.target === item.任务\\n );\\n if (existingLink) {\\n existingLink.value += item.数量;\\n } else {\\n links.push({\\n source: item.项目,\\n target: item.任务,\\n value: item.数量\\n });\\n }\\n });\\n\\n return { nodes, links };\\n};\\n\\n//获取提示文字\\nconst gettooltip = (params) => {\\n console.log(params);\\n if (params.dataType === 'node') {\\n return `${params.name}\\\\n数量: ${params.value}`;\\n }\\n return `${params.data.source} → ${params.data.target}\\\\n数量: ${params.value}`;\\n}\\n\\n// 处理数据 \\nconst { nodes, links } = processData(Context[\\\"recommands\\\"]);\\n\\n// Echarts配置 \\noption = {\\n backgroundColor: \\\"rgba(0, 0, 0, 0)\\\",\\n title: {\\n text: \\\"项目反馈桑基图\\\",\\n left: \\\"center\\\",\\n top: 24,\\n textStyle: {\\n fontSize: 16,\\n fontWeight: \\\"bold\\\",\\n },\\n },\\n tooltip: {\\n trigger: 'item',\\n triggerOn: 'mousemove',\\n backgroundColor: '#fff',\\n borderColor: '#eee',\\n borderWidth: 1,\\n textStyle: {\\n color: '#333'\\n },\\n formatter: gettooltip\\n },\\n toolbox: {\\n show: true,\\n top: 20,\\n left: 30,\\n feature: {\\n restore: {}, // 还原 \\n saveAsImage: {}, // 保存图片 \\n }\\n },\\n series: [{\\n type: 'sankey',\\n roam: true, // 启用平移缩放 \\n scaleLimit: {\\n min: 0.2, // 最小缩放比例 \\n max: 4 // 最大缩放比例 \\n },\\n animation: true,\\n animationDuration: 300,\\n animationEasingUpdate: 'quinticInOut',\\n left: '15px',\\n top: '60px',\\n right: '120px',\\n bottom: '30px',\\n emphasis: {\\n focus: 'adjacency'\\n },\\n nodeAlign: 'left',\\n orient: 'horizontal',\\n data: nodes,\\n links: links,\\n layoutIterations: 64, // 增加布局迭代次数,使布局更加均匀 \\n nodeGap: 30, // 调整节点之间的间距 \\n nodeWidth: 20, // 调整节点的宽度 \\n draggable: true, // 禁止拖动,保持布局稳定 \\n lineStyle: {\\n color: 'source',\\n curveness: 0.5,\\n opacity: 0.5\\n },\\n levels: [{\\n depth: 0,\\n itemStyle: {\\n color: '#2196f3'\\n },\\n lineStyle: {\\n color: 'source',\\n opacity: 0.6\\n }\\n }, {\\n depth: 1,\\n itemStyle: {\\n color: '#ff5722'\\n },\\n lineStyle: {\\n color: 'source',\\n opacity: 0.4\\n }\\n }, {\\n depth: 2,\\n itemStyle: {\\n color: '#4caf50'\\n }\\n }],\\n label: {\\n position: 'right',\\n fontSize: 14,\\n lineHeight: 18,\\n color: '#000000',\\n formatter: function (params) {\\n var name = params.name;\\n // 只有当value大于0时才显示数量 \\n if (params.value && params.value > 0) {\\n return `${name} * ${params.value}个`;\\n }\\n // 如果value为0或未定义,只显示名称 \\n return \\\"\\\";\\n }\\n }\\n }]\\n};\",\"graphTheme\":null,\"displayMode\":\"canvas\",\"jsCode\":\"\\n async ({Context,JSONContext,ImageContext,echarts,myChart,dat,Forguncy,d3,setInterval,setTimeout,ForguncyEchartsHelper,PublicResource})=>{\\n var datGUI=undefined;\\n var option={};\\n console.log(Context[\\\"recommands\\\"]);\\n// 处理数据,生成节点和链接 \\nconst processData = (data) => {\\n // 收集所有唯一的节点 \\n const typeSet = new Set(data.map(item => item.类型 || \\\"其他\\\"));\\n const projectSet = new Set(data.map(item => item.项目 || \\\"未知项目\\\"));\\n const taskSet = new Set(data.map(item => item.任务 || \\\"未知任务\\\"));\\n // 预计算每个节点的总值 \\n const nodeValues = {};\\n // 计算类型节点的值 \\n data.forEach(item => {\\n nodeValues[item.类型] = (nodeValues[item.类型] || 0) + item.数量;\\n nodeValues[item.项目] = (nodeValues[item.项目] || 0) + item.数量;\\n nodeValues[item.任务] = (nodeValues[item.任务] || 0) + item.数量;\\n });\\n // 生成节点数组,确保节点按照类型、项目、任务的顺序排列 \\n const nodes = [\\n // 类型节点 \\n ...Array.from(typeSet).map((name) => ({\\n name: name,\\n depth: 0,\\n value: nodeValues[name],\\n itemStyle: {\\n color: '#2196f3'\\n }\\n })),\\n // 项目节点 \\n ...Array.from(projectSet).map((name) => ({\\n name: name,\\n depth: 1,\\n value: nodeValues[name],\\n itemStyle: {\\n color: '#ff5722'\\n }\\n })),\\n // 任务节点 \\n ...Array.from(taskSet).map((name) => ({\\n name: name,\\n depth: 2,\\n value: nodeValues[name],\\n itemStyle: {\\n color: '#4caf50'\\n }\\n }))\\n ];\\n // 生成连接数组 \\n const links = [];\\n // 类型 -> 项目的链接 \\n data.forEach(item => {\\n const existingLink = links.find(link => link.source === item.类型 && link.target === item.项目);\\n if (existingLink) {\\n existingLink.value += item.数量;\\n }\\n else {\\n links.push({\\n source: item.类型,\\n target: item.项目,\\n value: item.数量\\n });\\n }\\n });\\n // 项目 -> 任务的链接 \\n data.forEach(item => {\\n const existingLink = links.find(link => link.source === item.项目 && link.target === item.任务);\\n if (existingLink) {\\n existingLink.value += item.数量;\\n }\\n else {\\n links.push({\\n source: item.项目,\\n target: item.任务,\\n value: item.数量\\n });\\n }\\n });\\n return { nodes, links };\\n};\\n//获取提示文字\\nconst gettooltip = (params) => {\\n console.log(params);\\n if (params.dataType === 'node') {\\n return `${params.name}\\\\n数量: ${params.value}`;\\n }\\n return `${params.data.source} → ${params.data.target}\\\\n数量: ${params.value}`;\\n};\\n// 处理数据 \\nconst { nodes, links } = processData(Context[\\\"recommands\\\"]);\\n// Echarts配置 \\noption = {\\n backgroundColor: \\\"rgba(0, 0, 0, 0)\\\",\\n title: {\\n text: \\\"项目反馈桑基图\\\",\\n left: \\\"center\\\",\\n top: 24,\\n textStyle: {\\n fontSize: 16,\\n fontWeight: \\\"bold\\\",\\n },\\n },\\n tooltip: {\\n trigger: 'item',\\n triggerOn: 'mousemove',\\n backgroundColor: '#fff',\\n borderColor: '#eee',\\n borderWidth: 1,\\n textStyle: {\\n color: '#333'\\n },\\n formatter: gettooltip\\n },\\n toolbox: {\\n show: true,\\n top: 20,\\n left: 30,\\n feature: {\\n restore: {},\\n saveAsImage: {}, // 保存图片 \\n }\\n },\\n series: [{\\n type: 'sankey',\\n roam: true,\\n scaleLimit: {\\n min: 0.2,\\n max: 4 // 最大缩放比例 \\n },\\n animation: true,\\n animationDuration: 300,\\n animationEasingUpdate: 'quinticInOut',\\n left: '15px',\\n top: '60px',\\n right: '120px',\\n bottom: '30px',\\n emphasis: {\\n focus: 'adjacency'\\n },\\n nodeAlign: 'left',\\n orient: 'horizontal',\\n data: nodes,\\n links: links,\\n layoutIterations: 64,\\n nodeGap: 30,\\n nodeWidth: 20,\\n draggable: true,\\n lineStyle: {\\n color: 'source',\\n curveness: 0.5,\\n opacity: 0.5\\n },\\n levels: [{\\n depth: 0,\\n itemStyle: {\\n color: '#2196f3'\\n },\\n lineStyle: {\\n color: 'source',\\n opacity: 0.6\\n }\\n }, {\\n depth: 1,\\n itemStyle: {\\n color: '#ff5722'\\n },\\n lineStyle: {\\n color: 'source',\\n opacity: 0.4\\n }\\n }, {\\n depth: 2,\\n itemStyle: {\\n color: '#4caf50'\\n }\\n }],\\n label: {\\n position: 'right',\\n fontSize: 14,\\n lineHeight: 18,\\n color: '#000000',\\n formatter: function (params) {\\n var name = params.name;\\n // 只有当value大于0时才显示数量 \\n if (params.value && params.value > 0) {\\n return `${name} * ${params.value}个`;\\n }\\n // 如果value为0或未定义,只显示名称 \\n return \\\"\\\";\\n }\\n }\\n }]\\n};\\n\\n return {\\n option,\\n datGUI,\\n };\\n }\\n \"}" + "Config": "{\"option\":\"console.log(Context[\\\"recommands\\\"]);\\n\\n// 处理数据,生成节点和链接 \\nconst processData = (data) => {\\n // 收集所有唯一的节点 \\n const typeSet = new Set(data.map(item => item.类型 || \\\"其他\\\"));\\n const projectSet = new Set(data.map(item => item.项目 || \\\"未知项目\\\"));\\n const taskSet = new Set(data.map(item => item.任务 || \\\"未知任务\\\"));\\n\\n // 预计算每个节点的总值 \\n const nodeValues = {};\\n\\n // 计算类型节点的值 \\n data.forEach(item => {\\n nodeValues[item.类型] = (nodeValues[item.类型] || 0) + item.数量;\\n nodeValues[item.项目] = (nodeValues[item.项目] || 0) + item.数量;\\n nodeValues[item.任务] = (nodeValues[item.任务] || 0) + item.数量;\\n });\\n\\n // 生成节点数组,确保节点按照类型、项目、任务的顺序排列 \\n const nodes = [\\n // 类型节点 \\n ...Array.from(typeSet).map((name) => ({\\n name: name,\\n depth: 0,\\n value: nodeValues[name], // 添加value值 \\n itemStyle: {\\n color: '#2196f3'\\n }\\n })),\\n // 项目节点 \\n ...Array.from(projectSet).map((name) => ({\\n name: name,\\n depth: 1,\\n value: nodeValues[name], // 添加value值 \\n itemStyle: {\\n color: '#ff5722'\\n }\\n })),\\n // 任务节点 \\n ...Array.from(taskSet).map((name) => ({\\n name: name,\\n depth: 2,\\n value: nodeValues[name], // 添加value值 \\n itemStyle: {\\n color: '#4caf50'\\n }\\n }))\\n ];\\n\\n // 生成连接数组 \\n const links = [];\\n\\n // 类型 -> 项目的链接 \\n data.forEach(item => {\\n const existingLink = links.find(\\n link => link.source === item.类型 && link.target === item.项目\\n );\\n if (existingLink) {\\n existingLink.value += item.数量;\\n } else {\\n links.push({\\n source: item.类型,\\n target: item.项目,\\n value: item.数量\\n });\\n }\\n });\\n\\n // 项目 -> 任务的链接 \\n data.forEach(item => {\\n const existingLink = links.find(\\n link => link.source === item.项目 && link.target === item.任务\\n );\\n if (existingLink) {\\n existingLink.value += item.数量;\\n } else {\\n links.push({\\n source: item.项目,\\n target: item.任务,\\n value: item.数量\\n });\\n }\\n });\\n\\n return { nodes, links };\\n};\\n\\n//获取提示文字\\nconst gettooltip = (params) => {\\n console.log(params);\\n if (params.dataType === 'node') {\\n return `${params.name}\\\\n数量: ${params.value}`;\\n }\\n return `${params.data.source} → ${params.data.target}\\\\n数量: ${params.value}`;\\n}\\n\\n// 处理数据 \\nconst { nodes, links } = processData(Context[\\\"recommands\\\"]);\\n\\n// Echarts配置 \\noption = {\\n backgroundColor: \\\"rgba(0, 0, 0, 0)\\\",\\n title: {\\n text: \\\"项目反馈桑基图\\\",\\n left: \\\"center\\\",\\n top: 24,\\n textStyle: {\\n fontSize: 16,\\n fontWeight: \\\"bold\\\",\\n },\\n },\\n tooltip: {\\n trigger: 'item',\\n triggerOn: 'mousemove',\\n backgroundColor: '#fff',\\n borderColor: '#eee',\\n borderWidth: 1,\\n textStyle: {\\n color: '#333'\\n },\\n formatter: gettooltip\\n },\\n toolbox: {\\n show: true,\\n top: 20,\\n left: 30,\\n feature: {\\n restore: {},\\n saveAsImage: {},\\n dataZoom: {\\n yAxisIndex: 'none'\\n },\\n }\\n },\\n dataZoom: [\\n {\\n type: 'slider',\\n show: true,\\n start: 0,\\n end: 100,\\n bottom: 10\\n },\\n {\\n type: 'inside',\\n orient: 'vertical',\\n start: 0,\\n end: 100\\n },\\n {\\n type: 'inside',\\n orient: 'horizontal',\\n start: 0,\\n end: 100\\n }\\n ],\\n series: [{\\n type: 'sankey',\\n animation: true,\\n animationDuration: 300,\\n animationEasingUpdate: 'quinticInOut',\\n // 调整整体布局范围,留出更多空间 \\n left: '5%',\\n top: '12%',\\n right: '20%',\\n bottom: '12%',\\n emphasis: {\\n focus: 'adjacency'\\n },\\n nodeAlign: 'left',\\n orient: 'horizontal',\\n data: nodes,\\n links: links,\\n // 增加布局迭代次数,使布局更加均匀 \\n layoutIterations: 100,\\n // 增加节点间距 \\n nodeGap: 50,\\n // 适当增加节点宽度 \\n nodeWidth: 24,\\n draggable: true,\\n lineStyle: {\\n color: 'source',\\n curveness: 0.5,\\n opacity: 0.5\\n },\\n levels: [{\\n depth: 0,\\n itemStyle: {\\n color: '#2196f3'\\n },\\n lineStyle: {\\n color: 'source',\\n opacity: 0.6\\n }\\n }, {\\n depth: 1,\\n itemStyle: {\\n color: '#ff5722'\\n },\\n lineStyle: {\\n color: 'source',\\n opacity: 0.4\\n }\\n }, {\\n depth: 2,\\n itemStyle: {\\n color: '#4caf50'\\n }\\n }],\\n label: {\\n position: 'right',\\n fontSize: 14,\\n lineHeight: 18,\\n color: '#000000',\\n // 设置标签偏移量,避免重叠 \\n distance: 10,\\n // 调整标签显示方式 \\n formatter: function (params) {\\n var name = params.name;\\n // 如果名称过长,进行截断 \\n if (name.length > 10) {\\n name = name.substring(0, 10) + '...';\\n }\\n if (params.value && params.value > 0) {\\n return `${name}\\\\n(${params.value}个)`;\\n }\\n return \\\"\\\";\\n },\\n // 确保标签始终显示 \\n show: true,\\n // 允许标签自动调整位置 \\n align: 'left',\\n verticalAlign: 'middle',\\n // 标签换行配置 \\n width: 100,\\n overflow: 'break',\\n // 添加背景色,提高可读性 \\n backgroundColor: 'rgba(255,255,255,0.7)',\\n padding: [4, 8],\\n borderRadius: 4\\n }\\n }]\\n};\",\"graphTheme\":null,\"displayMode\":\"canvas\",\"jsCode\":\"\\n async ({Context,JSONContext,ImageContext,echarts,myChart,dat,Forguncy,d3,setInterval,setTimeout,ForguncyEchartsHelper,PublicResource})=>{\\n var datGUI=undefined;\\n var option={};\\n console.log(Context[\\\"recommands\\\"]);\\n// 处理数据,生成节点和链接 \\nconst processData = (data) => {\\n // 收集所有唯一的节点 \\n const typeSet = new Set(data.map(item => item.类型 || \\\"其他\\\"));\\n const projectSet = new Set(data.map(item => item.项目 || \\\"未知项目\\\"));\\n const taskSet = new Set(data.map(item => item.任务 || \\\"未知任务\\\"));\\n // 预计算每个节点的总值 \\n const nodeValues = {};\\n // 计算类型节点的值 \\n data.forEach(item => {\\n nodeValues[item.类型] = (nodeValues[item.类型] || 0) + item.数量;\\n nodeValues[item.项目] = (nodeValues[item.项目] || 0) + item.数量;\\n nodeValues[item.任务] = (nodeValues[item.任务] || 0) + item.数量;\\n });\\n // 生成节点数组,确保节点按照类型、项目、任务的顺序排列 \\n const nodes = [\\n // 类型节点 \\n ...Array.from(typeSet).map((name) => ({\\n name: name,\\n depth: 0,\\n value: nodeValues[name],\\n itemStyle: {\\n color: '#2196f3'\\n }\\n })),\\n // 项目节点 \\n ...Array.from(projectSet).map((name) => ({\\n name: name,\\n depth: 1,\\n value: nodeValues[name],\\n itemStyle: {\\n color: '#ff5722'\\n }\\n })),\\n // 任务节点 \\n ...Array.from(taskSet).map((name) => ({\\n name: name,\\n depth: 2,\\n value: nodeValues[name],\\n itemStyle: {\\n color: '#4caf50'\\n }\\n }))\\n ];\\n // 生成连接数组 \\n const links = [];\\n // 类型 -> 项目的链接 \\n data.forEach(item => {\\n const existingLink = links.find(link => link.source === item.类型 && link.target === item.项目);\\n if (existingLink) {\\n existingLink.value += item.数量;\\n }\\n else {\\n links.push({\\n source: item.类型,\\n target: item.项目,\\n value: item.数量\\n });\\n }\\n });\\n // 项目 -> 任务的链接 \\n data.forEach(item => {\\n const existingLink = links.find(link => link.source === item.项目 && link.target === item.任务);\\n if (existingLink) {\\n existingLink.value += item.数量;\\n }\\n else {\\n links.push({\\n source: item.项目,\\n target: item.任务,\\n value: item.数量\\n });\\n }\\n });\\n return { nodes, links };\\n};\\n//获取提示文字\\nconst gettooltip = (params) => {\\n console.log(params);\\n if (params.dataType === 'node') {\\n return `${params.name}\\\\n数量: ${params.value}`;\\n }\\n return `${params.data.source} → ${params.data.target}\\\\n数量: ${params.value}`;\\n};\\n// 处理数据 \\nconst { nodes, links } = processData(Context[\\\"recommands\\\"]);\\n// Echarts配置 \\noption = {\\n backgroundColor: \\\"rgba(0, 0, 0, 0)\\\",\\n title: {\\n text: \\\"项目反馈桑基图\\\",\\n left: \\\"center\\\",\\n top: 24,\\n textStyle: {\\n fontSize: 16,\\n fontWeight: \\\"bold\\\",\\n },\\n },\\n tooltip: {\\n trigger: 'item',\\n triggerOn: 'mousemove',\\n backgroundColor: '#fff',\\n borderColor: '#eee',\\n borderWidth: 1,\\n textStyle: {\\n color: '#333'\\n },\\n formatter: gettooltip\\n },\\n toolbox: {\\n show: true,\\n top: 20,\\n left: 30,\\n feature: {\\n restore: {},\\n saveAsImage: {},\\n dataZoom: {\\n yAxisIndex: 'none'\\n },\\n }\\n },\\n dataZoom: [\\n {\\n type: 'slider',\\n show: true,\\n start: 0,\\n end: 100,\\n bottom: 10\\n },\\n {\\n type: 'inside',\\n orient: 'vertical',\\n start: 0,\\n end: 100\\n },\\n {\\n type: 'inside',\\n orient: 'horizontal',\\n start: 0,\\n end: 100\\n }\\n ],\\n series: [{\\n type: 'sankey',\\n animation: true,\\n animationDuration: 300,\\n animationEasingUpdate: 'quinticInOut',\\n // 调整整体布局范围,留出更多空间 \\n left: '5%',\\n top: '12%',\\n right: '20%',\\n bottom: '12%',\\n emphasis: {\\n focus: 'adjacency'\\n },\\n nodeAlign: 'left',\\n orient: 'horizontal',\\n data: nodes,\\n links: links,\\n // 增加布局迭代次数,使布局更加均匀 \\n layoutIterations: 100,\\n // 增加节点间距 \\n nodeGap: 50,\\n // 适当增加节点宽度 \\n nodeWidth: 24,\\n draggable: true,\\n lineStyle: {\\n color: 'source',\\n curveness: 0.5,\\n opacity: 0.5\\n },\\n levels: [{\\n depth: 0,\\n itemStyle: {\\n color: '#2196f3'\\n },\\n lineStyle: {\\n color: 'source',\\n opacity: 0.6\\n }\\n }, {\\n depth: 1,\\n itemStyle: {\\n color: '#ff5722'\\n },\\n lineStyle: {\\n color: 'source',\\n opacity: 0.4\\n }\\n }, {\\n depth: 2,\\n itemStyle: {\\n color: '#4caf50'\\n }\\n }],\\n label: {\\n position: 'right',\\n fontSize: 14,\\n lineHeight: 18,\\n color: '#000000',\\n // 设置标签偏移量,避免重叠 \\n distance: 10,\\n // 调整标签显示方式 \\n formatter: function (params) {\\n var name = params.name;\\n // 如果名称过长,进行截断 \\n if (name.length > 10) {\\n name = name.substring(0, 10) + '...';\\n }\\n if (params.value && params.value > 0) {\\n return `${name}\\\\n(${params.value}个)`;\\n }\\n return \\\"\\\";\\n },\\n // 确保标签始终显示 \\n show: true,\\n // 允许标签自动调整位置 \\n align: 'left',\\n verticalAlign: 'middle',\\n // 标签换行配置 \\n width: 100,\\n overflow: 'break',\\n // 添加背景色,提高可读性 \\n backgroundColor: 'rgba(255,255,255,0.7)',\\n padding: [4, 8],\\n borderRadius: 4\\n }\\n }]\\n};\\n\\n return {\\n option,\\n datGUI,\\n };\\n }\\n \"}" + } + }, + "16,1": { + "CellType": { + "$type": "EchartsCustomCellType.EchartsCustomCellTypeCellType, EchartsCustomCellType", + "EChartTitle": "Echarts图表", + "DataSourceBinding": "JSONDataSources", + "DataSources": [ + { + "Name": "data", + "BindingTableOptions": { + "$type": "ServerDesignerCommon.Model.BindingDataSourceModel, ServerDesignerCommon", + "TableName": "任务成员表", + "BindingInfos": [ + { + "GUID": "047db0a4-c911-484d-a4ce-38fbe3125e91", + "BindingInfo": { + "TableName": "任务成员表", + "ColumnName": "任务成员", + "GUID": "19cf3e51-5b5d-450b-8f8d-e2e49f6766b0", + "AttachType": { + "$type": "ForguncyDataAccess.UserColumnAttachObj, ForguncyDataAccess", + "UserColumnAttachType": 1 + } + }, + "ColumnName": "person" + }, + { + "GUID": "d607bf49-3a5a-4e13-b50a-28743c06ce18", + "BindingInfo": { + "TableName": "任务成员表", + "ColumnName": "任务ID", + "GUID": "17458116-97bb-4b93-8e6b-56534283bf97", + "RelationBinding": { + "RelatedTable": "任务平行视图", + "RelatedColumn": "ID", + "DisplayColumn": "任务名称" + } + }, + "ColumnName": "project" + }, + { + "GUID": "07ebd172-7f0d-4cb2-823f-d7cc9f147da7", + "BindingInfo": { + "TableName": "任务成员表", + "ColumnName": "数量", + "GUID": "3c7522ca-0921-4741-8eda-7cc69f282d03" + }, + "ColumnName": "count" + } + ], + "CustomColumns": [] + } + } + ], + "JSONDataSources": [ + { + "Name": "data", + "JSONDemo": "[\r\n {\r\n \"project\": null,\r\n \"person\": \"黄海\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"报价模块\",\r\n \"person\": \"黄海\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"出库管理\",\r\n \"person\": \"黄海\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"出库扫码\",\r\n \"person\": \"黄海\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"第二版手册\",\r\n \"person\": \"黄海\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"第三版手册\",\r\n \"person\": \"黄海\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"第一版手册\",\r\n \"person\": \"黄海\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"方案设计\",\r\n \"person\": \"黄海\",\r\n \"count\": 2\r\n },\r\n {\r\n \"project\": \"方案设计V1\",\r\n \"person\": \"黄海\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"批量移交\",\r\n \"person\": \"黄海\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"入库管理\",\r\n \"person\": \"黄海\",\r\n \"count\": 4\r\n },\r\n {\r\n \"project\": \"新方案设计\",\r\n \"person\": \"黄海\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"功能测试V1\",\r\n \"person\": \"李春花\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"任务版本1\",\r\n \"person\": \"李春花\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"数据库设计\",\r\n \"person\": \"李春花\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"数据清洗\",\r\n \"person\": \"李春花\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": null,\r\n \"person\": \"林希\",\r\n \"count\": 2\r\n },\r\n {\r\n \"project\": \"报价模块\",\r\n \"person\": \"林希\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"测试01\",\r\n \"person\": \"林希\",\r\n \"count\": 2\r\n },\r\n {\r\n \"project\": \"测试02\",\r\n \"person\": \"林希\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"测试项目007\",\r\n \"person\": \"林希\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"出库管理\",\r\n \"person\": \"林希\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"出库扫码\",\r\n \"person\": \"林希\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"第一版手册\",\r\n \"person\": \"林希\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"方案设计\",\r\n \"person\": \"林希\",\r\n \"count\": 2\r\n },\r\n {\r\n \"project\": \"功能测试V1\",\r\n \"person\": \"林希\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"功能测试子任务\",\r\n \"person\": \"林希\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"客户沟通\",\r\n \"person\": \"林希\",\r\n \"count\": 2\r\n },\r\n {\r\n \"project\": \"模板替换插件\",\r\n \"person\": \"林希\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"前期调研需求\",\r\n \"person\": \"林希\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"任务版本1\",\r\n \"person\": \"林希\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"入库管理\",\r\n \"person\": \"林希\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"数据库设计\",\r\n \"person\": \"林希\",\r\n \"count\": 3\r\n },\r\n {\r\n \"project\": \"数据清洗\",\r\n \"person\": \"林希\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"文字排版\",\r\n \"person\": \"林希\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"文字校验\",\r\n \"person\": \"林希\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"系统设计\",\r\n \"person\": \"林希\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"校对\",\r\n \"person\": \"林希\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"需求单管理\",\r\n \"person\": \"林希\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"业务管理\",\r\n \"person\": \"林希\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"制作方案书\",\r\n \"person\": \"林希\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": null,\r\n \"person\": \"刘艳伟\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": null,\r\n \"person\": \"童玉飞\",\r\n \"count\": 2\r\n },\r\n {\r\n \"project\": \"测试01\",\r\n \"person\": \"童玉飞\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"出库管理\",\r\n \"person\": \"童玉飞\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"出库扫码\",\r\n \"person\": \"童玉飞\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"方案设计\",\r\n \"person\": \"童玉飞\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"功能测试\",\r\n \"person\": \"童玉飞\",\r\n \"count\": 2\r\n },\r\n {\r\n \"project\": \"功能测试V1\",\r\n \"person\": \"童玉飞\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"客户沟通\",\r\n \"person\": \"童玉飞\",\r\n \"count\": 4\r\n },\r\n {\r\n \"project\": \"前期调研需求\",\r\n \"person\": \"童玉飞\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"任务版本1\",\r\n \"person\": \"童玉飞\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"入库管理\",\r\n \"person\": \"童玉飞\",\r\n \"count\": 2\r\n },\r\n {\r\n \"project\": \"数据库设计\",\r\n \"person\": \"童玉飞\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"数据清洗\",\r\n \"person\": \"童玉飞\",\r\n \"count\": 3\r\n },\r\n {\r\n \"project\": \"系统设计\",\r\n \"person\": \"童玉飞\",\r\n \"count\": 3\r\n },\r\n {\r\n \"project\": \"业务管理\",\r\n \"person\": \"童玉飞\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"制作方案书\",\r\n \"person\": \"童玉飞\",\r\n \"count\": 2\r\n },\r\n {\r\n \"project\": null,\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"111\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"12312\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"12321333\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"3333\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"版本1\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"版本1设计\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"报价模块\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"测试01\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"测试02\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"测试项目007\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"出库单\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"第二版手册\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"第三版手册\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"发件箱\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"方案设计\",\r\n \"person\": \"夏超\",\r\n \"count\": 4\r\n },\r\n {\r\n \"project\": \"方案设计V1\",\r\n \"person\": \"夏超\",\r\n \"count\": 2\r\n },\r\n {\r\n \"project\": \"功能测试\",\r\n \"person\": \"夏超\",\r\n \"count\": 3\r\n },\r\n {\r\n \"project\": \"功能测试V1\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"功能测试子任务\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"解析报价\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"客户沟通\",\r\n \"person\": \"夏超\",\r\n \"count\": 2\r\n },\r\n {\r\n \"project\": \"前期调研需求\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"任务版本1\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"入库管理\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"收货单\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"收件箱\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"数据清洗\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"文字校验\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"系统设计\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"校对\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"新方案设计\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"业务管理\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"邮件模块\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n },\r\n {\r\n \"project\": \"制作方案书\",\r\n \"person\": \"夏超\",\r\n \"count\": 1\r\n }\r\n]" + } + ], + "ImageDataSource": [], + "Config": "{\"option\":\"var data = JSONContext.data; \\nconsole.log(data); \\nconst persons = [...new Set(data.map(item => item.person || \\\"未知成员\\\"))]; \\nconst projects = [...new Set(data.map(item => item.project || \\\"未知项目\\\"))]; \\n// 定义人员颜色 \\nconst personColors = ['#ff6666', '#66ccff', '#ffcc66', '#8bc34a', '#cc66ff', '#86665a', '#9742ca', '#ff6738']; \\n\\n// 计算每个项目关联的人员数量 \\nconst projectPersonCount = projects.reduce((acc, project) => { \\n acc[project] = data.filter(item => item.project === project).length; \\n return acc; \\n}, {}); \\n\\n// 处理数据,创建节点和边 \\nconst nodes = [ \\n // 添加人员节点 \\n ...persons.map((person, index) => ({ \\n name: person, \\n value: person, \\n category: 0, \\n symbolSize: 80, \\n itemStyle: { \\n color: personColors[index % personColors.length], \\n }, \\n label: { \\n position: 'inside', \\n fontSize: 16, \\n fontWeight: 'bold', \\n color: '#fff', \\n }, \\n })), \\n // 添加项目节点 \\n ...projects.map(project => ({ \\n name: project, \\n value: project, \\n category: 1, \\n // 根据关联人数动态设置大小,基础大小为60 \\n symbolSize: 60 + (projectPersonCount[project] * 15), \\n itemStyle: { \\n color: '#4b4b4b7a' \\n }, \\n label: { \\n position: 'inside', \\n fontSize: 14, \\n color: '#fff', \\n width: 70, \\n overflow: 'break', \\n lineHeight: 18, \\n // 添加关联人数显示 \\n formatter: function(params) { \\n return `${params.name}\\\\n(${projectPersonCount[params.name]}人)`; \\n } \\n }, \\n })) \\n]; \\n\\nconsole.log(nodes); \\n\\nconst links = data.map(rel => ({ \\n source: rel.person, \\n target: rel.project, \\n value: rel.project, \\n})); \\n\\noption = { \\n backgroundColor: \\\"rgba(0, 0, 0, 0)\\\", \\n title: { \\n text: '项目关系图', \\n subtext: '展示人员与项目之间的关系', \\n left: \\\"center\\\", \\n top: 24, \\n textStyle: { \\n fontSize: 16, \\n fontWeight: \\\"bold\\\", \\n }, \\n }, \\n tooltip: {}, \\n animationDuration: 1500, \\n animationEasingUpdate: 'quinticInOut', \\n series: [{ \\n name: '项目关系图', \\n type: 'graph', \\n layout: 'force', \\n data: nodes, \\n links: links, \\n top: 100, \\n categories: [ \\n { name: '人员' }, \\n { name: '项目' } \\n ], \\n roam: true, \\n label: { \\n show: true, \\n position: 'right', \\n formatter: '{b}' \\n }, \\n force: { \\n repulsion: 5000, \\n gravity: 1, \\n friction: 0.3, \\n layoutAnimation: false, \\n }, \\n draggable: false, \\n lineStyle: { \\n color: 'source', \\n curveness: 0.3, \\n width: 1 \\n }, \\n edgeLabel: { \\n show: false, \\n position: 'middle', \\n formatter: function (params) { \\n return params.data.value; \\n }, \\n fontSize: 12 \\n }, \\n emphasis: { \\n focus: 'adjacency', \\n lineStyle: { \\n width: 10 \\n } \\n } \\n }] \\n};\",\"graphTheme\":null,\"displayMode\":\"canvas\",\"jsCode\":\"\\n async ({Context,JSONContext,ImageContext,echarts,myChart,dat,Forguncy,d3,setInterval,setTimeout,ForguncyEchartsHelper,PublicResource})=>{\\n var datGUI=undefined;\\n var option={};\\n var data = JSONContext.data;\\nconsole.log(data);\\nconst persons = [...new Set(data.map(item => item.person || \\\"未知成员\\\"))];\\nconst projects = [...new Set(data.map(item => item.project || \\\"未知项目\\\"))];\\n// 定义人员颜色 \\nconst personColors = ['#ff6666', '#66ccff', '#ffcc66', '#8bc34a', '#cc66ff', '#86665a', '#9742ca', '#ff6738'];\\n// 计算每个项目关联的人员数量 \\nconst projectPersonCount = projects.reduce((acc, project) => {\\n acc[project] = data.filter(item => item.project === project).length;\\n return acc;\\n}, {});\\n// 处理数据,创建节点和边 \\nconst nodes = [\\n // 添加人员节点 \\n ...persons.map((person, index) => ({\\n name: person,\\n value: person,\\n category: 0,\\n symbolSize: 80,\\n itemStyle: {\\n color: personColors[index % personColors.length],\\n },\\n label: {\\n position: 'inside',\\n fontSize: 16,\\n fontWeight: 'bold',\\n color: '#fff',\\n },\\n })),\\n // 添加项目节点 \\n ...projects.map(project => ({\\n name: project,\\n value: project,\\n category: 1,\\n // 根据关联人数动态设置大小,基础大小为60 \\n symbolSize: 60 + (projectPersonCount[project] * 15),\\n itemStyle: {\\n color: '#4b4b4b7a'\\n },\\n label: {\\n position: 'inside',\\n fontSize: 14,\\n color: '#fff',\\n width: 70,\\n overflow: 'break',\\n lineHeight: 18,\\n // 添加关联人数显示 \\n formatter: function (params) {\\n return `${params.name}\\\\n(${projectPersonCount[params.name]}人)`;\\n }\\n },\\n }))\\n];\\nconsole.log(nodes);\\nconst links = data.map(rel => ({\\n source: rel.person,\\n target: rel.project,\\n value: rel.project,\\n}));\\noption = {\\n backgroundColor: \\\"rgba(0, 0, 0, 0)\\\",\\n title: {\\n text: '项目关系图',\\n subtext: '展示人员与项目之间的关系',\\n left: \\\"center\\\",\\n top: 24,\\n textStyle: {\\n fontSize: 16,\\n fontWeight: \\\"bold\\\",\\n },\\n },\\n tooltip: {},\\n animationDuration: 1500,\\n animationEasingUpdate: 'quinticInOut',\\n series: [{\\n name: '项目关系图',\\n type: 'graph',\\n layout: 'force',\\n data: nodes,\\n links: links,\\n top: 100,\\n categories: [\\n { name: '人员' },\\n { name: '项目' }\\n ],\\n roam: true,\\n label: {\\n show: true,\\n position: 'right',\\n formatter: '{b}'\\n },\\n force: {\\n repulsion: 5000,\\n gravity: 1,\\n friction: 0.3,\\n layoutAnimation: false,\\n },\\n draggable: false,\\n lineStyle: {\\n color: 'source',\\n curveness: 0.3,\\n width: 1\\n },\\n edgeLabel: {\\n show: false,\\n position: 'middle',\\n formatter: function (params) {\\n return params.data.value;\\n },\\n fontSize: 12\\n },\\n emphasis: {\\n focus: 'adjacency',\\n lineStyle: {\\n width: 10\\n }\\n }\\n }]\\n};\\n\\n return {\\n option,\\n datGUI,\\n };\\n }\\n \"}" } } }, @@ -697,6 +770,10 @@ "FontSize": 37.33333333333333, "Foreground": 0, "HorizontalAlignment": 3 + }, + { + "FontFamily": 2, + "HorizontalAlignment": 3 } ], "Types": { @@ -722,7 +799,46 @@ "12,1": 0, "12,40": 2, "13,40": 2, - "14,40": 2 + "14,40": 2, + "15,1": 0, + "15,2": 0, + "15,3": 0, + "15,4": 0, + "15,5": 0, + "15,6": 0, + "15,7": 0, + "15,8": 0, + "15,9": 0, + "15,10": 0, + "15,11": 0, + "15,12": 0, + "15,13": 0, + "15,14": 0, + "15,15": 0, + "15,16": 0, + "15,17": 0, + "15,18": 0, + "15,19": 0, + "15,20": 0, + "15,21": 0, + "15,22": 0, + "15,23": 0, + "15,24": 0, + "15,25": 0, + "15,26": 0, + "15,27": 0, + "15,28": 0, + "15,29": 0, + "15,30": 0, + "15,31": 0, + "15,32": 0, + "15,33": 0, + "15,34": 0, + "15,35": 0, + "15,36": 0, + "15,40": 2, + "16,1": 3, + "16,40": 2 }, "SheetStyle": { "FontFamily": 2, @@ -736,13 +852,99 @@ "5,1,4,36", "10,1,1,36", "12,1,3,36", - "8,39,5,1" + "16,1,1,36", + "8,39,3,1" ], "PageInfo": { "$type": "Forguncy.Model.Pages.NormalPage, ServerDesignerCommon", "MasterPageName": "FGC_母版页", "PageOverflowMode": 2, "PageLoadedCommandList": [ + { + "$type": "Forguncy.Model.Commands.SetParameterCommand, ServerDesignerCommon", + "ParameterName": "data", + "TableValue": { + "TableName": "任务成员表", + "BindingInfos": [ + { + "GUID": "0cd65cbe-68f7-471b-8ee4-23442b60cee8", + "BindingInfo": { + "TableName": "任务成员表", + "ColumnName": "项目ID", + "GUID": "c43bf190-6c08-4ec3-a6f2-d45df60c270f", + "RelationBinding": { + "RelatedTable": "项目表", + "RelatedColumn": "ID", + "DisplayColumn": "项目名称" + } + }, + "ColumnName": "project" + }, + { + "GUID": "eb28b5f2-6937-4158-88e0-dc064b23f5b7", + "BindingInfo": { + "TableName": "任务成员表", + "ColumnName": "任务成员", + "GUID": "b6110697-d6f5-4ad0-873b-4071e7f3158d", + "AttachType": { + "$type": "ForguncyDataAccess.UserColumnAttachObj, ForguncyDataAccess", + "UserColumnAttachType": 1 + } + }, + "ColumnName": "person" + }, + { + "GUID": "5f1741a5-8ce7-4e69-b7cd-04f34fce6a3e", + "BindingInfo": { + "TableName": "任务成员表", + "ColumnName": "数量", + "GUID": "53850c92-5896-4619-91ed-b4207c7b7eb5" + }, + "ColumnName": "count" + } + ], + "SqlCondition": { + "$type": "ForguncyDataAccess.GeneralCESqlCondition, ForguncyDataAccess", + "CompareType": 1, + "ColumnBindingInfo": { + "TableName": "任务成员表", + "ColumnName": "项目ID", + "GUID": "f31e6443-fd02-4933-93bf-2e38b2565c11", + "RelationBinding": { + "RelatedTable": "项目表", + "RelatedColumn": "ID", + "DisplayColumn": "项目名称" + } + }, + "Value": "%Null%" + } + }, + "ID": "7a61e8b373a84e90bd923a4de584157b" + }, + { + "$type": "JsonUtilityCommand.JsonSerializeCommand, JsonUtilityCommand", + "SourceObject": { + "$type": "Forguncy.Model.FormulaReferObject, ServerDesignerCommon", + "SerializeProperty": "=工作台首页!data" + }, + "ToParameter": "json" + }, + { + "$type": "Forguncy.Model.OperateCellTypeCommand, ServerDesignerCommon", + "TargetPageElement": { + "$type": "Forguncy.Model.FormulaReferObject, ServerDesignerCommon", + "SerializeProperty": "=工作台首页!B17" + }, + "TargetType": "EchartsCustomCellType.EchartsCustomCellTypeCellType, EchartsCustomCellType, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", + "MethodName": "SetDataSource", + "ParameterValues": { + "dataSourceName": "data", + "JSONString": { + "$type": "Forguncy.Model.FormulaReferObject, ServerDesignerCommon", + "SerializeProperty": "=工作台首页!json" + } + } + }, { "$type": "Notiflix_Forguncy.Loading_Command, Notiflix_Forguncy", "FunctionName": "remove", @@ -780,7 +982,7 @@ "Fill": "Background 2 0" }, "IsAutomaticFill": false, - "Size": "1553,1569" + "Size": "1553,3059" }, { "Name": "0f5baa2c-2dec-44c7-8a3f-45868371fe7b.png", @@ -813,7 +1015,7 @@ }, "IsAutomaticFill": false, "Location": "1186,234", - "Size": "343,1238" + "Size": "343,693" }, { "Name": "9585c733-c922-4ba2-8923-e5c50a4f429c.png", @@ -835,7 +1037,18 @@ }, "IsAutomaticFill": false, "Location": "24,937", - "Size": "1152,585" + "Size": "1152,1065" + }, + { + "Name": "fb94cc28-18cf-4cd3-bae7-8f9a8156ed34.png", + "DisplayName": "背景图7", + "StyleInfo": { + "CornerRadius": 10.0, + "Fill": "Background 1 0" + }, + "IsAutomaticFill": false, + "Location": "24,2012", + "Size": "1152,1000" } ] -}//DYjF7nN93VfCKAFF3suSip1pQdByyHDPD2nRHbqdia/7IJKqHWmPVQ4jvK9WAmugvELvXU53tihHl+iGTeH1DirirJp1EPicmIRMp24r4pz0VaijYHW+M/2VmaGQMHlOpugT3i8nnL2U2I8dk3LHktLkY+zmO+8STcMNPwOJ3fBS50lDtSUwhIbztRIwM3/mkMsgYxOtt0Azdwvbp6TPD4FEUN/WMvDduhLvvKueixmEBJpxV61xxvtJYJooAE3PEiHKE3RZ4yJ2Bv4D3WZMae66nM7a/SuHo74194ZBIX7J0zIxDfLkWGasice+wLBETHy67jud06vO9uTiyu55kqqFRkiQL+6yk5jEzihJ+7YlwSr7d/ban0uRmygUypgPncz9TCyZcwvgiyvXbiLY3U8ulGHUFJ/y9uQEzIBFfzS3i0QkJ0G8+y7FT27fya+NAumi94u+lctCq1QZMH6rpF/OAQndbh1Bwvlw3gHY1AdbRlyuSN3P9LjxgDhVuqHIDXLJr0Qti2jw3Y60e0ka2jyyTrW31cSfpxaW1jHvAKs98yCJN1Zy4MIg2tEopAIkABkuHxMU6b2hrSLOPAICtQURdpXQFTWGFOUf3KOiQrBqNq2xAezeERhpw16Huqd34r+LBh1ljChfCwiltPJ99khWiRBPKwMxVRquL9O7PlHOh83QCNDhNfhxjIAc8y2pfg0jJbj1SxrTdyaziYpZQcWoVgX0bqbR0Q5HcMKNpRgtP564Yxw1JJYZaOWMrhZjKUQEzpgJfcd3Qtr25M7QcfroBKGF9mrsMsCREBsBt5LqZIZioYSOgQIBetZYiTgs0tUhuqrtNcx3RQURfMKnTl2ItAV6DL/ZMmC4V/P/BCwW8f1UhHfgYAOrScK/WfOIU1dvhmKxyE4igR2XC8gIRg==|920 \ No newline at end of file +}//Faw8qgZ5K9AZzF22Y5WzTfIUUPzO5/45gDFim3oPAhKlrzdD2DwSJcOOkVHpyPuHxsMyxJ681MMpEJhOyEyQgjUWMQUUwbQbvJGyQsZJV1bgho2pRH2ki7Ef1JjxmDOFzdOPW7Td1CGuaPRBIB+dE0YdlarA8hH7jYzOktDl07D+jIRZHolvlDLag/KaGa0jVA6F7NNUWLbWnWace37RXiW178jpa9s3dhtuHQliktFde7n+SBUrzvvNHEkHyruZTZpqliLzP64DEE3ruqIYJWO1yms/MyuhA9oVugSMtWGO1deqATLiLBsr1U0jbR7E/OTqvGYI/Ee+p9J7ZVi4lBAc9vM4BO7AwTtNbU5j2v+0BIRFZnxWzCHxGfWVQ+LHhAWY4RtxF/q/Sis4KsHlMeK1KfQUOYguQuantBUE22dPuNmIA495O/5kvaSe6vZhxLVZdioGPRwQTHYouhrIzDPChGmzJqnPZpx9+BqGVxAz46Eeyj0rgWoLemHO9Xo2ZIHewSZYJ2hUJi+TDlV/tbyf0fidYpiIbFrrVxzBBTA/szJIidOwZ69xV0OPSX8HKZgbk/u/IDIZJ1LQUj/PKrsvOUyx+fZtzZXe33sS4DLS9IhIA0IGbrDxhLDnq1CKgQhZro8Qiz274JHgUgjYoHxgkTw7kptijxZSybWW+4afVI0Y1AcfOfswzO78sZdY+BcHAOkz8Kntu8w4taMhTpZ3RBWn9fc6cntNdspvdIJErZdHS44JZu2n/dwjhY/JlAin3H9WeKRZoIUQ4b5cFtHfoZJE0oQ6MKVys3wXwquUChDhIZA6imGUb2Tpa8SLz/zYVFJqd2voBv/N4IktKILt7Dg/3eM5APLl9p4ARjKPLlj6G9VqjIN0nUxSSh85KwDbISGfwBQpJu+EuwSbPg==|920 \ No newline at end of file diff --git a/Pages/工作台/工作台首页.rd b/Pages/工作台/工作台首页.rd index 0f0b444d..2378094b 100644 --- a/Pages/工作台/工作台首页.rd +++ b/Pages/工作台/工作台首页.rd @@ -1,5 +1,5 @@ { "PageType": 0, "ColumnCount": 42, - "RowCount": 17 + "RowCount": 19 } \ No newline at end of file diff --git a/Tables/任务/任务成员表.json b/Tables/任务/任务成员表.json index e14a2a03..2dccd0a7 100644 --- a/Tables/任务/任务成员表.json +++ b/Tables/任务/任务成员表.json @@ -35,6 +35,18 @@ "Name": "任务成员", "ColumnType": "System.String, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e" }, + { + "$type": "Forguncy.SaveLoad.StatisticColumnSaveData, ServerDesignerCommon", + "BindingInfo": { + "TableName": "任务成员表", + "ColumnName": "ID", + "GUID": "5a6c9445-622e-416c-9c76-8e34957ebec4" + }, + "AggregateFunction": 1, + "DataColumnName": "ID", + "Name": "数量", + "ColumnType": "System.Int32, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e" + }, { "$type": "Forguncy.SaveLoad.UserExtraBingingColumnSaveData, ServerDesignerCommon", "ColumnType": "System.String, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e",