我的名片 下载调整
This commit is contained in:
@@ -193,5 +193,7 @@ export default {
|
|||||||
Nodata:'No data available at the moment!',
|
Nodata:'No data available at the moment!',
|
||||||
versionmsg:'It is already the latest version!',
|
versionmsg:'It is already the latest version!',
|
||||||
receiveOrder:'Collect Order',
|
receiveOrder:'Collect Order',
|
||||||
loading:'loading'
|
loading:'loading',
|
||||||
|
downmp:'Download business card',
|
||||||
|
downmpmsg:'Are you sure to download the current business card image?',
|
||||||
}
|
}
|
||||||
+179
-4
@@ -2,16 +2,191 @@ export default {
|
|||||||
// 可以以页面为单位来写,比如首页的内容,写在index字段,个人中心写在center,共同部分写在common部分
|
// 可以以页面为单位来写,比如首页的内容,写在index字段,个人中心写在center,共同部分写在common部分
|
||||||
tabbar: {
|
tabbar: {
|
||||||
home: 'начало',
|
home: 'начало',
|
||||||
|
highseas: 'открытое море',
|
||||||
customer: 'клиент',
|
customer: 'клиент',
|
||||||
mine: 'мой'
|
mine: 'мой'
|
||||||
},
|
},
|
||||||
|
navbar: {
|
||||||
|
customerinfo: "Информация о клиенте",
|
||||||
|
addfollowup: "Добавить последующие ",
|
||||||
|
highseas: "Открытое море клиентов",
|
||||||
|
userList: "Управление клиентами",
|
||||||
|
tagselect: "Фильтр по меткам",
|
||||||
|
persondata: "Личные данные",
|
||||||
|
businesscard: "Моя визитка"
|
||||||
|
},
|
||||||
home: {
|
home: {
|
||||||
desc: 'начало'
|
desc: "начало",
|
||||||
|
langbtn: "Сменить язык",
|
||||||
|
title: "Вы сопровождаете линке",
|
||||||
|
day: "день",
|
||||||
|
databf: "Данные Брифинги",
|
||||||
|
addxs: "Новые Подсказка",
|
||||||
|
addkh: "Новые клиенты",
|
||||||
|
addbf: "Новые посещения",
|
||||||
|
addgj: "Новые последующие "
|
||||||
},
|
},
|
||||||
customer: {
|
customer: {
|
||||||
desc: 'клиент'
|
desc: "клиент",
|
||||||
|
title: "Управление клиентами",
|
||||||
|
inputhd: "Введите имя клиента или номер телефона",
|
||||||
|
followtype: "Способ последующие ",
|
||||||
|
Online: "Онлайн последующие ",
|
||||||
|
Visit: "Посещение",
|
||||||
|
addfollow: "Добавить последующие",
|
||||||
|
followtime: "Время последующие ",
|
||||||
|
updataimg: "Загрузить скриншот последнего чата",
|
||||||
|
followrecord: "Запись последующие ",
|
||||||
|
followlocation: "Текущее местоположение",
|
||||||
|
locationimg: "Сфотографировать текущее местоположение",
|
||||||
|
Visitcontent: "Содержание посещения",
|
||||||
|
Visiinputhd: "Введите содержание посещения~",
|
||||||
|
Remarks: "Примечание (необязательно)",
|
||||||
|
Remarksinputhd: "Введите примечание~",
|
||||||
|
NextReminder: "Следующее напоминание о последующие ",
|
||||||
|
CustomerChannel: "Канал клиента",
|
||||||
|
CustomerChannelinput: "Выберите канал клиента",
|
||||||
|
Medal: "Коммерческая возможность",
|
||||||
|
Medalinput: "Выберите коммерческую возможность",
|
||||||
|
CustomerName: "Имя клиента",
|
||||||
|
CustomerNameinput: "Введите имя клиента",
|
||||||
|
WhatsAppinput: "Введите WhatsApp",
|
||||||
|
Emailinput: "Введите Email",
|
||||||
|
Customerph: "Предпочтения клиента",
|
||||||
|
Customerphinput: "Выберите предпочтения клиента",
|
||||||
|
Cstomerfj: "Классификация клиентов",
|
||||||
|
Cstomerfjinput: "Выберите классификацию",
|
||||||
|
Cstomertag: "Метка клиента",
|
||||||
|
Cstomertaginput: "Выберите",
|
||||||
|
Country: "Страна",
|
||||||
|
Countryinput: "Выберите страну",
|
||||||
|
Company: "Компания",
|
||||||
|
Companyinput: "Определить местоположение",
|
||||||
|
CustomerScreening: "Фильтрация клиентов"
|
||||||
},
|
},
|
||||||
mine: {
|
mine: {
|
||||||
desc: 'мой'
|
desc: "мой",
|
||||||
}
|
title: "мой",
|
||||||
|
msg: "Уведомления",
|
||||||
|
cpassword: "Изменить пароль",
|
||||||
|
contact: "Связаться с поддержкой",
|
||||||
|
feedback: "Отправить заявку",
|
||||||
|
about: "О нас",
|
||||||
|
logoff: "Удалить аккаунт",
|
||||||
|
logout: "Выйти",
|
||||||
|
kfphone: "Телефон поддержки",
|
||||||
|
lxcall: "Контакт",
|
||||||
|
lxcallinputhd: "Введите ваш номер",
|
||||||
|
feedbackinputhd: "Введите ваши ценные предложения~",
|
||||||
|
nickname: "Никнейм",
|
||||||
|
nicknameinputhd: "Введите никнейм",
|
||||||
|
idinputhd: "Введите ID",
|
||||||
|
Versionup: "Обновление версии",
|
||||||
|
Privacy: "Политика конфиденциальности",
|
||||||
|
UserAgreement: "Пользовательское соглашение",
|
||||||
|
copyright: "© Henan Xinyouhe Technology Co., Ltd. Все права защищены",
|
||||||
|
logoffmsg: "Следующая информация будет удалена без возможности восстановления",
|
||||||
|
logoffts1: "Идентификационные и учетные данные",
|
||||||
|
logoffts2: "Вся информация о клиентах",
|
||||||
|
logoffts3: "Личная информация",
|
||||||
|
logoffbtn: "Подтвердить удаление",
|
||||||
|
changeavatar: "Нажмите, чтобы сменить аватар",
|
||||||
|
recyclebin: "Корзина",
|
||||||
|
restore: "Восстановить клиента",
|
||||||
|
position: "Должность",
|
||||||
|
positioninput: "Введите должность",
|
||||||
|
QRcode: "QR-код",
|
||||||
|
WeChat: "WeChat",
|
||||||
|
UploadQRcode: "Загрузить QR-код"
|
||||||
|
},
|
||||||
|
call: "Позвонить",
|
||||||
|
delete: "Удалить",
|
||||||
|
all: "Все",
|
||||||
|
tday: "Сегодня",
|
||||||
|
threeday: "Последние 3 дня",
|
||||||
|
sevenday: "Последние 7 дней",
|
||||||
|
followup: "Последующие меры",
|
||||||
|
deal: "Завершено",
|
||||||
|
lost: "Потеряно",
|
||||||
|
cancel: "Отмена",
|
||||||
|
confirm: "Подтвердить",
|
||||||
|
prompt: "Подсказка",
|
||||||
|
deletemsg: "Вы уверены, что хотите удалить этого клиента?",
|
||||||
|
receivemsg: "Вы уверены, что хотите принять этого клиента?",
|
||||||
|
submit: "Отправить",
|
||||||
|
gender: "Пол",
|
||||||
|
gender0: "Неизвестно",
|
||||||
|
gender1: "Мужской",
|
||||||
|
gender2: "Женский",
|
||||||
|
Region: "Страна/регион",
|
||||||
|
Regioninputhd: "Выбрать",
|
||||||
|
login: "Войти",
|
||||||
|
threelogin: "Вход через Третья сторона",
|
||||||
|
account: "Аккаунт",
|
||||||
|
password: "Пароль",
|
||||||
|
fgpassword: "Забыли пароль",
|
||||||
|
Facebook: "Feishu",
|
||||||
|
email: "Email",
|
||||||
|
emailinput: "Введите email",
|
||||||
|
phone: "Телефон",
|
||||||
|
agreeMsg: "Я прочитал и согласен с",
|
||||||
|
and: "и",
|
||||||
|
empty: "Нет записей~",
|
||||||
|
times: "Время",
|
||||||
|
address: "Адрес",
|
||||||
|
emailerr: "Email не может быть пустым",
|
||||||
|
emailerr1: "Неверный формат email",
|
||||||
|
passworerr: "Пароль не может быть пустым",
|
||||||
|
passworerr1: "Пароли не совпадают",
|
||||||
|
agreementarr: "Пожалуйста, сначала согласитесь с пользовательским соглашением и политикой конфиденциальности",
|
||||||
|
reg: "Регистрация",
|
||||||
|
codeerr: "Код подтверждения не может быть пустым",
|
||||||
|
getcode: "Получить код",
|
||||||
|
code: "Код подтверждения",
|
||||||
|
save: "Сохранить",
|
||||||
|
resetpassword: "Сбросить пароль",
|
||||||
|
newpassword: "Новый пароль",
|
||||||
|
Confirmpassword: "Подтвердите пароль",
|
||||||
|
Confirmbtn: "Подтвердить изменение",
|
||||||
|
edtbtn: "Редактировать данные",
|
||||||
|
zh: "Китайский",
|
||||||
|
en: "Английский",
|
||||||
|
ru: "Русский",
|
||||||
|
subsuccess: "Успешно отправлено",
|
||||||
|
onedaygj: "Через 1 день",
|
||||||
|
threedaygj: "Через 3 дня",
|
||||||
|
sevendaygj: "Через 7 дней",
|
||||||
|
autodaygj: "Настроить",
|
||||||
|
nexttime: "Настройка напоминания о следующем последующие ",
|
||||||
|
details: "Детали",
|
||||||
|
auth: "Авторизация Feishu",
|
||||||
|
inputnl: "Выберите",
|
||||||
|
noresults: "Нет результатов",
|
||||||
|
keyword: "Введите ключевое слово для поиска",
|
||||||
|
restoremsg: "Подтвердите восстановление данных клиента?",
|
||||||
|
onedayn: "В течение 1 дня",
|
||||||
|
threedayn: "В течение 3 дней",
|
||||||
|
sevendayn: "В течение 7 дней",
|
||||||
|
follow: " последующие ",
|
||||||
|
timeout: "Просрочено",
|
||||||
|
hour: "час",
|
||||||
|
minute: "мин",
|
||||||
|
second: "сек",
|
||||||
|
nextgjtime: "Время следующего последующие ",
|
||||||
|
Remindergj: "Напоминание о последующие ",
|
||||||
|
callPhonemsg: "Ошибка номера!",
|
||||||
|
download: "Скачать",
|
||||||
|
addtag: "Добавить метку",
|
||||||
|
CustomerProfile: "Профиль клиента",
|
||||||
|
CustomerProfilemag: "Нет меток профиля!",
|
||||||
|
retract: "Свернуть",
|
||||||
|
expand: "Развернуть",
|
||||||
|
remarks: "Примечание",
|
||||||
|
channel: "Канал",
|
||||||
|
Nodata: "Нет данных!",
|
||||||
|
versionmsg: "Уже последняя версия!",
|
||||||
|
receiveOrder: "Принять заказ",
|
||||||
|
loading: "Загрузка",
|
||||||
|
downmp:'Скачать визитку',
|
||||||
|
downmpmsg:'Вы уверены в загрузке текущей карты?',
|
||||||
}
|
}
|
||||||
@@ -192,6 +192,8 @@ export default {
|
|||||||
Nodata:'暂无数据!',
|
Nodata:'暂无数据!',
|
||||||
versionmsg:'已是最新版本!',
|
versionmsg:'已是最新版本!',
|
||||||
receiveOrder:'领单',
|
receiveOrder:'领单',
|
||||||
loading:'加载中'
|
loading:'加载中',
|
||||||
|
downmp:'下载名片',
|
||||||
|
downmpmsg:'确定下载当前名片图吗?',
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
<view class="content">
|
<view class="content">
|
||||||
<view class="contop">
|
<view class="contop">
|
||||||
<view class="">
|
<view class="">
|
||||||
<image class="userimg" :src="userinfo.avatar" mode=""></image>
|
<image class="userimg" :src="userinfo.avatar_url" mode=""></image>
|
||||||
<!-- <image class="userimg" src="/static/image/mine/user.png" mode=""></image> -->
|
<!-- <image class="userimg" src="/static/image/mine/user.png" mode=""></image> -->
|
||||||
</view>
|
</view>
|
||||||
<view class="right">
|
<view class="right">
|
||||||
|
|||||||
+64
-61
@@ -13,7 +13,7 @@
|
|||||||
<view class="ftitle">{{userinfo.position}}</view>
|
<view class="ftitle">{{userinfo.position}}</view>
|
||||||
</view>
|
</view>
|
||||||
<view>
|
<view>
|
||||||
<image :src="userinfo.avatar" mode=""></image>
|
<image :src="imageSrc" mode="" crossOrigin="anonymous" ></image>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="conts">
|
<view class="conts">
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="code">
|
<view class="code">
|
||||||
<image :src="userinfo.socialize_pic_url" mode=""></image>
|
<image :src="imageSrcewm" mode="" crossOrigin="anonymous" ></image>
|
||||||
<view>{{userinfo.socialize}}</view>
|
<view>{{userinfo.socialize}}</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- <view class="code" :class=" activeImg === share_one ? 'code_one' : activeImg === share_two ? 'code_two' : activeImg === share_three ? 'code_three' : 'code_one'">
|
<!-- <view class="code" :class=" activeImg === share_one ? 'code_one' : activeImg === share_two ? 'code_two' : activeImg === share_three ? 'code_three' : 'code_one'">
|
||||||
@@ -50,6 +50,10 @@
|
|||||||
<view class="foot">
|
<view class="foot">
|
||||||
<button class="btn" @click="goDown">{{$t('download')}}</button>
|
<button class="btn" @click="goDown">{{$t('download')}}</button>
|
||||||
</view>
|
</view>
|
||||||
|
<!-- 手机端预览容器 -->
|
||||||
|
<view v-if="showPreview" class="preview-mask" @click="showPreview = false">
|
||||||
|
<image :src="previewUrl" mode="aspectFit"></image>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -59,7 +63,11 @@
|
|||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
userinfo:{}
|
userinfo:{},
|
||||||
|
showPreview: false,
|
||||||
|
previewUrl: '',
|
||||||
|
imageSrc:'',
|
||||||
|
imageSrcewm:'',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onLoad() {
|
onLoad() {
|
||||||
@@ -76,64 +84,55 @@
|
|||||||
method:'get',
|
method:'get',
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
that.userinfo = res.data.data;
|
that.userinfo = res.data.data;
|
||||||
|
that.downloadImageToLocal(res.data.data.avatar_url,'imageSrc')
|
||||||
|
that.downloadImageToLocal(res.data.data.socialize_pic_url,'imageSrcewm')
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
saveImgFile(baseImg){
|
async downloadImageToLocal(imageUrl,item) {
|
||||||
const bitmap = new plus.nativeObj.Bitmap('test')
|
try {
|
||||||
bitmap.loadBase64Data(
|
// 1. 下载图片到临时路径
|
||||||
baseImg,
|
const { tempFilePath } = await new Promise((resolve, reject) => {
|
||||||
function () {
|
uni.downloadFile({
|
||||||
const url = '_doc/' + new Date().getTime() + '.png' // url为时间戳命名方式
|
url: imageUrl,
|
||||||
bitmap.save(
|
success: resolve,
|
||||||
url,
|
fail: reject,
|
||||||
{
|
});
|
||||||
overwrite: true // 是否覆盖
|
});
|
||||||
},
|
|
||||||
i => {
|
// 2. 返回临时路径(可直接用于 <image> 显示)
|
||||||
plus.gallery.save(
|
console.log('下载成功,临时路径:', tempFilePath);
|
||||||
i.target,
|
if(item =='imageSrc'){
|
||||||
function () {
|
this.imageSrc = tempFilePath;
|
||||||
uni.showToast({
|
}else{
|
||||||
title: '图片保存至相册成功',
|
this.imageSrcewm = tempFilePath;
|
||||||
icon: 'none'
|
}
|
||||||
});
|
|
||||||
bitmap.clear()
|
} catch (err) {
|
||||||
},
|
console.error('下载失败:', err);
|
||||||
function (e) {
|
throw new Error('图片下载失败');
|
||||||
uni.showToast({
|
}
|
||||||
title: '图片保存至相册失败',
|
|
||||||
icon: 'none'
|
|
||||||
});
|
|
||||||
// console.log('图片保存至相册失败:' + JSON.stringify(e))
|
|
||||||
bitmap.clear()
|
|
||||||
}
|
|
||||||
)
|
|
||||||
},
|
|
||||||
e => {
|
|
||||||
uni.showToast({
|
|
||||||
title: '图片保存失败1',
|
|
||||||
icon: 'none'
|
|
||||||
});
|
|
||||||
bitmap.clear()
|
|
||||||
}
|
|
||||||
)
|
|
||||||
},
|
|
||||||
e => {
|
|
||||||
uni.showToast({
|
|
||||||
title: '图片保存失败2',
|
|
||||||
icon: 'none'
|
|
||||||
});
|
|
||||||
bitmap.clear()
|
|
||||||
}
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
downloadImage(url, filename) {
|
downloadImage(url, canvas) {
|
||||||
// 创建一个隐藏的 <a> 标签
|
const filename1 = '_doc/' + new Date().getTime() + '.png' // url为时间戳命名方式
|
||||||
const link = document.createElement('a');
|
if (uni.getSystemInfoSync().platform === 'h5') {
|
||||||
link.href = url;
|
// 创建一个隐藏的 <a> 标签
|
||||||
link.download = filename;
|
const link = document.createElement('a');
|
||||||
// 触发点击事件
|
link.href = url;
|
||||||
link.click();
|
link.download = filename1;
|
||||||
|
// 触发点击事件
|
||||||
|
link.click();
|
||||||
|
}else {
|
||||||
|
canvas.toBlob((blob) => {
|
||||||
|
const blobUrl = URL.createObjectURL(blob);
|
||||||
|
const link = document.createElement('a');
|
||||||
|
link.href = blobUrl;
|
||||||
|
link.download = filename1;
|
||||||
|
document.body.appendChild(link);
|
||||||
|
link.click();
|
||||||
|
document.body.removeChild(link);
|
||||||
|
URL.revokeObjectURL(blobUrl); // 释放内存
|
||||||
|
}, 'image/png');
|
||||||
|
}
|
||||||
},
|
},
|
||||||
goDown(){
|
goDown(){
|
||||||
const element = document.getElementById('poster');
|
const element = document.getElementById('poster');
|
||||||
@@ -142,15 +141,19 @@
|
|||||||
backgroundColor: '#f5f5f5', //海报的背景颜色
|
backgroundColor: '#f5f5f5', //海报的背景颜色
|
||||||
useCORS: true ,// 允许跨域
|
useCORS: true ,// 允许跨域
|
||||||
allowTaint: true, // 允许污染画布
|
allowTaint: true, // 允许污染画布
|
||||||
|
scale: 2, // 提高清晰度
|
||||||
|
logging: false // 关闭日志(可选)
|
||||||
}).then(canvas => {
|
}).then(canvas => {
|
||||||
// canvas 其实就是我们所讲的res 的意思 返回报文的意思
|
// canvas 其实就是我们所讲的res 的意思 返回报文的意思
|
||||||
let baseImg = canvas.toDataURL('image/png')
|
let baseImg = canvas.toDataURL('image/png')
|
||||||
uni.showModal ({
|
uni.showModal ({
|
||||||
title: '下载名片',
|
title: this.$t('downmp'),
|
||||||
content: '确定下载当前名片图吗?',
|
content: this.$t('downmpmsg'),
|
||||||
|
cancelText: this.$t('cancel'),
|
||||||
|
confirmText: this.$t('confirm'),
|
||||||
success: function (res) {
|
success: function (res) {
|
||||||
if (res.confirm) {
|
if (res.confirm) {
|
||||||
that.downloadImage(baseImg, 'screenshot.png');
|
that.downloadImage(baseImg,canvas);
|
||||||
} else if (res.cancel) {
|
} else if (res.cancel) {
|
||||||
console.log('用户点击取消');
|
console.log('用户点击取消');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<view class="content">
|
<view class="content">
|
||||||
<view class="topimg">
|
<view class="topimg">
|
||||||
<uni-file-picker fileMediatype="image" limit="1" :list-styles="imageStyles" :del-icon="false" disable-preview @select="select" @delete="delfn('picture')">
|
<uni-file-picker fileMediatype="image" limit="1" :list-styles="imageStyles" :del-icon="false" disable-preview @select="select" @delete="delfn('picture')">
|
||||||
<image class="user" :src="userinfo.avatar"mode=""></image>
|
<image class="user" :src="userinfo.avatar_url"mode=""></image>
|
||||||
<!-- <image class="xj" src="/static/image/mine/xiangji.png" mode=""></image> -->
|
<!-- <image class="xj" src="/static/image/mine/xiangji.png" mode=""></image> -->
|
||||||
</uni-file-picker>
|
</uni-file-picker>
|
||||||
<view>{{$t('mine.changeavatar')}}</view>
|
<view>{{$t('mine.changeavatar')}}</view>
|
||||||
|
|||||||
Reference in New Issue
Block a user