手喽个日历

<template>
    <div class="calender">
        <div class="count">
            <i-form
                style="display: flex; justify-content: space-between; align-items: center"
            >
                <i-form-item
                    label="日期:"
                    style="display: flex"
                >
                    <i-date-picker
                        type="month"
                        placeholder="开始时间"
                        style="width: 160px"
                        format="yyyy-MM"
                        :value="date"
                        :clearable="false"
                        @on-change="selectStartTime"
                    />
                </i-form-item>
                <i-form-item>
                    <i-checkbox
                        v-model="allCheck"
                        :disabled="allShow"
                        @on-change="allSelected"
                    >全选</i-checkbox>
                    <i-button
                        type="primary"
                        :disabled="disabled"
                        @click="setRoster"
                    >设置咨询排班</i-button>
                </i-form-item>
            </i-form>
        </div>
        <div
            style="padding: 0 20px"
        >
            <header>
                <div v-for="(item, key) in week" :key="item + key">
                    {{ item }}
                </div>
            </header>
            <div class="dateTable">
                <div v-for="(i, k) in list" :key="i + k">
                    <div
                        v-if="k >= getMonthFirst && k < getMonthFirst + curDay"
                        class="tableCount"
                        :style="{backgroundColor: i.num === 0 ? '#e2e2e2' : '#f0f2f5'}"
                    >
                        <p>
                            <i-checkbox
                                v-if="i.num === 0"
                                v-model="i.checkout"
                                :disabled="i.select"
                                @on-change="check(i)"
                            />
                            <span>
                                {{ i.date }}
                            </span>
                        </p>
                        <p>
                            <span>
                                {{ i.num > 0 ? `排班医生:${i.num}` : '无排班' }}
                            </span>
                            <span
                                v-if="+new Date(year, month - 1, day) + 28800000 <= +new Date(i.date)"
                            >
                                <i-icon
                                    type="ios-add-circle"
                                    size="18"
                                    @click="addRoster(i.date)"
                                />
                            </span>
                            <span v-if="i.num > 0">
                                <i-icon
                                    type="md-search"
                                    size="18"
                                    @click="view(i.date)"
                                />
                            </span>
                        </p>
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>
<script>
import iDatePicker from '@components/date-picker';
import iForm from '@components/form';
import iFormItem from '@components/form-item';
import Api from '@platform/api/roster';
import iCheckbox from '@components/checkbox';
import iButton from '@components/button';
import iIcon from '@components/icon';

export default {
    components: {
        iDatePicker,
        iForm,
        iFormItem,
        iCheckbox,
        iButton,
        iIcon,
    },
    data() {
        return {
            year: null,
            month: null,
            day: null,
            week: ['日', '一', '二', '三', '四', '五', '六'],
            date: '',
            num: 0,
            list: [],
            disabled: true,
            allCheck: false,
            selected: false,
            oldYear: null,
            oldMonth: null,
            oldDay: null,
            loading: true,
            selectList: [],
            allShow: false,
        };
    },
    created() {
        // 初始化时间
        this.getNowDate();
        this.getDate();
    },
    computed: {
        // 获取每个月一号
        getMonthFirst: {
            get() {
                return new Date(this.oldYear, this.oldMonth - 1, 1).getDay();
            },
            set(val) {
            },
        },
        // 日期为O是,获取当月总天数
        curDay: {
            get() {
                return new Date(this.oldYear, this.oldMonth, 0).getDate();
            },
            set(val) {
            },
        },
    },
    methods: {
        // 获取当前日期
        getNowDate() {
            const date = new Date();
            this.year = date.getFullYear();
            this.month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;
            this.day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
            this.date = this.year + '-' + this.month;
            this.oldYear = date.getFullYear();
            this.oldMonth = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;
        },
        selectStartTime(i) {
            this.date = i;
            this.getDate();
            this.allCheck = false;
            const date = new Date(i);
            this.oldYear = date.getFullYear();
            this.oldMonth = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;
        },
        async getDate() {
            this.loading = false;
            const { data, status } = await
                this.$http.post(Api.date, {
                                    date: this.date,
                                    type: '1',
                                },
                                {
                                    headers: {
                                        'Content-type': 'application/json',
                                    },
                                }
                );
            if (status === 0) {
                this.list = data.map(x => ({ ...x, checkout: false,
                                             select: +new Date(x.date) < +new Date() - 86400000 }));
                const index = data.filter(item => {
                    return item.num === 0 && +new Date(item.date) > +new Date() - 86400000;
                });
                if (+index.length === 0) {
                    this.allShow = true;
                } else {
                    this.allShow = false;
                }
                this.reorg(this.list);
            }
            this.loading = true;
        },
        // 日历表格数据处理
        reorg(data) {
            for (let i = 0; i < this.getMonthFirst; i++) {
                data.unshift({});
            }
            if (this.getMonthFirst <= 4) {
                const num = 35 - data.length;
                for (let j = 0; j < num; j++) {
                    data.push({});
                };
            } else {
                const num = 42 - data.length;
                for (let j = 0; j < num; j++) {
                    data.push({});
                };
            }
            this.list = data;
        },
        // 新增排班
        addRoster(val) {
            const arr = [];
            arr.push({
                date: val,
                week: this.week[new Date(val).getDay()],
            });
            this.$router.push({
                path: '/main/organizationalManagement/newRoster',
                query: {
                    date: JSON.stringify(arr),
                },
            });
        },
        // 查看排班
        view(val) {
            this.$router.push({
                path: '/main/organizationalManagement/oldRoster',
                query: {
                    date: val,
                },
            });
        },
        check() {
            const select = this.list.find(value => {
                return value.checkout === true;
            });
            if (select === undefined) {
                this.disabled = true;
                this.allCheck = false;
            } else {
                this.disabled = false;
            };
            this.selectList = [];
            this.list.forEach(i => {
                if (i.checkout) {
                    this.selectList.push({
                        date: i.date,
                        num: i.num,
                    });
                }
            });
        },
        // 全选的时候
        allSelected() {
            this.list.forEach(i => {
                if (new Date(this.year,
                             this.month - 1,
                             this.day).getTime() + 28800000
                    <= new Date(i.date).getTime()) {
                    i.checkout = this.allCheck;
                }
            });
            this.list.forEach(i => {
                if (i.checkout) {
                    this.selectList.push(i);
                };
            });
            if (this.allCheck) {
                this.disabled = false;
            } else {
                this.disabled = true;
                this.selectList = [];
            };
        },
        // 设置咨询排班
        setRoster() {
            this.selectList.forEach(item => {
                item.week = this.week[new Date(item.date).getDay()];
            });
            const newArr = this.selectList.filter(key => {
                return key.num === 0;
            });
            this.$router.push({
                path: '/main/organizationalManagement/newRoster',
                query: {
                    date: JSON.stringify(newArr),
                },
            });
        },
    },
};
</script>
<style lang="less" scoped>
.calender{
    &>div:nth-of-type(2) {
        width: 100%;
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
    }
}
header{
    width: 100%;
    display: flex;
    border-left: 1px solid;
    &>div{
        width: 14.285%;
        border: 1px solid;
        padding: 10px 0;
        border-top: 2px solid;
        text-align: center;
    }
    &>div:last-child{
        border-right: 2px solid;
    }
}
.dateTable{
    width: 100%;
    display: flex;
    flex-wrap: wrap;
    border: 1px solid;
    border-top: none;
    &>div{
        width: 14.285%;
        border: 1px solid;
    }
}
.tableCount{
    padding: 20px 10px;
    height: 100%;
    &>p:first-child{
        display: flex;
        &>span:last-child{
            text-align: center;
            flex: 1;
        }
    }
    &>p:last-child{
        margin-top: 10px;
        text-align: center;
    }
}
.c-gap-bg {
    background: #fff;
    padding: 15px 15px 2px 15px;
    display: flex;
    align-items: center;
}
/deep/ .ivu-form{
    width: 100%;
}
.roster{
    background-color: #e2e2e2;
}
.count{
    background-color: #FFffff;
    display: flex;
    margin: 20px;
    padding: 15px;
    /deep/ .ivu-form-item{
        margin-bottom: 0;
    }
}
</style>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 写一个日历可能比较复杂,但可以使用 JavaScript 的 `Date` 对象和一些日期处理函数来实现。下面是一个简单的实现: ``` // 获取当前日期 var now = new Date(); // 获取当前月份 var month = now.getMonth(); // 获取当前年份 var year = now.getFullYear(); // 创建日历的表格 var table = document.createElement("table"); table.setAttribute("border", "1"); table.setAttribute("cellspacing", "0"); table.setAttribute("cellpadding", "5"); document.body.appendChild(table); // 创建表格的标题行 var caption = table.createCaption(); caption.innerHTML = year + "年" + (month + 1) + "月"; var thead = document.createElement("thead"); table.appendChild(thead); var tr = document.createElement("tr"); thead.appendChild(tr); var th = null; for (var i = 0; i < 7; i++) { th = document.createElement("th"); tr.appendChild(th); } th.innerHTML = "星期日"; th.innerHTML = "星期一"; th.innerHTML = "星期二"; th.innerHTML = "星期三"; th.innerHTML = "星期四"; th.innerHTML = "星期五"; th.innerHTML = "星期六"; // 创建表格的主体部分 var tbody = document.createElement("tbody"); table.appendChild(tbody); for (var i = 0; i < 6; i++) { tr = document.createElement("tr"); tbody.appendChild(tr); for (var j = 0; j < 7; j++) { td = document.createElement("td"); tr.appendChild(td); } } // 计算当前月份的天数 var days = new Date(year, month + 1, 0).getDate(); // 计算当前月份第一天是星期几 var firstDay = new Date(year, month, 1).getDay(); // 填充表格的主体部分 var count = 1; for (var i = 0; i < 6; i++) { for (var j = 0; j < 7; j++) { if (i === 0 && j < firstDay) { // 填充空 ### 回答2: 要写一个JS星期日历,可以按照以下步骤进行: 1. 首先创建一个HTML文件,定义一个容器元素,用于显示日历的表格。 2. 在JS文件中,使用`Date`对象获取当前日期的年份和月份信息,并存储在变量中。 3. 使用`switch`语句确定当前月份的天数,并存储在一个名为`daysInMonth`的变量中。 4. 创建一个名为`calendar`的函数,用于创建和填充日历表格。 5. 在`calendar`函数中,使用`document.createElement()`方法创建HTML元素:表格、行和单元格。 6. 在循环中,根据`daysInMonth`变量的值创建和填充表格的行和单元格。 7. 在每个单元格中,使用Date对象的`getDate()`方法获取日期,并将其填充到单元格中。 8. 使用CSS样式来美化日历表格,例如设置表格边框、单元格宽度、字体样式等。 9. 调用`calendar`函数,将日历表格添加到HTML容器元素中,以便在网页上显示出来。 以下是一个简单的示例代码: ```html <!DOCTYPE html> <html> <head> <title>JS写星期日历</title> <style> table { border-collapse: collapse; } td { border: 1px solid black; width: 50px; height: 50px; text-align: center; font-weight: bold; } </style> </head> <body> <div id="calendar"></div> <script> var currentDate = new Date(); var currentYear = currentDate.getFullYear(); var currentMonth = currentDate.getMonth(); var daysInMonth; switch(currentMonth) { case 1: if((currentYear % 4 == 0 && currentYear % 100 != 0) || currentYear % 400 == 0) { daysInMonth = 29; } else { daysInMonth = 28; } break; case 3: case 5: case 8: case 10: daysInMonth = 30; break; default: daysInMonth = 31; } function calendar() { var container = document.getElementById("calendar"); var table = document.createElement("table"); for(var i = 0; i < daysInMonth/7; i++) { var row = document.createElement("tr"); for(var j = 0; j < 7; j++) { var cell = document.createElement("td"); var day = i * 7 + j + 1; if(day <= daysInMonth) { cell.innerHTML = day; } row.appendChild(cell); } table.appendChild(row); } container.appendChild(table); } calendar(); </script> </body> </html> ``` 这样,一个简单的JS写星期日历就完成了。运行该代码,即可在网页上显示出一个以当前月份为基础的日历表格。 ### 回答3: 要写一个星期日历,可以使用JS编写以下代码: ```javascript // 获取当前日期 var today = new Date(); var year = today.getFullYear(); var month = today.getMonth() + 1; var day = today.getDate(); // 获取本月的第一天和最后一天的日期 var firstDay = new Date(year, month - 1, 1); // 注意月份要减1 var lastDay = new Date(year, month, 0); // 获取上个月的最后一天即本月的最后一天 // 获取本月的天数和第一天是星期几 var numDays = lastDay.getDate(); var firstWeekday = firstDay.getDay(); // 定义一个用于存储星期的数组 var weekDays = ["日", "一", "二", "三", "四", "五", "六"]; // 打印日历头部 console.log(year + "年" + month + "月"); console.log("日 一 二 三 四 五 六"); // 打印空白占位符 for (var i = 0; i < firstWeekday; i++) { process.stdout.write(" "); } // 打印日期 for (var j = 1; j <= numDays; j++) { process.stdout.write((j < 10 ? " " : "") + j + " "); if ((firstWeekday + j) % 7 === 0) { // 每行结束换行 console.log(); } } ``` 这段代码首先获取当前日期,然后计算本月的第一天和最后一天的日期,以及本月的天数和第一天是星期几。然后使用一个存储星期的数组,打印日历头部和星期的标题。 接着打印空白占位符,保证第一天之前的日期没有显示。然后利用循环打印日期,如果每行的日期数达到7个就换行。最后得到一个简单的星期日历输出。 注意:以上代码只是一个简单的示例,可能在细节上还有待完善,比如排版、颜色等。如果需求更复杂,可以根据实际需求进行相应的修改和优化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值