- 新增OperationDashboard.vue全屏大屏组件 - 添加6个核心KPI指标卡片: 进水总量/出水总量/产销差率/营收额/平均水质/报警次数 - 实现6个ECharts图表: 供水趋势/水质分布/报警统计/管网空间/设备状态/营收分析 - 创建静态HTML版本operation-dashboard.html,使用CDN加载Vue3/ECharts/Element Plus - 更新路由配置,添加/operation路径支持 - 修复nextTick导入问题,优化build脚本 🚧 开发者: bot_dev1 📝 任务: #38 [BI] 运营仪表盘 + 供水专题大屏
56 lines
1.4 KiB
JavaScript
56 lines
1.4 KiB
JavaScript
/**
|
|
* A utility for dynamically-generating a GLSL struct.
|
|
*
|
|
* @alias ShaderStruct
|
|
* @constructor
|
|
*
|
|
* @see {@link ShaderBuilder}
|
|
* @param {string} name The name of the struct as it will appear in the shader.
|
|
* @example
|
|
* // Generate the struct:
|
|
* //
|
|
* // struct Attributes
|
|
* // {
|
|
* // vec3 position;
|
|
* // vec3 normal;
|
|
* // vec2 texCoord;
|
|
* // };
|
|
* const struct = new ShaderStruct("Attributes");
|
|
* struct.addField("vec3", "position");
|
|
* struct.addField("vec3", "normal");
|
|
* struct.addField("vec2", "texCoord");
|
|
* const generatedLines = struct.generateGlslLines();
|
|
*
|
|
* @private
|
|
*/
|
|
function ShaderStruct(name) {
|
|
this.name = name;
|
|
this.fields = [];
|
|
}
|
|
|
|
/**
|
|
* Add a field to the struct
|
|
* @param {string} type The type of the struct field
|
|
* @param {string} identifier The identifier of the struct field
|
|
*/
|
|
ShaderStruct.prototype.addField = function (type, identifier) {
|
|
const field = ` ${type} ${identifier};`;
|
|
this.fields.push(field);
|
|
};
|
|
|
|
/**
|
|
* Generate a list of lines of GLSL code for use with {@link ShaderBuilder}
|
|
* @return {string[]} The generated GLSL code.
|
|
*/
|
|
ShaderStruct.prototype.generateGlslLines = function () {
|
|
let fields = this.fields;
|
|
if (fields.length === 0) {
|
|
// GLSL requires structs to have at least one field
|
|
fields = [" float _empty;"];
|
|
}
|
|
|
|
return [].concat(`struct ${this.name}`, "{", fields, "};");
|
|
};
|
|
|
|
export default ShaderStruct;
|