From 9ebd53dba24b5c1fe8d25de781930b3cf55b74cf Mon Sep 17 00:00:00 2001 From: Archer_cdm Date: Wed, 18 Jan 2023 16:03:56 +0800 Subject: [PATCH] =?UTF-8?q?=EF=BC=88*=EF=BC=89=E7=95=8C=E9=9D=A2=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- weapp/app.js | 3 +- weapp/components/timePicker/index.js | 590 ++++++++++++++++++ weapp/components/timePicker/index.json | 3 + weapp/components/timePicker/index.wxml | 75 +++ weapp/components/timePicker/index.wxss | 133 ++++ weapp/images/close.svg | 1 + weapp/images/upload.png | Bin 0 -> 362 bytes .../inspectionRecord/inspectionRecord.js | 47 +- .../inspectionRecord/inspectionRecord.json | 5 +- .../inspectionRecord/inspectionRecord.wxml | 18 +- .../inspectionRecord/inspectionRecord.wxss | 19 +- .../startInspection/startInspection.js | 108 +++- .../startInspection/startInspection.wxml | 15 + .../startInspection/startInspection.wxss | 23 + weapp/pages/index/index.js | 1 - 15 files changed, 1030 insertions(+), 11 deletions(-) create mode 100644 weapp/components/timePicker/index.js create mode 100644 weapp/components/timePicker/index.json create mode 100644 weapp/components/timePicker/index.wxml create mode 100644 weapp/components/timePicker/index.wxss create mode 100644 weapp/images/close.svg create mode 100644 weapp/images/upload.png diff --git a/weapp/app.js b/weapp/app.js index d7e81ac..fe5f588 100644 --- a/weapp/app.js +++ b/weapp/app.js @@ -4,7 +4,8 @@ App({ globalData: { userInfo: null, baseUrl: 'http://10.8.16.221:4900', //api 本地环境 - imgUrl: 'http://10.8.16.221:5900/_file-server/', //web 本地环境 + webUrl: "http://10.8.16.221:5900/", //web 本地环境 + imgUrl: 'http://10.8.16.221:5900/_file-server/', //文件 本地环境 }, onShow(e) { // 检查是否有更新 diff --git a/weapp/components/timePicker/index.js b/weapp/components/timePicker/index.js new file mode 100644 index 0000000..68e0340 --- /dev/null +++ b/weapp/components/timePicker/index.js @@ -0,0 +1,590 @@ +// components/picker-timer/picker-time.js + +Component({ + /** + * 组件的属性列表 + */ + properties: { + pickerShow: { + type: Boolean, + observer: function (val) { //弹出动画 + if (val) { + let animation = wx.createAnimation({ + duration: 500, + timingFunction: "ease" + }); + let animationOpacity = wx.createAnimation({ + duration: 500, + timingFunction: "ease" + }); + setTimeout(() => { + animation.bottom(0).step(); + animationOpacity.opacity(0.7).step(); + this.setData({ + animationOpacity: animationOpacity.export(), + animationData: animation.export() + }) + }, 0); + } else { + let animation = wx.createAnimation({ + duration: 100, + timingFunction: "ease" + }); + let animationOpacity = wx.createAnimation({ + duration: 500, + timingFunction: "ease" + }); + animation.bottom(-320).step(); + animationOpacity.opacity(0).step(); + this.setData({ + animationOpacity: animationOpacity.export(), + animationData: animation.export() + }); + } + + // 在picker滚动未停止前点确定,会使startValue数组各项归零,发生错误,这里判断并重新初始化 + // 微信新增了picker滚动的回调函数,已进行兼容 + if (this.data.startValue && this.data.endValue) { + let s = 0, e = 0; + let conf = this.data.config; + + this.data.startValue.map(val => { + if (val == 0) { + s++ + } + }) + this.data.endValue.map(val => { + if (val == 0) { + e++; + } + }); + let tmp = { + hour: 4, + minute: 5, + second: 6 + } + let n = tmp[conf.column]; + if (s >= n || e >= n) { + this.initPick(this.data.config); + this.setData({ + startValue: this.data.startValue, + endValue: this.data.endValue, + }); + } + } + + + } + }, + config: Object + }, + + /** + * 组件的初始数据 + */ + data: { + // pickerShow:true + // limitStartTime: new Date().getTime()-1000*60*60*24*30, + // limitEndTime: new Date().getTime(), + // yearStart:2000, + // yearEnd:2100 + }, + detached: function () { + console.log("dele"); + }, + attached: function () { }, + ready: function () { + this.readConfig(); + this.initPick(this.data.config || null); + this.setData({ + startValue: this.data.startValue, + endValue: this.data.endValue, + }); + + + + + }, + /** + * 组件的方法列表 + */ + methods: { + //阻止滑动事件 + onCatchTouchMove(e) { + + }, + //读取配置项 + readConfig() { + let limitEndTime = new Date().getTime(); + let limitStartTime = new Date().getTime() - 1000 * 60 * 60 * 24 * 30; + if (this.data.config) { + let conf = this.data.config; + + if (typeof conf.dateLimit == "number") { + limitStartTime = + new Date().getTime() - 1000 * 60 * 60 * 24 * conf.dateLimit; + } + if (conf.limitStartTime) { + + limitStartTime = new Date(conf.limitStartTime.replace(/-/g, '/')).getTime(); + } + + if (conf.limitEndTime) { + limitEndTime = new Date(conf.limitEndTime.replace(/-/g, '/')).getTime(); + } + + this.setData({ + yearStart: conf.yearStart || 2000, + yearEnd: conf.yearEnd || 2100, + endDate: conf.endDate || false, + dateLimit: conf.dateLimit || false, + hourColumn: + conf.column == "hour" || + conf.column == "minute" || + conf.column == "second", + minColumn: conf.column == "minute" || conf.column == "second", + secColumn: conf.column == "second" + }); + } + + let limitStartTimeArr = formatTime(limitStartTime); + let limitEndTimeArr = formatTime(limitEndTime); + + this.setData({ + limitStartTime, + limitStartTimeArr, + limitEndTime, + limitEndTimeArr + }); + }, + //滚动开始 + handlePickStart: function (e) { + this.setData({ + isPicking: true + }) + }, + //滚动结束 + handlePickEnd: function (e) { + this.setData({ + isPicking: false + }) + }, + onConfirm: function () { + //滚动未结束时不能确认 + if (this.data.isPicking) { return } + let startTime = new Date(this.data.startPickTime.replace(/-/g, "/")); + let endTime = new Date(this.data.endPickTime.replace(/-/g, "/")); + if (startTime <= endTime || !this.data.endDate) { + this.setData({ + startTime, + endTime + }); + let startArr = formatTime(startTime).arr; + let endArr = formatTime(endTime).arr; + let format0 = function (num) { + return num < 10 ? '0' + num : num + } + + let startTimeBack = + startArr[0] + + "-" + + format0(startArr[1]) + + "-" + + format0(startArr[2]) + // + + // " " + + // (this.data.hourColumn ? format0(startArr[3]) : "00") + + // ":" + + // (this.data.minColumn ? format0(startArr[4]) : "00") + + // ":" + + // (this.data.secColumn ? format0(startArr[5]) : "00") + ; + + let endTimeBack = + endArr[0] + + "-" + + format0(endArr[1]) + + "-" + + format0(endArr[2]) + // + + // " " + + // (this.data.hourColumn ? format0(endArr[3]) : "00") + + // ":" + + // (this.data.minColumn ? format0(endArr[4]) : "00") + + // ":" + + // (this.data.secColumn ? format0(endArr[5]) : "00") + ; + + let time = { + startTime: startTimeBack, + endTime: endTimeBack + }; + + //触发自定义事件 + this.triggerEvent("setPickerTime", time); + this.triggerEvent("hidePicker", {}); + } else { + wx.showToast({ + icon: "none", + title: "开始时间必须小于结束时间" + }); + } + }, + hideModal: function () { + + this.triggerEvent("hidePicker", {}); + }, + changeStartDateTime: function (e) { + let val = e.detail.value; + + this.compareTime(val, "start"); + }, + + changeEndDateTime: function (e) { + let val = e.detail.value; + this.compareTime(val, "end"); + }, + //比较时间是否在范围内 + compareTime(val, type) { + let h = val[3] ? this.data.HourList[val[3]] : "00"; + let m = val[4] ? this.data.MinuteList[val[4]] : "00"; + let s = val[5] ? this.data.SecondList[val[5]] : "00"; + let time = + this.data.YearList[val[0]] + + "-" + + this.data.MonthList[val[1]] + + "-" + + this.data.DayList[val[2]] + + " " + + h + + ":" + + m + + ":" + + s; + + let start = this.data.limitStartTime; + let end = this.data.limitEndTime; + let timeNum = new Date(time.replace(/-/g, '/')).getTime(); + let year, month, day, hour, min, sec, limitDate; + let tempArr = [] + + // if (!this.data.dateLimit){ + // limitDate = [ + // this.data.YearList[val[0]], + // this.data.MonthList[val[1]], + // this.data.DayList[val[2]], + // this.data.HourList[val[3]], + // this.data.MinuteList[val[4]], + // this.data.SecondList[val[5]]] + // } else if (type == "start" && timeNum > new Date(this.data.endPickTime.replace(/-/g, '/')) && this.data.config.endDate) { + // limitDate = formatTime(this.data.endPickTime).arr; + + // } else if (type == "end" && timeNum < new Date(this.data.startPickTime.replace(/-/g, '/'))) { + // limitDate = formatTime(this.data.startPickTime).arr; + + // } else if (timeNum < start) { + // limitDate = this.data.limitStartTimeArr.arr; + + // } else if (timeNum > end) { + // limitDate = this.data.limitEndTimeArr.arr; + + // } else { + // limitDate = [ + // this.data.YearList[val[0]], + // this.data.MonthList[val[1]], + // this.data.DayList[val[2]], + // this.data.HourList[val[3]], + // this.data.MinuteList[val[4]], + // this.data.SecondList[val[5]] + // ] + + // } + + if (!this.data.dateLimit) { + limitDate = [ + this.data.YearList[val[0]], + this.data.MonthList[val[1]], + this.data.DayList[val[2]], + this.data.HourList[val[3]], + this.data.MinuteList[val[4]], + this.data.SecondList[val[5]]] + } else { + limitDate = [ + this.data.YearList[val[0]], + this.data.MonthList[val[1]], + this.data.DayList[val[2]], + this.data.HourList[val[3]], + this.data.MinuteList[val[4]], + this.data.SecondList[val[5]] + ] + + } + + year = limitDate[0]; + month = limitDate[1]; + day = limitDate[2]; + hour = limitDate[3]; + min = limitDate[4]; + sec = limitDate[5]; + + if (type == "start") { + this.setStartDate(year, month, day, hour, min, sec); + } else if (type == "end") { + this.setEndDate(year, month, day, hour, min, sec); + } + }, + getDays: function (year, month) { + let daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + if (month === 2) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0 + ? 29 + : 28; + } else { + return daysInMonth[month - 1]; + } + }, + initPick: function (initData) { + const date = initData.initStartTime ? new Date(initData.initStartTime.replace(/-/g, '/')) : new Date(); + const endDate = initData.initEndTime ? new Date(initData.initEndTime.replace(/-/g, '/')) : new Date(); + // const startDate = new Date(date.getTime() - 1000 * 60 * 60 * 24); + const startDate = date; + const startYear = date.getFullYear(); + const startMonth = date.getMonth() + 1; + const startDay = date.getDate(); + const startHour = date.getHours(); + const startMinute = date.getMinutes(); + const startSecond = date.getSeconds(); + + const endYear = endDate.getFullYear(); + const endMonth = endDate.getMonth() + 1; + const endDay = endDate.getDate(); + const endHour = endDate.getHours(); + const endMinute = endDate.getMinutes(); + const endSecond = endDate.getSeconds(); + + let YearList = []; + let MonthList = []; + let DayList = []; + let HourList = []; + let MinuteList = []; + let SecondList = []; + + //设置年份列表 + for (let i = this.data.yearStart; i <= this.data.yearEnd; i++) { + YearList.push(i); + } + + // 设置月份列表 + for (let i = 1; i <= 12; i++) { + MonthList.push(i); + } + // 设置日期列表 + for (let i = 1; i <= 31; i++) { + DayList.push(i); + } + // 设置时列表 + for (let i = 0; i <= 23; i++) { + if (0 <= i && i < 10) { + i = "0" + i; + } + HourList.push(i); + } + // 分|秒 + for (let i = 0; i <= 59; i++) { + if (0 <= i && i < 10) { + i = "0" + i; + } + MinuteList.push(i); + SecondList.push(i); + } + + this.setData({ + YearList, + MonthList, + DayList, + HourList, + MinuteList, + SecondList + }); + + this.setStartDate(startYear, startMonth, startDay, startHour, startMinute, startSecond); + this.setEndDate(endYear, endMonth, endDay, endHour, endMinute, endSecond); + + //!!! + // setTimeout(() => { + // this.setStartDate(nowYear, nowMonth, nowDay, nowHour, nowMinute) + // this.setEndDate(nowYear, nowMonth, nowDay, nowHour, nowMinute) + // }, 0); + }, + setPickerDateArr(type, year, month, day, hour, minute, second) { + let yearIdx = 0; + let monthIdx = 0; + let dayIdx = 0; + let hourIdx = 0; + let minuteIdx = 0; + let secondIdx = 0; + + this.data.YearList.map((v, idx) => { + if (parseInt(v) === year) { + yearIdx = idx; + } + }); + + this.data.MonthList.map((v, idx) => { + if (parseInt(v) === month) { + monthIdx = idx; + } + }); + + // 重新设置日期列表 + let DayList = []; + for (let i = 1; i <= this.getDays(year, month); i++) { + DayList.push(i); + } + + DayList.map((v, idx) => { + if (parseInt(v) === day) { + dayIdx = idx; + } + }); + if (type == "start") { + this.setData({ startDayList: DayList }); + } else if (type == "end") { + this.setData({ endDayList: DayList }); + } + + this.data.HourList.map((v, idx) => { + if (parseInt(v) === parseInt(hour)) { + hourIdx = idx; + } + }); + + this.data.MinuteList.map((v, idx) => { + if (parseInt(v) === parseInt(minute)) { + minuteIdx = idx; + } + }); + this.data.SecondList.map((v, idx) => { + if (parseInt(v) === parseInt(second)) { + secondIdx = idx; + } + }); + + return { + yearIdx, + monthIdx, + dayIdx, + hourIdx, + minuteIdx, + secondIdx + }; + }, + setStartDate: function (year, month, day, hour, minute, second) { + let pickerDateArr = this.setPickerDateArr( + "start", + year, + month, + day, + hour, + minute, + second + ); + this.setData({ + startYearList: this.data.YearList, + startMonthList: this.data.MonthList, + // startDayList: this.data.DayList, + startHourList: this.data.HourList, + startMinuteList: this.data.MinuteList, + startSecondList: this.data.SecondList, + startValue: [ + pickerDateArr.yearIdx, + pickerDateArr.monthIdx, + pickerDateArr.dayIdx, + pickerDateArr.hourIdx, + pickerDateArr.minuteIdx, + pickerDateArr.secondIdx + ], + startPickTime: + this.data.YearList[pickerDateArr.yearIdx] + + "-" + + this.data.MonthList[pickerDateArr.monthIdx] + + "-" + + this.data.DayList[pickerDateArr.dayIdx] + + " " + + this.data.HourList[pickerDateArr.hourIdx] + + ":" + + this.data.MinuteList[pickerDateArr.minuteIdx] + + ":" + + this.data.SecondList[pickerDateArr.secondIdx] + }); + }, + setEndDate: function (year, month, day, hour, minute, second) { + let pickerDateArr = this.setPickerDateArr( + "end", + year, + month, + day, + hour, + minute, + second + ); + + this.setData({ + endYearList: this.data.YearList, + endMonthList: this.data.MonthList, + // endDayList: this.data.DayList, + endHourList: this.data.HourList, + endMinuteList: this.data.MinuteList, + endSecondList: this.data.SecondList, + endValue: [ + pickerDateArr.yearIdx, + pickerDateArr.monthIdx, + pickerDateArr.dayIdx, + pickerDateArr.hourIdx, + pickerDateArr.minuteIdx, + pickerDateArr.secondIdx + ], + endPickTime: + this.data.YearList[pickerDateArr.yearIdx] + + "-" + + this.data.MonthList[pickerDateArr.monthIdx] + + "-" + + this.data.DayList[pickerDateArr.dayIdx] + + " " + + this.data.HourList[pickerDateArr.hourIdx] + + ":" + + this.data.MinuteList[pickerDateArr.minuteIdx] + + ":" + + this.data.SecondList[pickerDateArr.secondIdx] + }); + }, + } +}); + + +function formatTime(date) { + + if (typeof date == 'string' || 'number') { + try { + date = date.replace(/-/g, '/')//兼容ios + } catch (error) { + } + date = new Date(date) + } + + const year = date.getFullYear() + const month = date.getMonth() + 1 + const day = date.getDate() + const hour = date.getHours() + const minute = date.getMinutes() + const second = date.getSeconds() + + return { + str: [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second].map(formatNumber).join(':'), + arr: [year, month, day, hour, minute, second] + } +} +function formatNumber(n) { + n = n.toString() + return n[1] ? n : '0' + n +} \ No newline at end of file diff --git a/weapp/components/timePicker/index.json b/weapp/components/timePicker/index.json new file mode 100644 index 0000000..32640e0 --- /dev/null +++ b/weapp/components/timePicker/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} \ No newline at end of file diff --git a/weapp/components/timePicker/index.wxml b/weapp/components/timePicker/index.wxml new file mode 100644 index 0000000..5c2299e --- /dev/null +++ b/weapp/components/timePicker/index.wxml @@ -0,0 +1,75 @@ + + + diff --git a/weapp/package/inspectionRecord/inspectionRecord.wxss b/weapp/package/inspectionRecord/inspectionRecord.wxss index e981149..f959722 100644 --- a/weapp/package/inspectionRecord/inspectionRecord.wxss +++ b/weapp/package/inspectionRecord/inspectionRecord.wxss @@ -1,5 +1,5 @@ /* package/inspectionRecord/inspectionRecord.wxss */ -page{ +page { background: #F7F7FA; } @@ -44,4 +44,21 @@ page{ float: left; margin-left: 30rpx; margin-top: 20rpx; +} + +.page-date { + text-align: center; + padding-top: 6rpx; + margin-right: 20rpx; + background: #fff; +} + +.clearDate { + float: left; + line-height: 50rpx; +} + +.clearDate image { + width: 20rpx; + height: 20rpx; } \ No newline at end of file diff --git a/weapp/package/startInspection/startInspection.js b/weapp/package/startInspection/startInspection.js index a4eccd9..0cb683d 100644 --- a/weapp/package/startInspection/startInspection.js +++ b/weapp/package/startInspection/startInspection.js @@ -5,7 +5,8 @@ Page({ * 页面的初始数据 */ data: { - dataList: '' + dataList: '', + imgs: [], //上传图片 }, handleChangeTwo(e) { @@ -32,6 +33,111 @@ Page({ }) }, + // 上传图片 + chooseImg: function (e) { //这里是选取图片的方法 + var that = this; + var pics = []; + var detailPics = that.data.imgs; + if (detailPics.length >= 20) { + commonJs.showToast('最多选择20张图片上传'); + return; + } + wx.chooseMedia({ + count: 20, // 基础库2.25.0前,最多可支持9个文件,2.25.0及以后最多可支持20个文件 + mediaType: ['image'], // 文件类型 + sizeType: ['original', 'compressed'], // original 原图,compressed 压缩图,默认二者都有 + sourceType: ['album', 'camera'], // album 从相册选图,camera 使用相机,默认二者都有 + success: function (res) { + console.log(res); + var imgs = res.tempFiles; + for (var i = 0; i < imgs.length; i++) { + if (res.tempFiles[i].size > 15728640) { + commonJs.showToast('图片大于15M,不可上传'); + return; + } + pics.push(imgs[i]) + } + that.uploadimg({ + url: getApp().globalData.webUrl + '_upload/attachments/project', //这里是你图片上传的接口 + path: pics, //这里是选取的图片的地址数组 + }); + }, + }) + }, + //多张图片上传 + uploadimg: function (data) { + wx.showLoading({ + title: '上传中...', + mask: true, + }) + var that = this, + i = data.i ? data.i : 0, + success = data.success ? data.success : 0, + fail = data.fail ? data.fail : 0; + let imgs = that.data.imgs; + wx.uploadFile({ + url: data.url, + filePath: data.path[i], + name: 'file', + success: (resp) => { + wx.hideLoading(); + success++; + var str = resp.data //返回的结果,可能不同项目结果不一样 + console.log(str); + if (imgs.length >= 20) { + that.setData({ + imgs: imgs + }); + return false; + } else { + imgs.push(str); + that.setData({ + imgs: imgs + }) + } + }, + fail: (res) => { + fail++; + console.log('fail:' + i + "fail:" + fail); + }, + complete: () => { + i++; + if (i == data.path.length) { //当图片传完时,停止调用 + console.log('执行完毕'); + console.log('成功:' + success + " 失败:" + fail); + } else { //若图片还没有传完,则继续调用函数 + data.i = i; + data.success = success; + data.fail = fail; + that.uploadimg(data);//递归,回调自己 + } + } + }); + }, + + // 删除图片 + deleteImg: function (e) { + var imgs = this.data.imgs; + var index = e.currentTarget.dataset.index; + imgs.splice(index, 1); + this.setData({ + imgs: imgs + }); + }, + // 预览图片 + previewImg: function (e) { + //获取当前图片的下标 + var index = e.currentTarget.dataset.index; + //所有图片 + var imgs = this.data.imgs; + wx.previewImage({ + //当前显示图片 + current: imgs[index], + //所有图片 + urls: imgs + }) + }, + // selfLocation() { // const self = this // wx.showLoading({ diff --git a/weapp/package/startInspection/startInspection.wxml b/weapp/package/startInspection/startInspection.wxml index 0befb86..caa62a6 100644 --- a/weapp/package/startInspection/startInspection.wxml +++ b/weapp/package/startInspection/startInspection.wxml @@ -78,6 +78,21 @@ 中度 严重 + + + + + + + + + + + + + + + 取消 提交 diff --git a/weapp/package/startInspection/startInspection.wxss b/weapp/package/startInspection/startInspection.wxss index 619c2ee..11ed736 100644 --- a/weapp/package/startInspection/startInspection.wxss +++ b/weapp/package/startInspection/startInspection.wxss @@ -82,4 +82,27 @@ background: #1979ff; color: #fff; border: 2rpx solid #1979ff; +} + +.pic { + float: left; + position: relative; + margin-right: 8px; + margin-bottom: 8px; +} + +.showImg { + width: 160rpx; + height: 160rpx; +} + +.delete-btn { + position: absolute; + top: 0; + right: 0; +} + +.upload { + width: 160rpx; + height: 160rpx; } \ No newline at end of file diff --git a/weapp/pages/index/index.js b/weapp/pages/index/index.js index 7a502be..af5bf32 100644 --- a/weapp/pages/index/index.js +++ b/weapp/pages/index/index.js @@ -3,7 +3,6 @@ import { getProjectList } from "../../utils/getApiUrl"; import { Request } from "../../common"; Page({ - /** * 页面的初始数据 */