提问 发文

一次性修改所有大屏中xxx标题组件的静态数据

微微菌

| 2023-12-26 13:56 157 0 0

话不多说,先上代码(以下接口是中经社的接口地址,其他项目需要更换接口地址):

/**用于更新标题组件数据*/
let updateText = (id, target)=>{
    fetch("https://fininfov.cnfic.com.cn/api/easyv/v3/component/data/update",{
        method:'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body:JSON.stringify({
            type:"static",
            id:id,
            data:[{
                text:target
            }]
        })
    }).then(res=>{
        return res.json();
    }).then(res=>{
        console.log(id+" is ok!")
    })
}
/**用于获取所有大屏*/
let getScreen=async ()=>{
    let screens = await fetch("https://fininfov.cnfic.com.cn/api/easyv/v3/screen/list")
    let json = await screens.json();
    return json.data.screens.filter(d=>!d.deletedAt);
}
/**用于获取大屏中所有的图层,包含动态面板*/
let getLayer=async (screenId)=>{
    let data = await fetch("https://fininfov.cnfic.com.cn/api/easyv/v5/screens/"+screenId);
    let json = await data.json();
    return json && json.data && json.data.layers || [];
}
/**用于获取动态面板的所有状态ID*/
let getState = async (panelId)=>{
    let data = await fetch("https://fininfov.cnfic.com.cn/api/easyv/v3/panel/get?id="+panelId);
    let json = await data.json();
    return json && json.data && json.data.states || [];
}
/**主函数*/
let start = async (name, value)=>{
    let screens = await getScreen();
    let components = [];
    const digui = async (screens_)=>{
        //screens_为空数组时中断递归
        if(!screens_.length)return
        
        let panels = [];
        await Promise.all(screens_.map(async s=>{
            let layers = await getLayer(s);
            layers.forEach(l=>{
                if(l.name==name){
                    components.push(l)
                }
                let id_ = l.id;
                if(typeof id_=='string' && id_.includes('panel')){
                    panels.push(+id_.split("_")[1]);
                }
            });
        }));
        //存在动态面板时,获取动态面板各个状态,并将每一个状态视为一个单独的大屏
        if(panels.length){
            let nextScreens = [];
            await Promise.all(panels.map(async p=>{
                let states = await getState(p);
                states.forEach(state=>{
                    nextScreens.push(state)
                })
            }));
            if(nextScreens.length)await digui(nextScreens);
        }
    };
    await digui(screens.map(s=>s.id));
    //当获取到所有需要修改的标题组件后,开始修改它们的静态数据
    Promise.all(components.map(c=>{
        updateText(c.id,value)
    }))
    
}
start("孟德的标题","mengde");  //第一个参数是组件名称,第二个参数是标题内容

1.先登录easyv,然后进入工作台。

2.按下F12打开浏览器控制台,并切换到如下页面。

3.将代码复制控制台中,并修改代码最后一行中的两个字符串,第一个字符串是标题组件的名称,第二个字符串是需要替换后的文本。

4.按下回车,当控制台输出一堆 xxx is ok! 并停止后,刷新页面即可。

收藏 0
分享
分享方式
微信

评论

游客

全部 0条评论

轻松设计高效搭建,减少3倍设计改稿与开发运维工作量

开始免费试用 预约演示

扫一扫关注公众号 扫一扫联系客服

©Copyrights 2016-2022 杭州易知微科技有限公司 浙ICP备2021017017号-3 浙公网安备33011002011932号

互联网信息服务业务 合字B2-20220090

400-8505-905 复制
免费试用
微信社区
易知微-数据可视化
微信扫一扫入群