diff --git a/common/locales/en.js b/common/locales/en.js index f9d3fe6..e86ab63 100644 --- a/common/locales/en.js +++ b/common/locales/en.js @@ -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?', } \ No newline at end of file diff --git a/common/locales/ru.js b/common/locales/ru.js index 0df8893..fafa538 100644 --- a/common/locales/ru.js +++ b/common/locales/ru.js @@ -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:'Вы уверены в загрузке текущей карты?', } \ No newline at end of file diff --git a/common/locales/zh.js b/common/locales/zh.js index 8319c51..d1fe67f 100644 --- a/common/locales/zh.js +++ b/common/locales/zh.js @@ -192,6 +192,8 @@ export default { Nodata:'暂无数据!', versionmsg:'已是最新版本!', receiveOrder:'领单', - loading:'加载中' + loading:'加载中', + downmp:'下载名片', + downmpmsg:'确定下载当前名片图吗?', } \ No newline at end of file diff --git a/pages/index/mine.vue b/pages/index/mine.vue index 5ec9a8b..ab8fc91 100644 --- a/pages/index/mine.vue +++ b/pages/index/mine.vue @@ -7,7 +7,7 @@ - + diff --git a/pages/mine/businesscard.vue b/pages/mine/businesscard.vue index 332f643..8101592 100644 --- a/pages/mine/businesscard.vue +++ b/pages/mine/businesscard.vue @@ -13,7 +13,7 @@ {{userinfo.position}} - + @@ -38,7 +38,7 @@ - + {{userinfo.socialize}} + + + @@ -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. 返回临时路径(可直接用于 显示) + console.log('下载成功,临时路径:', tempFilePath); + if(item =='imageSrc'){ + this.imageSrc = tempFilePath; + }else{ + this.imageSrcewm = tempFilePath; + } + + } catch (err) { + console.error('下载失败:', err); + throw new Error('图片下载失败'); + } }, - downloadImage(url, filename) { - // 创建一个隐藏的 标签 - 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') { + // 创建一个隐藏的 标签 + 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('用户点击取消'); } diff --git a/pages/mine/changinfo.vue b/pages/mine/changinfo.vue index fa8462e..94ce5e1 100644 --- a/pages/mine/changinfo.vue +++ b/pages/mine/changinfo.vue @@ -4,7 +4,7 @@ - + {{$t('mine.changeavatar')}}