old_Scheduling.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464
  1. <template>
  2. <view style="width: 100%;height: 100%;">
  3. <!-- 历史周选择 -->
  4. <u-select v-model="oldshow" :list="oldlist" @confirm="choiceNew"></u-select>
  5. <!-- 历史 -->
  6. <view>
  7. <view style="padding: 30rpx 35rpx;" class="flex justify-between">
  8. <view style="color: #666666;" @click="oldshow = true">
  9. <text style="margin-right: 20rpx;">选择排班周数</text>
  10. <u-icon name="arrow-down" color="#666666" size="28" v-if="!show"></u-icon>
  11. <u-icon name="arrow-up" color="#666666" size="28" v-else></u-icon>
  12. </view>
  13. </view>
  14. <view class="flex" style="background-color: #FFFFFF;">
  15. <!-- 时间 -->
  16. <view class="title" style="width: 20%;">时间</view>
  17. <u-line color="#cecece" direction="col" />
  18. <!-- 上午 -->
  19. <view class="title" style="width: 26%;">上午</view>
  20. <u-line color="#cecece" direction="col" />
  21. <!-- 下午 -->
  22. <view class="title" style="width: 26%;">下午</view>
  23. <u-line color="#cecece" direction="col" />
  24. <!-- 晚上 -->
  25. <view class="title" style="width: 26%;">晚上</view>
  26. </view>
  27. <!-- 表格一条内容 循环七遍-->
  28. <view v-for="(item,index) in oldWeek" :key='index'>
  29. <u-line color="#cecece" />
  30. <!-- 星期一 -->
  31. <view class="flex" style="background-color: #FFFFFF;">
  32. <view class="content" style="width: 20%;font-weight: bold;">
  33. <view>
  34. <view style="text-align: center;">{{item.week}}</view>
  35. <view style="text-align: center;">{{item.schedule_date}}</view>
  36. </view>
  37. </view>
  38. <u-line color="#cecece" direction="col" />
  39. <!-- 上午 -->
  40. <view class="content" style="width: 26%;">
  41. <view style="width: 80%;text-align: center;word-break:break-all">{{item.type.zao==false?'-':item.type.zao}}</view>
  42. </view>
  43. <u-line color="#cecece" direction="col" />
  44. <!-- 下午 -->
  45. <view class="content" style="width: 26%;">
  46. <view style="width: 80%;text-align: center;word-break:break-all">{{item.type.xia==false?'-':item.type.xia}}</view>
  47. </view>
  48. <u-line color="#cecece" direction="col" />
  49. <!-- 晚上 -->
  50. <view class="content" style="width: 26%;">
  51. <view style="width: 80%;text-align: center;word-break:break-all">{{item.type.wan==false?'-':item.type.wan}}</view>
  52. </view>
  53. </view>
  54. </view>
  55. </view>
  56. <view style="height: 200rpx;"></view>
  57. <!-- 保存 -->
  58. <view class="bottomButton" @click="paiban" v-if="!old">
  59. 排班设置
  60. </view>
  61. </view>
  62. </template>
  63. <script>
  64. export default {
  65. data() {
  66. return {
  67. //历史的排班选择
  68. oldshow: false,
  69. oldlist: [],
  70. // title: '周一',
  71. // value: '10-26',
  72. // hospital: [{
  73. // name: '早上',
  74. // checked: true,
  75. // disabled:true
  76. // }, {
  77. // name: '下午',
  78. // checked: false
  79. // }, {
  80. // name: '晚上',
  81. // checked: false
  82. // }],
  83. hospitalWeek: [],
  84. //历史记录的数组
  85. oldWeek: [
  86. ],
  87. }
  88. },
  89. methods: {
  90. paiban() {
  91. uni.navigateTo({
  92. url: 'Scheduling'
  93. })
  94. },
  95. cliold: async function(e) {
  96. let times = e[0].label;
  97. times = times.split(" 至 ");
  98. let startime = times[0];
  99. let endtime = times[1];
  100. let weekArr = this.getDateStr(startime, endtime, 0);
  101. console.log(res);
  102. if (res.status == 0) {
  103. /* if (typeof res.data.list[0] != undefined && typeof res.data[0] != 'undefined') {
  104. let data = res.data.list;
  105. let arr = [];
  106. for (let i = 0; i < this.oldWeek.length; i++) {
  107. for (let p = 0; p < data.length; p++) {
  108. if (this.oldWeek[i].value == data[p].schedule_date) {
  109. this.oldWeek[i].morning = data[p].type.zao ? data[p].type.zao : '暂无';
  110. this.oldWeek[i].afternoon = data[p].type.xia ? data[p].type.xia : '暂无';
  111. this.oldWeek[i].night = data[p].type.wan ? data[p].type.wan : '暂无';
  112. }
  113. }
  114. }
  115. } else {
  116. for (let i = 0; i < this.oldWeek.length; i++) {
  117. this.oldWeek[i].morning = '暂无';
  118. this.oldWeek[i].afternoon = '暂无';
  119. this.oldWeek[i].night = '暂无';
  120. }
  121. } */
  122. }
  123. },
  124. getTimeList:async function(){
  125. let res = await this.$request.post("doctor/getLinsList");
  126. if(res.status==0){
  127. if(res.data.service!=0){
  128. let times = res.data.service.created_at.substring(0,10);
  129. times = times.split('-');
  130. this.getweek(times[0],times[1],times[2]);
  131. }
  132. if(res.data.list.length!=0){
  133. let leng = this.oldlist.length;
  134. let lists = res.data.list;
  135. for(let i=0;i<lists.length;i++){
  136. console.log('开始时间L',(lists[i].start_time.schedule_date).replace(/-/g,"/"))
  137. this.oldlist.push({
  138. label:(lists[i].start_time.schedule_date).replace(/-/g,"/") + "-" + (lists[i].end_time.schedule_date).replace(/-/g,"/"),
  139. value: leng+1
  140. })
  141. }
  142. }
  143. }
  144. console.log(res);
  145. },
  146. getTemplate: async function(startTime,endTime) {
  147. let that = this;
  148. // let startTime = '2020-' + that.hospitalWeek[0].value;
  149. // let startTime = '2020-' + '11-30';
  150. // let endTime = '2020-' + that.hospitalWeek[6].value;
  151. // let endTime = '2020-' + '12-6';
  152. let res = await that.$request.post("doctor/getLinsDetail", {
  153. 'start_date': startTime,
  154. 'end_date': endTime
  155. });
  156. console.log("res", res)
  157. console.log('oldeList',this.oldlist)
  158. // that.oldWeek = res.data.list
  159. if (res.status == 0) {
  160. if (typeof res.data.list[0] != undefined && typeof res.data.list[0] != 'undefined') {
  161. let data = res.data.list;
  162. let arr = [];
  163. for (let i = 0; i < this.oldWeek.length; i++) {
  164. for (let p = 0; p < data.length; p++) {
  165. if (this.oldWeek[i].schedule_date == data[p].schedule_date) {
  166. this.oldWeek[i].type.zao = data[p].type.zao ? data[p].type.zao : '-';
  167. this.oldWeek[i].type.xia = data[p].type.xia ? data[p].type.xia : '-';
  168. this.oldWeek[i].type.wan = data[p].type.wan ? data[p].type.wan : '-';
  169. }
  170. }
  171. }
  172. } else {
  173. for (let i = 0; i < this.oldWeek.length; i++) {
  174. this.oldWeek[i].type.zao = '-';
  175. this.oldWeek[i].type.xia = '-';
  176. this.oldWeek[i].type.wan = '-';
  177. }
  178. }
  179. }
  180. },
  181. /**
  182. * 拿到开始日到今天的每周周一和周天数据
  183. * 传参:year开始年(num),month开始月(num),day开始日(num)
  184. *
  185. *
  186. * */
  187. getweek(startYear,startMonth,startDay){
  188. /**
  189. * startYear开始年份 例2020
  190. * startMonth开始月份 例12
  191. * startDay开始日 例5
  192. * d 开始的时间对象
  193. * monday 开始时间的星期一
  194. * sunday 开始时间的星期天
  195. * nowday 今天的时间
  196. * nowMonday 今天的周一
  197. * weeknum 开始到今天有几周
  198. * */
  199. // let startYear = 2020;//开始年
  200. // let startMonth = 11;//开始月
  201. // let startDay = 12;//开始的日
  202. let startweek = 0; //开始时间是星期几
  203. let oneDayTime = 24 * 60 * 60 * 1000;//固定数据 一天的时长
  204. var d = new Date()
  205. //把时间调到对应的日期
  206. d.setFullYear(startYear, startMonth - 1, startDay);
  207. console.log('今天', d.toLocaleDateString())
  208. //本周第几天 因系统会把周日作为第0天
  209. startweek = d.getDay() == 0 ? 7 : d.getDay();
  210. console.log('这天星期', startweek)
  211. //拿到当天的周一和周日
  212. var monday = new Date(d.getTime() - (startweek - 1) * oneDayTime)
  213. var sunday = new Date(monday.getTime() + 6 * oneDayTime)
  214. console.log('这天星期一是', monday.toLocaleDateString())
  215. console.log('这天星期日是', sunday.toLocaleDateString())
  216. //拿到今天距离那天多少周
  217. var nowday = new Date() //今天时间
  218. var nowMonday = new Date(nowday.getTime() - ((nowday.getDay() == 0 ? 7 : nowday.getDay()) - 1) * oneDayTime) //这周星期一时间
  219. console.log('今天的周一是', nowMonday.toLocaleDateString())
  220. var weeknum = Math.ceil(this.getCountOfWeekX(d,nowMonday)+1); //计算从 ****----****有多少个周
  221. console.log("有几个周", weeknum)
  222. //开始循环,用开始的星期一到星期天,
  223. for(let i = 0; i < weeknum ; i++){
  224. let mon = new Date(monday.getTime() + oneDayTime* (i*7))
  225. // mon.setTime()
  226. let sun = new Date(mon.getTime() + oneDayTime* 6)
  227. this.oldlist.push({
  228. label: mon.getFullYear()+'/'+(mon.getMonth()+1)+'/'+mon.getDate() + "-" + sun.getFullYear()+'/'+(sun.getMonth()+1)+'/'+sun.getDate(),
  229. value: i
  230. })
  231. mon.setTime(mon.getTime() + oneDayTime)
  232. }
  233. console.log("oldlist",this.oldlist)
  234. },
  235. getCountOfWeekX(startDate, endDate) {
  236. var start = startDate.getTime();
  237. var end = endDate.getTime()
  238. let w=(endDate - startDate)/(7*24*60*60*1000);
  239. return w;
  240. },
  241. Appendzero(obj) {
  242. if (obj < 10) return "0" + "" + obj;
  243. else return obj;
  244. },
  245. getTime() {
  246. var week = [{
  247. value: 1,
  248. label: ''
  249. }, {
  250. value: 2,
  251. label: ''
  252. }, {
  253. value: 3,
  254. label: ''
  255. }, {
  256. value: 4,
  257. label: ''
  258. }]
  259. //直接获取这周五的时间,然后遍历 给选择器
  260. // var aData = new Date();
  261. // aData.setTime(aData.getTime() + 24 * 60 * 60 * 1000 * (7 - aData.getDay()))
  262. // for (let i = 0; i < 4; i++) {
  263. // aData.setTime(aData.getTime() + 24 * 60 * 60 * 1000 * 1)
  264. // var week1 = aData.getFullYear() + "." + (aData.getMonth() + 1) + "." + this.Appendzero(aData.getDate());
  265. // console.log('第', i + 1, '个周一的时间', week1) //周一的时间
  266. // //周日
  267. // aData.setTime(aData.getTime() + 24 * 60 * 60 * 1000 * (aData.getDay() + 5))
  268. // var week2 = aData.getFullYear() + "." + (aData.getMonth() + 1) + "." + this.Appendzero(aData.getDate());
  269. // console.log('第', i + 1, '个周日的时间', week2) //周日的时间
  270. // this.oldlist[i].label = week1 + ' - ' + week2 //给选择器数组
  271. // }
  272. //直接获取下周一时间,给表格
  273. var bData = new Date();
  274. bData.setTime(bData.getTime() + 24 * 60 * 60 * 1000 * (1 - bData.getDay()))
  275. for (let i = 0; i < 7; i++) {
  276. var week = (bData.getMonth() + 1) + "-" + this.Appendzero(bData.getDate());
  277. bData.setTime(bData.getTime() + 24 * 60 * 60 * 1000 * 1);
  278. this.oldWeek.push({
  279. type: {
  280. "zao": false,
  281. "xia": false,
  282. "wan": false,
  283. },
  284. week: this.getWeek(bData.getFullYear()+'-'+week),
  285. schedule_date: week,
  286. })
  287. }
  288. this.getTemplate(bData.getFullYear()+'-'+this.oldWeek[0].schedule_date,bData.getFullYear()+'-'+this.oldWeek[6].schedule_date)
  289. },
  290. getWeek(dateString) {
  291. var dateArray = dateString.split("-");
  292. let date = new Date(dateArray[0], parseInt(dateArray[1] - 1), dateArray[2]);
  293. return "周" + "日一二三四五六".charAt(date.getDay());
  294. },
  295. //点击新增周
  296. choiceNew(e) {
  297. this.hospitalWeek.map(val => {
  298. val.hospital[0].disabled = false;
  299. val.hospital[1].disabled = false;
  300. val.hospital[2].disabled = false;
  301. })
  302. console.log(e)
  303. this.time = e[0].label
  304. let times = e[0].label;
  305. times = times.split("-");
  306. let startime = times[0].replace(/\//g, '-');
  307. let endtime = times[1].replace(/\//g, '-');
  308. this.getDateStr(startime,endtime,0)
  309. // var bData = new Date();
  310. // bData.setTime(bData.getTime() + 24 * 60 * 60 * 1000 * (8 - bData.getDay() + (7 * e[0].value)))
  311. // for (let i = 0; i < 7; i++) {
  312. // var week = (bData.getMonth() + 1) + "-" + this.Appendzero(bData.getDate());
  313. // bData.setTime(bData.getTime() + 24 * 60 * 60 * 1000 * 1);
  314. // this.oldWeek[i].schedule_date = week
  315. // }
  316. this.getTemplate(startime,endtime)
  317. },
  318. getDateStr(startDate, endDate, dayLength) {
  319. var str = startDate;
  320. for (var i = 0;; i++) {
  321. var getDate = this.getTargetDate(startDate, dayLength);
  322. startDate = getDate;
  323. if (getDate <= endDate) {
  324. str += ',' + getDate;
  325. } else {
  326. break;
  327. }
  328. }
  329. let dates = str.split(',');
  330. let arr = [];
  331. let obj;
  332. var bData = new Date();
  333. for (let i = 0; i < 7; i++) {
  334. obj = {
  335. week: this.getweeks(dates[i]),
  336. schedule_date: dates[i].substring(5),
  337. type: {
  338. "zao": '-',
  339. "xia": '-',
  340. "wan": '-',
  341. },
  342. }
  343. arr.push(obj)
  344. }
  345. this.oldWeek = arr
  346. },
  347. // startDate: 开始时间;dayLength:每隔几天,0-代表获取每天,1-代表日期间隔一天
  348. getTargetDate(date, dayLength) {
  349. dayLength = dayLength + 1;
  350. var tempDate = new Date(date);
  351. tempDate.setDate(tempDate.getDate() + dayLength);
  352. var year = tempDate.getFullYear();
  353. var month = tempDate.getMonth() + 1 < 10 ? "0" + (tempDate.getMonth() + 1) : tempDate.getMonth() + 1;
  354. var day = tempDate.getDate() < 10 ? "0" + tempDate.getDate() : tempDate.getDate();
  355. return year + "-" + month + "-" + day;
  356. },
  357. getweeks(date) {
  358. var weekDay = ["星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
  359. var dateStr = date;
  360. var myDate = new Date(Date.parse(dateStr.replace(/-/g, "/")));
  361. return weekDay[myDate.getDay()]
  362. },
  363. },
  364. onLoad() {
  365. // let res = this.getCurrentWeek();
  366. // console.log(res);
  367. // let startTime = '2020-' + '11-30';
  368. // let endTime = '2020-' + that.hospitalWeek[6].value;
  369. // let endTime = '2020-' + '12-07';
  370. // this.getweek(2020,10,15);
  371. this.getTime();
  372. this.getTimeList();
  373. // this.getTemplate(startTime,endTime)
  374. },
  375. }
  376. </script>
  377. <style>
  378. page {
  379. background-color: #f0f0f0
  380. }
  381. .title {
  382. display: flex;
  383. justify-content: center;
  384. align-items: center;
  385. padding: 30rpx 0;
  386. font-weight: bold;
  387. }
  388. .content {
  389. display: flex;
  390. justify-content: center;
  391. align-items: center;
  392. padding: 30rpx 0;
  393. }
  394. /* 底部按钮 */
  395. .bottomButton {
  396. position: fixed;
  397. bottom: 0;
  398. left: 0;
  399. width: 100%;
  400. height: 100rpx;
  401. display: flex;
  402. align-items: center;
  403. justify-content: center;
  404. background-color: #0000ff;
  405. color: #FFFFFF;
  406. z-index: 1;
  407. }
  408. </style>