类型错误:dateObject.getTime 不是函数

文章讨论了在遇到字符串表示的时间时,如何处理它们。简单的方法是直接去除非时间部分,或者将字符串转换为时间戳,以便进一步操作和分析。这两种策略在处理时间数据时都非常常见。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为我们获取的是字符串,而type是时间类型,最简单解决的是去掉即可,也可以转换为时间戳

<template> <view> <canvas :style="{width:Size+ 'px', height:Size+ 'px'}" :canvas-id="QrcodeId" @click="RefreshQRcode"></canvas> </view> </template> <script> import { getCurrentInstance, defineComponent, reactive, ref, toRaw, watch, onActivated, onMounted } from 'vue'; import {onLoad,onShow} from '@dcloudio/uni-app'; import UQrocode from './weapp-qrcode.js'; export default { props: ["QrcodeId","Text",'Size'], emit: ['RefreshQRcode'], methods:{ RefreshQRcode(value){ var timestamp = new Date().getTime(); this.$emit("RefreshQRcode",timestamp) }, }, setup(parameter) { const handleMakeQrcode = () => { console.log(1212); UQrocode.make({ //canvasId要和上面画布的id是一样的 canvasId:parameter.QrcodeId, componentInstance:this, text:parameter.Text, size:parameter.Size,//尺寸 margin:0 }) console.log('当前参数',{canvasId:parameter.QrcodeId, componentInstance:this, text:parameter.Text, size:parameter.Size,//尺寸 margin:0}); } onLoad(() => { handleMakeQrcode() }); watch(() => parameter.Text, (newVal, oldVal) => { //新值,旧值 console.log(oldVal,"oldValoldValoldValoldVal") // console.log(newVal,"newValnewValnewValnewVal") if(newVal){ handleMakeQrcode() //监听到了 重新生成二维码 } }) // const Seconds = ref(0) // Seconds.value = parameter.Secondss // // console.log(Seconds.value,"console.log(Seconds.value)") // const startCountdown=()=> { // // Seconds.value = 10; // 设置倒计时初始值 // const timer = setInterval(() => { // if (Seconds.value > 0) { // Seconds.value--; // 每秒减1 // } else { // clearInterval(timer); // 倒计时结束,清除定时器 // } // }, 1000); // } return { // Seconds, handleMakeQrcode, }; }, } </script> <style lang="scss" scoped> </style>小程序报Error: MiniProgramError {"errMsg":"canvasToTempFilePath:fail fail canvas is empty"} at Object.errorReport (WAServiceMainContext.js?t=wechat&s=1743039585747&v=3.7.10:1) at Function.thirdErrorReport (WAServiceMainContext.js?t=wechat&s=1743039585747&v=3.7.10:1) at Object.thirdErrorReport (WAServiceMainContext.js?t=wechat&s=1743039585747&v=3.7.10:1) at i (WASubContext.js?t=wechat&s=1743039585747&v=3.7.10:1) at Object.cb (WASubContext.js?t=wechat&s=1743039585747&v=3.7.10:1) at V._privEmit (WASubContext.js?t=wechat&s=1743039585747&v=3.7.10:1) at V.emit (WASubContext.js?t=wechat&s=1743039585747&v=3.7.10:1) at WASubContext.js?t=wechat&s=1743039585747&v=3.7.10:1 at n (WASubContext.js?t=wechat&s=1743039585747&v=3.7.10:1) at Fe (WASubContext.js?t=wechat&s=1743039585747&v=3.7.10:1)(env: Windows,mp,1.06.2409140; lib: 3.7.10)
03-28
import axios from 'axios' import { ElNotification , ElMessageBox, ElMessage } from 'element-plus' import { getToken } from '@/utils/auth' import errorCode from '@/utils/errorCode' import { tansParams } from '@/utils/ruoyi' import cache from '@/plugins/cache' import useUserStore from '@/store/modules/user' let downloadLoadingInstance; // 是否显示重新登录 export let isRelogin = { show: false }; axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' // 创建axios实例 const service = axios.create({ // axios中请求配置有baseURL选项,表示请求URL公共部分 baseURL: import.meta.env.VITE_APP_BASE_API, // 超时 timeout: 10000 }) // request拦截器 service.interceptors.request.use(config => { // 是否需要设置 token const isToken = (config.headers || {}).isToken === false // 是否需要防止数据重复提交 const isRepeatSubmit = (config.headers || {}).repeatSubmit === false if (getToken() && !isToken) { config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 } // get请求映射params参数 if (config.method === 'get' && config.params) { let url = config.url + '?' + tansParams(config.params); url = url.slice(0, -1); config.params = {}; config.url = url; } if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) { const requestObj = { url: config.url, data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data, time: new Date().getTime() } const requestSize = Object.keys(JSON.stringify(requestObj)).length; // 请求数据大小 const limitSize = 5 * 1024 * 1024; // 限制存放数据5M if (requestSize >= limitSize) { console.warn(`[${config.url}]: ` + '请求数据大小超出允许的5M限制,无法进行防重复提交验证。') return config; } const sessionObj = cache.session.getJSON('sessionObj') if (sessionObj === undefined || sessionObj === null || sessionObj === '') { cache.session.setJSON('sessionObj', requestObj) } else { const s_url = sessionObj.url; // 请求地址 const s_data = sessionObj.data; // 请求数据 const s_time = sessionObj.time; // 请求时间 const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交 if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) { const message = '数据正在处理,请勿重复提交'; console.warn(`[${s_url}]: ` + message) return Promise.reject(new Error(message)) } else { cache.session.setJSON('sessionObj', requestObj) } } } return config }, error => { console.log(error) Promise.reject(error) })优化
03-25
<template> <div class="page-container"> <CustomForm class="project-form" @submit="submitForm"> <h1 class="page-title">项目管理</h1> <div class="form-grid"> <CustomFormItem label="項目ID:" :error="errors.projectId"> <CustomInput v-model="ruleForm.projectId" :disabled="pageMode === 'view' || pageMode === 'edit'" @blur="validateField('projectId')" :maxlength="8" /> </CustomFormItem> <CustomFormItem label="項目名称:" :error="errors.projectName"> <CustomInput v-model="ruleForm.projectName" :disabled="pageMode === 'view'" @blur="validateField('projectName')" :maxlength="10" /> </CustomFormItem> <div class="date-row"> <CustomFormItem label="開始日:" :error="errors.startDate" class="date-item"> <CustomInputDate v-model="ruleForm.startDate" :disabled="pageMode === 'view'" @blur="validateField('startDate')" /> </CustomFormItem> <div class="date-separator">—</div> <CustomFormItem label="終了日:" :error="errors.endDate" class="date-item"> <CustomInputDate v-model="ruleForm.endDate" :disabled="pageMode === 'view'" @blur="validateField('endDate')" /> </CustomFormItem> </div> <CustomFormItem label="項目簡介:" :error="errors.projectDescribtion"> <CustomInputTextarea v-model="ruleForm.projectDescribtion" :disabled="pageMode === 'view'" @blur="validateField('projectDescribtion')" :maxlength="200" :rows="3" /> </CustomFormItem> </div> <div class="form-actions"> <button v-if="pageMode === 'default'" type="submit">登録</button> <button v-if="pageMode === 'edit'" type="submit">更新</button> <button v-if="pageMode === 'edit' || pageMode === 'default'" type="button" @click="resetForm">重置</button> </div> </CustomForm> </div> </template> <script setup> import { ref, reactive, onMounted } from 'vue' import { useRoute } from 'vue-router' import CustomForm from '@/components/zhangaipiao/customForm.vue' import CustomFormItem from '@/components/zhangaipiao/customFormItem.vue' import CustomInput from '@/components/zhangaipiao/customInput.vue' import CustomInputDate from '@/components/zhangaipiao/customInputDate.vue' import CustomInputTextarea from '@/components/zhangaipiao/customInputTextarea.vue' import productApi from '@/api/products' import useUserStore from '@/store/modules/user' // 获取路由参数 const route = useRoute() // 存储表单数据的响应式对象 const ruleForm = reactive({ projectId: '', projectName: '', projectDescribtion: '', startDate: '', endDate: '', employeeId: '', }) // 存储字段验证错误信息的响应式对象 const errors = reactive({ projectId: '', projectName: '', projectDescribtion: '', startDate: '', endDate: '', }) // 页面模式 const pageMode = ref('default') // default, edit, view // 单个字段校验函数 const validateField = (fieldName) => { // 重置该字段的错误信息 errors[fieldName] = '' switch (fieldName) { case 'projectId': if (!ruleForm.projectId) { errors.projectId = '項目ID称は必須です' } else if (ruleForm.projectId.length > 8) { errors.projectId = '項目IDは8文字以内で入力してください' } break; case 'projectName': if (!ruleForm.projectName.trim()) { errors.projectName = '項目名称は必須です' } else if (ruleForm.projectName.trim().length > 10) { errors.projectName = '項目名称は10文字以内で入力してください' } break; case 'startDate': if (!ruleForm.startDate) { errors.startDate = '開始日を選択してください' } else if (ruleForm.endDate && new Date(ruleForm.startDate) > new Date(ruleForm.endDate)) { errors.startDate = '開始日は終了日より前でなければなりません' } break; case 'endDate': if (!ruleForm.endDate) { errors.endDate = '終了日を選択してください' } else if (ruleForm.startDate && new Date(ruleForm.endDate) < new Date(ruleForm.startDate)) { errors.endDate = '終了日は開始日より後でなければなりません' } break; case 'projectDescribtion': if (!ruleForm.projectDescribtion.trim()) { errors.projectDescribtion = '項目簡介を入力してください' } else if (ruleForm.projectDescribtion.trim().length > 200) { errors.projectDescribtion = '項目簡介は200文字以内で入力してください' } } } // 整体表单校验 const validateForm = () => { let valid = true // 校验所有字段 validateField('projectId') validateField('projectName') validateField('startDate') validateField('endDate') validateField('projectDescribtion') // 检查是否有错误 Object.keys(errors).forEach(key => { if (errors[key]) valid = false }) return valid } // 格式化日期函数 const formatDate = (datetimeStr) => { if (!datetimeStr) return '' const date = new Date(datetimeStr) return isNaN(date.getTime()) ? '' : date.toISOString().split('T')[0] } // 在组件挂载时加载数据 onMounted(async () => { // const projectId = route.params.projectId || route.query.projectId // const type = route.query.type // if (type === 'view') { // pageMode.value = 'view' // 查看模式:不显示按钮 // } else if (type === 'edit') { // pageMode.value = 'edit' // 编辑模式:显示“更新”、“重置” // } else { // pageMode.value = 'default' // 默认模式:显示“登录”、“重置” // } const projectId = "123" if ((pageMode.value === 'edit' || pageMode.value === 'view') && projectId) { try { const res = await productApi.getItem(projectId) Object.assign(ruleForm, res.data) // 填充数据到 ruleForm ruleForm.startDate = formatDate(res.data.startDate) ruleForm.endDate = formatDate(res.data.endDate) } catch (error) { console.error('获取项目信息失败:', error) alert('項目情報を取得できませんでした') } } }) // 重置表单 const resetForm = () => { Object.assign(ruleForm, { projectId: '', projectName: '', projectDescribtion: '', startDate: '', endDate: '', }) Object.keys(errors).forEach(key => errors[key] = '') } // 提交表单 const submitForm = async () => { if (!validateForm()) return try { let response // 获取用户名 const userStore = useUserStore() const user = userStore.employeeId ruleForm.employeeId = user if (pageMode.value === 'edit') { // 更新操作 response = await productApi.updateItem(ruleForm) alert('更新成功') } else { // 新增操作 response = await productApi.addItem(ruleForm) alert('登録成功') } console.log('API 响应:', response.data) // 可选:提交成功后跳转页面 // router.push('/project/list') } catch (error) { console.error('API 请求失败:', error) alert('提交失败,请检查网络或输入内容') } } </script> <style scoped src="@/assets/styles.css"></style> 详细解释代码作用
最新发布
07-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值