标签管理页面

This commit is contained in:
浅念
2025-03-26 17:02:04 +08:00
parent be8674fd51
commit 8583ff2543
12 changed files with 298 additions and 20 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
// const baseUrl = "http://219.157.255.213:9007/"; //这里放置url域名32044
// const baseUrl = "http://api.crm.hnxinyouhe.com/"; //这里放置url域名32044
const baseUrl = "http://192.168.50.9:8787/"; //这里放置url域名32044
const baseUrl = "http://219.157.255.213:25329/"; //这里放置url域名32044
// const baseUrl = "/api/"; //这里放置url域名32044
export function request(options){//封装的requset
let { url,data,method } = options;
+4 -1
View File
@@ -56,6 +56,8 @@ export default {
Customerphinput:'Please select customer preferences',
Cstomerfjinput:'Please select customer rating',
Countryinput:'Please select a country',
Cstomertag:'Label',
Cstomertaginput:'Please select',
Company:'Company',
Companyinput:'Go locate it',
CustomerScreening:'Customer Screening',
@@ -172,5 +174,6 @@ export default {
second:'second',
nextgjtime:'Next follow up time',
Remindergj:'Follow up reminder',
callPhonemsg:'Dial the wrong number!'
callPhonemsg:'Dial the wrong number!',
download:'Download'
}
+4 -1
View File
@@ -53,6 +53,8 @@ export default {
Customerphinput:'请选择客户偏好',
Cstomerfj:'客户分级',
Cstomerfjinput:'请选择客户分级',
Cstomertag:'客户标签',
Cstomertaginput:'请选择',
Country:'国家',
Countryinput:'请选择国家',
Company:'公司',
@@ -171,5 +173,6 @@ export default {
second:'秒',
nextgjtime:'下次跟进时间',
Remindergj:'跟进提醒',
callPhonemsg:'拨打号码错误!'
callPhonemsg:'拨打号码错误!',
download:'下载'
}
+152 -3
View File
@@ -77,6 +77,14 @@
</view>
</view>
<u-line></u-line>
<view class="cell">
<view class="item">{{$t('customer.Cstomertag')}}</view>
<view class="right select" @click="showtag = true">
<view class="" :class="['content2', { placeholder: !grade_name }]">{{grade_name || $t('customer.Cstomertaginput')}}</view>
<u-icon class="arrowright" name="arrow-right" size="18" color="#747474"></u-icon>
</view>
</view>
<u-line></u-line>
<view class="cell">
<view class="item">{{$t('customer.Country')}}</view>
<view class="right select" @click="showarea = true">
@@ -118,7 +126,8 @@
<u-picker closeOnClickOverlay :cancel-text="$t('cancel')" :confirm-text="$t('confirm')" :show="showcartype" @cancel="cancel('showcartype')" @close="close('showcartype')" :columns="carTypeList" keyName="name" @confirm="cartypesChange"></u-picker>
<u-picker closeOnClickOverlay :cancel-text="$t('cancel')" :confirm-text="$t('confirm')" :show="showgrade" @cancel="cancel('showgrade')" @close="close('showgrade')" :columns="getGradeList" keyName="name" @confirm="gradeHandler"></u-picker>
<!-- <u-picker closeOnClickOverlay :cancel-text="$t('cancel')" :confirm-text="$t('confirm')" :show="showarea" @cancel="cancel('showarea')" @close="close('showarea')" :columns="areaList" keyName="name" @confirm="areaChange"></u-picker> -->
<u-popup closeOnClickOverlay :show="showarea" mode="bottom" :round="10" @close="close('showarea')">
<!-- 国家选择 -->
<u-popup closeOnClickOverlay :show="showarea" mode="bottom" :round="10" @close="close('showarea')">
<view class="text">
<view class="qx" @click="close('showarea') ">{{$t('cancel')}}</view>
<view class="qd" @click="arerfn">{{$t('confirm')}}</view>
@@ -148,7 +157,26 @@
</scroll-view>
</view>
</u-popup>
<!-- 客户标签 -->
<u-popup closeOnClickOverlay :show="showtag" mode="bottom" :round="10" title="客户标签" @close="close('showtag')" :closeable="true" >
<view class="popup-content">
<scroll-view scroll-y class="tag-list">
<view
v-for="(item, index) in taglist"
:key="index"
class="tags"
>
<view class="name">{{ item.name }}</view>
<view class="row">
<view class="col4 tagitem" v-for="(item1, index1) in item.child" :class="{ 'tagactive': isActive(item1.pid, item1.id) }" @click="tagSelect(item1)" :key="index1">
{{ item1.name }}
</view>
</view>
</view>
</scroll-view>
</view>
</u-popup>
</view>
</template>
<script>
@@ -157,10 +185,12 @@
data() {
return {
actives:'',
activetags:'',
searchKeyword: "", // 搜索关键词
selectedLabel: "", // 选中的值(显示在输入框中)
filteredOptions: [], // 过滤后的数据
mapUrl: '',
showtag: false,
showmap: false,
showmagnitude: false,
showgrade: false,
@@ -192,7 +222,87 @@
lat:'',
lng:'',
},
location:{}
location:{},
activeMap: {}, // 存储每个父级下选中的子项 { 父ID: 子ID }
taglist:[
{
name:'客户价值',
id:'1',
child:[
{name:'高价值',id:1,pid:1},
{name:'中价值',id:2,pid:1},
{name:'低价值',id:3,pid:1},
{name:'潜在高价值',id:4,pid:1},
]
},
{
name:'生命周期',
id:'2',
child:[
{name:'新客户',id:5,pid:2},
{name:'活跃',id:6,pid:2},
{name:'沉默',id:7,pid:2},
{name:'流失',id:8,pid:2},
]
},
{
name:'行为标签',
id:'3',
child:[
{name:'高频购买',id:9,pid:3},
{name:'大单',id:10,pid:3},
{name:'促销敏感',id:11,pid:3},
{name:'忠诚',id:12,pid:3},
]
},
{
name:'需求标签',
id:'4',
child:[
{name:'价格敏感',id:13,pid:4},
{name:'品质追求',id:14,pid:4},
{name:'服务',id:15,pid:4},
{name:'定制化',id:16,pid:4},
]
},
{
name:'来源标签',
id:'5',
child:[
{name:'线上',id:17,pid:5},
{name:'线下',id:18,pid:5},
{name:'推荐',id:19,pid:5},
{name:'合作伙伴',id:20,pid:5},
]
},
{
name:'风险标签',
id:'6',
child:[
{name:'高',id:21,pid:6},
{name:'中',id:22,pid:6},
{name:'低',id:23,pid:6},
]
},
{
name:'满意度标签',
id:'7',
child:[
{name:'高',id:24,pid:7},
{name:'中',id:25,pid:7},
{name:'低',id:26,pid:7},
]
},
{
name:'忠诚度标签',
id:'8',
child:[
{name:'高',id:27,pid:8},
{name:'中',id:28,pid:8},
{name:'低',id:29,pid:8},
]
}
]
}
},
onLoad() {
@@ -354,6 +464,13 @@
close(val){
this[val] = false
},
//标签点击
tagSelect(item) {
this.$set(this.activeMap, item.pid, item.id);
},
isActive(parentId, childId) {
return this.activeMap[parentId] === childId;
},
//提交保存
saveFn(){
if(this.form.contacts==''){
@@ -524,4 +641,36 @@
padding: 20rpx;
color: #999;
}
// 标签弹框
.tag-list{
max-height: 900rpx;
margin-top: 20rpx;
.tags{
margin-top: 10px;
}
.name{
margin: 10px 0px;
}
.tagitem{
background: #ECF2FF;
border-radius: 8px;
color: #3471FF;
text-align: center;
padding: 5px 0px;
}
.row{
width: 100%;
}
.col4{
display: inline-block;
margin: 4px 3px;
width: 30%;
}
}
.tagactive{
background: #3471FF !important;
color: #fff !important;
}
</style>
+47 -1
View File
@@ -27,6 +27,22 @@
<view class="btn" @click="editFn"><image src="/static/image/customer/edit.png" mode=""></image><text> {{$t('edtbtn')}}</text></view>
</view>
</view>
<view class="cells">
<u-collapse :border="false">
<u-collapse-item
title="标签"
name="Docs guide"
:border="false"
>
<view class="">
<view class="tags">潜在高价值</view>
<view class="tags">活跃客户</view>
<view class="tags">促销敏感</view>
<view class="tags">促销敏</view>
</view>
</u-collapse-item>
</u-collapse>
</view>
<view class="cell">
<view class="item">{{$t('customer.Cstomerfj')}}</view>
<view class="right select" @click="showgrade = true">
@@ -267,6 +283,16 @@
</script>
<style lang="scss">
::v-deep .u-cell__body{
padding: 0px !important;
}
::v-deep .u-collapse-item__content__text{
padding: 10px 0px!important;
}
::v-deep .u-cell__title-text{
font-size: 14px;
}
.u-m-lr-10{
margin: 0px 10px;
}
@@ -290,11 +316,27 @@
position: absolute;
top: 2px;
}
.cells{
margin-bottom: 10px;
background: #f6f6f6;
padding:13px 15px;
border-radius: 10px;
.tags{
display: inline-block;
margin: 4px 3px;
width: 31%;
background: #ECF2FF;
border-radius: 15px;
color: #3471FF;
text-align: center;
padding: 5px 0px;
}
}
.cell{
position: relative;
display: flex;
justify-content:space-between;
padding: 18px 20px;
padding: 13px 20px;
align-items: center;
font-weight: 500;
.item{
@@ -315,6 +357,10 @@
position: relative;
margin-right: 10px;
}
.tagname{
color: #726CFF;
font-size: 12px;
}
.content{
padding: 10px 15px;
background: #FFFFFF;
+1 -1
View File
@@ -62,7 +62,7 @@
</template>
<view class="gjtime">
<view class="contents" v-for="(item, index) in datalist" :key="index">
<view class="" @click="godetile(item)">
<view class="" >
<view class="cont">
<view class="title">
<view class=""><text class="name">{{item.contacts}}</text></view>
+89 -12
View File
@@ -4,11 +4,36 @@
backgroundColor="#fff" :statusBar="true" :title="$t('navbar.businesscard')"></uni-nav-bar>
<view class="card">
<view class="img_top" ref="poster" id="poster">
<view class="name">
<view>刘亦菲</view>
<view>业务经理</view>
<view>13838225452</view>
</view>
<view class="name">
<view class="left">
<view class="title">
<view class="leftbg"></view>
<view>刘亦菲</view>
</view>
<view class="ftitle">业务经理</view>
</view>
<view>
<image src="/static/image/mine/user.png" mode=""></image>
</view>
</view>
<view class="conts">
<view class="coles">
<image src="/static/image/mine/phone.png" mode=""></image>
<view class="">13838225452</view>
</view>
<view class="coles">
<image src="/static/image/mine/email.png" style="height:13px;" mode=""></image>
<view class="">17752584152@163.com</view>
</view>
<view class="coles">
<image src="/static/image/mine/addr.png" style="height:18px;width: 14px;" mode=""></image>
<view class="">13838225452</view>
</view>
</view>
<view class="code">
<image src="/static/image/mine/ewm.png" mode=""></image>
<text>微信</text>
</view>
<!-- <view class="code" :class=" activeImg === share_one ? 'code_one' : activeImg === share_two ? 'code_two' : activeImg === share_three ? 'code_three' : 'code_one'">
<qrcode-vue :value="codeUrl" :size="70"></qrcode-vue>
</view> -->
@@ -16,7 +41,7 @@
</view>
<view class="foot">
<button class="btn" @click="goDown">{{$t('submit')}}</button>
<button class="btn" @click="goDown">{{$t('download')}}</button>
</view>
</view>
</template>
@@ -97,9 +122,9 @@
}).then(canvas => {
// canvas 其实就是我们所讲的res 的意思 返回报文的意思
let baseImg = canvas.toDataURL('image/png')
uni.showModal({
uni.showModal ({
title: '下载名片',
content: '确定下载当前名片图至相册嘛',
content: '确定下载当前名片图吗?',
success: function (res) {
if (res.confirm) {
that.downloadImage(baseImg, 'screenshot.png');
@@ -126,11 +151,63 @@
position: relative;
width:690rpx;
height:1060rpx;
border-radius: 15px;
padding-top: 60rpx;
.leftbg{
width: 10px;
height: 34px;
background: linear-gradient(to bottom, #3471FF, #BD67FF);
margin-right: 15px;
}
.name{
position: absolute;
top: 20%;
left: 10%;
display: flex;
align-items: center;
justify-content: space-between;
flex: 1;
margin: 0px 25px 0px 0px;
.title{
color: #3C4169;
font-size: 28px;
font-weight: bold;
display: flex;
align-items: center;
}
.ftitle{
color: #222222;
font-size: 16px;
font-weight: bold;
margin-top: 20px;
}
image{
width: 100px;
height: 100px;
}
}
.conts{
padding: 15px 25px;
line-height: 32px;
margin-bottom: 20px;
.coles{
display: flex;
align-items: center;
font-size: 16px;
image{
width: 16px;
height: 16px;
margin-right: 5px;
}
}
}
.code{
background-color: rgba(255,255,255,50%);
border-radius: 10px;
text-align: center;
width: 50%;
margin: auto;
padding: 15px;
image{
width: 160px;
height: 160px;
}
}
}
.foot{
Binary file not shown.

After

Width:  |  Height:  |  Size: 846 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 527 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 752 B