Browse Source

周计算重写

CzRger 1 year ago
parent
commit
daa5c9cfe2
2 changed files with 50 additions and 34 deletions
  1. 34 17
      src/store/modules/app.ts
  2. 16 17
      src/views/staging/zby/center/statistic.vue

+ 34 - 17
src/store/modules/app.ts

@@ -24,24 +24,41 @@ const getters = {
 		return new Date(state.timestamp).getDay() === 5
 	},
 	yearWeeks: (state) => {
+		const weeklySubmitDay = 5	// 周报提交日期,周五
 		const arr: any = []
-		// const firstDate = new Date('2023-11-29')
-		// const wholeFirstDate = Handle.getFirstDateOfWeek(firstDate, state.weekStart)
-		// let start = JSON.parse(JSON.stringify(wholeFirstDate))
-		// let num = 1
-		// while (!(new Date(start).getTime() > new Date(state.tempToday).getTime())) {
-		// 	const end = new Date(start).getTime() + Handle.oneDayTime * 6
-		// 	arr.push({
-		// 		date: [new Date(start), new Date(end)],
-		// 		str: `第${num}周`,
-		// 		selectValue: `第${num}周(${YMD(start)}~${YMD(end)})`,
-		// 		isToday: (new Date(start).getTime() <= new Date(state.tempToday).getTime()) && (new Date(end + Handle.oneDayTime).getTime() > new Date(state.tempToday).getTime()),
-		// 		week: num
-		// 	})
-		// 	start = end + Handle.oneDayTime
-		// 	num++
-		// }
-		return arr
+		const map = new Map()
+		const firstDate = new Date('2021-11-29')
+		for (let year = firstDate.getFullYear(); year <= new Date(state.timestamp).getFullYear(); year++) {
+			let num = 1
+			let firstWeeklyDate = new Date(year, 0, 1)
+			while (firstWeeklyDate.getDay() !== weeklySubmitDay) {
+				firstWeeklyDate = new Date(firstWeeklyDate.getTime() + Handle.oneDayTime)
+			}
+			let start = new Date(firstWeeklyDate.getTime() - Handle.oneDayTime * 6)
+			while (new Date(start).getTime() < new Date(year + 1, 0, 1).getTime()) {
+				const end = new Date(start).getTime() + Handle.oneDayTime * 6
+				if (end >= firstDate.getTime() &&  end <= state.timestamp) {
+					const obj = {
+						date: [new Date(start), new Date(end)],
+						yearWeekStr: `${year}年第${num}周`,
+						weekStr: `第${num}周`,
+						yearWeekSelectValue: `${year}年第${num}周(${YMD(start)}~${YMD(end)})`,
+						weekSelectValue: `第${num}周(${YMD(start)}~${YMD(end)})`,
+						isToday: (new Date(start).getTime() <= new Date(state.timestamp).getTime()) && (new Date(end + Handle.oneDayTime).getTime() > new Date(state.timestamp).getTime()),
+						year: year,
+						week: num,
+						id: `${year}_${num}`
+					}
+					arr.push(obj)
+					map.set(obj.id, obj)
+				}
+				start = new Date(end + Handle.oneDayTime)
+				num++
+			}
+		}
+		return {
+			list: arr, map: map
+		}
 	}
 }
 

+ 16 - 17
src/views/staging/zby/center/statistic.vue

@@ -24,10 +24,10 @@
             @change="handleWeek"
         >
           <el-option
-              v-for="item in weekOptionsCpt"
+              v-for="item in $store.getters['app/yearWeeks'].list"
               :key="item.str"
-              :label="item.selectValue"
-              :value="item.selectValue"
+              :label="item.yearWeekSelectValue"
+              :value="item.id"
           />
         </el-select>
         <el-date-picker
@@ -55,9 +55,9 @@
           <template v-else-if="dateType === 'week'">
             <template v-for="item in dateCalendar.week">
               <div class="page-content-item __hover"
-                   :class="{today: item.isToday, active: dateValue.selectWeek === item.selectValue}"
+                   :class="{today: item.isToday, active: dateValue.selectWeek === item.id}"
                    @click="onWeekClick(item)"
-              >{{item.str}}</div>
+              >{{item.yearWeekStr}}</div>
             </template>
           </template>
           <template v-if="dateType === 'month'">
@@ -353,8 +353,8 @@ export default defineComponent({
       let flag = false
       if (state.dateType === 'day' && state.dateCalendar.day.length > 0) {
         flag = true
-      } else if (state.dateType === 'week' && state.dateCalendar.week.length > 0 && weekOptionsCpt.value.length > 0) {
-        flag = state.dateCalendar.week[0].week > weekOptionsCpt.value[0].week
+      } else if (state.dateType === 'week' && state.dateCalendar.week.length > 0 && store.getters['app/yearWeeks'].length > 0) {
+        flag = state.dateCalendar.week[0].week > store.getters['app/yearWeeks'][0].week
       } else if (state.dateType === 'month' && state.dateCalendar.month.length > 0) {
         flag = true
       }
@@ -364,8 +364,8 @@ export default defineComponent({
       let flag = false
       if (state.dateType === 'day' && state.dateCalendar.day.length > 0) {
         flag = state.dateCalendar.day.every(v => new Date(that.$util.YMD(v.date)).getTime() < new Date(that.$util.YMD(store.state.app.timestamp)).getTime())
-      } else if (state.dateType === 'week' && state.dateCalendar.week.length > 0 && weekOptionsCpt.value.length > 0) {
-        flag = state.dateCalendar.week[state.dateCalendar.week.length - 1].week < weekOptionsCpt.value[weekOptionsCpt.value.length - 1].week
+      } else if (state.dateType === 'week' && state.dateCalendar.week.length > 0 && store.getters['app/yearWeeks'].length > 0) {
+        flag = state.dateCalendar.week[state.dateCalendar.week.length - 1].week < store.getters['app/yearWeeks'][store.getters['app/yearWeeks'].length - 1].week
       } else if (state.dateType === 'month' && state.dateCalendar.month.length > 0) {
         flag = state.dateCalendar.month.every(v => new Date(that.$util.YM(v.date)).getTime() < new Date(that.$util.YM(store.state.app.timestamp)).getTime())
       }
@@ -376,7 +376,7 @@ export default defineComponent({
       if (state.dateType === 'day') {
         str = that.$util.YMD(state.dateValue.selectDay, true)
       } else if (state.dateType === 'week') {
-        str = state.dateValue.selectWeek
+        str = store.getters['app/yearWeeks'].map.get(state.dateValue.selectWeek).yearWeekStr
       } else if (state.dateType === 'month') {
         str = that.$util.YM(state.dateValue.selectMonth, true)
       }
@@ -421,7 +421,7 @@ export default defineComponent({
       state.dateCalendar.week = []
       const arr: any = []
       for (let i = 0; i <= 6; i++) {
-        const w = weekOptionsCpt.value?.[firstWeek - 1 + i]
+        const w = store.getters['app/yearWeeks']?.list[firstWeek - 1 + i]
         if (w) {
           arr.push(w)
         }
@@ -445,18 +445,18 @@ export default defineComponent({
     const initStatic = () => {
       const today = new Date(state.tempToday)
       state.dateValue.selectDay = JSON.parse(JSON.stringify(that.$util.YMD(today)))
-      state.dateValue.selectWeek = weekOptionsCpt.value[weekOptionsCpt.value.length - 1].selectValue
+      state.dateValue.selectWeek = store.getters['app/yearWeeks'].list[store.getters['app/yearWeeks'].list.length - 1].id
+      console.log(state.dateValue.selectWeek)
       state.dateValue.selectMonth = JSON.parse(JSON.stringify(that.$util.YM(today)))
       initStaticDay(today)
-      initStaticWeek(weekOptionsCpt.value.length - 7 + weekOptionsCpt.value.length % 7 + 1)
-      console.log()
+      initStaticWeek(store.getters['app/yearWeeks'].list.length - 7 + store.getters['app/yearWeeks'].list.length % 7 + 1)
       initStaticMonth(today)
     }
     const onDayClick = (item) => {
       state.dateValue.selectDay = item.selectValue
     }
     const onWeekClick = (item) => {
-      state.dateValue.selectWeek = item.selectValue
+      state.dateValue.selectWeek = item.id
     }
     const onMonthClick = (item) => {
       state.dateValue.selectMonth = item.selectValue
@@ -468,7 +468,7 @@ export default defineComponent({
       initStaticDay(ld)
     }
     const handleWeek = (val) => {
-      const obj = weekOptionsCpt.value.filter(v => v.selectValue === val)[0]
+      const obj = store.getters['app/yearWeeks'].list.filter(v => v.selectValue === val)[0]
       initStaticWeek(obj.week - obj.week % 7 + 1)
     }
     const handleMonth = (val) => {
@@ -479,7 +479,6 @@ export default defineComponent({
     }
     onMounted(() => {
       initStatic()
-      console.log(store.getters['app/yearWeeks'])
     })
     return {
       ...toRefs(state),