我的名片 下载调整

This commit is contained in:
浅念
2025-04-03 11:21:13 +08:00
parent fde5830450
commit 07e477972e
6 changed files with 251 additions and 69 deletions
+3 -1
View File
@@ -193,5 +193,7 @@ export default {
Nodata:'No data available at the moment!',
versionmsg:'It is already the latest version!',
receiveOrder:'Collect Order',
loading:'loading'
loading:'loading',
downmp:'Download business card',
downmpmsg:'Are you sure to download the current business card image?',
}
+179 -4
View File
@@ -2,16 +2,191 @@ export default {
// 可以以页面为单位来写,比如首页的内容,写在index字段,个人中心写在center,共同部分写在common部分
tabbar: {
home: 'начало',
highseas: 'открытое море',
customer: 'клиент',
mine: 'мой'
},
navbar: {
customerinfo: "Информация о клиенте",
addfollowup: "Добавить последующие ",
highseas: "Открытое море клиентов",
userList: "Управление клиентами",
tagselect: "Фильтр по меткам",
persondata: "Личные данные",
businesscard: "Моя визитка"
},
home: {
desc: 'начало'
desc: "начало",
langbtn: "Сменить язык",
title: "Вы сопровождаете линке",
day: "день",
databf: "Данные Брифинги",
addxs: "Новые Подсказка",
addkh: "Новые клиенты",
addbf: "Новые посещения",
addgj: "Новые последующие "
},
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: {
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:'Вы уверены в загрузке текущей карты?',
}
+3 -1
View File
@@ -192,6 +192,8 @@ export default {
Nodata:'暂无数据!',
versionmsg:'已是最新版本!',
receiveOrder:'领单',
loading:'加载中'
loading:'加载中',
downmp:'下载名片',
downmpmsg:'确定下载当前名片图吗?',
}
+1 -1
View File
@@ -7,7 +7,7 @@
<view class="content">
<view class="contop">
<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> -->
</view>
<view class="right">
+64 -61
View File
@@ -13,7 +13,7 @@
<view class="ftitle">{{userinfo.position}}</view>
</view>
<view>
<image :src="userinfo.avatar" mode=""></image>
<image :src="imageSrc" mode="" crossOrigin="anonymous" ></image>
</view>
</view>
<view class="conts">
@@ -38,7 +38,7 @@
</view>
</view>
<view class="code">
<image :src="userinfo.socialize_pic_url" mode=""></image>
<image :src="imageSrcewm" mode="" crossOrigin="anonymous" ></image>
<view>{{userinfo.socialize}}</view>
</view>
<!-- <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">
<button class="btn" @click="goDown">{{$t('download')}}</button>
</view>
<!-- 手机端预览容器 -->
<view v-if="showPreview" class="preview-mask" @click="showPreview = false">
<image :src="previewUrl" mode="aspectFit"></image>
</view>
</view>
</template>
@@ -59,7 +63,11 @@
export default {
data() {
return {
userinfo:{}
userinfo:{},
showPreview: false,
previewUrl: '',
imageSrc:'',
imageSrcewm:'',
}
},
onLoad() {
@@ -76,64 +84,55 @@
method:'get',
}).then(res => {
that.userinfo = res.data.data;
that.downloadImageToLocal(res.data.data.avatar_url,'imageSrc')
that.downloadImageToLocal(res.data.data.socialize_pic_url,'imageSrcewm')
})
},
saveImgFile(baseImg){
const bitmap = new plus.nativeObj.Bitmap('test')
bitmap.loadBase64Data(
baseImg,
function () {
const url = '_doc/' + new Date().getTime() + '.png' // url为时间戳命名方式
bitmap.save(
url,
{
overwrite: true // 是否覆盖
},
i => {
plus.gallery.save(
i.target,
function () {
uni.showToast({
title: '图片保存至相册成功',
icon: 'none'
});
bitmap.clear()
},
function (e) {
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()
}
)
async downloadImageToLocal(imageUrl,item) {
try {
// 1. 下载图片到临时路径
const { tempFilePath } = await new Promise((resolve, reject) => {
uni.downloadFile({
url: imageUrl,
success: resolve,
fail: reject,
});
});
// 2. 返回临时路径(可直接用于 <image> 显示)
console.log('下载成功,临时路径:', tempFilePath);
if(item =='imageSrc'){
this.imageSrc = tempFilePath;
}else{
this.imageSrcewm = tempFilePath;
}
} catch (err) {
console.error('下载失败:', err);
throw new Error('图片下载失败');
}
},
downloadImage(url, filename) {
// 创建一个隐藏的 <a> 标签
const link = document.createElement('a');
link.href = url;
link.download = filename;
// 触发点击事件
link.click();
downloadImage(url, canvas) {
const filename1 = '_doc/' + new Date().getTime() + '.png' // url为时间戳命名方式
if (uni.getSystemInfoSync().platform === 'h5') {
// 创建一个隐藏的 <a> 标签
const link = document.createElement('a');
link.href = url;
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(){
const element = document.getElementById('poster');
@@ -142,15 +141,19 @@
backgroundColor: '#f5f5f5', //海报的背景颜色
useCORS: true ,// 允许跨域
allowTaint: true, // 允许污染画布
scale: 2, // 提高清晰度
logging: false // 关闭日志(可选)
}).then(canvas => {
// canvas 其实就是我们所讲的res 的意思 返回报文的意思
let baseImg = canvas.toDataURL('image/png')
uni.showModal ({
title: '下载名片',
content: '确定下载当前名片图吗?',
title: this.$t('downmp'),
content: this.$t('downmpmsg'),
cancelText: this.$t('cancel'),
confirmText: this.$t('confirm'),
success: function (res) {
if (res.confirm) {
that.downloadImage(baseImg, 'screenshot.png');
that.downloadImage(baseImg,canvas);
} else if (res.cancel) {
console.log('用户点击取消');
}
+1 -1
View File
@@ -4,7 +4,7 @@
<view class="content">
<view class="topimg">
<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> -->
</uni-file-picker>
<view>{{$t('mine.changeavatar')}}</view>