微信小程序实现的日期午别医生排班表功能示例
作者:The_road_of_ordinary 发布时间:2024-10-18 18:36:14
标签:微信小程序,日期,排班表
本文实例讲述了微信小程序实现的日期午别医生排班表功能。分享给大家供大家参考,具体如下:
1.util.js
//获取几天后日期
function dateCount(arg,date) {
var date1 = arg;
var date2 = new Date(date1);
date2.setDate(date2.getDate() + parseInt(date));
var times = date2.getFullYear() + "-" + (date2.getMonth() + 1) + "-" + date2.getDate();
var Year = 0;
var Month = 0;
var Day = 0;
var CurrentDate = "";
Year = date2.getFullYear();
Month = date2.getMonth() + 1;
Day = date2.getDate();
CurrentDate += Year + "-";
if (Month >= 10) {
CurrentDate += Month + "-";
} else {
CurrentDate += "0" + Month + "-";
}
if (Day >= 10) {
CurrentDate += Day;
} else {
CurrentDate += "0" + Day;
}
return CurrentDate;
}
Date.prototype.format = function() {
var s = '';
s += this.getFullYear() + '-'; // 获取年份。
if ((this.getMonth() + 1) >= 10) { // 获取月份。
s += (this.getMonth() + 1) + "-";
} else {
s += "0" + (this.getMonth() + 1) + "-";
}
if (this.getDate() >= 10) { // 获取日。
s += this.getDate();
} else {
s += "0" + this.getDate();
}
return (s); // 返回日期。
};
//两个日期之间的所有日期
function getAll(begin, end) {
var ab = begin.split("-");
var ae = end.split("-");
var db = new Date();
db.setUTCFullYear(ab[0], ab[1] - 1, ab[2]);
var de = new Date();
de.setUTCFullYear(ae[0], ae[1] - 1, ae[2]);
var unixDb = db.getTime();
var unixDe = de.getTime();
var str = "";
for (var k = unixDb + 24 * 60 * 60 * 1000; k < unixDe;) {
str += (new Date(parseInt(k))).format() + ",";
k = k + 24 * 60 * 60 * 1000;
}
return str;
}
//两个时间相差天数
function datedifference(sDate1, sDate2) { //sDate1和sDate2是2006-12-18格式
var aDate, oDate1, oDate2, iDays;
aDate = sDate1.split("-");
oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]); //转换为9-25-2017格式
aDate = sDate2.split("-");
oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]);
iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 / 24);
return iDays;
};
module.exports = {
DateCount: dateCount,
GetAll: getAll,
Datedifference: datedifference
}
2.js
var HB = require('../../utils/util.js');
Page({
/**
* 页面的初始数据
*/
data: {
sourceList: [{
"ClinicLabelName": "医生A",
"ClinicLabelId": "8a2256334b021c33014b06124fd60181",
"Count": 5,
"Date": "2018-12-12",
"IsVisit": false,
"NoonName": "上午",
"Noon": 1,
"Total": 50,
"dayOfWeek": "3",
"keyue": true
},
{
"ClinicLabelName": "医生D",
"ClinicLabelId": "8a2256334b021c33014b06124fd60181",
"Count": 5,
"Date": "2018-12-18",
"IsVisit": false,
"NoonName": "凌晨",
"Noon": 4,
"Total": 50,
"dayOfWeek": "5",
"keyue": true
},
{
"ClinicLabelName": "医生B",
"ClinicLabelId": "8a2256334b021c33014b06124fd60181",
"Count": 5,
"Date": "2018-12-21",
"IsVisit": false,
"NoonName": "下午",
"Noon": 2,
"Total": 50,
"dayOfWeek": "3",
"keyue": true
},
{
"ClinicLabelName": "医生c",
"ClinicLabelId": "8a2256334b021c33014b06124fd60181",
"Count": 5,
"Date": "2018-12-16",
"IsVisit": false,
"NoonName": "全天",
"Noon": 4,
"Total": 50,
"dayOfWeek": "4",
"keyue": true
},
{
"ClinicLabelName": "医生D",
"ClinicLabelId": "8a2256334b021c33014b06124fd60181",
"Count": 5,
"Date": "2018-12-16",
"IsVisit": false,
"NoonName": "夜间",
"Noon": 3,
"Total": 50,
"dayOfWeek": "5",
"keyue": true
}
],
dateArray: [],
noonList: [],
StartClinicDate: "2018-12-12",
EndClinicDate: "2018-12-19"
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function(options) {
this.removal();
},
removal: function() {
var that =this;
var objectArray = this.data.sourceList;
var newObject = [];
for (var i = 0; i < objectArray.length; i++) //从第二项开始遍历
{
newObject.push(objectArray[i].NoonName);
}
var finalArray = [newObject[0]]; //结果数组
for (var j = 1; j < newObject.length; j++) //从第二项开始遍历
{
//如果当前数组的第i项在当前数组中第一次出现的位置不是i,
//那么表示第i项是重复的,忽略掉。否则存入结果数组
if (newObject.indexOf(newObject[j]) == j) {
finalArray.push(newObject[j]);
}
}
var noonList = [];
for (var k = 0; k < finalArray.length; k++) //从第二项开始遍历
{
noonList.push({
NoonName: finalArray[k],
noon: that.getNoonNum(finalArray[k]),
Value: false,
list: []
})
}
that.setData({
noonList: noonList.sort(that.compare("noon"))
})
that.getSevenDays();
},
getNoonNum: function(ele) {
var num;
switch (ele) {
case '上午':
num = 1;
break;
case '下午':
num = 2;
break;
case '夜间':
num = 3;
break;
case '凌晨':
num = 4;
break;
case '全天':
num = 5;
break;
}
return num;
},
compare: function compare(property){
return function (a, b) {
var value1 = a[property];
var value2 = b[property];
return value1 - value2;
}
},
getSevenDays: function() {
var daysArray = [];
var dayDict = {};
var weekStr = '';
var weekNum = '';
var date = new Date(); //当前日期
var newDate = new Date();
//开始日期与结束日期之间相差天数
var dateNum = HB.Datedifference(this.data.StartClinicDate, this.data.EndClinicDate);
//显示几周的表格
var weekNum = Math.ceil((dateNum + 1) / 7);
var dateArr = HB.GetAll(this.data.StartClinicDate, HB.DateCount(this.data.StartClinicDate, weekNum * 7 - 1));
dateArr = (this.data.StartClinicDate + "," + dateArr + HB.DateCount(this.data.StartClinicDate, weekNum * 7 - 1)).split(","); //获取两个日期之间日期
for (var i = 0; i < dateArr.length; i++) {
weekNum = this.getWeekNum(this.getWeekByDay(dateArr[i]));
dayDict = {
"date": dateArr[i],
"date_text": dateArr[i].substring(5, 10),
"weekName": this.getWeekByDay(dateArr[i]),
"weekNum": weekNum
};
daysArray.push(dayDict);
}
this.setData({
dateArray: daysArray
});
this.dealData();
},
getWeekNum: function(ele) {
var num;
switch (ele) {
case '周一':
num = 0;
break;
case '周二':
num = 1;
break;
case '周三':
num = 2;
break;
case '周四':
num = 3;
break;
case '周五':
num = 4;
break;
case '周六':
num = 5;
break;
case '周日':
num = 6;
break;
}
return num;
},
getWeekByDay: function(value) {
var day = new Date(Date.parse(value.replace(/-/g, '/'))); //将日期值格式化
var today = new Array("周日", "周一", "周二", "周三", "周四", "周五", "周六"); //创建星期数组
return today[day.getDay()];
},
dealData: function() {
var that = this;
var tag = 0;
var ar = [1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7];
var objectArray = that.data.noonList;
let loopNum = that.data.dateArray.length;
for (var k = 0; k < objectArray.length; k++) {
for (var m = 0; m < loopNum; m++) {
objectArray[k].list.push({
keyue: false,
date: HB.DateCount(that.data.StartClinicDate, m)
})
}
}
for (var i = 0; i < that.data.sourceList.length; i++) {
var assignmentArray;
for (var j = 0; j < objectArray.length; j++) {
if (objectArray[j].NoonName == that.data.sourceList[i].NoonName){
assignmentArray = objectArray[j];
}
}
assignmentArray.Value = true;
for (var n = 0; n < assignmentArray.list.length; n++) {
if (assignmentArray.list[n].date == that.data.sourceList[i].Date) {
assignmentArray.list[n].noon = that.data.sourceList[i].Noon,
assignmentArray.list[n].clinicLabelId = that.data.sourceList[i].ClinicLabelId,
assignmentArray.list[n].clinicLabelName = that.data.sourceList[i].ClinicLabelName,
assignmentArray.list[n].count = that.data.sourceList[i].Count,
assignmentArray.list[n].isVisit = that.data.sourceList[i].IsVisit,
assignmentArray.list[n].noonName = that.data.sourceList[i].NoonName,
assignmentArray.list[n].total = that.data.sourceList[i].Total,
assignmentArray.list[n].dayOfWeek = that.data.sourceList[i].dayOfWeek,
assignmentArray.list[n].keyue = true
}
}
}
that.setData({
noonList: objectArray
})
},
clickDoctor: function(e) {
let index = e.currentTarget.dataset.item;
let indexChild = e.currentTarget.dataset.itemchild;
let arrObiect = this.data.noonList;
var objectList = arrObiect[index].list[indexChild];
debugger
}
})
3.wxml
<!-- 医生排班表 -->
<scroll-view scroll-x="true" class='scrollClass'>
<view class='cell-table'>
<view class='cell-table_header'>
<view class="th">
<view class='cell_label'></view>
</view>
<block wx:for="{{dateArray}}" wx:key="">
<view class='th'>
<view class="cell_label centerclass">{{item.weekName}}</view>
<view class="cell_date_label centerclass">{{item.date_text}}</view>
</view>
</block>
</view>
<block wx:for="{{noonList}}" wx:key="" wx:for-index="parentIndex" wx:if='{{item.Value}}'>
<view class='cell-table_main'>
<!--上午下午晚上全天-->
<view class='td' style='background-color:white;'>
<view class="cell_label centerclass">{{item.NoonName}}</view>
</view>
<block wx:key="" wx:for="{{item.list}}" wx:for-item="trade" wx:for-index="ind">
<view class='td' wx:if='{{trade.keyue}}'>
<view class='cell-table_choose"' bindtap='clickDoctor' data-item='{{parentIndex}}' data-itemchild='{{ind}}'>{{trade.count+"/"+trade.total}}</view>
</view>
<view class='td' wx:else>
<view class='cell-table_empty"'></view>
</view>
</block>
</view>
</block>
</view>
</scroll-view>
4.wxss
/*医生排班表 */
.cell-table {
display: inline-flex;
flex-direction: column;
border: 1rpx solid #e5e5e5;
border-bottom: 0;
}
.scrollClass {
display: flex;
width: 100%;
white-space: nowrap;
margin-top: 23px;
height: 100%;
background-color: white;
}
.cell-table_header {
display: inline-flex;
}
.th {
display: flex;
flex-direction: column;
width: 100px;
height: 45px;
background: #f8f8f8;
border-right: 1rpx solid #e5e5e5;
border-bottom: 1rpx solid #e5e5e5;
justify-content: center;
align-items: center;
overflow-x: auto;
}
.th:first-child {
width: 60px;
}
.cell_label {
font-size: 13px;
color: #999;
}
.cell_date_label {
font-size: 12px;
color: #999;
}
.cell-table_main {
display: inline-flex;
flex-direction: row;
}
.right-item {
display: flex;
flex-direction: row;
}
.td {
display: flex;
flex-direction: column;
width: 100px;
height: 45px;
background: white;
justify-content: center;
align-items: center;
border: 1rpx solid #e5e5e5;
border-top: 0;
border-left: 0;
}
.td:first-child {
width: 60px;
}
.cell-table_empty {
display: flex;
justify-content: center;
align-items: center;
height: 45px;
font-size: 15px;
color: rgba(55, 134, 244, 1);
width: 100%;
word-break: normal;
}
.cell-table_choose {
display: flex;
justify-content: center;
align-items: center;
height: 45px;
font-size: 15px;
background: linear-gradient(to bottom, #5acafe, #45a1fc);
color: white;
width: 100%;
word-break: normal;
}
效果:
希望本文所述对大家微信小程序开发有所帮助。
来源:https://blog.csdn.net/weixin_40687883/article/details/84967618


猜你喜欢
- 全文索引在 MySQL 中是一个 FULLTEXT 类型索引。FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE
- 本文总结分析了selenium2.0中常用的python函数。分享给大家供大家参考,具体如下:新建实例driver = webdriver.
- python2:print语句,语句就意味着可以直接跟要打印的东西,如果后面接的是一个元组对象,直接打印python3:print函数,函数
- 介绍百度aip模块是用于实现百度云与用户接口,简单来说就是使用百度云所拥有的人工智能模块。模块使用pip install baidu-aip
- 一、默认参数python为了简化函数的调用,提供了默认参数机制:这样在调用pow函数时,就可以省略最后一个参数不写:在定义有默认参数的函数时
- 前言gif图就是动态图,它的原理和视频有点类似,也是通过很多静态图片合成的.本篇文章主要介绍,如何利用Python快速合成gif图,主要利用
- VS Code是微软开源的一款编辑器,插件系统十分的丰富。本文就介绍了如何使用VS Code搭建Go语言开发环境。VS Code配置Go语言
- 本文实例讲述了Python3实现的Mysql数据库操作封装类。分享给大家供大家参考,具体如下:#encoding:utf-8#name:mo
- sql注入:正常情况下:delete.php?id=3;$sql = 'delete from news where id =
- 今天用实验室的pycharm运行程序的时候发现出现了已安装的模块无法导入的情况,但实际上这个模块我已经在notebook中使用多次了,所以不
- java 中JDBC连接数据库代码和步骤详解JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤:
- 如果你想用Python开发Windows程序,并让其开机启动等,就必须写成windows的服务程序Windows Service
- 如果说您没用过这些东东的话,我相信看完这篇博文会对您有帮助的,,如果有任何问题不懂或者有bug没问题,欢迎随时联系我, 同时也欢迎高手多给点
- 目录WSGI基本原理1. WSGI处理过程2. WSGI示例3. WSGI web服务器和应用程序WSGI基本原理1. WSGI处理过程浏览
- 时间库—arrow使用背景日期时间处理在实际应用场景中无处不在,所以这也成了编程语言中必不可少的模块,Python 也不例外。但是,你知道在
- 你同样可以使用cache标签来缓存模板片段。 在模板的顶端附近加入{% load cache %}以通知模板存取缓存标签。模板标签{% ca
- SQL Server 2005附加数据库文件时出现了Read-Only错误,附加的时候,系统提示mdf文件为只读,可是打开文件属性,这个属性
- 1.简介: SQL Server 2005中的窗口函数帮助你迅速查看不同级别的聚合,通过它可以非常方便地累计总数、移动平均值、以及执行其它计
- 一、SQL注入简介SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,
- 爬取网址:http://www.ultramanclub.com/allultraman/使用工具:pycharm,requests进入网页