653 lines
14 KiB
Vue
653 lines
14 KiB
Vue
|
<template>
|
||
|
<view class="gather">
|
||
|
|
||
|
|
||
|
<view v-if="isFshow">
|
||
|
<view class="site-box flex_a_c_j_sb" :style="{ 'opacity': backColor,}" @click="selectLocation">
|
||
|
<view :class="['place_wrapper', 'flex_a_c', isFshow ? 'sitebox' : '']" @click="selectLocation">
|
||
|
<view :class="['iconfont', 'icon-weizhi', isFshow ? 'sitebox' : '']" style=" margin-left: 20rpx">
|
||
|
</view>
|
||
|
<view class="town_name">{{ street }}</view>
|
||
|
</view>
|
||
|
<navigator url="/pages/chat/customer_list/index?type=0" hover-class="none">
|
||
|
<view :class="['iconfont', 'icon-xiaoxi', isFshow ? 'sitebox' : '']"></view>
|
||
|
</navigator>
|
||
|
</view>
|
||
|
|
||
|
</view>
|
||
|
<view class="" v-if="!isFshow">
|
||
|
<view class="site-box1 flex_a_c_j_sb">
|
||
|
|
||
|
<view class="place_wrapper flex_a_c" @click="selectLocation">
|
||
|
<view class="iconfont icon-weizhi"></view>
|
||
|
<view class="town_name">{{street}}</view>
|
||
|
</view>
|
||
|
<navigator url="/pages/chat/customer_list/index?type=0" hover-class="none">
|
||
|
<view class="iconfont icon-xiaoxi" style="color:#fff;"> </view>
|
||
|
</navigator>
|
||
|
</view>
|
||
|
</view>
|
||
|
|
||
|
|
||
|
|
||
|
<zbpSwiper :isSelectPlace="true" :location_Arr="locationArr" :town="street" @kkchange="kkchange"></zbpSwiper>
|
||
|
<u-empty :show="jurisdiction" mode="permission" :text="emptyText"
|
||
|
icon="http://cdn.uviewui.com/uview/empty/permission.png"></u-empty>
|
||
|
<view class="business com special_work" v-if="jurisdiction == false">
|
||
|
<view class="title project">
|
||
|
<view>更多功能</view>
|
||
|
<view v-if="!editFlag" class="edit" @click="editFlag = true">编辑</view>
|
||
|
<view v-else class="edit" @click="editComfirm">完成</view>
|
||
|
</view>
|
||
|
<view class="content">
|
||
|
<block v-if="nowMenuList.length > 0">
|
||
|
<u-transition v-for="(item, index) in nowMenuList" :key="item.name" show>
|
||
|
<view class="examine" @click="
|
||
|
editFlag ? removeMenu(item) : clickMenu(item.type, item.data)
|
||
|
">
|
||
|
<image class="icon_img" :src="item.icon" mode="aspectFit">
|
||
|
</image>
|
||
|
<u-icon v-if="editFlag" class="icon" name="minus-circle-fill" color="red"></u-icon>
|
||
|
<text class="text">{{ item.name }}</text>
|
||
|
</view>
|
||
|
</u-transition>
|
||
|
</block>
|
||
|
<view v-else-if="!editFlag" @click="editFlag = true"
|
||
|
style="text-align: center; width: 100%; color: #aaa">还没有应用,点我添加应用</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
<view v-if="editFlag" class="business com special_work edit_card">
|
||
|
<view class="title project" style="padding: 0 28rpx">
|
||
|
<view>编辑功能</view>
|
||
|
<view class="edit2" @click="editComfirm">完成</view>
|
||
|
</view>
|
||
|
<view class="content">
|
||
|
<u-transition v-for="(item, index) in AllMenuList" :key="item.name" show>
|
||
|
<view class="examine" @click="pushMenu(item)">
|
||
|
<image class="icon_img" :src="item.icon" mode="aspectFit">
|
||
|
</image>
|
||
|
<u-icon class="icon" name="plus-circle-fill"></u-icon>
|
||
|
<text class="text">{{ item.name }}</text>
|
||
|
</view>
|
||
|
</u-transition>
|
||
|
</view>
|
||
|
</view>
|
||
|
|
||
|
|
||
|
<u-picker :defaultIndex="[0,0]" :show="showPicker" ref="uPicker" :columns="columnData" @confirm="confirm"
|
||
|
@cancel="showPicker = false" @change="changeHandler" keyName="name"></u-picker>
|
||
|
<!-- <m-tabbar native>
|
||
|
<template v-slot:tabbar_index_2>
|
||
|
<view class="custom_style">
|
||
|
<view class="custom_style_icon"></view>
|
||
|
</view>
|
||
|
</template>
|
||
|
</m-tabbar> -->
|
||
|
</view>
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
import Cache from '@/utils/cache';
|
||
|
import mTabbar from '@/components/m-tabbar/m-tabbar.vue'
|
||
|
|
||
|
import zbpSwiper from '@/components/zbpSwiper'
|
||
|
import {
|
||
|
getArea,
|
||
|
getStreet
|
||
|
} from '@/api/article.js';
|
||
|
import {
|
||
|
mapState,
|
||
|
mapGetters
|
||
|
} from 'vuex'
|
||
|
import {
|
||
|
getWorkArticleCount,
|
||
|
getSlideAPI
|
||
|
} from '@/api/article.js'
|
||
|
import {
|
||
|
getStoreList,
|
||
|
getUserInfo
|
||
|
} from '@/api/user.js'
|
||
|
import {
|
||
|
getGeocoder,
|
||
|
microSeachBarCode,
|
||
|
microEadtProduct
|
||
|
} from '@/api/store.js'
|
||
|
import {
|
||
|
Toast
|
||
|
} from '@/libs/uniApi';
|
||
|
import {
|
||
|
getDiy
|
||
|
} from '@/api/api.js';
|
||
|
// #ifdef APP-PLUS
|
||
|
import uniMP from '@/utils/uniMP.js';
|
||
|
// #endif
|
||
|
|
||
|
export default {
|
||
|
components: {
|
||
|
mTabbar,
|
||
|
zbpSwiper
|
||
|
|
||
|
},
|
||
|
data() {
|
||
|
return {
|
||
|
locationArr: ({}),
|
||
|
emptyText: '暂无可用应用',
|
||
|
jurisdiction: false, // 是否有权限
|
||
|
mer_id: '',
|
||
|
userInfoData: {
|
||
|
mer_info: {
|
||
|
type_id: 0
|
||
|
}
|
||
|
},
|
||
|
prefix: 'https://lihai001.oss-cn-chengdu.aliyuncs.com/public/kk/luzhou/static4/11/',
|
||
|
isShow: false,
|
||
|
bgColor: '',
|
||
|
isFshow: false,
|
||
|
street: '',
|
||
|
// 编辑中标记
|
||
|
editFlag: false,
|
||
|
// 所有菜单的按钮
|
||
|
AllMenuList: [{
|
||
|
name: '商户平台',
|
||
|
icon: '/static/applet/shop_app.png',
|
||
|
data: '/pages/moreProject/moreProject',
|
||
|
type: 2,
|
||
|
},
|
||
|
{
|
||
|
name: '供销平台',
|
||
|
icon: '/static/applet/gx_app.png',
|
||
|
data: '__UNI__B5B1EDD',
|
||
|
type: 1,
|
||
|
},
|
||
|
],
|
||
|
nowMenuList: [],
|
||
|
street: '',
|
||
|
showPicker: false,
|
||
|
columnData: [],
|
||
|
bgColor: '',
|
||
|
isFshow: false,
|
||
|
backColor: 'rgba(252, 252, 252, 0)'
|
||
|
};
|
||
|
},
|
||
|
computed: {
|
||
|
...mapGetters(['userInfo', 'location', 'isLogin'])
|
||
|
},
|
||
|
created() {},
|
||
|
onLoad() {
|
||
|
this.Area()
|
||
|
this.initMenu();
|
||
|
},
|
||
|
|
||
|
onShow() {
|
||
|
if (this.isLogin) {
|
||
|
this.emptyText = '暂无可用应用'
|
||
|
this.jurisdiction = false
|
||
|
} else {
|
||
|
this.emptyText = '请登录'
|
||
|
this.jurisdiction = true
|
||
|
}
|
||
|
this.getUserInfo()
|
||
|
|
||
|
},
|
||
|
|
||
|
onPullDownRefresh() {
|
||
|
this.getUserInfo()
|
||
|
uni.stopPullDownRefresh()
|
||
|
},
|
||
|
beforeDestroy() {
|
||
|
// 销毁监听事件
|
||
|
this.$bus.$off('value-updated')
|
||
|
},
|
||
|
mounted() {
|
||
|
if (this.street.length <= 0) {
|
||
|
this.appLocation()
|
||
|
}
|
||
|
// #ifdef H5
|
||
|
// 监听页面滚动事件
|
||
|
window.addEventListener("scroll", this.scrolling);
|
||
|
// #endif
|
||
|
|
||
|
this.$bus.$on('value-updated', (newValue) => {
|
||
|
// 更新父组件的值
|
||
|
this.street = newValue.split(',')[0]
|
||
|
});
|
||
|
|
||
|
},
|
||
|
// #ifdef APP-PLUS
|
||
|
onPageScroll(e) {
|
||
|
const scrollTop = e.scrollTop;
|
||
|
if (scrollTop <= 20) {
|
||
|
this.backColor = 'rgba(252, 252, 252, 0)'
|
||
|
this.isFshow = false
|
||
|
} else if (20 < scrollTop && scrollTop <= 100) {
|
||
|
this.backColor = 'rgba(252, 252, 252, .5)'
|
||
|
this.isFshow = true
|
||
|
} else if (scrollTop > 100) {
|
||
|
this.backColor = 'rgba(252, 252, 252, 1)'
|
||
|
this.isFshow = true
|
||
|
|
||
|
}
|
||
|
|
||
|
},
|
||
|
// #endif
|
||
|
|
||
|
methods: {
|
||
|
scrolling() {
|
||
|
// 滚动条距文档顶部的距离
|
||
|
let scrollTop =
|
||
|
window.pageYOffset ||
|
||
|
document.documentElement.scrollTop ||
|
||
|
document.body.scrollTop;
|
||
|
// 滚动条滚动的距离
|
||
|
let scrollStep = scrollTop - this.oldScrollTop;
|
||
|
// console.log("header 滚动距离 ", scrollTop);
|
||
|
// 更新——滚动前,滚动条距文档顶部的距离
|
||
|
this.oldScrollTop = scrollTop;
|
||
|
|
||
|
//变量windowHeight是可视区的高度
|
||
|
let windowHeight =
|
||
|
document.documentElement.clientHeight || document.body.clientHeight;
|
||
|
//变量scrollHeight是滚动条的总高度
|
||
|
let scrollHeight =
|
||
|
document.documentElement.scrollHeight || document.body.scrollHeight;
|
||
|
|
||
|
//滚动条到底部的条件
|
||
|
if (scrollTop + windowHeight == scrollHeight) {
|
||
|
//你想做的事情
|
||
|
// console.log("header 你已经到底部了");
|
||
|
}
|
||
|
|
||
|
|
||
|
if (scrollTop <= 20) {
|
||
|
this.backColor = 'rgba(252, 252, 252, 0)'
|
||
|
this.isFshow = false
|
||
|
} else if (20 < scrollTop && scrollTop <= 100) {
|
||
|
this.backColor = 'rgba(252, 252, 252, .5)'
|
||
|
this.isFshow = true
|
||
|
} else if (scrollTop > 100) {
|
||
|
this.backColor = 'rgba(252, 252, 252, 1)'
|
||
|
this.isFshow = true
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
},
|
||
|
// 初始化菜单
|
||
|
initMenu() {
|
||
|
let now = uni.getStorageSync('gatherNowMenuList');
|
||
|
try {
|
||
|
this.nowMenuList = JSON.parse(now);
|
||
|
this.AllMenuList = this.AllMenuList.filter((item) => {
|
||
|
return this.nowMenuList.find(t => t.name == item.name)?.name != item.name;
|
||
|
})
|
||
|
} catch (e) {
|
||
|
this.nowMenuList = [];
|
||
|
}
|
||
|
},
|
||
|
clickMenu(e, data) {
|
||
|
switch (e) {
|
||
|
case 1:
|
||
|
this.getUniMp(data);
|
||
|
break;
|
||
|
case 2:
|
||
|
|
||
|
// this.getUniMp(data);
|
||
|
this.navigator(data);
|
||
|
break;
|
||
|
}
|
||
|
},
|
||
|
// 添加菜单
|
||
|
pushMenu(data) {
|
||
|
this.nowMenuList.push(data);
|
||
|
this.AllMenuList = this.AllMenuList.filter((item) => {
|
||
|
return item.name != data.name;
|
||
|
})
|
||
|
},
|
||
|
// 移除菜单
|
||
|
removeMenu(data) {
|
||
|
this.AllMenuList.push(data);
|
||
|
this.nowMenuList = this.nowMenuList.filter((item) => {
|
||
|
return item.name != data.name;
|
||
|
})
|
||
|
},
|
||
|
// 编辑完成
|
||
|
editComfirm() {
|
||
|
this.editFlag = false;
|
||
|
uni.setStorageSync('gatherNowMenuList', JSON.stringify(this.nowMenuList));
|
||
|
},
|
||
|
getUniMp(appid) {
|
||
|
console.log('点击供销平台');
|
||
|
// #ifdef APP-PLUS
|
||
|
uniMP.loadMP(appid);
|
||
|
return;
|
||
|
// #endif
|
||
|
uni.showToast({
|
||
|
icon: 'none',
|
||
|
title: 'H5不支持打开小程序'
|
||
|
})
|
||
|
},
|
||
|
changeHandler(e) {
|
||
|
const {
|
||
|
columnIndex,
|
||
|
value,
|
||
|
values,
|
||
|
index,
|
||
|
picker = this.$refs.uPicker
|
||
|
} = e;
|
||
|
if (columnIndex === 0) {
|
||
|
getStreet({
|
||
|
area_code: value[0]['code']
|
||
|
}).then(res => {
|
||
|
this.$refs.uPicker.setColumnValues(1, res.data);
|
||
|
});
|
||
|
}
|
||
|
},
|
||
|
|
||
|
Area() {
|
||
|
getArea({
|
||
|
city_code: 510500
|
||
|
}).then(res => {
|
||
|
this.$refs.uPicker.setColumnValues(0, res.data);
|
||
|
this.Street(res.data[0]['code']);
|
||
|
});
|
||
|
},
|
||
|
Street(code) {
|
||
|
getStreet({
|
||
|
area_code: code
|
||
|
}).then(res => {
|
||
|
this.$refs.uPicker.setColumnValues(1, res.data);
|
||
|
});
|
||
|
},
|
||
|
selectLocation() {
|
||
|
this.showPicker = true
|
||
|
},
|
||
|
confirm(e) {
|
||
|
this.street = e.value[1].name
|
||
|
|
||
|
this.$nextTick(() => {
|
||
|
this.$bus.$emit('value-updated', e.value[1].name + ',' + e.value[1].code);
|
||
|
|
||
|
})
|
||
|
this.showPicker = false
|
||
|
},
|
||
|
appLocation() {
|
||
|
uni.getLocation({
|
||
|
type: 'wgs84',
|
||
|
timeout: '10',
|
||
|
success: (res) => {
|
||
|
// console.log(res)
|
||
|
this.isshow = false
|
||
|
let latitude, longitude;
|
||
|
latitude = res.latitude.toString();
|
||
|
longitude = res.longitude.toString();
|
||
|
getGeocoder({
|
||
|
lat: latitude,
|
||
|
long: longitude
|
||
|
}).then(res => {
|
||
|
let town = res.data.address_reference.town.title
|
||
|
let street_id = res.data.address_reference.town.id
|
||
|
this.street = res.data.address_component.street
|
||
|
this.$nextTick(() => {
|
||
|
this.$bus.$emit('value-updated', this.street + ',' +
|
||
|
street_id);
|
||
|
|
||
|
})
|
||
|
|
||
|
}).catch(err => {
|
||
|
this.isshow = false
|
||
|
uni.showToast({
|
||
|
title: err,
|
||
|
icon: 'none'
|
||
|
})
|
||
|
})
|
||
|
},
|
||
|
fail: (err) => {
|
||
|
this.isshow = false
|
||
|
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
|
||
|
|
||
|
kkchange(e) {
|
||
|
this.bgColor = e
|
||
|
},
|
||
|
|
||
|
navigator(url, t) {
|
||
|
// if (this.userInfoData.is_wsxx === 0 && t != '商户设置') return Toast("请完善商户信息");
|
||
|
uni.navigateTo({
|
||
|
url: url
|
||
|
})
|
||
|
},
|
||
|
getUserInfo: function() {
|
||
|
let that = this;
|
||
|
getUserInfo().then(res => {
|
||
|
that.userInfoData = res.data;
|
||
|
// console.log(res.data.service);
|
||
|
if (res.data.service == null) {
|
||
|
// console.log('123');
|
||
|
this.isShow = false
|
||
|
} else {
|
||
|
this.isShow = true
|
||
|
this.mer_id = res.data.service.mer_id
|
||
|
}
|
||
|
|
||
|
if (!res.data.mer_info) {
|
||
|
that.$set(this, 'jurisdiction', false);
|
||
|
}
|
||
|
// console.log(that.userInfoData);
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
</script>
|
||
|
<style lang="scss" scoped>
|
||
|
.gather {
|
||
|
padding-bottom: 164.91rpx;
|
||
|
background: linear-gradient(180deg, #ffffff 0%, #f6f6f6 100%);
|
||
|
position: relative;
|
||
|
}
|
||
|
|
||
|
.sitebox {
|
||
|
animation-name: fadeIn;
|
||
|
animation-duration: 3s;
|
||
|
animation-fill-mode: forwards;
|
||
|
}
|
||
|
|
||
|
@keyframes fadeIn {
|
||
|
from {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
to {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
}
|
||
|
.site-box1 {
|
||
|
width: 706rpx;
|
||
|
/* #ifdef MP || APP-PLUS */
|
||
|
height: 160rpx;
|
||
|
/* #endif */
|
||
|
/* #ifdef H5 */
|
||
|
height: 120rpx;
|
||
|
/* #endif */
|
||
|
margin-bottom: 26.32rpx;
|
||
|
position: absolute;
|
||
|
top: 45rpx;
|
||
|
left: 20rpx;
|
||
|
|
||
|
z-index: 999;
|
||
|
// 位置
|
||
|
.place_wrapper {
|
||
|
color: #fff;
|
||
|
margin-right: 0rpx;
|
||
|
|
||
|
font-size: 30rpx;
|
||
|
|
||
|
.town_name {
|
||
|
margin-left: 21rpx;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.iconfont {
|
||
|
font-size: 35.09rpx;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
.site-box {
|
||
|
width: 100%;
|
||
|
/* #ifdef MP || APP-PLUS */
|
||
|
height: 160rpx;
|
||
|
/* #endif */
|
||
|
/* #ifdef H5 */
|
||
|
height: 120rpx;
|
||
|
/* #endif */
|
||
|
margin-bottom: 26.32rpx;
|
||
|
position: absolute;
|
||
|
top: 0rpx;
|
||
|
position: fixed;
|
||
|
z-index: 999;
|
||
|
/* #ifdef MP || APP-PLUS */
|
||
|
padding-top: 75rpx;
|
||
|
/* #endif */
|
||
|
/* #ifdef H5 */
|
||
|
padding-top: 25rpx;
|
||
|
/* #endif */
|
||
|
// background-color: #e5e5e5;
|
||
|
background: url('@/static/images/bg2.png') no-repeat;
|
||
|
background-size: 100% 100%;
|
||
|
padding-right: 20rpx;
|
||
|
|
||
|
// 位置
|
||
|
.place_wrapper {
|
||
|
color: #fff;
|
||
|
margin-right: 24.56rpx;
|
||
|
font-size: 30rpx;
|
||
|
|
||
|
opacity: 0;
|
||
|
|
||
|
.town_name {
|
||
|
margin-left: 21rpx;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.iconfont {
|
||
|
opacity: 0;
|
||
|
font-size: 30rpx;
|
||
|
font-size: 35.09rpx;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.top_box {
|
||
|
// padding-top: 180rpx;
|
||
|
background: linear-gradient(#36a2ff, #fff);
|
||
|
}
|
||
|
|
||
|
.com {
|
||
|
margin-left: 50%;
|
||
|
transform: translate(-50%);
|
||
|
}
|
||
|
|
||
|
.business {
|
||
|
width: 694.74rpx;
|
||
|
// margin-bottom: 175rpx;
|
||
|
}
|
||
|
|
||
|
.special_work {
|
||
|
// padding: 17.54rpx;
|
||
|
width: 694.74rpx;
|
||
|
margin-top: 52.63rpx;
|
||
|
border-radius: 17.54rpx;
|
||
|
// box-shadow: 0px 0px 6px 1px rgba(0, 0, 0, 0.16);
|
||
|
|
||
|
.title {
|
||
|
font-size: 31.58rpx;
|
||
|
font-weight: 700;
|
||
|
margin-bottom: 38.6rpx;
|
||
|
}
|
||
|
|
||
|
.project {
|
||
|
display: flex;
|
||
|
justify-content: space-between;
|
||
|
align-items: flex-end;
|
||
|
|
||
|
.edit {
|
||
|
font-size: 26rpx;
|
||
|
font-weight: 400;
|
||
|
|
||
|
&::after {
|
||
|
content: ">";
|
||
|
margin-left: 10rpx;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.edit2 {
|
||
|
font-size: 26rpx;
|
||
|
font-weight: 400;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.content {
|
||
|
display: flex;
|
||
|
align-content: center;
|
||
|
flex-wrap: wrap;
|
||
|
// justify-content: space-between;
|
||
|
|
||
|
.examine {
|
||
|
margin-bottom: 35rpx;
|
||
|
width: 173.68rpx;
|
||
|
display: flex;
|
||
|
flex-direction: column;
|
||
|
justify-content: center;
|
||
|
align-items: center;
|
||
|
position: relative;
|
||
|
// margin: 0 0 33.33rpx 33.33rpx !important;
|
||
|
|
||
|
.icon_img {
|
||
|
width: 83.16rpx;
|
||
|
height: 83.16rpx;
|
||
|
}
|
||
|
|
||
|
.icon {
|
||
|
position: absolute;
|
||
|
top: -5rpx;
|
||
|
right: 25rpx;
|
||
|
}
|
||
|
|
||
|
.text {
|
||
|
font-size: 26.32rpx;
|
||
|
margin-top: 21.05rpx;
|
||
|
color: #000;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.text {
|
||
|
font-size: 29.82rpx;
|
||
|
color: #a4a4a4;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.cont_jus {
|
||
|
margin-top: 56.14rpx;
|
||
|
justify-content: flex-start;
|
||
|
|
||
|
&:first-child {
|
||
|
// margin-right: 33rpx;
|
||
|
}
|
||
|
|
||
|
.examine {
|
||
|
margin-right: 48rpx;
|
||
|
|
||
|
&:first-child {
|
||
|
margin-right: 48rpx;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.edit_card {
|
||
|
background-color: #fff;
|
||
|
padding-top: 28rpx;
|
||
|
}
|
||
|
</style>
|