master
xy 1 year ago
parent bcfdfbb7b9
commit 1668d804e1

@ -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':

@ -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()
}
})
})

@ -48,7 +48,7 @@
<u-form-item label="所在位置">
<view>
<u-button type="primary" size="mini" :throttle-time="3000" @click="getLoaction"></u-button>
<view>
<view style="word-break: break-all;">
{{ `${(form.lng || form.lat) ? ('(' + form.lng + ',' + form.lat + ')') : ''}${form.address}` }}
</view>
</view>

@ -25,7 +25,7 @@
<u-form-item label="所在位置">
<view>
<u-button type="primary" size="mini" :throttle-time="3000" @click="getLoaction"></u-button>
<view>
<view style="word-break: break-all;">
{{ `${(form.lng || form.lat) ? ('(' + form.lng + ',' + form.lat + ')') : ''}${form.address}` }}
</view>
</view>

@ -83,25 +83,25 @@
<u-form-item label="服务对象/家属签名" required prop="sign_image_id">
<view>
<u-button type="primary" size="mini" :throttle-time="3000" @click="pageTo('/pages/sign/sign?key=vuex_sign_image')"></u-button>
<image v-if="vuex_sign_image"
:src="vuex_sign_image"
style="height: 260rpx;object-fit: cover"
@click="showimg(vuex_sign_image)"></image>
<image v-if="vuex_sign_image || (detail.sign_image && detail.sign_image.url)"
:src="vuex_sign_image || (detail.sign_image && detail.sign_image.url)"
style="width: 260rpx;object-fit: cover;transform: rotate(270deg);"
@click="showimg(vuex_sign_image || (detail.sign_image && detail.sign_image.url))"></image>
</view>
</u-form-item>
<u-form-item label="调查人员签名" required prop="admin_sign_image_id">
<view>
<u-button type="primary" size="mini" :throttle-time="3000" @click="pageTo('/pages/sign/sign?key=vuex_admin_sign_image')"></u-button>
<image v-if="vuex_admin_sign_image"
:src="vuex_admin_sign_image"
style="height: 260rpx;object-fit: cover"
@click="showimg(vuex_admin_sign_image)"></image>
<image v-if="vuex_admin_sign_image || (detail.admin_sign_image && detail.admin_sign_image.url)"
:src="vuex_admin_sign_image || (detail.admin_sign_image && detail.admin_sign_image.url)"
style="width: 260rpx;object-fit: cover;transform: rotate(270deg);"
@click="showimg(vuex_admin_sign_image || (detail.admin_sign_image && detail.admin_sign_image.url))"></image>
</view>
</u-form-item>
<u-form-item label="所在位置">
<view>
<u-button type="primary" size="mini" :throttle-time="3000" @click="getLoaction"></u-button>
<view>
<view style="word-break: break-all;">
{{ `${(form.lng || form.lat) ? ('(' + form.lng + ',' + form.lat + ')') : ''}${form.address}` }}
</view>
</view>
@ -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) {

@ -95,7 +95,7 @@
<view class="bottom-item__value">
<u-image :width="300"
:height="300"
style="margin-bottom: 10rpx"
style="margin-bottom: 10rpx;"
:border-radius="8"
v-for="img in detail.files"
:key="img.id"
@ -103,23 +103,23 @@
@click="showimg(img.url)"></u-image>
</view>
</view>
<view class="bottom-item">
<view class="bottom-item sign">
<view class="bottom-item__title">服务对象/家属签名</view>
<view class="bottom-item__value">
<u-image :width="300"
:height="300"
style="margin-bottom: 10rpx"
style="margin-bottom: 10rpx;"
:border-radius="8"
:src="detail.sign_image ? detail.sign_image.url : ''"
@click="showimg(detail.sign_image ? detail.sign_image.url : '')"></u-image>
</view>
</view>
<view class="bottom-item">
<view class="bottom-item sign">
<view class="bottom-item__title">调查人员签名</view>
<view class="bottom-item__value">
<u-image :width="300"
:height="300"
style="margin-bottom: 10rpx"
style="margin-bottom: 10rpx;"
:border-radius="8"
:src="detail.admin_sign_image ? detail.admin_sign_image.url : ''"
@click="showimg(detail.admin_sign_image ? detail.admin_sign_image.url : '')"></u-image>
@ -375,4 +375,8 @@ export default {
}
}
}
.sign ::v-deep .u-image {
transform: rotate(270deg);
}
</style>

@ -1,7 +1,7 @@
<template>
<view class="sign">
<canvas canvas-id="sign-cnv" :style="{ height: cnv.height + 'px', width: cnv.width + 'px' }"></canvas>
<image ref="resultImg" :src="src" alt="" @load="resultImgLoad"></image>
<image class="hide-img" ref="resultImg" :src="src" alt="" @load="resultImgLoad"></image>
<view class="sign-bkg">
<view class="sign-bkg__word">
<span></span>
@ -30,7 +30,7 @@
<script>
import {
base64ToFile
base64ToFile, writeFile
} from '@/common/util.js'
import {
ROOTPATH
@ -56,11 +56,11 @@ export default {
},
methods: {
resultImgLoad (e) {
this.Img = e.detail;
let rate = this.Img.width / this.Img.height;
this.cnv.width = 300 / rate;
this.cnv.height = 300;
this.rotateImage(this.src, 270)
// this.Img = e.detail;
// let rate = this.Img.width / this.Img.height;
// this.cnv.width = this.Img.height;
// this.cnv.height = this.Img.width ;
// this.rotateImage(this.src, 270)
},
pageBack () {
uni.navigateBack()
@ -110,7 +110,15 @@ export default {
// app | H5 | base64
if (res.tempFilePath) {
//this.$u.vuex('vuex_sign_base64', res.tempFilePath)
this.src = res.tempFilePath;
writeFile(res.tempFilePath).then(url => {
// console.log(url)
// this.src = url
this.$u.vuex(this.saveKey, url)
setTimeout(() => {
this.pageBack()
}, 500)
})
// this.rotateBase64Img(res.tempFilePath, -90).then(res => {
// this.$u.vuex(this.saveKey, res)
// this.pageBack()
@ -132,6 +140,14 @@ export default {
</script>
<style scoped lang="scss">
.hide-img {
position: fixed;
width: 200px;
object-fit: contain;
top: 0;
left: 0;
z-index: 999999999;
}
@media screen and (orientation: portrait) {
.sign {
height: 100vh;

Loading…
Cancel
Save