diff --git a/common/locales/en.js b/common/locales/en.js index 28ec83f..e86ab63 100644 --- a/common/locales/en.js +++ b/common/locales/en.js @@ -2,6 +2,7 @@ export default { // 可以以页面为单位来写,比如首页的内容,写在index字段,个人中心写在center,共同部分写在common部分 tabbar: { home: 'home', + highseas: 'HighSeas', customer: 'customer', mine: 'mine' }, @@ -9,6 +10,8 @@ export default { customerinfo:'Customer Information', addfollowup:'Add follow-up', userList:'Customer Management', + tagselect:'Tag filtering', + highseas:'Customer High Seas', persondata:'Personal Data', businesscard:'Business card' @@ -94,7 +97,10 @@ export default { recyclebin:'Recycle bin', restore:'Restore', position:'Position', - positioninput:'Please fill in the position' + positioninput:'Please fill in the position', + QRcode:'QR code', + WeChat:'WeChat', + UploadQRcode:'Upload QR code' }, call:'Call', delete:'Delete', @@ -109,6 +115,7 @@ export default { confirm:'confirm', prompt:'prompt', deletemsg:'Are you sure you want to delete this customer?', + receivemsg:'Are you sure you want to claim this customer?', submit:'Submit', gender:'Gender', gender0:'unknown', @@ -184,5 +191,9 @@ export default { remarks:'Remarks', channel:'Channel', Nodata:'No data available at the moment!', - versionmsg:'It is already the latest version!' + versionmsg:'It is already the latest version!', + receiveOrder:'Collect Order', + 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..b6b6077 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: "Микросхема", + 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 a9d1444..d1fe67f 100644 --- a/common/locales/zh.js +++ b/common/locales/zh.js @@ -2,13 +2,16 @@ export default { // 可以以页面为单位来写,比如首页的内容,写在index字段,个人中心写在center,共同部分写在common部分 tabbar: { home: '首页', + highseas: '公海', customer: '客户', mine: '我的' }, navbar:{ customerinfo:'客户资料', addfollowup:'添加跟进', + highseas:'客户公海', userList:'客户管理', + tagselect:'标签筛选', persondata:'个人资料', businesscard:'我的名片' }, @@ -94,6 +97,9 @@ export default { restore:'恢复客户', position:'职位', positioninput:'请填写职位', + QRcode:'二维码', + WeChat:'微信', + UploadQRcode:'上传二维码' }, call:'呼叫', delete:'删除', @@ -108,6 +114,7 @@ export default { confirm:'确定', prompt:'提示', deletemsg:'确定要删除此客户吗?', + receivemsg:'确定要领取此客户吗?', submit:'提交', gender:'性别', gender0:'未知', @@ -183,6 +190,10 @@ export default { remarks:'备注', channel:'渠道', Nodata:'暂无数据!', - versionmsg:'已是最新版本!' + versionmsg:'已是最新版本!', + receiveOrder:'领单', + loading:'加载中', + downmp:'下载名片', + downmpmsg:'确定下载当前名片图吗?', } \ No newline at end of file diff --git a/pages.json b/pages.json index 6c91f48..0447de8 100644 --- a/pages.json +++ b/pages.json @@ -86,6 +86,15 @@ "enablePullDownRefresh": false, "navigationStyle":"custom"// 去掉微信小程序顶部导航 } + }, + { + "path" : "pages/index/highseas",//客户公海 + "style" : + { + "navigationBarTitleText" : "", + "enablePullDownRefresh": false, + "navigationStyle":"custom"// 去掉微信小程序顶部导航 + } } ], "subPackages":[ @@ -154,6 +163,15 @@ "enablePullDownRefresh": false, "navigationStyle":"custom"// 去掉微信小程序顶部导航 } + }, + { + "path" : "tagcustomer",//标签筛选 + "style" : + { + "navigationBarTitleText" : "", + "enablePullDownRefresh": false, + "navigationStyle":"custom"// 去掉微信小程序顶部导航 + } } ] },{ @@ -262,6 +280,12 @@ "selectedIconPath": "/static/image/home-s.png", "text": "首页" }, + { + "pagePath": "pages/index/highseas", + "iconPath": "/static/image/highseas.png", + "selectedIconPath": "/static/image/highseas-s.png", + "text": "公海" + }, { "pagePath": "pages/index/customer", "iconPath": "/static/image/user.png", diff --git a/pages/customer/detile.vue b/pages/customer/detile.vue index ce0568a..c6310e4 100644 --- a/pages/customer/detile.vue +++ b/pages/customer/detile.vue @@ -7,7 +7,7 @@ {{datas.contacts}} {{datas.magnitude_txt}} - {{datas.follow_txt}} + {{datas.follow==0?$t('followup'):datas.follow==1?$t('deal'):$t('lost')}} @@ -37,7 +37,7 @@ - {{item.name}} + {{item.name}} @@ -64,7 +64,7 @@ - {{$t('customer.followrecord')}} {{datas.follow_txt}} + {{$t('customer.followrecord')}} {{datas.follow==0?$t('followup'):datas.follow==1?$t('deal'):$t('lost')}} {{$t('navbar.addfollowup')}} @@ -332,6 +332,11 @@ } }) }, + tagselects(item){ //标签筛选 + uni.navigateTo({ + url: '/pages/customer/tagcustomer?tag_id='+item.id+'&name='+item.name + }); + }, isActive(parentId, childId) { return this.activeMap[parentId] === childId; }, @@ -594,7 +599,7 @@ color: white; padding: 4px 10px; border-radius: 20px; - font-size: 28rpx; + font-size: 24rpx; } } } diff --git a/pages/customer/editdetile.vue b/pages/customer/editdetile.vue index 9f46395..a9ec275 100644 --- a/pages/customer/editdetile.vue +++ b/pages/customer/editdetile.vue @@ -482,9 +482,6 @@ padding: 18px 20px; align-items: center; font-weight: 500; - .item{ - width: 100px; - } } .right{ text-align: right; @@ -510,6 +507,7 @@ width: 92%; margin-bottom: 40px; margin: 15px 4%; + font-size: 32rpx; } diff --git a/pages/customer/tagcustomer.vue b/pages/customer/tagcustomer.vue new file mode 100644 index 0000000..715ee98 --- /dev/null +++ b/pages/customer/tagcustomer.vue @@ -0,0 +1,202 @@ + + + + + diff --git a/pages/index/customer.vue b/pages/index/customer.vue index a167df2..f5d264b 100644 --- a/pages/index/customer.vue +++ b/pages/index/customer.vue @@ -152,10 +152,14 @@ }) uni.setTabBarItem({ index: 1, - text: this.$t('tabbar.customer') + text: this.$t('tabbar.highseas') }) uni.setTabBarItem({ index: 2, + text: this.$t('tabbar.customer') + }) + uni.setTabBarItem({ + index: 3, text: this.$t('tabbar.mine') }) }, diff --git a/pages/index/highseas.vue b/pages/index/highseas.vue new file mode 100644 index 0000000..280dfba --- /dev/null +++ b/pages/index/highseas.vue @@ -0,0 +1,305 @@ + + + + + diff --git a/pages/index/index.vue b/pages/index/index.vue index 1392d8e..2e09fa6 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -151,10 +151,14 @@ }) uni.setTabBarItem({ index: 1, - text: this.$t('tabbar.customer') + text: this.$t('tabbar.highseas') }) uni.setTabBarItem({ index: 2, + text: this.$t('tabbar.customer') + }) + uni.setTabBarItem({ + index: 3, text: this.$t('tabbar.mine') }) this.getstatistics() @@ -226,10 +230,14 @@ }) uni.setTabBarItem({ index: 1, - text: this.$t('tabbar.customer') + text: this.$t('tabbar.highseas') }) uni.setTabBarItem({ index: 2, + text: this.$t('tabbar.customer') + }) + uni.setTabBarItem({ + index: 3, text: this.$t('tabbar.mine') }) var language = e.value[0].id diff --git a/pages/index/mine.vue b/pages/index/mine.vue index 9171886..ab8fc91 100644 --- a/pages/index/mine.vue +++ b/pages/index/mine.vue @@ -7,7 +7,7 @@ - + @@ -18,7 +18,7 @@ ID:{{userinfo.sn}} - + {{$t('navbar.businesscard')}} @@ -113,10 +113,14 @@ }) uni.setTabBarItem({ index: 1, - text: this.$t('tabbar.customer') + text: this.$t('tabbar.highseas') }) uni.setTabBarItem({ index: 2, + text: this.$t('tabbar.customer') + }) + uni.setTabBarItem({ + index: 3, text: this.$t('tabbar.mine') }) this.getuserinfo() diff --git a/pages/mine/businesscard.vue b/pages/mine/businesscard.vue index 6bde537..8101592 100644 --- a/pages/mine/businesscard.vue +++ b/pages/mine/businesscard.vue @@ -13,7 +13,7 @@ {{userinfo.position}} - + @@ -29,10 +29,17 @@ {{userinfo.country_name}} + + + HTTPS://HESUCAR.COM + + + {{userinfo.company}} + - - 微信 + + {{userinfo.socialize}} + + + @@ -52,7 +63,11 @@ export default { data() { return { - userinfo:{} + userinfo:{}, + showPreview: false, + previewUrl: '', + imageSrc:'', + imageSrcewm:'', } }, onLoad() { @@ -69,80 +84,76 @@ 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'); var that= this html2canvas(element, { backgroundColor: '#f5f5f5', //海报的背景颜色 - useCORS: true // 允许跨域 + 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('用户点击取消'); } @@ -156,7 +167,8 @@