Showing
3 changed files
with
299 additions
and
2 deletions
| ... | @@ -47,8 +47,8 @@ const handleGetPatterns = (keyArr) => { | ... | @@ -47,8 +47,8 @@ const handleGetPatterns = (keyArr) => { |
| 47 | }; | 47 | }; |
| 48 | 48 | ||
| 49 | const config = { | 49 | const config = { |
| 50 | - projectName: 'tswj-weapp', | 50 | + projectName: 'swx-weapp', |
| 51 | - date: '2022-5-27', | 51 | + date: '2022-10-01', |
| 52 | designWidth: 750, | 52 | designWidth: 750, |
| 53 | deviceRatio: { | 53 | deviceRatio: { |
| 54 | 640: 2.34 / 2, | 54 | 640: 2.34 / 2, |
| ... | @@ -58,6 +58,7 @@ const config = { | ... | @@ -58,6 +58,7 @@ const config = { |
| 58 | alias: { | 58 | alias: { |
| 59 | "@/utils": path.resolve(__dirname, "../src/utils"), | 59 | "@/utils": path.resolve(__dirname, "../src/utils"), |
| 60 | "@/vant": path.resolve(__dirname, "../src/components/vant-weapp"), | 60 | "@/vant": path.resolve(__dirname, "../src/components/vant-weapp"), |
| 61 | + "@/components": path.resolve(__dirname, "../src/components"), | ||
| 61 | }, | 62 | }, |
| 62 | sourceRoot: 'src', | 63 | sourceRoot: 'src', |
| 63 | outputRoot: 'dist', | 64 | outputRoot: 'dist', | ... | ... |
| 1 | +/* | ||
| 2 | + * @Date: 2022-09-19 16:54:23 | ||
| 3 | + * @LastEditors: hookehuyr hookehuyr@gmail.com | ||
| 4 | + * @LastEditTime: 2022-09-19 16:54:59 | ||
| 5 | + * @FilePath: /swx/src/components/time-picker-data/dateTimePicker.js | ||
| 6 | + * @Description: 文件描述 | ||
| 7 | + */ | ||
| 8 | +var getDaysInOneMonth = function (year, month) { | ||
| 9 | + let _month = parseInt(month, 10); | ||
| 10 | + let d = new Date(year, _month, 0); | ||
| 11 | + return d.getDate(); | ||
| 12 | +} | ||
| 13 | +var dateDate = function (date) { | ||
| 14 | + let year = date.getFullYear(); | ||
| 15 | + let month = date.getMonth() + 1; | ||
| 16 | + let day = date.getDate(); | ||
| 17 | + let hours = date.getHours(); | ||
| 18 | + let minutes = date.getMinutes(); | ||
| 19 | + return { | ||
| 20 | + year, month, day, hours, minutes | ||
| 21 | + } | ||
| 22 | +} | ||
| 23 | +var dateTimePicker = function (startyear, endyear) { | ||
| 24 | + // 获取date time 年份,月份,天数,小时,分钟推后30分 | ||
| 25 | + const years = []; | ||
| 26 | + for (let i = startyear; i <= endyear; i++) { | ||
| 27 | + years.push({ | ||
| 28 | + name: i + '年', | ||
| 29 | + id: i | ||
| 30 | + }); | ||
| 31 | + } | ||
| 32 | + return function (_year, _month, _day, _hour, _minute) { | ||
| 33 | + const months = []; | ||
| 34 | + const days = []; | ||
| 35 | + const hours = []; | ||
| 36 | + const minutes = []; | ||
| 37 | + _year = parseInt(_year); | ||
| 38 | + _month = parseInt(_month); | ||
| 39 | + _day = parseInt(_day); | ||
| 40 | + _hour = parseInt(_hour); | ||
| 41 | + _minute = parseInt(_minute); | ||
| 42 | + //获取月份 | ||
| 43 | + for (let i = _month; i <= 12; i++) { | ||
| 44 | + if (i < 10) { | ||
| 45 | + i = "0" + i; | ||
| 46 | + } | ||
| 47 | + months.push({ | ||
| 48 | + name: i + '月', | ||
| 49 | + id: i | ||
| 50 | + }); | ||
| 51 | + } | ||
| 52 | + //获取日期 | ||
| 53 | + for (let i = _day; i <= getDaysInOneMonth(_year, _month); i++) { | ||
| 54 | + if (i < 10) { | ||
| 55 | + i = "0" + i; | ||
| 56 | + } | ||
| 57 | + days.push({ | ||
| 58 | + name: i + '日', | ||
| 59 | + id: i | ||
| 60 | + }); | ||
| 61 | + } | ||
| 62 | + //获取小时 | ||
| 63 | + for (let i = _hour; i < 24; i++) { | ||
| 64 | + if (i < 10) { | ||
| 65 | + i = "0" + i; | ||
| 66 | + } | ||
| 67 | + hours.push({ | ||
| 68 | + name: i + '时', | ||
| 69 | + id: i | ||
| 70 | + }); | ||
| 71 | + } | ||
| 72 | + //获取分钟 | ||
| 73 | + for (let i = _minute; i < 60; i++) { | ||
| 74 | + if (i < 10) { | ||
| 75 | + i = "0" + i; | ||
| 76 | + } | ||
| 77 | + minutes.push({ | ||
| 78 | + name: i + '分', | ||
| 79 | + id: i | ||
| 80 | + }); | ||
| 81 | + } | ||
| 82 | + return [years, months, days, hours, minutes]; | ||
| 83 | + } | ||
| 84 | +} | ||
| 85 | +export { | ||
| 86 | + dateTimePicker, | ||
| 87 | + getDaysInOneMonth, | ||
| 88 | + dateDate | ||
| 89 | +} |
src/components/time-picker-data/picker.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <picker mode="multiSelector" :range-key="'name'" :value="timeIndex" :range="activityArray" :disabled="disabled" | ||
| 3 | + @change="bindMultiPickerChange" @columnChange="bindMultiPickerColumnChange"> | ||
| 4 | + <slot /> | ||
| 5 | + </picker> | ||
| 6 | +</template> | ||
| 7 | +<script> | ||
| 8 | +import { dateTimePicker, dateDate } from "./dateTimePicker.js"; | ||
| 9 | +export default { | ||
| 10 | + props: { | ||
| 11 | + startTime: { | ||
| 12 | + type: [Object, Date], | ||
| 13 | + default: new Date(), | ||
| 14 | + }, | ||
| 15 | + endTime: { | ||
| 16 | + type: [Object, Date], | ||
| 17 | + default: new Date(), | ||
| 18 | + }, | ||
| 19 | + defaultTime: { | ||
| 20 | + type: [Object, Date], | ||
| 21 | + default: new Date(), | ||
| 22 | + }, | ||
| 23 | + disabled: { | ||
| 24 | + type: Boolean, | ||
| 25 | + default: false, | ||
| 26 | + }, | ||
| 27 | + }, | ||
| 28 | + data() { | ||
| 29 | + return { | ||
| 30 | + timeIndex: [0, 0, 0, 0, 0], | ||
| 31 | + activityArray: [], | ||
| 32 | + year: 0, | ||
| 33 | + month: 1, | ||
| 34 | + day: 1, | ||
| 35 | + hour: 0, | ||
| 36 | + minute: 0, | ||
| 37 | + datePicker: "", | ||
| 38 | + }; | ||
| 39 | + }, | ||
| 40 | + computed: { | ||
| 41 | + timeDate() { | ||
| 42 | + const { startTime, endTime } = this; | ||
| 43 | + return { startTime, endTime }; | ||
| 44 | + }, | ||
| 45 | + }, | ||
| 46 | + watch: { | ||
| 47 | + timeDate() { | ||
| 48 | + this.initData(); | ||
| 49 | + }, | ||
| 50 | + }, | ||
| 51 | + created() { | ||
| 52 | + this.initData(); | ||
| 53 | + }, | ||
| 54 | + methods: { | ||
| 55 | + initData() { | ||
| 56 | + let startTime = this.startTime; | ||
| 57 | + let endTime = this.endTime; | ||
| 58 | + this.datePicker = dateTimePicker( | ||
| 59 | + startTime.getFullYear(), | ||
| 60 | + endTime.getFullYear() | ||
| 61 | + ); | ||
| 62 | + this.setDateData(this.startTime); | ||
| 63 | + // 初始时间 | ||
| 64 | + this.initTime(); | ||
| 65 | + // 初始索引 | ||
| 66 | + }, | ||
| 67 | + initTime() { | ||
| 68 | + this.year = this.activityArray[0][0].id; | ||
| 69 | + this.month = this.activityArray[1][0].id; | ||
| 70 | + this.day = this.activityArray[2][0].id; | ||
| 71 | + this.hour = this.activityArray[3][0].id; | ||
| 72 | + this.minute = this.activityArray[4][0].id; | ||
| 73 | + }, | ||
| 74 | + setDateData(_date) { | ||
| 75 | + let _data = dateDate(_date); | ||
| 76 | + this.activityArray = this.datePicker( | ||
| 77 | + _data.year, | ||
| 78 | + _data.month, | ||
| 79 | + _data.day, | ||
| 80 | + _data.hours, | ||
| 81 | + _data.minutes | ||
| 82 | + ); | ||
| 83 | + // console.log(this.activityArray); | ||
| 84 | + }, | ||
| 85 | + bindMultiPickerChange(e) { | ||
| 86 | + console.log("picker发送选择改变,携带值为", e.detail.value); | ||
| 87 | + let activityArray = JSON.parse(JSON.stringify(this.activityArray)), | ||
| 88 | + { value } = e.detail, | ||
| 89 | + _result = []; | ||
| 90 | + for (let i = 0; i < value.length; i++) { | ||
| 91 | + _result[i] = activityArray[i][value[i]].id; | ||
| 92 | + } | ||
| 93 | + this.$emit("result", _result); | ||
| 94 | + }, | ||
| 95 | + bindMultiPickerColumnChange(e) { | ||
| 96 | + console.log("修改的列为", e.detail.column, ",值为", e.detail.value); | ||
| 97 | + let _data = JSON.parse(JSON.stringify(this.activityArray)), | ||
| 98 | + timeIndex = JSON.parse(JSON.stringify(this.timeIndex)), | ||
| 99 | + { column, value } = e.detail, | ||
| 100 | + _value = _data[column][value].id, | ||
| 101 | + _year = this.startTime.getFullYear(), | ||
| 102 | + _endYear = this.endTime.getFullYear(), | ||
| 103 | + _month = parseInt(this.startTime.getMonth() + 1), | ||
| 104 | + _day = parseInt(this.startTime.getDay()), | ||
| 105 | + _minute = parseInt(this.startTime.getMinutes()); | ||
| 106 | + switch (e.detail.column) { | ||
| 107 | + case 0: | ||
| 108 | + this.year = _value; | ||
| 109 | + if (value === 0) { | ||
| 110 | + //选择第一年 注意初始时间 | ||
| 111 | + this.setDateData(this.startTime); | ||
| 112 | + } else if (value === _data[0].length - 1) { | ||
| 113 | + // 选择最后一年设置截止时间 | ||
| 114 | + this.setDateData(this.endTime); | ||
| 115 | + } else { | ||
| 116 | + this.activityArray = this.datePicker(_value, 1, 1, 0, 0); | ||
| 117 | + } | ||
| 118 | + timeIndex = [value, 0, 0, 0, 0]; | ||
| 119 | + this.timeIndex = timeIndex; | ||
| 120 | + break; | ||
| 121 | + case 1: | ||
| 122 | + // 月份选择器 当年份为第一年和最后一年的时候需要注意 | ||
| 123 | + this.month = _value; | ||
| 124 | + this.timeIndex = JSON.parse( | ||
| 125 | + JSON.stringify([timeIndex[0], value, 0, 0, 0]) | ||
| 126 | + ); | ||
| 127 | + if (this.year == _year && value === 0) { | ||
| 128 | + this.setDateData(this.startTime); | ||
| 129 | + } else if (this.year == _endYear && value === 0) { | ||
| 130 | + this.setDateData(this.endTime); | ||
| 131 | + } else { | ||
| 132 | + _data[2] = this.datePicker(this.year, this.month, 1, 0, 0)[2]; | ||
| 133 | + _data[3] = this.datePicker(this.year, this.month, 1, 0, 0)[3]; | ||
| 134 | + _data[4] = this.datePicker(this.year, this.month, 1, 0, 0)[4]; | ||
| 135 | + this.activityArray = _data; | ||
| 136 | + } | ||
| 137 | + break; | ||
| 138 | + case 2: | ||
| 139 | + this.day = _value; | ||
| 140 | + this.timeIndex = JSON.parse( | ||
| 141 | + JSON.stringify([timeIndex[0], timeIndex[1], value, 0, 0]) | ||
| 142 | + ); | ||
| 143 | + if (this.year == _year && this.month == _month && value === 0) { | ||
| 144 | + this.setDateData(this.startTime); | ||
| 145 | + } else if ( | ||
| 146 | + this.year == _endYear && | ||
| 147 | + this.month == _month && | ||
| 148 | + value === 0 | ||
| 149 | + ) { | ||
| 150 | + this.setDateData(this.endTime); | ||
| 151 | + } else { | ||
| 152 | + _data[3] = this.datePicker( | ||
| 153 | + this.year, | ||
| 154 | + this.month, | ||
| 155 | + this.day, | ||
| 156 | + 0, | ||
| 157 | + 0 | ||
| 158 | + )[3]; | ||
| 159 | + _data[4] = this.datePicker( | ||
| 160 | + this.year, | ||
| 161 | + this.month, | ||
| 162 | + this.day, | ||
| 163 | + 0, | ||
| 164 | + 0 | ||
| 165 | + )[4]; | ||
| 166 | + this.activityArray = _data; | ||
| 167 | + } | ||
| 168 | + break; | ||
| 169 | + case 3: | ||
| 170 | + this.hour = _value; | ||
| 171 | + timeIndex[3] = value; | ||
| 172 | + timeIndex[4] = 0; | ||
| 173 | + this.timeIndex = timeIndex; | ||
| 174 | + if ( | ||
| 175 | + this.year == _year && | ||
| 176 | + this.month == _month && | ||
| 177 | + this.day == _day && | ||
| 178 | + value === 0 | ||
| 179 | + ) { | ||
| 180 | + this.setDateData(this.startTime); | ||
| 181 | + } else if ( | ||
| 182 | + this.year == _endYear && | ||
| 183 | + this.month == _month && | ||
| 184 | + this.day == _day && | ||
| 185 | + value === 0 | ||
| 186 | + ) { | ||
| 187 | + this.setDateData(this.endTime); | ||
| 188 | + } else { | ||
| 189 | + _data[4] = this.datePicker( | ||
| 190 | + this.year, | ||
| 191 | + this.month, | ||
| 192 | + this.day, | ||
| 193 | + this.hour, | ||
| 194 | + 0 | ||
| 195 | + )[4]; | ||
| 196 | + this.activityArray = _data; | ||
| 197 | + } | ||
| 198 | + break; | ||
| 199 | + case 4: | ||
| 200 | + timeIndex[4] = value; | ||
| 201 | + this.timeIndex = timeIndex; | ||
| 202 | + break; | ||
| 203 | + } | ||
| 204 | + }, | ||
| 205 | + }, | ||
| 206 | +}; | ||
| 207 | +</script> |
-
Please register or login to post a comment