乐于分享
好东西不私藏

【助睿 Max 大屏实战】|完整源码 + 全套踩坑指南,“浏览器用户画像分析大屏”的搭建

【助睿 Max 大屏实战】|完整源码 + 全套踩坑指南,“浏览器用户画像分析大屏”的搭建

一、实验目的与核心价值

本次实验的核心目标是基于已加工完成的用户画像统计表,利用助睿Max平台完成“浏览器用户画像分析”大屏的静态布局设计。实验不仅要求掌握大屏搭建的技术操作,更强调站在“数据产品”的角度,理解如何将抽象的用户人口属性数据,转化为更为直观数据大屏。

核心价值在于回答一系列关键业务问题:

  • 目标用户是谁(年龄、性别、职业)?
  • 用户的教育与收入水平如何?
  • 用户的地理分布在哪里?
  • 不同浏览器的用户画像是否存在差异?

实验环境:

  • 实验平台:助睿在线实验平台
  • 可视化工具:助睿Max(数据大屏)

二、业务问题与分析维度

业务问题
对应的分析维度
目标用户是谁?(年龄、性别、职业)
明确核心目标人群,指导产品设计与营销沟通
用户的教育与收入水平如何?
影响产品复杂度设计、定价策略与商业化路径
用户分布在哪里?
指导区域市场投放与本地化运营
不同浏览器的用户画像是否存在差异?
识别差异化人群特征,制定针对性竞争策略

三、整体设计方案与模块构成

本次大屏设计遵循“信息层次清晰、分析逻辑连贯”的原则,整体分为五大分析模块,并搭配筛选器实现交互探索:

  1. 数据概览模块(核心指标卡)
    :展示覆盖用户数、平均年龄、本科以上占比、中高收入占比四个关键指标,快速勾勒用户群的规模与基本轮廓。
  2. 基本信息模块(饼图/柱状图/条形图)
    :包括性别分布、年龄分布、学历分布、职业分布、收入分布。针对不同维度特点选择合适图表——性别用饼图突出比例;年龄、职业、收入用柱状图便于横向对比;学历名称较长则采用横向条形图提升可读性。
  3. 地域分布模块(地图+列表)
    :以中国地图(区域热力层)直观展示用户省份分布的空间热点与空白区域,辅以“用户数TOP5省份”轮播列表,弥补地图难以精确读数的不足,实现“看趋势”与“读数值”的互补。
  4. 居住地类型模块(轮播饼图)
    :分析城市、城郊、乡村用户的结构占比,为差异化市场策略提供依据。
  5. 交互筛选模块(下拉多选)
    :支持按单个、多个或全部浏览器进行筛选,使大屏从静态展示变为可探索的分析工具,便于对比不同浏览器用户的画像差异。
  • 整体效果预览:

四、具体实验步骤

1.打开之前已完成“市场分析”大屏的项目文件。

2.使用图层管理功能,将“市场分析”大屏的所有组件选中并整体复制。

3.将复制得到的组件组重命名为“用户画像分析”,将“市场分析”组件隐藏,我们针对“用户画像”,逐步添加和布局本次实验所需的组件。

接下来我们正式开始几个小板块的设计:位置和大小可自行参照调整,下边不一一展示噢!

1)用户省份分布(地图→基础平面地图):在“子组件管理中”选择“区域热力层”

2)核心指标:参考图片添加4个“数字翻牌器”纵向排列,设置标题和数值样式,用“单张图片”设置标题背景

3)用户数TOP5省份排行榜(轮播列表):

①添加“单张图片”组件,作为排行榜区域背景

②添加“通用标题”组件,作为排行榜标题

③添加“轮播列表”组件,作为排行榜主体

4)性别分布(基础饼图):

①使用“单张图片”组件设置区域背景,并设置好标题

②添加“基础饼图”组件,调整大小和位置

5)年龄段分布(基础柱图):

①使用“单张图片”组件设置区域背景,并设置好标题

②助睿Max 支持多种柱状图:基础柱图、弧形柱图、水平基础柱图、水平胶囊柱图等,这里我们使用基础柱图进行展示

6)学历分布(水平基础柱图):

①使用“单张图片”组件设置区域背景,并设置好标题

②这里我们使用助睿Max 的水平基础柱图

7)职业分布(基础柱图):

①使用“单张图片”组件设置区域背景,并设置好标题

②这里我们使用助睿Max的基础柱图

8)收入分布(水平基础柱图):

①使用“单张图片”组件设置区域背景,并设置好标题

②这里我们使用助睿Max 的水平基础柱图

9)居住地类型分布(轮播饼图):

①使用“单张图片”组件设置区域背景,并设置好标题

②为了使大屏可视化效果更丰富,这里我们使用助睿Max 的轮播饼图

10)筛选器(下拉选择组件):

支持按不同浏览器进行对比分析。通过筛选器,用户可以:

  • 查看全部浏览器用户的整体画像(默认视图),了解产品大盘用户特征;
  • 选择单个浏览器(如 Chrome、IE、360 等),聚焦该浏览器用户的画像,回答“使用 Chrome 的用户与其他用户有什么不同?”;
  • 选择多个浏览器进行对比,直观比较不同浏览器用 户画像情况

【下拉选择框的数据属性设置用于蓝图编辑器中,后边将基于这6个静态数据实现组件交互!!】

到这里,我们就完成了所需的10个小模块的静态设计,下边是整体的效果展示。

五、数据接入——使用蓝图编辑器

1. 整体设计流程

1)页面加载或用户选择浏览器 → 触发两个SQL请求:

  • 维度数据SQL:查询性别、年龄、学历、职业、收入、居住地类型、省份分布。
  • 核心指标SQL:查询总用户数、平均年龄、本科及以上占比、中高收入占比。

2)浏览器筛选器 → 将选中的浏览器值传递给两个SQL请求节点。

  • 维度数据分发:通过一个并行数据处理节点,按 dimension_type 分发到各个图表。
  • 核心指标分发:通过另一个并行数据处理节点,将单行多列的指标数据拆分为四个独立数值,分别发送给四个指标卡。

3)各图表组件接收数据并展示。

2.整体设计流预览:

3.前期准备

  • 由于在数据大屏中,我们需要展示平均年龄这一核心指标,为了更准确地计算平均年龄,我们需要在 user_profile_stats 表中增加一个 age 字段。

3.1 修改目标表的结构

  • 使用“执行一个SQL脚本”修改原有的表结构,增加age字段。

这一步执行的SQL语句如下:

 DROP TABLE IF EXISTS `user_profile_stats`;
CREATE TABLE `user_profile_stats` (
    `browser_name` VARCHAR(50) NOT NULL COMMENT '浏览器名称',
    `gender` VARCHAR(10) COMMENT '性别',
    `age` INT NOT NULL COMMENT '年龄',
    `age_group` VARCHAR(10) COMMENT '年龄段',
    `edu` VARCHAR(50) COMMENT '学历',
    `job` VARCHAR(50) COMMENT '职业',
    `income` VARCHAR(50) COMMENT '收入',
    `city_type` VARCHAR(10) COMMENT '居住地类型',
    `province` VARCHAR(50) COMMENT '省份',
    `user_count` INT NOT NULL COMMENT '用户数'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户画像统计表';

3.2 修改原“用户画像表加工”转换流

① 修改排序记录组件,增加 age 字段的升序排序

② 修改分组组件,分组字段更加 age

③ 执行转换流

查看得到的数据表,检查age字段是否已经成功显示。(tips:若数据异常可排查计算器组件的配置,“计算”属性值可能会发生丢失,运行前记得检查一下噢!)

4.组件导出到蓝图编辑器

  • 当组件导入到蓝图编辑器后,才可以为该组件配置交互和接入数据,所以我们需要将标签卡、各数据表和热力图等导出到蓝图编辑器中(注意:本次实验中基本平面地图自身不需要导出,导出的是它的 “区域热力层” 噢!)。
  • 其他组件正常导出到蓝图编辑器即可:(演示时我已导出,大家操作时右键点击“导出到蓝图编辑器”即可)

接下来切换到蓝图编辑器,最终我们需要导出的组件可以参考下图:

5.添加浏览器参数接收节点(并行数据处理)

  • 大屏上的浏览器筛选器让用户可以选择某个具体的浏览器。当用户切换选择时,地图、饼图、柱状图等所有图表的数据都需要跟着变。实现联动的这个节点就是“浏览器参数接收”,它用“并行数据处理”组件来实现。

5.1 双击节点,添加两个处理方法

 // 方法一(页面加载时执行一次,设置基础URL)
  const BASE_URL = 'https://lab.guilian.cn'; window.GLOBAL_BASE_URL = BASE_URL; return data;
// 这个方法主要是为后续可能用到的外部API预留一个基础地址,本实验用不上,但保留结构。
 // 方法二(每次筛选器变化时执行,接收浏览器参数)
  const SELECTED_BROWSER = data.value; window.GLOBAL_SELECTED_BROWSER = SELECTED_BROWSER; return { value: SELECTED_BROWSER };
 // 这个方法把用户选中的浏览器存到 window.GLOBAL_SELECTED_BROWSER 这个全局变量里。后面的SQL请求节点只要读取这个变量,就知道该查哪个浏览器的数据了。

5.2 在画布编辑器中补全“下拉选择框”组件的配置

  • 其中,浏览器的选项我们可以直接使用静态数据(因为个数不多):title为前端显示内容,value为实际查询内容,即数据库中存储的对应 browser_name,如:{ "title": "IE浏览器", "value": "IE浏览器" }(有多个值时用“[]”框起来,用“,”分割)
  • 填写6个浏览器的对应内容,并刷新数据,同时,输入框中默认选中设置为“IE浏览器”

6.添加维度数据SQL请求(SQL请求)

【!!!注意:所有SQL查询语句都需要将from修改为自己的数据库表!!!】

  • 这个节点负责查询性别、年龄、学历、职业、收入、居住地类型、省份等维度数据,使用 UNION ALL 合并,输出格式为 (dimension_type, name, value)

添加“SQL请求”节点,重命名为“维度数据SQL请求”,查询SQL如下:

// 从全局变量获取选中的浏览器值
const selectedBrowser = window.GLOBAL_SELECTED_BROWSER;

let sql = `
-- 1.性别分布
select 
    'gender' as dimension_type,
    gender as name,
    sum(user_count) as value
from labs.user_profile_stats
where browser_name = '${selectedBrowser}'
group by gender

union all

-- 2.年龄段分布
select 
    'age' as dimension_type,
    age_group as name,
    sum(user_count) as value
from labs.user_profile_stats
where browser_name = '${selectedBrowser}'
group by age_group

union all

-- 学历分布
select 
    'edu' as dimension_type,
    edu as name,
    sum(user_count) as value
from labs.user_profile_stats
where browser_name = '${selectedBrowser}'
group by edu

union all

-- 3.职业分布
select 
    'job' as dimension_type,
    job as name,
    sum(user_count) as value
from labs.user_profile_stats
where browser_name = '${selectedBrowser}'
group by job

union all

-- 4.收入分布
select 
    'income' as dimension_type,
    income as name,
    sum(user_count) as value
from labs.user_profile_stats
where browser_name = '${selectedBrowser}'
group by income

union all

-- 5.居住地类型分布
select 
    'city_type' as dimension_type,
    city_type as name,
    sum(user_count) as value
from labs.user_profile_stats
where browser_name = '${selectedBrowser}'
group by city_type

union all

-- 6.省份分布
select 
    'province' as dimension_type,
    province as name,
    sum(user_count) as value
from labs.user_profile_stats
where browser_name = '${selectedBrowser}'
group by province
`;
return sql

7.添加核心指标SQL请求(SQL请求)

  • 只查询四个核心指标,输出单行多列格式(一行包含四个字段),不需要 UNION ALL,取值更简单。

添加“SQL请求”节点,重命名为“核心指标SQL请求”,查询SQL如下:

 // 从全局变量获取选中的浏览器值
const selectedBrowser = window.GLOBAL_SELECTED_BROWSER;

let sql = `
-- 核心指标(总用户数、平均年龄、本科及以上占比、中高收入占比)
select 
    'total_users' as name,
    sum(user_count) as value
from labs.user_profile_stats
where browser_name = '${selectedBrowser}'

union all

select 
    'avg_age' as name,
    round(sum(age * user_count) / sum(user_count), 1) as value
from labs.user_profile_stats
where browser_name = '${selectedBrowser}'

union all

select 
    'high_edu_ratio' as name,
    round(sum(case when edu in ('本科', '硕士及以上') then user_count else 0 end) * 100.0 / sum(user_count), 1) as value
from labs.user_profile_stats
where browser_name = '${selectedBrowser}'

union all

select 
    'high_income_ratio' as name,
    round(sum(case when income in ('5001~8000元', '8001~12000元','12000元以上') then user_count else 0 end) * 100.0 / sum(user_count), 1) as value
from labs.user_profile_stats
where browser_name = '${selectedBrowser}'
`;
return sql

8.添加维度数据分发节点(并行数据处理)

  • 基于上一步SQL查出来的是一张包含所有维度数据的大表,但每个图表只需要其中一部分,所以需要一个分发节点,把数据按 dimension_type 拆开,分别送给对应的图表。这个节点也用“并行数据处理”来实现。

8.1 添加“并行数据处理”节点,重命名为“数据分发”。将SQL请求节点的“执行成功”连接到该节点。

8.2 双击节点,为每个图表添加一个处理方法

  • 具体处理方法脚本如下:

分支1:性别分布(饼图)

 var filtered = data.filter(item => item.dimension_type === 'gender');
return filtered.map(item => ({
    name: item.name,
    value: item.value
}));

分支2:年龄段分布(柱状图)

var filtered = data.filter(item => item.dimension_type === 'age');
var order = ['<18', '18-25', '26-35', '36-45', '>45'];
filtered.sort((a, b) => order.indexOf(a.name) - order.indexOf(b.name));
return filtered.map(item => ({
    x: item.name,
    y: item.value,
    s: '用户数'
}));

分支3:学历分布(条形图)

var filtered = data.filter(item => item.dimension_type === 'edu');

var order = ['小学及以下', '初中', '高中/中专/技校', '大专', '大学本科', '硕士及以上'];
filtered.sort((a, b) => order.indexOf(a.name) - order.indexOf(b.name));
return filtered.map(item => ({
    x: item.name,
    y: item.value,
    s: '学历'
}));

分支4:职业分布(柱状图)

 var filtered = data.filter(item => item.dimension_type === 'job');
return filtered.map(item => ({
    x: item.name,
    y: item.value,
    s: '职业'
}));

分支5:收入分布(柱状图)

 var filtered = data.filter(item => item.dimension_type === 'income');

// 按收入金额升序排序(提取数字进行比较)
filtered.sort((a, b) => {
    // 提取收入段中的最小金额
    var getMinIncome = (incomeStr) => {
        // 处理 "无收入"、"500元及以下" 等特殊情况
        if (incomeStr === '无收入') return -1;
        if (incomeStr === '500元及以下') return 0;
        // 提取数字,如 "1501~2000元" 提取 1501
        var match = incomeStr.match(/(\d+)/);
        return match ? parseInt(match[1]) : 999999;
    };
    return getMinIncome(a.name) - getMinIncome(b.name);
});

return filtered.map(item => ({
    x: item.name,
    y: item.value,
    s: '收入'
}));

分支6:居住地类型分布(饼图)

 var filtered = data.filter(item => item.dimension_type === 'city_type');
return filtered.map(item => ({
    name: item.name === 'unknown' ? '未知' : item.name,
    value: item.value
}));

分支7:省份排行榜TOP5

 / 过滤出省份数据
var filtered = data.filter(item => item.dimension_type === 'province');
// 按用户数降序排序
filtered.sort((a, b) => b.value - a.value);
// 取前5条
var top5 = filtered.slice(0, 5);
// 直接返回组件需要的字段名
return top5.map(item => ({
    province: item.name,
    user_count: item.value
}));

以上的输出结果不正确的话,可以在最终输出结果的节点的处理方法代码中添加以下代码,查看返回的数据:

 // console.log("返回的数据",data)

9.添加核心指标分发节点(并行数据处理)

同样地,通过“并行数据处理”节点,我们按 name 字段过滤,将每个指标单独输出给对应指标卡。

分支示例(总用户数):

var item = data.find(item => item.name === 'total_users'); 
return [{ value: item ? item.value : 0 }];

其他分支类似,参照指标数据的定义,只需修改 item.name === 'total_users'的条件即可

10.连接节点并保存预览

根据我们的需求和设计框架,参照下图完成组件间的连线

预览效果:(所有组件应该正常显示,我的热力图和排行榜部分仍需排查问题)

六、大屏交互设置

本实验基于前两个实验完成的市场分析大屏和用户画像大屏,使用助睿Max的蓝图编辑器,配置两个大屏之间的切换交互,以及地图省份点击联动指标卡的功能。

1. 大屏切换逻辑

市场分析和用户画像两个大屏实际上是在同一个大屏文件中,通过控制图层的可见性来实现切换。

实现原理:通过 tab列表组件实现。将市场分析的所有组件放入“市场分析组”,用户画像的所有组件放入“用户画像组”。tab列表组件设置2列(“市场分析”和“用户画像”),每列设置不同的ID(如 "id": 1 和 "id": 2),背景设为透明以融合导航栏样式。点击某列时,根据ID控制两个组的可见性:显示对应组,隐藏另一组。

助睿Max图层管理优势:通过“图层”面板可以轻松控制组件的显示/隐藏,无需编写代码。配合蓝图编辑器,可以实现按钮与图层可见性的联动。

2. 地图省份点击联动逻辑

在用户画像大屏中,点击地图上的某个省份时,右侧的四个核心指标卡(总用户数、平均年龄、本科及以上占比、中高收入占比)需要更新为该省份的数据。

用户点击省份 → 地图组件触发“点击区域”事件 → 蓝图接收省份名称 → SQL请求查询该省份的核心指标 → 指标卡刷新数据

3. 完整蓝图连接示意图

4. 具体操作步骤

4.1 配置大屏切换

(1)添加Tab列表组件,调整大小、位置,两个导航按钮重合

(2)Tab列表组件的基本设置中,设置行数为1,列数为2,再标签默认配置中,将“背景颜色”、“选中背景色”、“悬浮背景色”的透明度设置为0,这样就看不见Tab列表组件,给用户的感觉就是只有2个按钮

(3)设置Tab列表组件每个选项的id:在数据中,保留2列数据,id分别为1、2,content为空,设置后记得刷新数据

(4)将“市场分析”组、“用户画像”组、Tab列表组件导出到蓝图编辑器

(5)在蓝图编辑器中,将“市场分析”组、“用户画像”组、Tab列表组件添加到蓝图编辑器画布中,通过“分支判断”节点来做“当Tab点击时”的id判断,处理方法为:return data.id == 1;

(6)在“分支判断”的 满足 分支上,添加两个“设置图层可见性”动作:(也就是连线)

  • 目标图层:市场分析组 → 显示
  • 目标图层:用户画像组 → 隐藏

(7)在“判断选项卡”的 不满足 分支上,添加两个“设置图层可见性”动作:

  • 目标图层:市场分析组 → 隐藏
  • 目标图层:用户画像组 → 显示

4.2 配置地图省份点击联动

核心知识点:
  • 事件驱动:地图组件的“点击区域时”事件是起点,它会输出被点击区域的地理信息(如省份名称)。
  • 变量传递:通过 window.globalProvinceName 全局变量,可以将省份名称在不同节点间共享,避免重复连线。
  • 动态SQL:SQL请求节点可以接收外部变量,实现“根据用户点击的省份查询不同数据”。
  • 并行数据处理:将一次查询返回的多行数据(每个指标一行)拆分、过滤,分别发送给不同的目标组件。

(1)提取地区名称(并行数据处理)

作用:接收地图点击事件输出的 data 对象,从中提取 name 字段,并通过映射表转换为数据表中的简称,最后存入全局变量 window.globalProvinceName

代码如下:

 // 省份特殊映射(直辖市、自治区、特别行政区)
const specialMap = {
    '北京市': '北京', '天津市': '天津', '上海市': '上海', '重庆市': '重庆',
    '广西壮族自治区': '广西', '内蒙古自治区': '内蒙古', '西藏自治区': '西藏',
    '宁夏回族自治区': '宁夏', '新疆维吾尔自治区': '新疆',
    '香港特别行政区': '香港', '澳门特别行政区': '澳门'
};

let provinceName = data.name;
// 优先使用特殊映射
if (specialMap[provinceName]) {
    provinceName = specialMap[provinceName];
} else {
    // 通用处理:去除末尾的“省”、“自治区”、“市”
    provinceName = provinceName.replace(/(省|自治区|市)$/, '');
}

window.globalProvinceName = provinceName;
return provinceName;

(2)省份核心指标查询(SQL请求节点)

根据当前选中的浏览器(window.GLOBAL_SELECTED_BROWSER)和点击的省份(window.globalProvinceName),从 user_profile_stats 表中查询四个核心指标。为了便于后续分发,使用 UNION ALL 将四个指标输出为多行,每行包含 name(指标名)和 value(数值)。

代码如下:

const selectedProvince = window.globalProvinceName;
console.log("点击的省份名称(处理后):", selectedProvince);
const selectedBrowser = window.GLOBAL_SELECTED_BROWSER;

const sql = `
select 'total_users' as name, sum(user_count) as value
from labs.user_profile_stats
where browser_name = '${selectedBrowser}' and province = '${selectedProvince}'

union all

select 'avg_age' as name,
       round(sum(age * user_count) / sum(user_count), 0) as value
from labs.user_profile_stats
where browser_name = '${selectedBrowser}' and province = '${selectedProvince}'

union all

select 'high_edu_ratio' as name,
       round(sum(case when edu in ('本科', '硕士及以上') then user_count else 0 end) * 100.0 / sum(user_count), 2) as value
from labs.user_profile_stats
where browser_name = '${selectedBrowser}' and province = '${selectedProvince}'

union all

select 'high_income_ratio' as name,
       round(sum(case when income in ('5001~8000元', '8001~12000元','12000元以上') then user_count else 0 end) * 100.0 / sum(user_count), 2) as value
from labs.user_profile_stats
where browser_name = '${selectedBrowser}' and province = '${selectedProvince}'
`;
console.log("生成的省份核心指标SQL:", sql);
return sql;

(3)省份核心指标分发(并行数据处理)

SQL 返回的是四行数据,而四个指标卡每个只需要一个数值。通过“并行数据处理”节点,我们按 name 字段过滤,将每个指标单独输出给对应的指标卡。

分支示例(总用户数):

 var item = data.find(item => item.name === 'total_users');
 return [{ value: item ? item.value : 0 }];

其他分支类似,只需修改 item.name === 'total_users'的条件即可

(4)组件连线:将上述组件参照图片连接起来

4.3 地图热力层根据用户数渲染颜色

为了直观展示全国各省份的用户分布,我们需要在地图上用颜色深浅来表示每个省份的用户数(用户数越多,颜色越深)。这是数据大屏中常见的热力图效果。

助睿Max 的地图组件支持通过“区域热力层”子组件接收自定义数据。数据格式要求为 { name, value, area_id },其中 name 为省份名称,value 为用户数,area_id 为行政区划代码(adcode)。因此,我们需要完成以下步骤:

  1. 提取地理数据中的 adcode 和 name:地图组件内部包含全国各省份的 GeoJSON 边界数据,其中包含 adcode(行政区划代码)和标准名称。我们需要提取并建立一个“省份名称 → adcode”的映射表,存储在全局变量中。
  2. 查询所有省份的用户数:根据当前选中的浏览器,从 user_profile_stats 表中统计每个省份的用户总数。
  3. 数据映射与格式化:将查询结果中的省份名称与 adcode 映射表匹配,输出格式 { name, value, area_id }
  4. 导入热力值数据:将格式化后的数据导入地图的“区域热力层”子组件,即可自动渲染颜色深浅。

(1)提取 adcode 映射表(并行数据处理)

 /**
 * 提取地理数据中的 adcode 和 name,建立名称→adcode 映射
 * @param {Object} data - 地理数据对象(包含 features 数组)
 * @returns {Object} 名称到 adcode 的映射表
 */
function extractAdcodeAndName(data) {
  if (!data || !Array.isArray(data.features)) {
    console.error('无效的地图数据格式');
    return {};
  }
  const nameToAdcode = {};
  data.features.forEach(feature => {
    const props = feature.properties;
    if (props && props.adcode && props.name) {
      nameToAdcode[props.name] = props.adcode;
    }
  });
  return nameToAdcode;
}
const mapping = extractAdcodeAndName(data);
window.globalProvinceAdcode = mapping;
console.log("省份adcode映射表已加载", Object.keys(mapping).length);
return mapping;

(2)查询所有省份的用户数(SQL请求节点)

 const selectedBrowser = window.GLOBAL_SELECTED_BROWSER;  // 当前选中的浏览器
const sql = `
SELECT 
    province AS name,
    SUM(user_count) AS value
FROM labs.user_profile_stats
WHERE browser_name = '${selectedBrowser}'
  AND province IS NOT NULL
  AND province != ''
GROUP BY province
ORDER BY value DESC
`;
console.log("生成的所有省份用户数SQL:", sql);
return sql;

(3)地图数据映射(并行数据处理节点)

 function convertToMapData(data) {
  if (!Array.isArray(data) || data.length === 0) {
    return [];
  }

  return data.map(item => {
    const provinceName = item.name;        // 注意:SQL 返回字段名为 name
    let area_id = globalProvinceAdcode[provinceName];

    // 如果直接匹配失败,尝试简化名称(案例中已实现)
    if (!area_id) {
      const simplifiedName = provinceName.replace(/省|市|自治区|特别行政区|回族|壮族|维吾尔|藏族|苗族/g, '');
      for (const fullName in globalProvinceAdcode) {
        if (fullName.includes(simplifiedName)) {
          area_id = globalProvinceAdcode[fullName];
          break;
        }
      }
    }

    if (!area_id) {
      // console.warn(`未找到省份 "${provinceName}" 的匹配 adcode`);
      area_id = "000000";
    }

    return {
      name: provinceName,
      value: parseFloat(item.value) || 0,
      area_id: Number(area_id)
    };
  });
}
const result = convertToMapData(data);
// console.log("最终返回的地图热力数据:", result);
return result;

(4)蓝图连线与数据流

5.预览与发布

部分细节存在问题,完整的结果参照下图噢!

以上,我们就完成了本次实验的全部内容。

七、实验问题与总结评价

实验问题

  • 数据库账号权限报错

现象:在预览调试蓝图时,控制台显示1045 Access denied账号访问拒绝。

原因:使用的数据库账号se_group_8未被授权当前客户端 IP 访问,或账号密码配置有误,无法直连数据库执行脚本。

临时处理:重新输入数据库密码,刷新数据源。

  • SQL 请求节点未配置数据源

现象:Server error(500)报错。

后果:平台无法执行查询,直接抛出服务器错误。

处理:检查所有SQL请求节点的数据源配置,以及SQL表名是否正确修改

  • 数据加工组件配置丢失

现象:修改数据转换流、新增age字段后,计算器、分组、排序等组件配置意外丢失,导致加工后数据异常。

原因:平台数据转换流组件稳定性不足,多次编辑、重新运行后易丢失自定义配置。

临时处理:每次运行转换流前逐项核对组件配置,补全丢失的排序、分组、计算规则。

实验总结

本次完成浏览器用户画像分析大屏搭建,实现布局设计、数据接入、多组件交互联动等操作。实验中遇到服务器报错,经查是 SQL 节点未选择数据源导致;同时存在数据查询返回空值、地图省份编码匹配异常、组件联动偶尔失效等问题,逐一排查后完成全部功能。通过实操,掌握了数据可视化大屏搭建、低代码蓝图配置与数据流转的基本方法。

平台评价

平台功能齐全,集成数据处理、可视化设计、交互配置等模块,组件丰富、上手简单,贴合课程教学需求。但报错提示有些模糊的问题。整体而言是较优质的教学实验平台,若优化细节体验,使用效果会更好。

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-12 19:56:23 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/737823.html
  2. 运行时间 : 0.173687s [ 吞吐率:5.76req/s ] 内存消耗:5,125.96kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=64bee1420f023e92adc3421c5e8d764a
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000813s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000792s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000329s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000295s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000507s ]
  6. SELECT * FROM `set` [ RunTime:0.000207s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000764s ]
  8. SELECT * FROM `article` WHERE `id` = 737823 LIMIT 1 [ RunTime:0.000526s ]
  9. UPDATE `article` SET `lasttime` = 1781265383 WHERE `id` = 737823 [ RunTime:0.000687s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000237s ]
  11. SELECT * FROM `article` WHERE `id` < 737823 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000444s ]
  12. SELECT * FROM `article` WHERE `id` > 737823 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000353s ]
  13. SELECT * FROM `article` WHERE `id` < 737823 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000813s ]
  14. SELECT * FROM `article` WHERE `id` < 737823 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000985s ]
  15. SELECT * FROM `article` WHERE `id` < 737823 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000903s ]
0.175556s