From bf256c0ec605be5b48760991dbccee73c5d760f6 Mon Sep 17 00:00:00 2001 From: cuckooent Date: Tue, 5 Nov 2024 15:55:44 +0800 Subject: [PATCH] =?UTF-8?q?{"Message":"=E6=9B=B4=E6=96=B0=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8","MessageType":2,"Modules":[{"State":1,"Type":1,"Name?= =?UTF-8?q?":"PCPage/=E5=B7=A5=E4=BD=9C=E5=8F=B0=E9=A6=96=E9=A1=B5"},{"Sta?= =?UTF-8?q?te":1,"Type":18,"Name":"RdlReport/=E4=BA=BA=E5=91=98=E5=B7=A5?= =?UTF-8?q?=E6=97=B6=E6=8A=A5=E8=A1=A8"},{"State":1,"Type":18,"Name":"RdlR?= =?UTF-8?q?eport/=E5=AE=A2=E6=88=B7=E5=B7=A5=E6=97=B6=E6=8A=A5=E8=A1=A8"},?= =?UTF-8?q?{"State":1,"Type":18,"Name":"RdlReport/=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=B7=A5=E6=97=B6=E6=8A=A5=E8=A1=A8"}],"Version":"v1"}?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .collaboration | 50 +++--------------------------------- Pages/工作台/工作台首页.json | 4 +-- Reports/人员工时报表.rdlx | 2 +- Reports/客户工时报表.rdlx | 2 +- Reports/项目工时报表.rdlx | 2 +- 5 files changed, 9 insertions(+), 51 deletions(-) diff --git a/.collaboration b/.collaboration index 09cb35c7..02fa47f7 100644 --- a/.collaboration +++ b/.collaboration @@ -2270,19 +2270,7 @@ }, { "ModuleName": "PCPage/工作台首页", - "State": 1, - "LockedBy": { - "UserName": "cuckooent", - "Email": "phoben@qq.com" - }, - "LockDateTime": "2024-11-05T15:41:14.1793883+08:00", - "ModuleType": 1, - "ToRemoveFiles": [ - "Pages\\工作台\\工作台首页.json", - "Pages\\工作台\\工作台首页.rd", - "Pages\\3868fc7f40b841649f14b5adba61954.json", - "Pages\\3868fc7f40b841649f14b5adba61954.rd" - ] + "ModuleType": 1 }, { "ModuleName": "PCPage/项目负荷 (2)", @@ -2482,45 +2470,15 @@ }, { "ModuleName": "RdlReport/人员工时报表", - "State": 1, - "LockedBy": { - "UserName": "cuckooent", - "Email": "phoben@qq.com" - }, - "LockDateTime": "2024-11-05T15:48:44.0898019+08:00", - "ModuleType": 18, - "ToRemoveFiles": [ - "Reports\\人员工时报表.json", - "Reports\\人员工时报表.rdlx" - ] + "ModuleType": 18 }, { "ModuleName": "RdlReport/客户工时报表", - "State": 1, - "LockedBy": { - "UserName": "cuckooent", - "Email": "phoben@qq.com" - }, - "LockDateTime": "2024-11-05T15:41:30.5558294+08:00", - "ModuleType": 18, - "ToRemoveFiles": [ - "Reports\\客户工时报表.json", - "Reports\\客户工时报表.rdlx" - ] + "ModuleType": 18 }, { "ModuleName": "RdlReport/项目工时报表", - "State": 1, - "LockedBy": { - "UserName": "cuckooent", - "Email": "phoben@qq.com" - }, - "LockDateTime": "2024-11-05T15:50:11.624925+08:00", - "ModuleType": 18, - "ToRemoveFiles": [ - "Reports\\项目工时报表.json", - "Reports\\项目工时报表.rdlx" - ] + "ModuleType": 18 }, { "ModuleName": "ServerCommand/复活流程", diff --git a/Pages/工作台/工作台首页.json b/Pages/工作台/工作台首页.json index 07e920b6..c1ece950 100644 --- a/Pages/工作台/工作台首页.json +++ b/Pages/工作台/工作台首页.json @@ -684,7 +684,7 @@ ], "JSONDataSources": [], "ImageDataSource": [], - "Config": "{\"option\":\"console.log(Context[\\\"recommands\\\"]);\\n\\n// 处理数据,生成节点和链接 \\nconst processData = (data) => {\\n // 生成颜色函数 - 使用HSL颜色空间 \\n const getColorByDepthAndIndex = (depth, index, totalInDepth) => {\\n // 黄金分割比 \\n const goldenRatio = 0.618033988749895;\\n\\n // 使用索引和黄金分割比来生成分散的色相值 \\n // 直接使用0-360的完整色相范围 \\n const hue = ((index * goldenRatio) % 1) * 360;\\n\\n // 统一的饱和度和明度 \\n return `hsl(${hue}, 60%, 55%)`;\\n };\\n\\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 typeArray = Array.from(typeSet);\\n const projectArray = Array.from(projectSet);\\n const taskArray = Array.from(taskSet);\\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 ...typeArray.map((name, index) => ({\\n name: name,\\n depth: 0,\\n value: nodeValues[name],\\n itemStyle: {\\n color: getColorByDepthAndIndex(0, index, typeArray.length),\\n borderColor: getColorByDepthAndIndex(0, index, typeArray.length)\\n }\\n })),\\n // 项目节点 \\n ...projectArray.map((name, index) => ({\\n name: name,\\n depth: 1,\\n value: nodeValues[name],\\n itemStyle: {\\n color: getColorByDepthAndIndex(1, index, projectArray.length),\\n borderColor: getColorByDepthAndIndex(1, index, projectArray.length)\\n }\\n })),\\n // 任务节点 \\n ...taskArray.map((name, index) => ({\\n name: name,\\n depth: 2,\\n value: nodeValues[name],\\n itemStyle: {\\n color: getColorByDepthAndIndex(2, index, taskArray.length),\\n borderColor: getColorByDepthAndIndex(2, index, taskArray.length)\\n }\\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 subtext:\\\"展示各个项目任务的不同反馈分类占比\\\",\\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 formatter: gettooltip\\n },\\n series: [{\\n type: \\\"sankey\\\",\\n animation: true,\\n animationDuration: 300,\\n animationEasingUpdate: 'quinticInOut',\\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 nodeGap: 15,\\n nodeWidth: 25,\\n draggable: true,\\n lineStyle: {\\n color: 'source',\\n curveness: 0.5,\\n opacity: 0.6,\\n width: function (params) {\\n return Math.max(10, params.value);\\n }\\n },\\n label: {\\n position: 'right',\\n fontSize: 12,\\n lineHeight: 16,\\n color: '#000000',\\n distance: 10,\\n formatter: function (params) {\\n var name = params.name;\\n if (name.length > 10) {\\n name = name.substring(0, 10) + '...';\\n }\\n if (params.value && params.value > 0) {\\n return `${name}(${params.value}个)`;\\n }\\n return \\\"\\\";\\n },\\n show: true,\\n align: 'left',\\n verticalAlign: 'middle',\\n backgroundColor:'#ffffffa1',\\n overflow: 'break',\\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 // 生成颜色函数 - 使用HSL颜色空间 \\n const getColorByDepthAndIndex = (depth, index, totalInDepth) => {\\n // 黄金分割比 \\n const goldenRatio = 0.618033988749895;\\n // 使用索引和黄金分割比来生成分散的色相值 \\n // 直接使用0-360的完整色相范围 \\n const hue = ((index * goldenRatio) % 1) * 360;\\n // 统一的饱和度和明度 \\n return `hsl(${hue}, 60%, 55%)`;\\n };\\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 typeArray = Array.from(typeSet);\\n const projectArray = Array.from(projectSet);\\n const taskArray = Array.from(taskSet);\\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 ...typeArray.map((name, index) => ({\\n name: name,\\n depth: 0,\\n value: nodeValues[name],\\n itemStyle: {\\n color: getColorByDepthAndIndex(0, index, typeArray.length),\\n borderColor: getColorByDepthAndIndex(0, index, typeArray.length)\\n }\\n })),\\n // 项目节点 \\n ...projectArray.map((name, index) => ({\\n name: name,\\n depth: 1,\\n value: nodeValues[name],\\n itemStyle: {\\n color: getColorByDepthAndIndex(1, index, projectArray.length),\\n borderColor: getColorByDepthAndIndex(1, index, projectArray.length)\\n }\\n })),\\n // 任务节点 \\n ...taskArray.map((name, index) => ({\\n name: name,\\n depth: 2,\\n value: nodeValues[name],\\n itemStyle: {\\n color: getColorByDepthAndIndex(2, index, taskArray.length),\\n borderColor: getColorByDepthAndIndex(2, index, taskArray.length)\\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 subtext: \\\"展示各个项目任务的不同反馈分类占比\\\",\\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 formatter: gettooltip\\n },\\n series: [{\\n type: \\\"sankey\\\",\\n animation: true,\\n animationDuration: 300,\\n animationEasingUpdate: 'quinticInOut',\\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 nodeGap: 15,\\n nodeWidth: 25,\\n draggable: true,\\n lineStyle: {\\n color: 'source',\\n curveness: 0.5,\\n opacity: 0.6,\\n width: function (params) {\\n return Math.max(10, params.value);\\n }\\n },\\n label: {\\n position: 'right',\\n fontSize: 12,\\n lineHeight: 16,\\n color: '#000000',\\n distance: 10,\\n formatter: function (params) {\\n var name = params.name;\\n if (name.length > 10) {\\n name = name.substring(0, 10) + '...';\\n }\\n if (params.value && params.value > 0) {\\n return `${name}(${params.value}个)`;\\n }\\n return \\\"\\\";\\n },\\n show: true,\\n align: 'left',\\n verticalAlign: 'middle',\\n backgroundColor: '#ffffffa1',\\n overflow: 'break',\\n padding: [4, 8],\\n borderRadius: 4\\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 // 生成颜色函数 - 使用HSL颜色空间 \\n const getColorByDepthAndIndex = (depth, index, totalInDepth) => {\\n // 黄金分割比 \\n const goldenRatio = 0.618033988749895;\\n\\n // 使用索引和黄金分割比来生成分散的色相值 \\n // 直接使用0-360的完整色相范围 \\n const hue = ((index * goldenRatio) % 1) * 360;\\n\\n // 统一的饱和度和明度 \\n return `hsl(${hue}, 60%, 55%)`;\\n };\\n\\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 typeArray = Array.from(typeSet);\\n const projectArray = Array.from(projectSet);\\n const taskArray = Array.from(taskSet);\\n\\n // 给每个一级节点(类型)分配一个固定颜色 \\n const typeColors = {};\\n typeArray.forEach((type, index) => {\\n const hue = ((index * 0.618033988749895) % 1) * 360;\\n typeColors[type] = `hsl(${hue}, 60%, 55%)`;\\n });\\n\\n // 创建项目到类型的映射,用于追踪源头 \\n const projectToTypeMap = {};\\n data.forEach(item => {\\n projectToTypeMap[item.项目] = item.类型;\\n });\\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 ...typeArray.map((name, index) => ({\\n name: name,\\n depth: 0,\\n value: nodeValues[name],\\n itemStyle: {\\n color: typeColors[name],\\n borderColor: typeColors[name]\\n }\\n })),\\n // 项目节点 \\n ...projectArray.map((name, index) => ({\\n name: name,\\n depth: 1,\\n value: nodeValues[name],\\n itemStyle: {\\n color: getColorByDepthAndIndex(1, index, projectArray.length),\\n borderColor: getColorByDepthAndIndex(1, index, projectArray.length)\\n }\\n })),\\n // 任务节点 \\n ...taskArray.map((name, index) => ({\\n name: name,\\n depth: 2,\\n value: nodeValues[name],\\n itemStyle: {\\n color: getColorByDepthAndIndex(2, index, taskArray.length),\\n borderColor: getColorByDepthAndIndex(2, index, taskArray.length)\\n }\\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 lineStyle: {\\n color: typeColors[item.类型],\\n opacity: 0.7\\n }\\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 // 确保正确获取源头类型的颜色 \\n const sourceType = projectToTypeMap[item.项目];\\n if (!typeColors[sourceType]) {\\n console.warn(`找不到类型颜色: ${sourceType} for 项目: ${item.项目}`);\\n }\\n\\n links.push({\\n source: item.项目,\\n target: item.任务,\\n value: item.数量,\\n lineStyle: {\\n color: typeColors[sourceType] || '#999', // 添加后备颜色 \\n opacity: 0.7\\n },\\n // 添加源类型信息便于调试 \\n sourceType: sourceType\\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 subtext: \\\"展示各个项目任务的不同反馈分类占比\\\",\\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 formatter: gettooltip\\n },\\n series: [{\\n type: \\\"sankey\\\",\\n animation: true,\\n animationDuration: 300,\\n animationEasingUpdate: 'quinticInOut',\\n left: '5%',\\n top: '12%',\\n right: '20%',\\n bottom: '12%',\\n nodeAlign: 'left',\\n orient: 'horizontal',\\n data: nodes,\\n links: links,\\n nodeGap: 15,\\n nodeWidth: 25,\\n draggable: true,\\n lineStyle: {\\n curveness: 0.5,\\n opacity: 0.7,\\n width: function (params) {\\n return Math.max(10, params.value);\\n },\\n shadowBlur: 3,\\n shadowColor: 'rgba(0,0,0,0.2)'\\n },\\n emphasis: {\\n focus: 'adjacency',\\n lineStyle: {\\n opacity: 0.9,\\n shadowBlur: 10,\\n shadowColor: 'rgba(0,0,0,0.5)'\\n }\\n },\\n label: {\\n position: 'right',\\n fontSize: 12,\\n lineHeight: 16,\\n color: '#000000',\\n distance: 10,\\n formatter: function (params) {\\n var name = params.name;\\n if (name.length > 10) {\\n name = name.substring(0, 10) + '...';\\n }\\n if (params.value && params.value > 0) {\\n return `${name}(${params.value}个)`;\\n }\\n return \\\"\\\";\\n },\\n show: true,\\n align: 'left',\\n verticalAlign: 'middle',\\n backgroundColor: '#ffffffa1',\\n overflow: 'break',\\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 // 生成颜色函数 - 使用HSL颜色空间 \\n const getColorByDepthAndIndex = (depth, index, totalInDepth) => {\\n // 黄金分割比 \\n const goldenRatio = 0.618033988749895;\\n // 使用索引和黄金分割比来生成分散的色相值 \\n // 直接使用0-360的完整色相范围 \\n const hue = ((index * goldenRatio) % 1) * 360;\\n // 统一的饱和度和明度 \\n return `hsl(${hue}, 60%, 55%)`;\\n };\\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 typeArray = Array.from(typeSet);\\n const projectArray = Array.from(projectSet);\\n const taskArray = Array.from(taskSet);\\n // 给每个一级节点(类型)分配一个固定颜色 \\n const typeColors = {};\\n typeArray.forEach((type, index) => {\\n const hue = ((index * 0.618033988749895) % 1) * 360;\\n typeColors[type] = `hsl(${hue}, 60%, 55%)`;\\n });\\n // 创建项目到类型的映射,用于追踪源头 \\n const projectToTypeMap = {};\\n data.forEach(item => {\\n projectToTypeMap[item.项目] = item.类型;\\n });\\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 ...typeArray.map((name, index) => ({\\n name: name,\\n depth: 0,\\n value: nodeValues[name],\\n itemStyle: {\\n color: typeColors[name],\\n borderColor: typeColors[name]\\n }\\n })),\\n // 项目节点 \\n ...projectArray.map((name, index) => ({\\n name: name,\\n depth: 1,\\n value: nodeValues[name],\\n itemStyle: {\\n color: getColorByDepthAndIndex(1, index, projectArray.length),\\n borderColor: getColorByDepthAndIndex(1, index, projectArray.length)\\n }\\n })),\\n // 任务节点 \\n ...taskArray.map((name, index) => ({\\n name: name,\\n depth: 2,\\n value: nodeValues[name],\\n itemStyle: {\\n color: getColorByDepthAndIndex(2, index, taskArray.length),\\n borderColor: getColorByDepthAndIndex(2, index, taskArray.length)\\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 lineStyle: {\\n color: typeColors[item.类型],\\n opacity: 0.7\\n }\\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 // 确保正确获取源头类型的颜色 \\n const sourceType = projectToTypeMap[item.项目];\\n if (!typeColors[sourceType]) {\\n console.warn(`找不到类型颜色: ${sourceType} for 项目: ${item.项目}`);\\n }\\n links.push({\\n source: item.项目,\\n target: item.任务,\\n value: item.数量,\\n lineStyle: {\\n color: typeColors[sourceType] || '#999',\\n opacity: 0.7\\n },\\n // 添加源类型信息便于调试 \\n sourceType: sourceType\\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 subtext: \\\"展示各个项目任务的不同反馈分类占比\\\",\\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 formatter: gettooltip\\n },\\n series: [{\\n type: \\\"sankey\\\",\\n animation: true,\\n animationDuration: 300,\\n animationEasingUpdate: 'quinticInOut',\\n left: '5%',\\n top: '12%',\\n right: '20%',\\n bottom: '12%',\\n nodeAlign: 'left',\\n orient: 'horizontal',\\n data: nodes,\\n links: links,\\n nodeGap: 15,\\n nodeWidth: 25,\\n draggable: true,\\n lineStyle: {\\n curveness: 0.5,\\n opacity: 0.7,\\n width: function (params) {\\n return Math.max(10, params.value);\\n },\\n shadowBlur: 3,\\n shadowColor: 'rgba(0,0,0,0.2)'\\n },\\n emphasis: {\\n focus: 'adjacency',\\n lineStyle: {\\n opacity: 0.9,\\n shadowBlur: 10,\\n shadowColor: 'rgba(0,0,0,0.5)'\\n }\\n },\\n label: {\\n position: 'right',\\n fontSize: 12,\\n lineHeight: 16,\\n color: '#000000',\\n distance: 10,\\n formatter: function (params) {\\n var name = params.name;\\n if (name.length > 10) {\\n name = name.substring(0, 10) + '...';\\n }\\n if (params.value && params.value > 0) {\\n return `${name}(${params.value}个)`;\\n }\\n return \\\"\\\";\\n },\\n show: true,\\n align: 'left',\\n verticalAlign: 'middle',\\n backgroundColor: '#ffffffa1',\\n overflow: 'break',\\n padding: [4, 8],\\n borderRadius: 4\\n }\\n }]\\n};\\n\\n return {\\n option,\\n datGUI,\\n };\\n }\\n \"}" } }, "16,1": { @@ -1041,4 +1041,4 @@ "Size": "1473,1000" } ] -}//OvpFVJAt71cxWBj3r9CPg0zcbr5hp+CQ0pVqNPJtMDWlbLIzIv/dbEON0/XnYYeclW0AhpjFNJXJ09aIpyc2yqfM8OcKg9CuVUN09ibiFkCo3NxD2JY/k31LLOriKZI1kmLPazkRf3OEfvFHXfwcGnM51+cw83Y9V7dhgAnmfpNQUUmiKEAVifYGAp60bRmSQkbzzigpLML+QzWeUeMSjjpJlP/4f+zD3xtXxBfYZC8mozGMU8p58kNPO3z2hobbAg6le68iFZscPPE6O/Ry16Xba82m+jf6wkKA5Cmjl0wKFbDQ75h+/aT8h0J1rxDfMFvKPowce0Ep+LljgTMPrJ+p9bnZGHMCiouLkmtImFOLKUVK9FC7pY9zDbIQNNMQB6D3DzXswVA8v8vFukR0+wocBHEI9HEyzXiat3LcYRJklJCDHNPt0oO4ZNlYPAPlRhITvrqMgOAXGsbBoKJWY4Jw17jw7uF5gpoyYBiHczeC9253mEg7jMkRq/qsrRTs8+uDDcNebWfmsmoeH7I87L2f3KalgL1gj5uyJUTJzttok2SphiqhGBAW4MoGC8QrtM3ui8N6CeJwUXp18E46xV+CNFtetTXlxNWES1vJDN3KvmL1aLstBlVtKQ0fckyOUsoxWUd44BaDRcWR4Y9pd//nQcYeoVpoAJc++nUY5mIwAhaJ3T0dwVSG+mzBiREbr86K0QYvFRGzEtCORLY03JLjh6MRoIjuXe/26weQ0TbyqWSllvf9mAAijXi9Y1jbfmYjbmMLrWI+2S07EU4Mb8Wfg58TMDOM+BF9rATJMha5ZzyhF4SvQOm9mTP13PVcVzrzB0yHzMnPofG5MbNOI2P4iP7Z980rkG9jB9xcFjATzkAuHVO37dyCuqv7QXVR5aT7ldQ6TcFewD1P6tPJow==|920 \ No newline at end of file +}//1LYyb7nMoLuI7UKN8tKJvaedZk9J+D8Qb/5brdHHuaQSZ4lrKC9jCypKqUsGyYlH6cAXvg2C2fT9gPi18KzBdIsghVvlaHfjnaGwynCb+XyZ9L1o8zvy/afAM++R7jmjItvy0g2lGxoUmCDIWrzFR7xBrAamDO0JlpLs4SQByUtwtoPLbF1Jdfz017gCBHmFGSiXCpdXG+Aa4ccGls6MrnLOfCSSlVOXiXcVXTDTrNzot9gS9rQLB+PI4/uCl6T66xDlYGlRtYVU2151/yUAQ2sn6qicoCQYcz3PbD0WZGhG13soWNmqxfcrqodyRh8GsSMGUH7vx6to51BNZzCO+YoYECRvCYamjGqiaRCQKl0BTb7iESOzIYSzKMmxe5UR13qg+BE2xu3uwRm5iwPAIyKeSTN7Bm2BJbPxYTGeSI2JQT1LpVY1fzWnWn9AZ69buDNmWzOKDTVS1JGK+8mSjZ+fDcGu2q6CJh19BmrIMgth+x71vegiFZgOmyyO2OGKMfkFKnF4kliFdCR81vu0iHbmpc8DXLw2EGcZdS8yCoGmoL6hpRLgOvWvIUywCKIFnr6VSZRelAFzmTA0epeYznV2o8z89jnb0ohN+x5W9fap+3QrTqS0G5scWxvDIUTXrmmfRjDcRNj/AnRSBdQGvWRmI1gsTbWVknbDJur7HgMFQD3zIBnWqco9SzVnlvMeMbM7YcQASe7xfar1zBlO3gIm5tWybQBVnopes+EPl9aOuiYYGT2Q61u1TRVUNW2ymUQWHU503RiPWOPKucPrFFGAR9BPzdOgNxGl52VUx0TIfoLKa3evELjSPylD0wPtcKvadjxr510SaxtI3hNw3HWTuvX5pf2R7sw3sodMdxWDL3cnxmn/ChmKWtNORBQSPmGa8OWATcrTW9Y0BrPNGA==|920 \ No newline at end of file diff --git a/Reports/人员工时报表.rdlx b/Reports/人员工时报表.rdlx index bea3c57b..ca17a8c1 100644 --- a/Reports/人员工时报表.rdlx +++ b/Reports/人员工时报表.rdlx @@ -8,4 +8,4 @@ 7.5cm0cm0cm39.818cm7.5cm工时表_DataSet人员工时报表Auto
true2.25cm6true=" " & Format(Parameters!开始日期.Value, "yyyy-MM-dd") & "~" & Format(Parameters!结束日期.Value, "yyyy-MM-dd") & "人员工时统计表"1cmtrue文本框1项目true文本框12版本true文本框2任务true执行内容true文本框17上报工时true文本框21核定工时
=Fields!日期.Value=Fields.Item("任务ID").ValueAscending=Fields.Item("执行人").ValueAscending=Fields.Item("项目ID").ValueAscending=Fields.Item("版本ID").ValueAscending=Fields.Item("任务名称").Value0.75cmTrueRestrictedtrue项目=Fields.Item("项目").ValueTrueRestrictedtrue版本=Fields.Item("版本名称").ValueTrueRestrictedtrue任务=Fields.Item("任务名称").Valuetrue执行内容=Fields!执行内容.Valuetrue上报工时=Fields.Item("上报工时").Valuetrue核定工时=Fields.Item("核定工时").Value
1cm4true合计true文本框45=Sum(Fields!上报工时.Value)true文本框46=Sum(Fields!核定工时.Value)
4.5cm3.5cm6.001cm17.999cm3.907cm3.911cm
true1cmtrue=Fields.Item("执行人").Value & " "3true小计true=Sum(Fields.Item("上报工时").Value)true=Sum(Fields.Item("核定工时").Value)
=Fields.Item("执行人").Value
true0.75cmtruetruetruetruetruetruetrue
0.75cmtruetruetruetrue项目小计true=Sum(Fields!上报工时.Value)true=Sum(Fields!核定工时.Value)
=Fields!项目ID.Value
1.25cmtruetrue0cm0cm40cm1.25cmtrue b89954dd-a360-4909-926a-34ae179f314f 空白样式 -="第 " & Globals!PageNumber & " 页 共 " & Globals!TotalPages & " 页"1cm1cm29.7cm42cm1cm1cm39.818cmDateTimetrueTrueDateTimetrue结束日期TrueIntegertrue项目IDTrue项目表_DataSet项目名称IDIntegertrue版本IDTrue版本表_DataSet名称加版本号IDString执行人Truetrue用户信息视图_DataSet全名用户名用户信息视图_DataSet用户名jsondoc=http://localhost:26489/Forguncy/ARDataSource/GetDataSource/eaf0055e-b7c7-4fd9-9f79-abb67577832d;schemadata={"type":"array","items":{"type":"object","properties":{"日期":{"type":"date-time"},"执行人":{"type":"string"},"执行人用户名":{"type":"string"},"项目ID":{"type":"integer"},"项目":{"type":"string"},"版本ID":{"type":"integer"},"版本名称":{"type":"string"},"任务ID":{"type":"integer"},"任务名称":{"type":"string"},"执行内容":{"type":"string"},"上报工时":{"type":"number"},"核定工时":{"type":"number"}}}}JSONjsondoc=http://localhost:26489/Forguncy/ARDataSource/GetDataSource/2c95e2a9-2e3a-492b-a2eb-f97669c8e580;schemadata={"type":"array","items":{"type":"object","properties":{"ID":{"type":"integer"},"项目名称":{"type":"string"}}}}JSONjsondoc=http://localhost:26489/Forguncy/ARDataSource/GetDataSource/f9f2ca80-339c-47ab-b41a-078a0a32de1d;schemadata={"type":"array","items":{"type":"object","properties":{"ID":{"type":"integer"},"项目ID":{"type":"integer"},"版本名称":{"type":"string"}}}}JSONjsondoc=http://localhost:26489/Forguncy/ARDataSource/GetDataSource/514ebb17-c46f-48fc-9097-169e0c003849;schemadata={"type":"array","items":{"type":"object","properties":{"用户名":{"type":"string"},"全名":{"type":"string"}}}}JSON日期执行人执行人用户名项目ID项目版本ID版本名称任务ID任务名称执行内容上报工时核定工时=Fields!日期.Value=IIF(IsNothing(Parameters!开始日期.Value), Fields!开始日期.Value, Parameters!开始日期.Value)GreaterThanOrEqual=Fields!日期.Value=IIF(IsNothing(Parameters!结束日期.Value), Fields!结束日期.Value, Parameters!结束日期.Value)LessThanOrEqual=Fields!项目ID.Value=IIF(IsNothing(Parameters!项目ID.Value), Fields!项目ID.Value, Parameters!项目ID.Value)Equal=Fields!版本ID.Value=IIF(IsNothing(Parameters!版本ID.Value), Fields!版本ID.Value, Parameters!版本ID.Value)Equal=Fields!执行人用户名.Value=IIF(IsNothing(Parameters!执行人.Value), Fields!执行人用户名.Value, Parameters!执行人.Value)In$.[*]工时表ID项目名称$.[*]项目表ID项目ID版本名称=Fields!项目ID.Value=Parameters!项目ID.ValueEqual$.[*]版本表用户名全名$.[*]用户信息视图DisplayTypeGalleySizeTypeFitToWidthPaperOrientationLandscapeParametersView{"controls":[{"left":365,"top":5,"width":230,"height":75,"control":{"type":"dropdown","binding":"项目ID","label":{"display":"top","text":"项目","color":"default","font":{"bold":false,"italic":false,"underline":false,"transform":"none"}}}},{"left":605,"top":5,"width":230,"height":75,"control":{"type":"dropdown","binding":"版本ID","label":{"display":"top","text":"版本","color":"default","font":{"bold":false,"italic":false,"underline":false,"transform":"none"}}}},{"left":845,"top":5,"width":230,"height":75,"control":{"type":"dropdown","binding":"执行人","label":{"display":"top","text":"执行人","color":"default","font":{"bold":false,"italic":false,"underline":false,"transform":"none"}}}},{"left":1210,"top":35,"width":125,"height":30,"control":{"type":"button","action":"preview","text":"","background":"accent"}},{"left":10,"top":5,"width":345,"height":75,"control":{"type":"date-range","binding":["开始日期","结束日期"],"maxRange":["years",1],"viewMode":"days","daysViewHeaderFormat":"","label":{"display":"top","text":"日期范围"}}},{"left":1100,"top":35,"width":100,"height":30,"control":{"type":"button","action":"reset","background":"warning","text":""}}]}DefaultTheme.rdlx-theme \ No newline at end of file +="第 " & Globals!PageNumber & " 页 共 " & Globals!TotalPages & " 页"1cm1cm29.7cm42cm1cm1cm40.001cmDateTimetrueTrueDateTimetrue结束日期TrueIntegertrue项目IDTrue项目表_DataSet项目名称IDIntegertrue版本IDTrue版本表_DataSet名称加版本号IDString执行人Truetrue用户信息视图_DataSet全名用户名用户信息视图_DataSet用户名jsondoc=http://localhost:26489/Forguncy/ARDataSource/GetDataSource/eaf0055e-b7c7-4fd9-9f79-abb67577832d;schemadata={"type":"array","items":{"type":"object","properties":{"日期":{"type":"date-time"},"执行人":{"type":"string"},"执行人用户名":{"type":"string"},"项目ID":{"type":"integer"},"项目":{"type":"string"},"版本ID":{"type":"integer"},"版本名称":{"type":"string"},"任务ID":{"type":"integer"},"任务名称":{"type":"string"},"执行内容":{"type":"string"},"上报工时":{"type":"number"},"核定工时":{"type":"number"}}}}JSONjsondoc=http://localhost:26489/Forguncy/ARDataSource/GetDataSource/2c95e2a9-2e3a-492b-a2eb-f97669c8e580;schemadata={"type":"array","items":{"type":"object","properties":{"ID":{"type":"integer"},"项目名称":{"type":"string"}}}}JSONjsondoc=http://localhost:26489/Forguncy/ARDataSource/GetDataSource/f9f2ca80-339c-47ab-b41a-078a0a32de1d;schemadata={"type":"array","items":{"type":"object","properties":{"ID":{"type":"integer"},"项目ID":{"type":"integer"},"版本名称":{"type":"string"}}}}JSONjsondoc=http://localhost:26489/Forguncy/ARDataSource/GetDataSource/514ebb17-c46f-48fc-9097-169e0c003849;schemadata={"type":"array","items":{"type":"object","properties":{"用户名":{"type":"string"},"全名":{"type":"string"}}}}JSON日期执行人执行人用户名项目ID项目版本ID版本名称任务ID任务名称执行内容上报工时核定工时=Fields!日期.Value=IIF(IsNothing(Parameters!开始日期.Value), Fields!日期.Value, Parameters!开始日期.Value)GreaterThanOrEqual=Fields!日期.Value=IIF(IsNothing(Parameters!结束日期.Value), Fields!日期.Value, Parameters!结束日期.Value)LessThanOrEqual=Fields!项目ID.Value=IIF(IsNothing(Parameters!项目ID.Value), Fields!项目ID.Value, Parameters!项目ID.Value)Equal=Fields!版本ID.Value=IIF(IsNothing(Parameters!版本ID.Value), Fields!版本ID.Value, Parameters!版本ID.Value)Equal=Fields!执行人用户名.Value=IIF(IsNothing(Parameters!执行人.Value), Fields!执行人用户名.Value, Parameters!执行人.Value)In$.[*]工时表ID项目名称$.[*]项目表ID项目ID版本名称=Fields!项目ID.Value=Parameters!项目ID.ValueEqual$.[*]版本表用户名全名$.[*]用户信息视图DisplayTypeGalleySizeTypeFitToWidthPaperOrientationLandscapeParametersView{"controls":[{"left":365,"top":5,"width":230,"height":75,"control":{"type":"dropdown","binding":"项目ID","label":{"display":"top","text":"项目","color":"default","font":{"bold":false,"italic":false,"underline":false,"transform":"none"}}}},{"left":605,"top":5,"width":230,"height":75,"control":{"type":"dropdown","binding":"版本ID","label":{"display":"top","text":"版本","color":"default","font":{"bold":false,"italic":false,"underline":false,"transform":"none"}}}},{"left":845,"top":5,"width":230,"height":75,"control":{"type":"dropdown","binding":"执行人","label":{"display":"top","text":"执行人","color":"default","font":{"bold":false,"italic":false,"underline":false,"transform":"none"}}}},{"left":1210,"top":35,"width":125,"height":30,"control":{"type":"button","action":"preview","text":"","background":"accent"}},{"left":10,"top":5,"width":345,"height":75,"control":{"type":"date-range","binding":["开始日期","结束日期"],"maxRange":["years",1],"viewMode":"days","daysViewHeaderFormat":"","label":{"display":"top","text":"日期范围"}}},{"left":1100,"top":35,"width":100,"height":30,"control":{"type":"button","action":"reset","background":"warning","text":""}}]}DefaultTheme.rdlx-theme \ No newline at end of file diff --git a/Reports/客户工时报表.rdlx b/Reports/客户工时报表.rdlx index fa70716e..6bb18376 100644 --- a/Reports/客户工时报表.rdlx +++ b/Reports/客户工时报表.rdlx @@ -1 +1 @@ -客户工时报表.rdlx5.251cm0cm0.049cm33.951cm5.251cm工时表_DataSet客户工时报表Auto
true1.751cm6true项目服务月度报表0.75cmtrue日期true任务true文本框3负责人true版本true内容true工时
Ascending=Fields.Item("项目ID").ValueAscending=Fields.Item("日期").ValueAscending=Fields.Item("任务ID").ValueAscending=Fields.Item("执行人").Value0.75cmTrueRestrictedtrue日期=Fields.Item("日期").ValueTrueRestrictedtrue任务名称=Fields.Item("任务名称").ValueTrueRestrictedtrue执行人=Fields.Item("执行人").ValueTrueRestrictedtrue版本名称=Fields.Item("版本名称").Valuetrue执行内容=Fields.Item("执行内容").Valuetrue上报工时=Fields.Item("上报工时").Value
1cm5true合计true=Sum(Fields!上报工时.Value)
5.538cm5.035cm4.927cm4.001cm10.401cm4.049cm
true1cm4true项目名称=Fields!项目名称.Value & IIF(IsNothing(Fields!项目代号.Value), "", "(" & Fields!项目代号.Value & ")")true小计true=Sum(Fields!上报工时.Value)
=Fields.Item("项目ID").Value
1cm1cm21cm36cm1cm1cm34cmInteger客户True客户表_DataSet客户名称IDInteger部门Truetrue客户部门_DataSet部门名称ID客户部门_DataSetIDjsondoc=http://localhost:26489/Forguncy/ARDataSource/GetDataSource/34dec195-948f-493a-8364-02df3b09b8c6;schemadata={"type":"array","items":{"type":"object","properties":{"所属客户":{"type":"integer"},"所属客户部门":{"type":"integer"},"日期":{"type":"date-time"},"执行人":{"type":"string"},"项目ID":{"type":"integer"},"项目名称":{"type":"string"},"项目代号":{"type":"string"},"任务ID":{"type":"integer"},"任务名称":{"type":"string"},"版本名称":{"type":"string"},"执行内容":{"type":"string"},"上报工时":{"type":"number"}}}}JSONjsondoc=http://localhost:26489/Forguncy/ARDataSource/GetDataSource/e2702e2e-d2cf-4678-86b2-98b675666b47;schemadata={"type":"array","items":{"type":"object","properties":{"ID":{"type":"integer"},"客户名称":{"type":"string"}}}}JSONjsondoc=http://localhost:26489/Forguncy/ARDataSource/GetDataSource/9cbbe954-b292-43d0-888a-aab456f332ca;schemadata={"type":"array","items":{"type":"object","properties":{"ID":{"type":"integer"},"客户ID":{"type":"integer"},"部门名称":{"type":"string"}}}}JSON所属客户所属客户部门日期执行人项目ID项目名称项目代号任务ID任务名称版本名称执行内容上报工时=Fields!所属客户.Value=Parameters!客户.ValueEqual=Fields!所属客户部门.Value=Parameters!部门.ValueIn$.[*]工时表ID客户名称$.[*]客户表ID客户ID部门名称=Fields!客户ID.Value=Parameters!客户.ValueEqual$.[*]客户部门DisplayTypeGalleySizeTypeFitToWidthPaperOrientationLandscapeParametersView{"controls":[{"left":25,"top":10,"width":200,"height":75,"control":{"type":"dropdown","binding":"客户","label":{"display":"top","text":"客户","color":"default","font":{"bold":false,"italic":false,"underline":false,"transform":"none"}}}},{"left":235,"top":10,"width":200,"height":75,"control":{"type":"dropdown","binding":"部门","label":{"display":"top","text":"部门","color":"default","font":{"bold":false,"italic":false,"underline":false,"transform":"none"}}}},{"left":575,"top":40,"width":100,"height":30,"control":{"type":"button","action":"preview","text":"","background":"accent"}},{"left":465,"top":40,"width":100,"height":30,"control":{"type":"button","action":"reset","background":"warning","text":""}}]}DefaultTheme.rdlx-theme
\ No newline at end of file +客户工时报表.rdlx5.251cm0cm0.049cm33.951cm5.251cm工时表_DataSet客户工时报表Auto
true1.751cm6true项目服务月度报表0.75cmtrue日期true任务true文本框3负责人true版本true内容true工时
Ascending=Fields.Item("项目ID").ValueAscending=Fields.Item("日期").ValueAscending=Fields.Item("任务ID").ValueAscending=Fields.Item("执行人").Value0.75cmTrueRestrictedtrue日期=Fields.Item("日期").ValueTrueRestrictedtrue任务名称=Fields.Item("任务名称").ValueTrueRestrictedtrue执行人=Fields.Item("执行人").ValueTrueRestrictedtrue版本名称=Fields.Item("版本名称").Valuetrue执行内容=Fields.Item("执行内容").Valuetrue上报工时=Fields.Item("上报工时").Value
1cm5true合计true=Sum(Fields!上报工时.Value)
5.538cm5.035cm4.927cm4.001cm10.401cm4.049cm
true1cm4true项目名称=Fields!项目名称.Value & IIF(IsNothing(Fields!项目代号.Value), "", "(" & Fields!项目代号.Value & ")")true小计true=Sum(Fields!上报工时.Value)
=Fields.Item("项目ID").Value
1cm1cm21cm36cm1cm1cm34cmInteger客户True客户表_DataSet客户名称IDInteger部门Truetrue客户部门_DataSet部门名称ID客户部门_DataSetIDDateTimetrue开始日期TrueDateTimetrue结束日期Truejsondoc=http://localhost:26489/Forguncy/ARDataSource/GetDataSource/34dec195-948f-493a-8364-02df3b09b8c6;schemadata={"type":"array","items":{"type":"object","properties":{"所属客户":{"type":"integer"},"所属客户部门":{"type":"integer"},"日期":{"type":"date-time"},"执行人":{"type":"string"},"项目ID":{"type":"integer"},"项目名称":{"type":"string"},"项目代号":{"type":"string"},"任务ID":{"type":"integer"},"任务名称":{"type":"string"},"版本名称":{"type":"string"},"执行内容":{"type":"string"},"上报工时":{"type":"number"}}}}JSONjsondoc=http://localhost:26489/Forguncy/ARDataSource/GetDataSource/e2702e2e-d2cf-4678-86b2-98b675666b47;schemadata={"type":"array","items":{"type":"object","properties":{"ID":{"type":"integer"},"客户名称":{"type":"string"}}}}JSONjsondoc=http://localhost:26489/Forguncy/ARDataSource/GetDataSource/9cbbe954-b292-43d0-888a-aab456f332ca;schemadata={"type":"array","items":{"type":"object","properties":{"ID":{"type":"integer"},"客户ID":{"type":"integer"},"部门名称":{"type":"string"}}}}JSON所属客户所属客户部门日期执行人项目ID项目名称项目代号任务ID任务名称版本名称执行内容上报工时=Fields!所属客户.Value=Parameters!客户.ValueEqual=Fields!所属客户部门.Value=Parameters!部门.ValueIn=Fields!日期.Value=IIF(IsNothing(Parameters!开始日期.Value), Fields!日期.Value, Parameters!开始日期.Value)GreaterThanOrEqual=Fields!日期.Value=IIF(IsNothing(Parameters!结束日期.Value), Fields!日期.Value, Parameters!结束日期.Value)LessThanOrEqual$.[*]工时表ID客户名称$.[*]客户表ID客户ID部门名称=Fields!客户ID.Value=Parameters!客户.ValueEqual$.[*]客户部门DisplayTypeGalleySizeTypeFitToWidthPaperOrientationLandscapeParametersView{"controls":[{"left":25,"top":10,"width":200,"height":75,"control":{"type":"dropdown","binding":"客户","label":{"display":"top","text":"客户","color":"default","font":{"bold":false,"italic":false,"underline":false,"transform":"none"}}}},{"left":235,"top":10,"width":200,"height":75,"control":{"type":"dropdown","binding":"部门","label":{"display":"top","text":"部门","color":"default","font":{"bold":false,"italic":false,"underline":false,"transform":"none"}}}},{"left":905,"top":40,"width":100,"height":30,"control":{"type":"button","action":"preview","text":"","background":"accent"}},{"left":795,"top":40,"width":100,"height":30,"control":{"type":"button","action":"reset","background":"warning","text":""}},{"left":445,"top":10,"width":340,"height":75,"control":{"type":"date-range","binding":["开始日期","结束日期"],"maxRange":["none"],"viewMode":"default","daysViewHeaderFormat":"","label":{"display":"top","text":"日期范围"}}}]}DefaultTheme.rdlx-theme
\ No newline at end of file diff --git a/Reports/项目工时报表.rdlx b/Reports/项目工时报表.rdlx index 993df4fb..da971dea 100644 --- a/Reports/项目工时报表.rdlx +++ b/Reports/项目工时报表.rdlx @@ -1 +1 @@ -项目工时报表.rdlx5.25cm0cm0.002cm27.654cm5.25cm工时表_DataSet项目工时报表Auto
true2cm4true=Format(Parameters!开始日期.Value, "yyyy-MM-dd") & "~" & Format(Parameters!结束日期.Value, "yyyy-MM-dd") & "项目工时报表"0.75cmtrue任务true任务说明true总计划工时true总核定工时
=Fields.Item("任务ID").Value0.75cmtrue任务名称=Fields.Item("任务名称").Valuetrue任务说明=Fields.Item("任务说明").Valuetrue总计划工时=Fields.Item("上报工时").Valuetrue总核定工时=Fields.Item("核定工时").Value
1cm2true合计true=Sum(Fields.Item("上报工时").Value)true=Sum(Fields.Item("核定工时").Value)
6.499cm12.499cm4.328cm4.328cm
true0.75cmtrue项目名称=(Fields.Item("项目名称").Value & "-") & Fields.Item("版本名称").Valuetrue小计true=Sum(Fields.Item("上报工时").Value)true=Sum(Fields.Item("核定工时").Value)
=Fields.Item("项目ID").Value=Fields.Item("版本ID").Value
1cm1cm21cm29.7cm1cm1cm27.656cmDateTime开始日期TrueDateTime结束日期TrueInteger项目Truetrue项目表_DataSet项目名称IDjsondoc=http://localhost:26489/Forguncy/ARDataSource/GetDataSource/b496c790-735b-421c-a389-bfadb91fde62;schemadata={"type":"array","items":{"type":"object","properties":{"ID":{"type":"integer"},"任务名称":{"type":"string"}}}}JSONjsondoc=http://localhost:26489/Forguncy/ARDataSource/GetDataSource/e137dd12-5ee8-49e2-885c-b957f39a7e6d;schemadata={"type":"array","items":{"type":"object","properties":{"ID":{"type":"integer"},"项目名称":{"type":"string"}}}}JSONjsondoc=http://localhost:26489/Forguncy/ARDataSource/GetDataSource/fa568b7a-3657-42fd-9a30-16d65c837b91;schemadata={"type":"array","items":{"type":"object","properties":{"日期":{"type":"date-time"},"项目ID":{"type":"integer"},"项目名称":{"type":"string"},"任务ID":{"type":"integer"},"版本名称":{"type":"string"},"版本ID":{"type":"integer"},"执行人":{"type":"string"},"任务名称":{"type":"string"},"任务说明":{"type":"string"},"上报工时":{"type":"number"},"核定工时":{"type":"number"}}}}JSONID任务名称$.[*]任务表ID项目名称$.[*]项目表日期项目ID项目名称任务ID版本名称版本ID执行人任务名称任务说明上报工时核定工时=Fields!日期.Value=IIF(IsNothing(Parameters!开始日期.Value), Fields!开始日期.Value, Parameters!开始日期.Value)GreaterThanOrEqual=Fields!日期.Value=IIF(IsNothing(Parameters!结束日期.Value), Fields!结束日期.Value, Parameters!结束日期.Value)LessThanOrEqual=Fields!项目ID.Value=IIF(IsNothing(Parameters!项目ID.Value), Fields!项目ID.Value, Parameters!项目ID.Value)In$.[*]工时表DisplayTypeGalleySizeTypeFitToWidthPaperOrientationLandscapeParametersView{"controls":[{"left":360,"top":15,"width":200,"height":60,"control":{"type":"dropdown","binding":"项目ID","label":{"display":"top","text":"项目","color":"default","font":{"bold":false,"italic":false,"underline":false,"transform":"none"}}}},{"left":680,"top":45,"width":110,"height":30,"control":{"type":"button","action":"preview","text":"","background":"accent"}},{"left":570,"top":45,"width":100,"height":30,"control":{"type":"button","action":"reset","background":"warning","text":""}},{"left":15,"top":15,"width":335,"height":60,"control":{"type":"date-range","binding":["开始日期","结束日期"],"maxRange":["none"],"viewMode":"default","daysViewHeaderFormat":"","label":{"display":"top","text":"日期范围"}}}]}DefaultTheme.rdlx-theme
\ No newline at end of file +项目工时报表.rdlx5.25cm0cm0.002cm27.654cm5.25cm工时表_DataSet项目工时报表Auto
true2cm4true=Format(Parameters!开始日期.Value, "yyyy-MM-dd") & "~" & Format(Parameters!结束日期.Value, "yyyy-MM-dd") & "项目工时报表"0.75cmtrue任务true任务说明true总计划工时true总核定工时
=Fields.Item("任务ID").Value0.75cmtrue任务名称=Fields.Item("任务名称").Valuetrue任务说明=Fields.Item("任务说明").Valuetrue总计划工时=Fields.Item("上报工时").Valuetrue总核定工时=Fields.Item("核定工时").Value
1cm2true合计true=Sum(Fields.Item("上报工时").Value)true=Sum(Fields.Item("核定工时").Value)
6.499cm12.499cm4.328cm4.328cm
true0.75cmtrue项目名称=(Fields.Item("项目名称").Value & "-") & Fields.Item("版本名称").Valuetrue小计true=Sum(Fields.Item("上报工时").Value)true=Sum(Fields.Item("核定工时").Value)
=Fields.Item("项目ID").Value=Fields.Item("版本ID").Value
1cm1cm21cm29.7cm1cm1cm27.656cmDateTime开始日期TrueDateTime结束日期TrueInteger项目Truetrue项目表_DataSet项目名称IDjsondoc=http://localhost:26489/Forguncy/ARDataSource/GetDataSource/b496c790-735b-421c-a389-bfadb91fde62;schemadata={"type":"array","items":{"type":"object","properties":{"ID":{"type":"integer"},"任务名称":{"type":"string"}}}}JSONjsondoc=http://localhost:26489/Forguncy/ARDataSource/GetDataSource/e137dd12-5ee8-49e2-885c-b957f39a7e6d;schemadata={"type":"array","items":{"type":"object","properties":{"ID":{"type":"integer"},"项目名称":{"type":"string"}}}}JSONjsondoc=http://localhost:26489/Forguncy/ARDataSource/GetDataSource/fa568b7a-3657-42fd-9a30-16d65c837b91;schemadata={"type":"array","items":{"type":"object","properties":{"日期":{"type":"date-time"},"项目ID":{"type":"integer"},"项目名称":{"type":"string"},"任务ID":{"type":"integer"},"版本名称":{"type":"string"},"版本ID":{"type":"integer"},"执行人":{"type":"string"},"任务名称":{"type":"string"},"任务说明":{"type":"string"},"上报工时":{"type":"number"},"核定工时":{"type":"number"}}}}JSONID任务名称$.[*]任务表ID项目名称$.[*]项目表日期项目ID项目名称任务ID版本名称版本ID执行人任务名称任务说明上报工时核定工时=Fields!日期.Value=IIF(IsNothing(Parameters!开始日期.Value), Fields!日期.Value, Parameters!开始日期.Value)GreaterThanOrEqual=Fields!日期.Value=IIF(IsNothing(Parameters!结束日期.Value), Fields!日期.Value, Parameters!结束日期.Value)LessThanOrEqual=Fields!项目ID.Value=IIF(IsNothing(Parameters!项目ID.Value), Fields!项目ID.Value, Parameters!项目ID.Value)In$.[*]工时表DisplayTypeGalleySizeTypeFitToWidthPaperOrientationLandscapeParametersView{"controls":[{"left":360,"top":15,"width":200,"height":60,"control":{"type":"dropdown","binding":"项目ID","label":{"display":"top","text":"项目","color":"default","font":{"bold":false,"italic":false,"underline":false,"transform":"none"}}}},{"left":680,"top":45,"width":110,"height":30,"control":{"type":"button","action":"preview","text":"","background":"accent"}},{"left":570,"top":45,"width":100,"height":30,"control":{"type":"button","action":"reset","background":"warning","text":""}},{"left":15,"top":15,"width":335,"height":60,"control":{"type":"date-range","binding":["开始日期","结束日期"],"maxRange":["none"],"viewMode":"default","daysViewHeaderFormat":"","label":{"display":"top","text":"日期范围"}}}]}DefaultTheme.rdlx-theme
\ No newline at end of file