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 @@
+
+
+
+
+
+
+
+
+
+
+ {{item.created_at}}
+
+ {{item.magnitude_txt}}
+ {{item.follow==0?$t('followup'):item.follow==1?$t('deal'):$t('lost')}}
+
+
+
+
+
+ {{item.contacts}}{{item.phone}}
+ {{item.grade_txt}}
+
+ {{item.sex_txt}} | {{item.country_name}}{{item.car_type_name}}
+
+
+ # {{tag_name}}
+
+
+
+
+ {{$t('call')}}
+ {{$t('customer.addfollow')}}
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{item.magnitude_txt}}
+
+
+
+
+
+
+
+ {{item.contacts}}
+ {{item.country_name}}
+
+
+ {{$t('details')}}
+ {{$t('receiveOrder')}}
+
+
+
+
+
+
+
+
+ {{$t('cancel')}}
+ {{$t('confirm')}}
+
+
+
+
+
+
+
+
+
+
+
+
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 @@