SetWorking.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. <template>
  2. <div>
  3. <div class="SetWorking-all">
  4. <div class="SetWorking-btn">
  5. <el-button @click="SetWorkday('工作日')" type="primary">设置为工作日</el-button>
  6. <el-button @click="SetWorkday('休息日')" type="success">设置为休息日</el-button>
  7. <el-button @click="SetWorkday('节假日')" type="warning">设置为节假日</el-button>
  8. </div>
  9. <div class="calendar-box">
  10. <el-calendar ref="calendar" class="aaa" v-model="value">
  11. <template #dateCell="{ data }">
  12. <div :class="datearr.includes(data.day)?'is-selected':''" class="calendar-btn-box" @click="allcalendar(data)">
  13. <div class="calendar-day">
  14. {{ data.day.split("-").slice(2).join("-") }}
  15. </div>
  16. <div v-if="datayz.includes(data.day)" class="schedule-box">
  17. 工作日
  18. </div>
  19. <div v-if="datayzxx.includes(data.day)" class="schedule-boxxx">
  20. 休息日
  21. </div>
  22. <div v-if="datayzjj.includes(data.day)" class="schedule-boxjj">
  23. 节假日
  24. </div>
  25. </div>
  26. </template>
  27. </el-calendar>
  28. </div>
  29. </div>
  30. </div>
  31. </template>
  32. <script>
  33. export default {
  34. data() {
  35. return {
  36. userId:'',
  37. datayz:[],
  38. datayzxx:[],
  39. datayzjj:[],
  40. datayzwsz:[],
  41. value:new Date(),
  42. datearr:[],
  43. parametersarr:[],
  44. yearMonth:"",
  45. startDate:"",
  46. endDate:"",
  47. }
  48. },
  49. methods:{
  50. allcalendar(data) {
  51. console.log(this.parametersarr)
  52. if(this.datearr.indexOf(data.day)>-1){
  53. this.datearr.splice(this.datearr.indexOf(data.day),1);
  54. }else{
  55. this.datearr.push(data.day)
  56. }
  57. console.log(this.datearr)
  58. // const loading = this.$loading({
  59. // lock: true, //加上这个 页面点击日历的时候会莫名其妙抖动一下 因为我界面上有滚动条,所以我注释了
  60. // text: "Loading",
  61. // spinner: "el-icon-loading",
  62. // background: "rgba(0, 0, 0, 0.7)",
  63. // });
  64. // setTimeout(() => {
  65. // console.log(data); //取到你需要的日期data.day
  66. // //需要用到这日期做啥事,比如做为调接口的参数
  67. // loading.close();
  68. // }, 500);
  69. },
  70. //处理日期
  71. formattedDate(val){
  72. const date = new Date(val);
  73. const year = date.getFullYear();
  74. const month = (date.getMonth() + 1).toString().padStart(2, '0');
  75. const day = date.getDate().toString().padStart(2, '0');
  76. return year+'-'+month+'-'+day
  77. },
  78. //处理月份
  79. formattedMonth(val){
  80. const date = new Date(val);
  81. const year = date.getFullYear();
  82. const month = (date.getMonth() + 1).toString().padStart(2, '0');
  83. return year+'-'+month
  84. },
  85. //获取工作日
  86. GetWageSheetMonthWorkday(startDt,endDt){
  87. var dataarr=[];
  88. var xxrdataarr=[];
  89. var jjrdataarr=[];
  90. var wszdataarr=[];
  91. var that = this
  92. this.$axios({
  93. method: 'post',
  94. url: '/api/PersonnelModule/GetWageSheetMonthWorkdays?startDt='+startDt+'&endDt='+endDt,
  95. headers: {
  96. Authorization: 'Bearer ' + this.token
  97. }
  98. }).then(function (res) {
  99. console.log(res)
  100. if(res.data.code==200){
  101. console.log(res.data.data)
  102. that.parametersarr=res.data.data;
  103. for(let a=0;a<res.data.data.length;a++){
  104. if(res.data.data[a].isWorkDay){
  105. dataarr.push(res.data.data[a].dt)
  106. }
  107. if(res.data.data[a].holiName=='休息日'){
  108. xxrdataarr.push(res.data.data[a].dt)
  109. }
  110. if(res.data.data[a].holiName=='节假日'){
  111. jjrdataarr.push(res.data.data[a].dt)
  112. }
  113. if(res.data.data[a].holiName==''){
  114. wszdataarr.push(res.data.data[a].dt)
  115. }
  116. }
  117. that.datayz=dataarr
  118. that.datayzxx=xxrdataarr
  119. that.datayzjj=jjrdataarr
  120. that.datayzwsz=wszdataarr
  121. }else{
  122. }
  123. })
  124. },
  125. //获取月初月末
  126. getMonthEnd(val){
  127. let myDate = new Date(val);
  128. let month = myDate.getMonth() + 1;
  129. month = month < 10 ? "0" + month : month; //格式化月份,补0
  130. let statDateStart = new Date(myDate.getFullYear().toString() +'-'+ month +'-'+ "01"); //月初
  131. let dayEnd = new Date(myDate.getFullYear(), month, 0).getDate(); //获取当月一共有多少天
  132. let statDateEnd = new Date(myDate.getFullYear().toString() +'-'+ month +'-'+ dayEnd); //月末
  133. // return ""+this.formattedDate(statDateStart),""+this.formattedDate(statDateEnd)
  134. this.GetWageSheetMonthWorkday(this.formattedDate(statDateStart),this.formattedDate(statDateEnd))
  135. },
  136. //处理月初月末
  137. //设置日类型
  138. SetWorkday(text){
  139. let datearrnew=[]
  140. let myDate = new Date(this.value);
  141. let month = myDate.getMonth() + 1;
  142. month = month < 10 ? "0" + month : month; //格式化月份,补0
  143. let statDateStart = new Date(myDate.getFullYear().toString() +'-'+ month +'-'+ "01"); //月初
  144. let dayEnd = new Date(myDate.getFullYear(), month, 0).getDate(); //获取当月一共有多少天
  145. let statDateEnd = new Date(myDate.getFullYear().toString() +'-'+ month +'-'+ dayEnd); //月末
  146. console.log(this.formattedDate(statDateStart),this.formattedDate(statDateEnd))
  147. this.yearMonth=this.formattedMonth(this.value);
  148. this.startDate=this.formattedDate(statDateStart);
  149. this.endDate=this.formattedDate(statDateEnd);
  150. if(text=='工作日'){
  151. for(let j=0;j<this.datearr.length;j++){
  152. datearrnew.push({dt:this.datearr[j],isWorkDay:true,isHoliDay:false,holiName:text,id:0})
  153. }
  154. for(let m=0;m<this.parametersarr.length;m++){
  155. for(let x=0;x<datearrnew.length;x++){
  156. if(this.parametersarr[m].dt==datearrnew[x].dt){
  157. datearrnew[x].id=this.parametersarr[m].id
  158. }
  159. }
  160. }
  161. console.log(this.value)
  162. }
  163. if(text=='休息日'){
  164. for(let j=0;j<this.datearr.length;j++){
  165. datearrnew.push({dt:this.datearr[j],isWorkDay:false,isHoliDay:true,holiName:text})
  166. }
  167. for(let m=0;m<this.parametersarr.length;m++){
  168. for(let x=0;x<datearrnew.length;x++){
  169. if(this.parametersarr[m].dt==datearrnew[x].dt){
  170. datearrnew[x].id=this.parametersarr[m].id
  171. }
  172. }
  173. }
  174. }
  175. if(text=='节假日'){
  176. for(let j=0;j<this.datearr.length;j++){
  177. datearrnew.push({dt:this.datearr[j],isWorkDay:false,isHoliDay:true,holiName:text})
  178. }
  179. for(let m=0;m<this.parametersarr.length;m++){
  180. for(let x=0;x<datearrnew.length;x++){
  181. if(this.parametersarr[m].dt==datearrnew[x].dt){
  182. datearrnew[x].id=this.parametersarr[m].id
  183. }
  184. }
  185. }
  186. }
  187. // console.log(datearrnew,this.userId,this.yearMonth,this.startDate,this.endDate,);
  188. this.AddOrEdit(datearrnew);
  189. },
  190. //设置日期API
  191. AddOrEdit(arr){
  192. var url = "/api/PersonnelModule/GetWageSheetMonthWorkdaysAddOrEdit"
  193. var that = this
  194. var data={
  195. userId:this.userId,
  196. yearMonth:this.yearMonth,
  197. startDate:this.startDate,
  198. endDate:this.endDate,
  199. calendarInfos:arr,
  200. }
  201. console.log(JSON.stringify(data))
  202. this.$axios({
  203. method: 'post',
  204. url: url,
  205. headers: {
  206. Authorization: 'Bearer ' + this.token
  207. },
  208. data:{
  209. userId:this.userId,
  210. yearMonth:this.yearMonth,
  211. startDate:this.startDate,
  212. endDate:this.endDate,
  213. calendarInfos:arr,
  214. }
  215. }).then(function (res) {
  216. console.log(res)
  217. if(res.data.code==200){
  218. that.getMonthEnd(that.value)
  219. that.$message({
  220. message:res.data.msg,
  221. type: 'success'
  222. });
  223. }else{
  224. that.$message({
  225. message: res.data.msg,
  226. type: 'warning'
  227. });
  228. }
  229. }).catch(()=>{})
  230. }
  231. },
  232. watch:{
  233. value:{//监听月份变化
  234. handler(newValue,oldValue){
  235. if(this.formattedMonth(newValue)!=this.formattedMonth(oldValue)){
  236. this.datearr=[]
  237. this.getMonthEnd(newValue)
  238. }
  239. }
  240. }
  241. },
  242. mounted(){
  243. this.userId=JSON.parse(localStorage.getItem('userinif')).userInfo.userId;
  244. console.log(this.formattedMonth(this.value))
  245. console.log(this.getMonthEnd(this.formattedMonth(this.value)))
  246. }
  247. }
  248. </script>
  249. <style>
  250. .SetWorking-all{
  251. background-color: #fff;
  252. padding: 10px;
  253. box-shadow: 0 0 5px #0005;
  254. border-radius: 10px;
  255. height: 100%;
  256. min-height: 830px;
  257. }
  258. .is-selected {
  259. background: #d1e8ff;
  260. }
  261. .calendar-btn-box{
  262. text-align: center;
  263. height: 100%;
  264. }
  265. .calendar-box .el-calendar-day{
  266. padding: 0;
  267. }
  268. .calendar-day{
  269. font-size: 28px;
  270. font-weight: 600;
  271. line-height: 50px;
  272. }
  273. .calendar-box .schedule-box{
  274. font-size: 17px;
  275. font-weight: 600;
  276. text-align: center;
  277. color: #409EFF;
  278. width: 100%;
  279. }
  280. .schedule-boxs{
  281. font-size: 17px;
  282. font-weight: 600;
  283. color: #a8a4a4;
  284. }
  285. .schedule-boxxx{
  286. font-size: 17px;
  287. font-weight: 600;
  288. color: #85ce61;
  289. }
  290. .schedule-boxjj{
  291. font-size: 17px;
  292. font-weight: 600;
  293. color: #ebb563;
  294. }
  295. ::v-deep .el-calendar-table:not(.is-range) td.prev,
  296. ::v-deep .el-calendar-table:not(.is-range) td.next {
  297. cursor: not-allowed;
  298. pointer-events: none;
  299. }
  300. .prev>.el-calendar-day>.calendar-btn-box{
  301. display: none;
  302. }
  303. .next>.el-calendar-day>.calendar-btn-box{
  304. display: none;
  305. }
  306. </style>