最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3.0實(shí)現(xiàn)考勤日歷組件使用詳解

 更新時(shí)間:2022年08月29日 15:37:57   作者:捕風(fēng)的紫色鳶尾  
這篇文章主要為大家詳細(xì)介紹了vue3.0實(shí)現(xiàn)考勤日歷組件使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了vue3.0實(shí)現(xiàn)考勤日歷組件使用的具體代碼,供大家參考,具體內(nèi)容如下

自定義日歷組件,首先我們要明確需求與面板展示內(nèi)容

1、周日~周六。
2、當(dāng)前月日歷1~(28/29/30/31),當(dāng)前月1號(hào)如果不是周日,需要上月最后日歷補(bǔ)全,當(dāng)月最后一天不是周六需要下月開始日歷補(bǔ)全。
3、切換至上月,切換至下月按鈕
4、當(dāng)前年月展示
5、如果某日有考勤異常,考勤異常日期標(biāo)記
6、當(dāng)前日期展示展示為‘今’
7、點(diǎn)擊上月日期切換至上月面板并選中該日期彈出該日期考勤信息
8、點(diǎn)擊下月日期切換至下月面板并選中該日期彈出該日期的考勤信息
9、點(diǎn)擊當(dāng)前月日期則選中當(dāng)前日期并彈出該日期的考勤信息

首先日歷面板實(shí)現(xiàn)

HTML結(jié)構(gòu)如下

<ul class="week">
? ? ? <li>日</li>
? ? ? <li>一</li>
? ? ? <li>二</li>
? ? ? <li>三</li>
? ? ? <li>四</li>
? ? ? <li>五</li>
? ? ? <li>六</li>
? ? </ul>
? ? <ul class="dateList">
? ? ? <li
? ? ? ? v-for="item in dateList.List"
? ? ? ? @click="intraday(item, item.date)"
? ? ? ? :class="item.class"
? ? ? ? :date="item.date"
? ? ? ? :key="item"
? ? ? >
? ? ? ? <div>{{ item.text }}</div>
? ? ? ? <i></i>
? ? ? </li>
? ? </ul>

其中dateList為我們js計(jì)算出的當(dāng)前面板應(yīng)該展示的日歷數(shù)組對(duì)象(包括上月的日期、當(dāng)月日期和下月日期),item.class為當(dāng)前日期展示樣式的類名(包括上月日期樣式‘upMonth’,下月日期樣式‘lastMonth’,假日樣式‘Holiyday’,選中樣式‘selected’,今天樣式‘today’,請(qǐng)假樣式‘leave’,考勤異常樣式‘absent’),item.date為日期(xxxx-xx-xx),item.text為當(dāng)前日,今天展示為‘今’,‘<i></i>’標(biāo)簽用于展示考勤異常和請(qǐng)假,intraday方法為點(diǎn)擊某日

面板渲染方式,實(shí)現(xiàn)dateList數(shù)組的計(jì)算

const MonthDay = ref([31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]); //確定每月天數(shù)
const calendar = (n, seletDay) => {?
? ? ? ? //n為0表示當(dāng)月,n為-1表示上月,n為1表示下月,seletDay默認(rèn)選中日期
? ? ? var oDate = new Date(); //定義時(shí)間
? ? ? oDate.setMonth(oDate.getMonth() + n); //設(shè)置月份,
? ? ? year.value = oDate.getFullYear(); //年,獲取當(dāng)前年份
? ? ? month.value = oDate.getMonth(); //月,獲取當(dāng)前月份(0-11)
? ? ? var allDay = MonthDay.value[month.value]; //計(jì)算本月有多少天
? ? ? var upMonthDay = MonthDay.value[month.value == 0 ? 11 : month.value - 1];//計(jì)算上個(gè)月有多少天
? ? ? //判斷閏年,如果是閏年的2月份,當(dāng)月總天數(shù)為29天
? ? ? if (month.value == 1) {
? ? ? ? if (
? ? ? ? ? (year.value % 4 == 0 && year.value % 100 != 0) ||
? ? ? ? ? year.value % 400 == 0
? ? ? ? ) {
? ? ? ? ? allDay = 29;
? ? ? ? }
? ? ? }
? ? ? //判斷本月第一天是星期幾
? ? ? oDate.setDate(1); //時(shí)間調(diào)整到本月第一天
? ? ? var weekStar = oDate.getDay(); //讀取本月第一天是星期幾
? ? ? oDate.setDate(allDay); //時(shí)間調(diào)整到本月最后一天
? ? ? var weekEnd = oDate.getDay(); //讀取本月最后一天是星期幾
? ? ? var dateArry = [];
? ? ? //上月日期插入數(shù)組
? ? ? for (var j = upMonthDay - weekStar; j < upMonthDay; j++) {
? ? ? ? let obj = {
? ? ? ? ? class: ["upMonth"], ?
? ? ? ? ? date:
? ? ? ? ? ? year.value +
? ? ? ? ? ? "-" +
? ? ? ? ? ? (month.value < 10 ? "0" : "") +
? ? ? ? ? ? (month.value + 1 - 1) +
? ? ? ? ? ? "-" +
? ? ? ? ? ? (j < 9 ? "0" : "") +
? ? ? ? ? ? (j + 1),
? ? ? ? ? text: j + 1,
? ? ? ? ? day: j + 1,
? ? ? ? };
? ? ? ? dateArry.push(obj);
? ? ? }
? ? ? //當(dāng)月日期插入到dateList
? ? ? for (var i = 1; i <= allDay; i++) {
? ? ? ? let obj = {
? ? ? ? ? class: [],
? ? ? ? ? date:
? ? ? ? ? ? year.value +
? ? ? ? ? ? "-" +
? ? ? ? ? ? (month.value < 9 ? "0" : "") +
? ? ? ? ? ? (month.value + 1) +
? ? ? ? ? ? "-" +
? ? ? ? ? ? (i < 10 ? "0" : "") +
? ? ? ? ? ? i,
? ? ? ? ? text: i,
? ? ? ? ? day: i,
? ? ? ? };
?
? ? ? ? //判斷是否當(dāng)月(非當(dāng)月)
? ? ? ? if (
? ? ? ? ? year.value != today.getFullYear() ||
? ? ? ? ? month.value != today.getMonth()
? ? ? ? ) {
? ? ? ? ? if (seletDay && seletDay != "n") { //存在默認(rèn)選中日期時(shí)
? ? ? ? ? ? if (i == seletDay) {
? ? ? ? ? ? ? obj.class.push("selected"); //默認(rèn)選中傳入日期
? ? ? ? ? ? ? upitem = obj;
? ? ? ? ? ? }
? ? ? ? ? } else if (i == 1) { //沒有默認(rèn)選中日期時(shí)默認(rèn)選中1號(hào)
? ? ? ? ? ? //判斷是否是1號(hào)
? ? ? ? ? ? obj.class.push("selected"); //默認(rèn)選中1號(hào)
? ? ? ? ? ? upitem = obj;
? ? ? ? ? }
? ? ? ? }else { //(當(dāng)月)
? ? ? ? ? // 判斷是否當(dāng)天
? ? ? ? ?if (format(today) == obj.date) { //(當(dāng)天)
? ? ? ? ? ? obj.class.push("today");
? ? ? ? ? ? obj.text = "今";
? ? ? ? ? ? if(!seletDay || seletDay == "n"){ //沒有默認(rèn)選中日期時(shí)默認(rèn)選中‘今天'
? ? ? ? ? ? ? ?obj.class.push("selected");
? ? ? ? ? ? ? ?upitem = obj;
? ? ? ? ? ? }
? ? ? ? ? }else{
? ? ? ? ? ? ? if (seletDay && seletDay != "n") { //非當(dāng)天
? ? ? ? ? ? ? ? if (i == seletDay) {
? ? ? ? ? ? ? ? ? obj.class.push("selected"); //默認(rèn)選中傳入日期
? ? ? ? ? ? ? ? ? upitem = obj;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? }
? ? ? ? ? }
? ? ? ? }
?
? ? ? ? if (findDate(monthDate, 'perday', obj.date)!=-1) {?
? ? ? ? ? var k = findDate(monthDate, 'perday', obj.date);?
? ? ? ? ? //判斷是否節(jié)假日
? ? ? ? ? if (monthDate[k].isworkday == "否") {
? ? ? ? ? ? obj.class.push("Holiyday");
? ? ? ? ? } else if ( ?//判斷考勤異常
? ? ? ? ? ? monthDate[k].attendflags != "遲到"
? ? ? ? ? ) {
? ? ? ? ? ? obj.class.push("absent");
? ? ? ? ? } else if (
? ? ? ? ? ? //判斷請(qǐng)假
? ? ? ? ? ? monthDate[k].leaveflags == "請(qǐng)假"?
? ? ? ? ? ) {
? ? ? ? ? ? obj.class.push("leave");
? ? ? ? ? }
? ? ? ? }
? ? ? ? dateArry.push(obj);
? ? ? }
? ? ? //下月日期插入到dateList
? ? ? for (var k = 1; k <= 6 - weekEnd; k++) {
? ? ? ? let obj = {
? ? ? ? ? class: ["lastMonth"],
? ? ? ? ? date:
? ? ? ? ? ? year.value +
? ? ? ? ? ? "-" +
? ? ? ? ? ? (month.value < 8 ? "0" : "") +
? ? ? ? ? ? (month.value + 1 + 1) +
? ? ? ? ? ? "-" +
? ? ? ? ? ? (k < 10 ? "0" : "") +
? ? ? ? ? ? k,
? ? ? ? ? text: k,
? ? ? ? ? day: k,
? ? ? ? };
? ? ? ? dateArry.push(obj);
? ? ? }
? ? ? dateList.List = dateArry;
? ? };

上月、下月切換按鈕點(diǎn)擊實(shí)現(xiàn)

html部分:

<div class="calendarTitle">
? ? ? <-- 切換至上月-->
? ? ? <img
? ? ? ? class="upMonth"
? ? ? ? src="../assets/images/up.png"
? ? ? ? @click="upMonth('n')" ?//傳入‘n'表示沒有默認(rèn)選中
? ? ? />
? ? ? <h4>
? ? ? ? <span>{{ month + 1 }}月</span> <span>{{ year }}年</span>
? ? ? </h4>
? ? ? ?<-- 切換至下月-->
? ? ? <img
? ? ? ? class="lastMonth"
? ? ? ? src="../assets/images/last.png"
? ? ? ? @click="lastMonth('n')" ?//傳入‘n'表示沒有默認(rèn)選中
? ? ? />
</div>

js部分:

// ?向上翻月
? ? const upMonth = (day) => {
? ? ? monthDate = "";
? ? ? total.obj = "";
? ? ? normally.value = true;
? ? ? calendar(--iNow, day);
? ? };
? ? // ?向下翻月
? ? const lastMonth = (day) => {
? ? ? monthDate = "";
? ? ? total.obj = "";
? ? ? normally.value = true;
? ? ? calendar(++iNow, day);
? ? };

點(diǎn)擊某日intraday方法

// 點(diǎn)擊日歷圖上某天
? ? const intraday = async (item, date) => {
? ? ? if (item.class.indexOf("upMonth") > -1) { //如果點(diǎn)擊的是上月日期則切換到上月日歷面板
? ? ? ? upMonth(item.day);
? ? ? ? return;
? ? ? }
? ? ? if (item.class.indexOf("lastMonth") > -1) {//如果點(diǎn)擊的是下月日期則切換到下月日歷面板
? ? ? ? lastMonth(item.day);
? ? ? ? return;
? ? ? }
? ? ? ?
? ? ? //點(diǎn)擊當(dāng)前月日期 ?
? ? ? upitem.class[upitem.class.indexOf("selected")] = null; //上次點(diǎn)擊日期去除選中樣式
? ? ? item.class.push("selected"); ?//當(dāng)前點(diǎn)擊日期加上選中樣式
? ? ? upitem = item;
? ? };

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • VUE3數(shù)據(jù)的偵聽超詳細(xì)講解

    VUE3數(shù)據(jù)的偵聽超詳細(xì)講解

    在Vue3中watch特性進(jìn)行了一些改變和優(yōu)化,與computed不同,watch通常用于監(jiān)聽數(shù)據(jù)的變化,并執(zhí)行一些副作用,這篇文章主要給大家介紹了關(guān)于VUE3數(shù)據(jù)偵聽的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • design vue 表格開啟列排序的操作

    design vue 表格開啟列排序的操作

    這篇文章主要介紹了design vue 表格開啟列排序的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 一文教你vue3 watch如何停止監(jiān)視

    一文教你vue3 watch如何停止監(jiān)視

    這篇文章主要為大家詳細(xì)介紹了vue3中watch如何停止監(jiān)視,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • 記一次用vue做的活動(dòng)頁的方法步驟

    記一次用vue做的活動(dòng)頁的方法步驟

    這篇文章主要介紹了記一次用vue做的活動(dòng)頁的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 基于vue項(xiàng)目設(shè)置resolves.alias: ''@''路徑并適配webstorm

    基于vue項(xiàng)目設(shè)置resolves.alias: ''@''路徑并適配webstorm

    這篇文章主要介紹了基于vue項(xiàng)目設(shè)置resolves.alias: '@'路徑并適配webstorm,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • vue-router 組件復(fù)用問題詳解

    vue-router 組件復(fù)用問題詳解

    本篇文章主要介紹了vue-router 組件復(fù)用問題詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • vue+relation-graph繪制關(guān)系圖實(shí)用組件操作方法

    vue+relation-graph繪制關(guān)系圖實(shí)用組件操作方法

    這篇文章主要介紹了vue+relation-graph繪制關(guān)系圖實(shí)用組件操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Vue自定義部分頁面顯示導(dǎo)航欄功能

    Vue自定義部分頁面顯示導(dǎo)航欄功能

    這篇文章主要介紹了Vue自定義部分頁面顯示導(dǎo)航欄,在設(shè)計(jì)導(dǎo)航欄的時(shí)候,考慮到登錄之前不能瀏覽該網(wǎng)站,所以需要在登錄頁和注冊(cè)頁不能出現(xiàn)導(dǎo)航欄,登錄后的頁面才能出現(xiàn)導(dǎo)航欄,本文給大家解決這個(gè)問題,感興趣的朋友跟隨小編一起看看吧
    2022-10-10
  • Vue3造輪子之Typescript配置highlight過程

    Vue3造輪子之Typescript配置highlight過程

    這篇文章主要介紹了Vue3造輪子之Typescript配置highlight過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • vue?router進(jìn)行路由跳轉(zhuǎn)并攜帶參數(shù)的實(shí)例詳解(params/query)

    vue?router進(jìn)行路由跳轉(zhuǎn)并攜帶參數(shù)的實(shí)例詳解(params/query)

    在使用`router.push`進(jìn)行路由跳轉(zhuǎn)到另一個(gè)組件時(shí),可以通過`params`或`query`來傳遞參數(shù),這篇文章主要介紹了vue?router進(jìn)行路由跳轉(zhuǎn)并攜帶參數(shù)(params/query),需要的朋友可以參考下
    2023-09-09

最新評(píng)論

栖霞市| 禄丰县| 林周县| 姚安县| 新龙县| 宣城市| 青岛市| 兴化市| 昌黎县| 金昌市| 十堰市| 金山区| 都兰县| 册亨县| 东丽区| 湘潭县| 巴马| 盱眙县| 阿坝县| 股票| 郎溪县| 新密市| 西城区| 梁山县| 梓潼县| 宁陕县| 高邑县| 阜阳市| 安西县| 建德市| 吴川市| 泌阳县| 肇庆市| 屯昌县| 宁陕县| 嵩明县| 临沧市| 两当县| 城步| 广平县| 克什克腾旗|