mirror of
https://github.com/xiaoshi930/xiaoshi-pad-card.git
synced 2026-01-13 07:04:59 +00:00
Update xiaoshi-device-todo-button.js
This commit is contained in:
@@ -1107,7 +1107,6 @@ class XiaoshiTodoButton extends LitElement {
|
||||
super();
|
||||
this._todoData = [];
|
||||
this._loading = false;
|
||||
this._dataLoaded = false; //button新元素
|
||||
this._refreshInterval = null;
|
||||
this.theme = 'on';
|
||||
this._editingItem = null;
|
||||
@@ -1266,11 +1265,9 @@ class XiaoshiTodoButton extends LitElement {
|
||||
}
|
||||
|
||||
this._todoData = todoData;
|
||||
this._dataLoaded = true; //button新元素
|
||||
} catch (error) {
|
||||
console.error('加载待办事项数据失败:', error);
|
||||
this._todoData = [];
|
||||
this._dataLoaded = true; //button新元素
|
||||
}
|
||||
|
||||
this._loading = false;
|
||||
@@ -1633,7 +1630,7 @@ class XiaoshiTodoButton extends LitElement {
|
||||
const buttonBgColor = transparentBg ? 'transparent' : theme === 'on' ? 'rgb(255, 255, 255, 0.6)' : 'rgb(83, 83, 83, 0.6)';
|
||||
|
||||
// 检查是否需要自动隐藏(只有数据加载完成且数量为0时才考虑隐藏)
|
||||
const shouldAutoHide = this._dataLoaded && autoHide && totalIncompleteCount === 0;
|
||||
const shouldAutoHide = autoHide && totalIncompleteCount === 0;
|
||||
|
||||
// 如果需要自动隐藏,返回空div
|
||||
if (shouldAutoHide) {
|
||||
@@ -1642,95 +1639,55 @@ class XiaoshiTodoButton extends LitElement {
|
||||
|
||||
// 渲染按钮
|
||||
let buttonHtml;
|
||||
if (!this._dataLoaded) {
|
||||
if (badgeMode) {
|
||||
// 角标模式:只显示图标,数量为0时不显示角标
|
||||
buttonHtml = html`
|
||||
<div class="todo-status badge-mode" style="--bg-color: ${buttonBgColor};" @click=${this._handleButtonClick}>
|
||||
<ha-icon class="status-icon" icon="${buttonIcon}"></ha-icon>
|
||||
</div>
|
||||
`;
|
||||
} else {
|
||||
// 普通模式
|
||||
// 应用锁定白色功能
|
||||
const iconColor = lockWhiteFg ? 'rgb(255, 255, 255)' : fgColor;
|
||||
const textColor = lockWhiteFg ? 'rgb(255, 255, 255)' : fgColor;
|
||||
|
||||
// 构建显示文本
|
||||
let displayText = buttonText;
|
||||
|
||||
// 根据hide_colon参数决定是否显示冒号
|
||||
if (!hideColon) {
|
||||
displayText += ':';
|
||||
} else {
|
||||
displayText += ' ';
|
||||
}
|
||||
|
||||
// 根据hide_zero参数决定是否显示0值
|
||||
if (!hideZero) {
|
||||
displayText += ' 0';
|
||||
} else {
|
||||
// 隐藏0值时使用CSS空格占位符,保持布局稳定
|
||||
displayText += '\u2002'; // 两个en空格,大约等于数字"0"的宽度
|
||||
}
|
||||
|
||||
buttonHtml = html`
|
||||
<div class="todo-status" style="--fg-color: ${textColor}; --bg-color: ${buttonBgColor};" @click=${this._handleButtonClick}>
|
||||
${!hideIcon ? html`<ha-icon class="status-icon" style="color: ${iconColor};" icon="${buttonIcon}"></ha-icon>` : ''}
|
||||
${displayText}
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
// 数据加载完成后
|
||||
if (badgeMode) {
|
||||
// 角标模式:只显示图标,根据数量显示角标
|
||||
const hasWarning = totalIncompleteCount > 0;
|
||||
buttonHtml = html`
|
||||
<div class="todo-status badge-mode ${hasWarning ? 'has-warning' : ''}" style="--bg-color: ${buttonBgColor};" @click=${this._handleButtonClick}>
|
||||
<ha-icon class="status-icon" icon="${buttonIcon}"></ha-icon>
|
||||
${hasWarning ? html`<div class="badge-number">${totalIncompleteCount}</div>` : ''}
|
||||
</div>
|
||||
`;
|
||||
} else {
|
||||
// 数据加载完成后
|
||||
if (badgeMode) {
|
||||
// 角标模式:只显示图标,根据数量显示角标
|
||||
const hasWarning = totalIncompleteCount > 0;
|
||||
buttonHtml = html`
|
||||
<div class="todo-status badge-mode ${hasWarning ? 'has-warning' : ''}" style="--bg-color: ${buttonBgColor};" @click=${this._handleButtonClick}>
|
||||
<ha-icon class="status-icon" icon="${buttonIcon}"></ha-icon>
|
||||
${hasWarning ? html`<div class="badge-number">${totalIncompleteCount}</div>` : ''}
|
||||
</div>
|
||||
`;
|
||||
// 普通模式:显示文本和数量
|
||||
// 应用锁定白色功能,但预警颜色(红色)不受影响
|
||||
let textColor, iconColor;
|
||||
if (totalIncompleteCount === 0) {
|
||||
// 非预警状态:根据锁定白色设置决定颜色
|
||||
textColor = lockWhiteFg ? 'rgb(255, 255, 255)' : fgColor;
|
||||
iconColor = lockWhiteFg ? 'rgb(255, 255, 255)' : fgColor;
|
||||
} else {
|
||||
// 普通模式:显示文本和数量
|
||||
// 应用锁定白色功能,但预警颜色(红色)不受影响
|
||||
let textColor, iconColor;
|
||||
if (totalIncompleteCount === 0) {
|
||||
// 非预警状态:根据锁定白色设置决定颜色
|
||||
textColor = lockWhiteFg ? 'rgb(255, 255, 255)' : fgColor;
|
||||
iconColor = lockWhiteFg ? 'rgb(255, 255, 255)' : fgColor;
|
||||
} else {
|
||||
// 预警状态:始终使用红色,不受锁定白色影响
|
||||
textColor = 'rgb(255, 0, 0)';
|
||||
iconColor = lockWhiteFg ? 'rgb(255, 255, 255)' : fgColor;
|
||||
}
|
||||
|
||||
// 构建显示文本
|
||||
let displayText = buttonText;
|
||||
|
||||
// 根据hide_colon参数决定是否显示冒号
|
||||
if (!hideColon) {
|
||||
displayText += ':';
|
||||
} else {
|
||||
displayText += ' ';
|
||||
}
|
||||
|
||||
// 根据hide_zero参数和实际数量决定是否显示数量
|
||||
if (hideZero && totalIncompleteCount === 0) {
|
||||
// 隐藏0值时使用CSS空格占位符,保持布局稳定
|
||||
displayText += '\u2002'; // 两个en空格,大约等于数字"0"的宽度
|
||||
} else {
|
||||
displayText += ` ${totalIncompleteCount}`;
|
||||
}
|
||||
|
||||
buttonHtml = html`
|
||||
<div class="todo-status" style="--fg-color: ${textColor}; --bg-color: ${buttonBgColor};" @click=${this._handleButtonClick}>
|
||||
${!hideIcon ? html`<ha-icon class="status-icon" style="color: ${iconColor};" icon="${buttonIcon}"></ha-icon>` : ''}
|
||||
${displayText}
|
||||
</div>
|
||||
`;
|
||||
// 预警状态:始终使用红色,不受锁定白色影响
|
||||
textColor = 'rgb(255, 0, 0)';
|
||||
iconColor = lockWhiteFg ? 'rgb(255, 255, 255)' : fgColor;
|
||||
}
|
||||
|
||||
// 构建显示文本
|
||||
let displayText = buttonText;
|
||||
|
||||
// 根据hide_colon参数决定是否显示冒号
|
||||
if (!hideColon) {
|
||||
displayText += ':';
|
||||
} else {
|
||||
displayText += ' ';
|
||||
}
|
||||
|
||||
// 根据hide_zero参数和实际数量决定是否显示数量
|
||||
if (hideZero && totalIncompleteCount === 0) {
|
||||
// 隐藏0值时使用CSS空格占位符,保持布局稳定
|
||||
displayText += '\u2002'; // 两个en空格,大约等于数字"0"的宽度
|
||||
} else {
|
||||
displayText += ` ${totalIncompleteCount}`;
|
||||
}
|
||||
|
||||
buttonHtml = html`
|
||||
<div class="todo-status" style="--fg-color: ${textColor}; --bg-color: ${buttonBgColor};" @click=${this._handleButtonClick}>
|
||||
${!hideIcon ? html`<ha-icon class="status-icon" style="color: ${iconColor};" icon="${buttonIcon}"></ha-icon>` : ''}
|
||||
${displayText}
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
// 返回最终的渲染结果(包括按钮和预览卡片)
|
||||
|
||||
Reference in New Issue
Block a user