From 1668d804e1be76ed2c30386c36970bddb74c7bad Mon Sep 17 00:00:00 2001 From: xy <271556543@qq.com> Date: Wed, 7 Aug 2024 13:20:42 +0800 Subject: [PATCH] =?UTF-8?q?=E9=95=BF=E6=8A=A4=E9=99=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/config.js | 4 +- common/util.js | 71 +++++++++ package_sub/pages/addCallback/addCallback.vue | 2 +- package_sub/pages/addChecks/addChecks.vue | 2 +- .../addLongInsurance/addLongInsurance.vue | 135 ++++++++++-------- .../longInsurance/longInsuranceDetail.vue | 14 +- pages/sign/sign.vue | 32 +++-- 7 files changed, 181 insertions(+), 79 deletions(-) diff --git a/common/config.js b/common/config.js index 250c64c..925d7b8 100644 --- a/common/config.js +++ b/common/config.js @@ -1,5 +1,5 @@ -// const mode = process.env.NODE_ENV; -const mode = 'development'; +const mode = process.env.NODE_ENV; +//const mode = 'development'; let ROOTPATH = ''; //域名 switch (mode) { case 'development': diff --git a/common/util.js b/common/util.js index a41555e..9db4a5a 100644 --- a/common/util.js +++ b/common/util.js @@ -98,3 +98,74 @@ export const base64ToFile = (dataurl, filename = 'file') => { }) } + +export const writeFile = (base64Str) => new Promise((resolve, reject) => { + // 后台返回的base64格式数据的回车换行换为空字符'' + const base64Image = base64Str.split(',')[1].replace(/[\r\n]/g, '') + // 文件管理器 + const fsm = uni.getFileSystemManager() + // 文件名 + const FILE_BASE_NAME = 'tmp_base64src' + // 文件后缀 + const format = 'png' + // 获取当前时间戳用于区分小程序码,防止多次写进的小程序码图片都一样,建议通过不同的列表ID来区分不同的小程序码 + const timestamp = (new Date()).getTime() + // base转二进制 + const buffer = uni.base64ToArrayBuffer(base64Image) + // 文件名 + const filePath = `${wx.env.USER_DATA_PATH}/${timestamp}share.${format}` + // 写文件 + fsm.writeFile({ + filePath, + data: buffer, + encoding: 'binary', + success () { + // 读取图片 + uni.getImageInfo({ + src: filePath, + success (res) { + const img = res.path + // 把需要画出来的图片的临时url暴露出去 + resolve(img) + reject() + }, + fail (e) { + console.log('读取图片报错') + console.log(e) + }, + error (res) { + console.log(res) + } + }) + }, + fail (e) { + console.log(e) + } + }) +}).catch((e) => { + console.log(e) +}) + +// 删除存储的垃圾数据 +export const removeSave = () => new Promise((resolve) => { + // 文件管理器 + const fsm = uni.getFileSystemManager() + // 获取文件列表 + fsm.readdir({ + dirPath: wx.env.USER_DATA_PATH, // 当时写入的文件夹 + success (res) { + res.files.forEach((el) => { // 遍历文件列表里的数据 + // 删除存储的垃圾数据 + if (el !== 'miniprogramLog') { // 过滤掉miniprogramLog + fsm.unlink({ + filePath: `${wx.env.USER_DATA_PATH}/${el}`, // 文件夹也要加上,如果直接文件名会无法找到这个文件 + fail (e) { + console.log('readdir文件删除失败:', e) + } + }) + } + }) + resolve() + } + }) +}) diff --git a/package_sub/pages/addCallback/addCallback.vue b/package_sub/pages/addCallback/addCallback.vue index a028037..54fac43 100644 --- a/package_sub/pages/addCallback/addCallback.vue +++ b/package_sub/pages/addCallback/addCallback.vue @@ -48,7 +48,7 @@ 获取位置 - + {{ `${(form.lng || form.lat) ? ('(' + form.lng + ',' + form.lat + ')') : ''}${form.address}` }} diff --git a/package_sub/pages/addChecks/addChecks.vue b/package_sub/pages/addChecks/addChecks.vue index 4d99e8d..d8581cb 100644 --- a/package_sub/pages/addChecks/addChecks.vue +++ b/package_sub/pages/addChecks/addChecks.vue @@ -25,7 +25,7 @@ 获取位置 - + {{ `${(form.lng || form.lat) ? ('(' + form.lng + ',' + form.lat + ')') : ''}${form.address}` }} diff --git a/package_sub/pages/addLongInsurance/addLongInsurance.vue b/package_sub/pages/addLongInsurance/addLongInsurance.vue index fcd3783..f427cff 100644 --- a/package_sub/pages/addLongInsurance/addLongInsurance.vue +++ b/package_sub/pages/addLongInsurance/addLongInsurance.vue @@ -83,25 +83,25 @@ 点击签名 - + 点击签名 - + 获取位置 - + {{ `${(form.lng || form.lat) ? ('(' + form.lng + ',' + form.lat + ')') : ''}${form.address}` }} @@ -124,6 +124,7 @@ export default { fileList: [], id: "", type: "add", + detail: {}, form: { customer_id: "", satisfy: 1, @@ -147,10 +148,10 @@ export default { sign_image_id: [ { validator: (rule, value, callback) => { - if (!this.vuex_sign_image) { - callback(new Error('请签名')) - } else { + if (this.vuex_sign_image || value) { callback() + } else { + callback(new Error('请签名')) } } } @@ -158,10 +159,10 @@ export default { admin_sign_image_id: [ { validator: (rule, value, callback) => { - if (!this.vuex_admin_sign_image) { - callback(new Error('请签名')) - } else { + if (this.vuex_admin_sign_image || value) { callback() + } else { + callback(new Error('请签名')) } } } @@ -357,56 +358,68 @@ export default { submit () { const uploadSignImage = () => { return new Promise((resolve, reject) => { - uni.uploadFile({ - url: `${ROOTPATH}/api/admin/upload-file`, - header: { - Authorization: `Bearer ${this.vuex_token}` - }, - filePath: this.vuex_sign_image, - name: 'file', - success: (res) => { - if (res.statusCode === 200) { - const response = JSON.parse(res.data) - resolve(response) - } else { - reject(res.data) + if (this.vuex_sign_image) { + uni.uploadFile({ + url: `${ROOTPATH}/api/admin/upload-file`, + header: { + Authorization: `Bearer ${this.vuex_token}` + }, + filePath: this.vuex_sign_image, + name: 'file', + success: (res) => { + if (res.statusCode === 200) { + const response = JSON.parse(res.data) + resolve(response) + } else { + reject(res.data) + } + }, + fail: (err) => { + reject(err) } - }, - fail: (err) => { - reject(err) - } - }) + }) + } else { + resolve() + } }) } const uploadAdminSignImage = () => { return new Promise((resolve, reject) => { - uni.uploadFile({ - url: `${ROOTPATH}/api/admin/upload-file`, - header: { - Authorization: `Bearer ${this.vuex_token}` - }, - filePath: this.vuex_admin_sign_image, - name: 'file', - success: (res) => { - if (res.statusCode === 200) { - const response = JSON.parse(res.data) - resolve(response) - } else { - reject(res.data) + if (this.vuex_admin_sign_image) { + uni.uploadFile({ + url: `${ROOTPATH}/api/admin/upload-file`, + header: { + Authorization: `Bearer ${this.vuex_token}` + }, + filePath: this.vuex_admin_sign_image, + name: 'file', + success: (res) => { + if (res.statusCode === 200) { + const response = JSON.parse(res.data) + resolve(response) + } else { + reject(res.data) + } + }, + fail: (err) => { + reject(err) } - }, - fail: (err) => { - reject(err) - } - }) + }) + } else { + resolve() + } }) } this.$refs.uForm.validate(valid => { if (valid) { Promise.all([uploadSignImage(),uploadAdminSignImage()]).then(res => { console.log(res) - this.form.sign_image_id = res[0].id - this.form.admin_sign_image_id = res[1].id + if (res[0]?.id) { + this.form.sign_image_id = res[0].id + } + if (res[1]?.id) { + this.form.admin_sign_image_id = res[1].id + } this.form.file_ids = this.$refs.uUpload.lists.filter(i => i.progress === 100).map(i => i.response?.id) if (this.type === 'add') { delete this.form.id @@ -435,6 +448,7 @@ export default { async getDetail () { const res = await this.$u.api.adminLongInsuranceDetail(this.id) + this.detail = res; for (let key in this.form) { this.form[key] = res[key] } @@ -447,27 +461,24 @@ export default { this.temp2 = /工作证/g.test(res.accessory) let resTools = res.tools?.split('|')?.filter(i => i.trim()) this.tools.forEach(item => { - item.checked = res.tools.indexOf(item.name) !== -1 + item.checked = res.tools?.indexOf(item.name) !== -1 }) - this.otherTool.name = resTools.find(i => !this.tools.find(j => j.name === i)) + this.otherTool.name = resTools?.find(i => !this.tools.find(j => j.name === i)) this.otherTool.checked = !!this.otherTool.name //serve let resServes = res.serve?.split('|')?.filter(i => i.trim()) this.serves.forEach(item => { - item.checked = res.serve.indexOf(item.name) !== -1 + item.checked = res.serve?.indexOf(item.name) !== -1 }) - this.otherServe.name = resServes.find(i => !this.serves.find(j => j.name === i)) + this.otherServe.name = resServes?.find(i => !this.serves.find(j => j.name === i)) this.otherServe.checked = !!this.otherServe.name //other let resOthers = res.other?.split('|')?.filter(i => i.trim()) this.others.forEach(item => { - item.checked = res.other.indexOf(item.name) !== -1 + item.checked = res.other?.indexOf(item.name) !== -1 }) - this.otherOther.name = resOthers.find(i => !this.others.find(j => j.name === i)) + this.otherOther.name = resOthers?.find(i => !this.others.find(j => j.name === i)) this.otherOther.checked = !!this.otherOther.name - - this.$u.vuex('vuex_admin_sign_image', res.admin_sign_image?.url) - this.$u.vuex('vuex_sign_image', res.sign_image?.url) } }, onLoad(option) { diff --git a/package_sub/pages/longInsurance/longInsuranceDetail.vue b/package_sub/pages/longInsurance/longInsuranceDetail.vue index 51fa3cf..1322bfa 100644 --- a/package_sub/pages/longInsurance/longInsuranceDetail.vue +++ b/package_sub/pages/longInsurance/longInsuranceDetail.vue @@ -95,7 +95,7 @@ - + 服务对象/家属签名 - + 调查人员签名 @@ -375,4 +375,8 @@ export default { } } } + +.sign ::v-deep .u-image { + transform: rotate(270deg); +} diff --git a/pages/sign/sign.vue b/pages/sign/sign.vue index 91c20e5..a465227 100644 --- a/pages/sign/sign.vue +++ b/pages/sign/sign.vue @@ -1,7 +1,7 @@