2025-10-27 红绿灯情况说明🚥: 0 0 240 0

not done
(scheduled this week) OR (due this week)
exclude sub-items
short mode

运维群问题响应

CRM系统

今日细则

  1. 开通张娟权限:报表的订阅、导出权限

获取有红绿灯时长的笔记

// DataviewJS script
let pages = dv.pages().where(p => {
    // 正则表达式匹配YYYY-MM-DD格式,并且确保存在“红绿灯时长”字段
    return /^\d{4}-\d{2}-\d{2}$/.test(p.file.name) && p["红绿灯时长"] ;
});
 
// 定义每行展示的文件数量
const filesPerRow = 3;
 
// 将符合条件的文件名和“红绿灯时长”转换为可展示的字符串
let links = pages.map(page => `[[${page.file.name}]] (时长: ${page["红绿灯时长"]})`);
 
// 按照指定数量分组并展示
for (let i = 0; i < links.length; i += filesPerRow) {
    dv.list(links.slice(i, i + filesPerRow));
}
 
//声明需要记录的元数据名称  
let filedName = "红绿灯时长"  
// 获取当前 DataviewJS 容器  
let container = this.container;  
// 创建一个文本输入框  
let input = document.createElement('input');  
input.type = 'text';  
input.placeholder = '请输入元数据名称';  
// 设置样式以增加间距  
input.style.marginRight = '10px'; // 增加输入框和按钮之间的间距  
  
// 创建一个按钮  
let button = document.createElement('button');  
button.innerText = '确定';  
  
// 创建一个包裹输入框和按钮的 div
let wrapper = document.createElement('div');  
wrapper.style.display = 'flex';  
wrapper.style.justifyContent = 'center'; // 水平居中  
wrapper.style.alignItems = 'center'; // 垂直居中  
//wrapper.style.marginTop = '20px'; // 顶部间距  
  
// 将输入框和按钮添加到容器中  
wrapper.appendChild(input);  
wrapper.appendChild(button);  
  
// 将 wrapper 添加到容器中  
container.appendChild(wrapper);  
  
// 按钮点击事件  
button.addEventListener('click', () => {  
    // 这里可以处理输入的值,例如显示在控制台或其他操作  
    // console.log(`输入的值是: ${inputValue}`);  
    // alert(`输入的值是: ${inputValue}`);  
    filedName = input.value;  
    // 创建图表  
    createChart();  
});  
// 将创建图表代码封装为函数  
function createChart() {  
    // 清空容器内容  
    // container.innerHTML = '';  
    //清空图表部分内容,但保留输入框和按钮  
    while (container.children.length > 1) {  
        container.removeChild(container.lastChild);  
    }  
    //开辟新的一行创建容器  
//    container.appendChild(document.createElement('br'));  
    // 创建一个新的 div 作为容器  
    let newContainer = document.createElement('div');  
    // 设置容器的样式,例如大小和边框  
    newContainer.style.display = 'flex';  
    newContainer.style.justifyContent = 'center'; // 水平居中  
    newContainer.style.alignItems = 'center'; // 垂直居中
    // 选择要将容器添加到的父元素,例如 body 或其他现有元素  
    container.appendChild(newContainer);  
    // 在这里编写创建图表的代码  
    let pages = dv.pages().where(p => {  
        // 正则表达式匹配YYYY-MM-DD格式,并且确保存在“红绿灯时长”字段  
        return /^\d{4}-\d{2}-\d{2}$/.test(p.file.name) && p[filedName]!=null ;  
    });  
    let fileNames = []  
    let durations = []  
    pages.forEach(page => {  
        fileNames.push(page.file.name);  
        durations.push(page[filedName]);  
    });  
    let combinedArray = fileNames.map((name, index) => ({  
        name: name,  
        duration: durations[index]  
    }));  
    combinedArray.sort((a, b) => a.name.localeCompare(b.name));  
    fileNames = combinedArray.map(item => item.name);  
    durations = combinedArray.map(item => item.duration);  
    const option = {  
        xAxis: {  
            type: 'category',  
            data: fileNames  
        },  
        yAxis: {  
            type: 'value'  
        },  
        tooltip: {  
            trigger: 'axis'  
        },  
        series: [  
            {  
                data: durations,  
                type: 'line'  
            }  
        ]  
    };  
    app.plugins.plugins['obsidian-echarts'].render(option, newContainer)  
}
done 2025-10-27