vue参照企业微信日程写一个小组件

news2024/11/23 10:26:46

今天公司要求做日程 这体的话 和企业微信的日程功能挺想的
也没有找到特别好的工具 就直接自己手敲了一个
先看效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

因为样式使用 sass 写的 所以 项目中要引入 sass
感兴趣的 可以把代码拿去二开一下

<template>
    <section class = "skeletonPositioning">
        <section class = "support">
        </section>
        <section class = "scrollingElement">
            <div class = "timeNode">
                <div><span class = "displacement"></span></div>
                <div
                    v-for = "item in timeSet"
                    :key = "item"
                >
                    <span class = "displacement">{{ refraction(item)?item:'' }}</span>
                </div>
            </div>
            <div class = "ConversionList">
                <div class = "changeHands"></div>
                <div
                    v-for = "item in timeSet"
                    :key = "item"
                    class = "changeHands"
                >
                    <div 
                        v-if = "refraction(item)"
                        class = "box"
                        v-bind:class="{Excessive:captureHourlyAccuracy(item) == getDate()}"
                    >
                    </div>
                    <div
                        class = "mark"
                        v-if = "captureHourlyAccuracy(item) == getDate()&&refraction(item)"
                    ></div>
                </div>
                <div
                    v-for = "(item,index) in schedule"
                    :key = "item.id"
                    class = "ReflectTheProcess"
                    :style = "`
                        width: calc(${analysisLength(item,0,index)}% - 20px);
                        background-color: ${ colorMap[item.type] };
                        height: ${analysisLength(item,1,index)}px;
                        top: ${analysisLength(item,2,index)}px;
                        left: ${analysisLength(item,3,index)}%;
                    `"
                >
                    <div>{{ item.title }}</div>
                    <div>{{ `${item.start.time}-${item.end.time}` }}</div>
                </div>
            </div>
        </section>
    </section>
</template>

<script>
export default {
    data() {
        return {
            timeSet: [
                "01: 00", "01: 15", "01: 30", "01: 45", "02: 00", "02: 15", "02: 30", "02: 45", "03: 00", "03: 15", "03: 30",
                "03: 45", "04: 00", "04: 15", "04: 30", "04: 45", "05: 00", "05: 15", "05: 30", "05: 45", "06: 00", "06: 15", "06: 30", "06: 45",
                "07: 00", "07: 15", "07: 30", "07: 45", "08: 00", "08: 15", "08: 30", "08: 45", "09: 00", "09: 15", "09: 30", "09: 45", "10: 00",
                "10: 15", "10: 30", "10: 45", "11: 00", "11: 15", "11: 30", "11: 45", "12: 00", "12: 15", "12: 30", "12: 45", "13: 00", "13: 15",
                "13: 30", "13: 45", "14: 00", "14: 15", "14: 30", "14: 45", "15: 00", "15: 15", "15: 30", "15: 45", "16: 00", "16: 15", "16: 30",
                "16: 45", "17: 00", "17: 15", "17: 30", "17: 45", "18: 00", "18: 15", "18: 30", "18: 45", "19: 00", "19: 15", "19: 30", "19: 45",
                "20: 00", "20: 15", "20: 30", "20: 45", "21: 00", "21: 15", "21: 30", "21: 45", "22: 00", "22: 15", "22: 30", "22: 45", "23: 00",
                "23: 15", "23: 30", "23: 45", "00: 00", "00: 30", "00: 45", 
            ],
            schedule: [
                {
                    id: 1,
                    title: "日程测试数据",
                    start:{
                        date: "2022-05-17",
                        time: "09: 00",
                        getWeekDate: "周一 "
                    },
                    end: {
                        date: "2022-05-17",
                        time: "11: 00",
                        getWeekDate: "周一 "
                    },
                    type: 2
                },
                {
                    id: 2,
                    title: "测试高级数据整理",
                    start:{
                        date: "2022-05-17",
                        time: "10: 00",
                        getWeekDate: "周一 "
                    },
                    end: {
                        date: "2022-05-17",
                        time: "11: 00",
                        getWeekDate: "周一 "
                    },
                    type: 1
                },
                {
                    id: 3,
                    title: "高级日程",
                    start:{
                        date: "2022-05-17",
                        time: "11: 00",
                        getWeekDate: "周一 "
                    },
                    end: {
                        date: "2022-05-17",
                        time: "13: 45",
                        getWeekDate: "周一 "
                    },
                    type: 0
                },
                {
                    id: 4,
                    title: "测试参与会议",
                    start:{
                        date: "2022-05-17",
                        time: "03: 00",
                        getWeekDate: "周一 "
                    },
                    end: {
                        date: "2022-05-17",
                        time: "08: 45",
                        getWeekDate: "周一 "
                    },
                    type: 0
                },
                {
                    id: 5,
                    title: "测试控件超过时间管理",
                    start:{
                        date: "2022-05-17",
                        time: "23: 00",
                        getWeekDate: "周一 "
                    },
                    end: {
                        date: "2022-05-17",
                        time: "00: 45",
                        getWeekDate: "周一 "
                    },
                    type: 0
                }
            ],
            colorMap: {
                0: "#D9F2FF",
                1: "#E4FFEF",
                2: "#FFF4E4"
            }

        }
    },
    methods: {
        identificationHeight(item) {
            let height = 0;
            let hibernate = true;
            const { timeSet } = this;
            for(let i = 0;i < timeSet.length;i++){
                if(!hibernate) height += 20;
                if(timeSet[i] == item.start.time) hibernate = false;
                if(timeSet[i] == item.end.time) return height;
            }
            return 0
        },
        comprehensiveOperation(dataObject) {
            let isStart = dataObject.time.split(": ");
            return Number(isStart[0]+isStart[1])
        },
        BeforeAfterInference(item,index) {
            const { schedule,comprehensiveOperation } = this;
            const start = comprehensiveOperation(item.start);
            const end = comprehensiveOperation(item.end);
            let PreCollection = 0;
            let PostSet = 0;
            schedule.map((nomt,onindex) => {
                const itemstart = comprehensiveOperation(nomt.start);
                const itemend = comprehensiveOperation(nomt.end);
                if(itemend >= start&&itemstart <= end) {
                    if(index > onindex) PreCollection++;
                    if(index < onindex) PostSet++;
                }
            })
            return {
                PreCollection,
                PostSet
            }
        },
        stepCountRecord(time) {
            const { timeSet } = this;
            let recordTop = 0;
            for(let i = 0;i < timeSet.length;i++){
                recordTop += 20;
                if(time == timeSet[i]) {
                    return recordTop;
                }
            }
            return recordTop;
        },
        analysisLength(item,type,index) {
            const { stepCountRecord, identificationHeight, BeforeAfterInference } = this;
            switch(type){
                case 0:
                    const data = BeforeAfterInference(item,index);
                    const sum = data.PreCollection+data.PostSet+1;
                    return (1/sum)*100
                break;
                case 1:
                    return identificationHeight(item);
                case 2:
                    return stepCountRecord(item.start.time);
                break;
                case 3:
                    const datas = BeforeAfterInference(item,index);
                    const sums = datas.PreCollection+datas.PostSet+1;
                    const x = (1/sums)*100;
                    return datas.PreCollection*x;
                break;
                default:
                    return 0
                break;
            }
        },
        refraction(str) {
            let isStart = str.split(": ");
            return (isStart[1] == "00");
        },
        captureHourlyAccuracy(str) {
            let isStart = str.split(": ");
            return isStart[0];
        },
        getDate(datemin) {
            var date = datemin?new Date(datemin):new Date();
            var oHour = date.getHours();
            oHour = oHour < 10 ? ("0" + oHour) : oHour;
            return oHour;
        }
    }
}
</script>

<style lang='scss' scoped>
.skeletonPositioning{
    width: 100%;
    height: 100%;
    position: relative;
    .support{
        width: 100%;
        height: 30px;
        position: absolute;
        top: 0;
        background-image: linear-gradient(rgb(244, 243, 243), #FFFFFF);
    }
    .scrollingElement{
        width: 100%;
        height: calc(100% - 30px);
        display: flex;
        overflow-y: auto;
        overflow-x: hidden;
        position: relative;
        z-index: 1;
        border-bottom: 1px solid #DCDFE6;
        .timeNode{
            width: 76px;
            height: auto;
            border-top: 1px solid transparent;
            div{
                width: 100%;
                height: 20px;
                font-size: 14px;
                color: #999999;
                text-align: center;
                position: relative;
                .displacement{
                    position: absolute;
                    top: -7px;
                    width: 100%;
                    left: 0;
                }
            }
        }
        .ConversionList{
            flex: 1;
            border-top: 1px solid #DCDFE6;
            position: relative;
            .changeHands{
                width: 100%;
                height: 20px;
                color: #999999;
                border-left: 1px solid #DCDFE6;
                position: relative;
                .box{
                    height: 0px;
                    border-bottom: 1px solid #DCDFE6;
                }
                .mark{
                    height: 10px;
                    width: 10px;
                    background: rgb(112, 166, 243) !important;
                    margin: auto;
                    position: absolute;
                    top: -5px;
                    left: -5px;
                    border-radius: 50%;
                }
                .Excessive{
                    border-bottom: 1px solid rgb(112, 166, 243) !important;
                }
            }
            .ReflectTheProcess{
                position: absolute;
                text-align: left;
                margin: 0 10px;
                div{
                    text-align: left;
                    padding: 5px 0 0 10px;
                }
            }
        }
    }
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/550051.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java线程概述 (一)线程介绍

文章目录 &#x1f412;个人主页&#x1f3c5;JavaSE系列专栏&#x1f4d6;前言&#xff1a;&#x1fa85;什么是程序 、进程、线程&#xff1f;&#x1fa85;线程的生命周期&#x1fa85;多线程&#x1fa85;守护者线程&#x1fa85;线程并行与并发&#x1fa85;死锁&#x1f…

机器学习项目实战-能源利用率 Part-4(模型构建)

博主前期相关的博客可见下&#xff1a; 机器学习项目实战-能源利用率 Part-1&#xff08;数据清洗&#xff09; 机器学习项目实战-能源利用率 Part-2&#xff08;探索性数据分析&#xff09; 机器学习项目实战-能源利用率 Part-3&#xff08;特征工程与特征筛选&#xff09; 这…

AList挂载工具安装搭建使用教程,快速访问多个网盘的资源(保姆级图文)

目录 1. 下载AList2. 命令行启动快速启动小技巧 3. 用户登录4. 添加阿里云网盘帐号5. 添加百度云网盘资源总结 欢迎关注 『发现你走远了』 博客&#xff0c;持续更新中 欢迎关注 『发现你走远了』 博客&#xff0c;持续更新中 软件功能&#xff1a;将多个网盘的资源聚合在一起&…

本地部署 privateGPT

本地部署 privateGPT 1. 什么是 privateGPT2. Github 地址3. 创建虚拟环境4. 部署 privateGPT5. 配置 .env6. 下载模型7. 将文件放入 source_documents 目录中8. 摄取所有数据9. 向本地文档提问 1. 什么是 privateGPT 利用 GPT 的强大功能&#xff0c;私密地与您的文档交互&am…

Flutter 笔记 | Flutter 中的路由、包、资源、异常和调试

路由管理 Flutter中的路由通俗的讲就是页面跳转。在Flutter中通过Navigator组件管理路由导航。并提供了管理堆栈的方法。如&#xff1a;Navigator.push和Navigator.pop Flutter中给我们提供了两种配置路由跳转的方式&#xff1a;1、基本路由&#xff0c; 2、命名路由 普通路…

详解c++STL—函数对象

目录 1、函数对象 1.1、函数对象概念 1.2、函数对象的使用 2、谓词 2.1、谓词概念 2.2、一元谓词 2.3、二元谓词 3、内建函数对象 3.1、理解内建函数对象 3.2、算术仿函数 3.3、关系仿函数 3.4、逻辑仿函数 1、函数对象 1.1、函数对象概念 概念&#xff1a; 重载…

数据结构第三天 【二叉搜索树】

这道题真是写的我想吐了&#xff0c;主要是函数太多&#xff0c;排错太难了&#xff0c;搞了两个小时&#xff0c;基本就是在排错&#xff0c;排了一个小时&#xff0c;后面自己心态也有点崩溃了&#xff0c;其实不是一道很难的题&#xff0c;但是是一个非常麻烦的题目&#xf…

使用Serv-U搭建FTP服务器并公网访问

文章目录 1. 前言2. 本地FTP搭建2.1 Serv-U下载和安装2.2 Serv-U共享网页测试2.3 Cpolar下载和安装 3. 本地FTP发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 转载自内网穿透工具的文章&#xff1a;使用Serv-U搭建FTP服务器并公网访问【内网穿透】_ 1. 前言…

linux专题:GDB详细调试方法与实现

系列文章目录 例如&#xff1a;第一章 Linux-GDB 调试实验的使用 文章目录 目录 系列文章目录 文章目录 一、实验目的 二、实验现象 三、实验准备 四、Linux GDB调试实验流程 五、Linux GDB 调试器 总结 一、实验目的 掌握使用 gcc 分步编译 c 代码为可执行程序步骤以及 gc…

【数学建模】步长的选择(优化建模)

人们每天都在行走&#xff0c;排除以运动健身为目的的走路方式&#xff0c;而仅仅考虑距离固定&#xff0c;以节省体力为最终目的的行走&#xff0c;那么选择多大的步长才最省力&#xff1f; 人在走路时所做的功等于抬高人体重心所需的势能与两腿运动所需的动能之和。在给定速度…

又到520了,来画一朵抽搐的玫瑰花吧

文章目录 静态的玫瑰 敲了这么多年代码&#xff0c;每年都得画一些心啊花啊什么的&#xff0c;所以现在常规的已经有些倦怠了&#xff0c;至少也得来个三维图形才看着比较合理&#xff0c;而且光是三维的也没啥意思&#xff0c;最好再加上能动起来。 静态的玫瑰 网上有很多生…

AIGC技术研究与应用 ---- 下一代人工智能:新范式!新生产力!(1-简介)

文章大纲 AI GC参考文献与学习路径模型进化券商研报陆奇演讲AI GC AI模型可大致分为决策式/分析式AI(Discriminant/Analytical AI)和生成式AI (Generative AI)两类。 决策式AI:学习数据中的条件概率分布,根据已有数据进行分析、判断、预测,主要应用模型有用于推荐系 统和…

Elasticsearch 集群部署插件管理及副本分片概念介绍

Elasticsearch 集群配置版本均为8以上 安装前准备 CPU 2C 内存4G或更多 操作系统: Ubuntu20.04,Ubuntu18.04,Rocky8.X,Centos 7.X 操作系统盘50G 主机名设置规则为nodeX.qingtong.org 生产环境建议准备单独的数据磁盘主机名 #各自服务器配置自己的主机名 hostnamectl set-ho…

chatgpt赋能Python-pythonf检验

Python的重要性与应用 Python是一种高级编程语言&#xff0c;因其简单易学和灵活性而备受欢迎。它已经成为数据分析、web开发、机器学习等许多领域的重要工具。在本篇文章中&#xff0c;我们将探讨Python在SEO中的作用。 Python对SEO的影响 SEO是搜索引擎优化的缩写&#xf…

【数据结构】线性表 ⑥ ( 双循环链表 | 双循环链表插入操作 | 双循环链表删除操作 | LinkedList 双循环链表源码分析 )

文章目录 一、双循环链表插入操作处理二、双循环链表删除操作处理三、LinkedList 双循环链表源码分析1、链表节点2、LinkedList 链表中收尾元素指针3、链表插入操作4、链表向指定位置插入操作5、获取指定索引的元素6、删除指定索引的元素 一、双循环链表插入操作处理 双循环链表…

【JVM】6. 堆

文章目录 6.1. 堆&#xff08;Heap&#xff09;的核心概述6.1.1. 堆内存细分6.1.2. 堆空间内部结构&#xff08;JDK7&#xff09;6.1.3. 堆空间内部结构&#xff08;JDK8&#xff09; 6.2. 设置堆内存大小与OOM6.2.1. 堆空间大小的设置6.2.2. OutOfMemory举例 6.3. 年轻代与老年…

[CTF/网络安全] 攻防世界 backup 解题详析

[CTF/网络安全] 攻防世界 backup 解题详析 PHP备份文件名备份文件漏洞成因备份文件名常用后缀姿势总结 题目描述&#xff1a;X老师忘记删除备份文件&#xff0c;他派小宁同学去把备份文件找出来,一起来帮小宁同学吧&#xff01; PHP备份文件名 PHP 脚本文件的备份文件名&#…

【瑞萨RA_FSP】外部中断

文章目录 一、外部引脚中断二、中断过程三、按键外部中断 一、外部引脚中断 1. ICU框图 根据ICU的功能框图可以知道&#xff0c;首先需要配置IRQCR寄存器(IRQ Control Register&#xff0c;IRQ英文全称&#xff1a;Interrupt ReQuest&#xff0c;中文名&#xff1a;中断请求&a…

C++入门篇---(命名空间、缺省参数、以及输入、输出)

前言 c 我来了,恭喜牛牛解锁新世界.开启c的学习之旅. &#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>:讲解C…

30年后,茶产业规模是现在的10倍

做个预言&#xff1a;30年后&#xff0c;茶产业是现在的10倍 【5.21是世界茶日】 杭州中国茶博会&#xff0c;我来啦 人工智能越让生产效率越来越高 常用物质将会唾手可得 人闲着&#xff0c;无法体会活着的意义&#xff0c;才是挑战 田园诗茶生活方式会有一席之地 趣讲大白话&…