Commit 508f95c5fbdf962b60cdb357cb5120ed9945d020

Authored by wangfan
1 parent 0d26a2c3

manager-invitation

... ... @@ -35,7 +35,11 @@
"pages/manager-invitation/index",
"pages/manager-invitation/review",
"pages/manager-invitation/editor",
"pages/manager-invitation/display"
"pages/manager-invitation/display",
"pages/manager-invitation/setting/index",
"pages/manager-invitation/setting/sellers",
"pages/manager-invitation/setting/seller-editor",
"pages/manager-invitation/crm/index"
],
"subpackages": [
{
... ...
// pages/book/setting/index.js
import util from '../../../utils/util';
import App from '../../../utils/api';
const {regeneratorRuntime} = global
Page({
offset: 0,
limit: 10,
hasMore: true,
list:{},
/**
* 页面的初始数据
*/
data: {
list:[],
hasMore:true,
hasSalesman:false,
},
/**
* 生命周期函数--监听页面加载
*/
enter_params: {},
onLoad: function (options) {
this.enter_params = util.cache('enter_params');
App.Reserve.SellerInfo(this.enter_params).then(res=>{
this.setData({
hasSalesman:res.data.hasSalesman==1
})
})
this.seller_id=options.seller_id||this.enter_params.seller_id;
this.getMembers();
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
if(this.hasMore){
this.getMembers(true);
}
},
getMembers(hasReachBottom=false){
App.Reserve.Members({
sid: this.seller_id,
//manager_id:this.enter_params.manager_id,
manager_openid:this.enter_params.seller_openid,
offset: this.offset,
limit: this.limit,
}).then(res => {
let list = this.data.list;
let dl=res.data.length;
if (dl > 0) {
res.data.forEach(r => {
//r.addtimeStr = util.unixtoTime(r.addtime, 'MM/DD HH:II')
list.push(r)
this.list[r.id] = r;
})
}
let obj={list:list};
if(dl<this.limit && hasReachBottom){
this.hasMore=false;
obj.hasMore=false;
}else{
this.offset+=this.limit;
}
this.setData(obj)
})
},
sendSalesmanMsg(e){
let openid=util.attr(e,'openid')
App.Reserve.OperationalMessagePush({
openid:openid
}).then(res=>{
if(res.ret!=200){
return util.toast(res.msg,'none')
}
util.toast('已发送')
})
},
})
\ No newline at end of file
... ...
{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTextStyle":"white",
"usingComponents": {
"nav":"/components/nav/nav",
"tabBar":"/components/book/tabBar/tabBar",
"formids":"/components/formids/formids"
}
}
\ No newline at end of file
... ...
<!--pages/book/setting/index.wxml-->
<nav id="nav" backgroundColor="#199095" color="#fefefe">我的客户</nav>
<view class="pages">
<block wx:if="{{list.length>0}}">
<view class="row flex-lr" wx:for="{{list}}" wx:key="list.key" >
<view class="flex-ll">
<view class="avatar">
<image src="{{item.headimgurl}}"></image>
</view>
<view class="nickname">{{item.nickname||''}}</view>
</view>
<view class="flex-rr optmsg" wx:if="{{hasSalesman}}" bindtap="sendSalesmanMsg" data-openid="{{item.openid}}">
<view>发送消息</view>
<view class="more"></view>
</view>
</view>
</block>
<view wx:else="" class="history-is-empty flex-vc Medium">
<image src="http://qn.colorcun.com/custom/lite-yd/image/history-is-empty.png"></image>
<view>暂时还没有客户</view>
</view>
<view wx:if="{{!hasMore}}" class="row flex-vc">已经到底了</view>
</view>
... ...
/* pages/book/setting/index.wxss */
/*
http://qn.colorcun.com/custom/lite-yd/image/icon-zk.png
http://qn.colorcun.com/custom/lite-yd/image/icon-cz.png
*/
.pages{
width: 90%;
margin: 0 auto 50rpx;
color: #353535;
overflow-y: auto;
}
.row{
font-size: 34rpx;
height: 106rpx;
border-bottom: 2rpx solid #F1F0F4;
padding-top: 34rpx;
}
.row .right{
font-size: 30rpx;
color:#999999;
}
.row .more{
margin-left: 20rpx;
}
.row:last-child{
border-bottom-width: 0;
}
.history-is-empty{
margin: 200rpx auto;
font-size: 34rpx;
}
.history-is-empty image{
width: 376rpx;
height: 310rpx;
margin-bottom: 122rpx;
}
.avatar{
width: 80rpx;
height: 80rpx;
border-radius: 50%;
overflow: hidden;
}
.avatar image{
width: 100%;
height: 100%;
}
.nickname{
margin-left: 40rpx;
font-size: 34rpx;
}
.optmsg{
font-size: 30rpx;
color:#199095;
}
\ No newline at end of file
... ...
// pages/book/setting/index.js
import util from '../../../utils/util';
import App from '../../../utils/api';
const {regeneratorRuntime} = global
Page({
/**
* 页面的初始数据
*/
data: {},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
})
\ No newline at end of file
... ...
{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTextStyle":"white",
"usingComponents": {
"nav":"/components/nav/nav",
"formids":"/components/formids/formids"
}
}
\ No newline at end of file
... ...
<!--pages/book/setting/index.wxml-->
<nav id="nav" backgroundColor="#199095" color="#fefefe">订座</nav>
<view class="header">
<view class="info">
<view class="nick">{{user.nick_name || user.nickname}}</view>
<view class="seller Medium">{{seller.sellername}} | {{user.role_name||''}}</view>
</view>
</view>
<view class="page">
<formids url="/pages/manager-invitation/setting/sellers">
<view class="row flex-lr">
<view>我工作的店铺</view>
<view class="flex-rr">
<view class="more"></view>
</view>
</view>
</formids>
<formids url="/pages/manager-invitation/setting/sellers">
<view class="row flex-lr" style="padding-top: 34rpx;">
<view>我的预订安排</view>
<view class="flex-rr">
<view class="more"></view>
</view>
</view>
</formids>
<formids url="/pages/manager-invitation/crm/index">
<view class="row flex-lr" style="padding-top: 34rpx;">
<view>我的客户</view>
<view class="flex-rr">
<view class="more"></view>
</view>
</view>
</formids>
<formids url="/pages/customer/index?islove=customer">
<view class="row flex-lr" style="padding-top: 34rpx;">
<view>切换到顾客模式</view>
<view class="flex-rr">
<view class="more"></view>
</view>
</view>
</formids>
</view>
... ...
/* pages/book/setting/index.wxss */
/*
http://qn.colorcun.com/custom/lite-yd/image/icon-zk.png
http://qn.colorcun.com/custom/lite-yd/image/icon-cz.png
*/
.header{
height: 302rpx;
background-color: #199095;
margin-top: -2rpx;
}
.header .info{
color:#FEFEFE;
width: 90%;
padding-top: 86rpx;
margin: 0 auto;
}
.header .info .nick{
font-size: 44rpx;
font-weight: bold;
margin-bottom: 28rpx;
}
.header .info .seller{
font-size: 34rpx;
}
.page{
width: 90%;
margin: 0 auto;
color: #353535;
padding-top: 34rpx;
}
.row{
font-size: 34rpx;
height: 106rpx;
border-bottom: 2rpx solid #F1F0F4;
}
.row .right{
font-size: 30rpx;
color:#999999;
}
.row .more{
margin-left: 20rpx;
}
\ No newline at end of file
... ...
// pages/manager-invitation/editor.js
import util from '../../../utils/util';
import App from '../../../utils/api';
const {regeneratorRuntime} = global
Page({
/**
* 页面的初始数据
*/
data: {
hasSubmit:false,
form:{
name:'',
addr:'',
id:'',
latitude:'',
longitude:'',
},
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
this.initData(options)
this.setData({
options:options,
})
},
initData(options){
if(options.rid){
App.Invitation.Detail({id:options.rid}).then(res=>{
this.setData({
form:{
sid:res.data.seller_name,
name:res.data.seller_name,
room:res.data.room_name,
addr:res.data.seller_address,
sid:res.data.sid,
time:res.data.arrival_time,
image:res.data.image_url,
latitude:res.data.lat,
longitude:res.data.long,
},
timeStr:util.unixtoTime(res.data.arrival_time,this.data.tpl.timeStr)
})
})
}else{
App.Invitation.GetSellerList({
openid:getApp().openid
}).then(res=>{
if(res.data.length>0){
let defi=0;
for(let i=0;i<res.data.length;i++){
if(res.data[i].is_default==1){
defi=i;
break;
}
}
let sel=res.data[defi];
this.setData({
form:{
sid:sel.id,
name:sel.name,
addr:sel.address,
latitude:sel.lat,
longitude:sel.long,
}
})
}
})
}
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
checkHasSubmit(){
let form=this.data.form;
let flag=false;
if(
form.name
&& form.addr
&& form.latitude>0
){
flag=true;
}
this.setData({
hasSubmit:flag
})
return flag;
},
input(e){
let key=util.attr(e,'key');
if(key=='addr' && !(this.data.form.latitude>0)){
return this.onChangeAddress()
}
let val=util.val(e).trim();
let form=this.data.form;
form[key]=val;
this.setData({
form:form,
})
this.checkHasSubmit()
},
submit(){
if(!this.checkHasSubmit()){
let msg='请完善信息';
if(this.data.form.latitude<1){
msg='请标注店铺位置'
}
return util.toast(msg,'none')
}
let opt=this.data.options
let param={
openid:getApp().openid,
sid:this.data.form.sid,
sname:this.data.form.name,
seller_address:this.data.form.addr,
lat:this.data.form.latitude,
long:this.data.form.longitude,
}
},
onChangeAddress(){
wx.chooseLocation({
success: (res)=> {
console.log(res);
this.setData({
[`form.latitude`]:res.latitude,
[`form.longitude`]:res.longitude,
[`form.addr`]:res.name,
})
this.checkHasSubmit()
},
fail: function (err) {
console.log(err)
}
});
},
})
\ No newline at end of file
... ...
{
"navigationBarBackgroundColor": "#ffffff",
"navigationBarTextStyle": "black",
"navigationBarTitleText":"订座详情",
"usingComponents": {
"userinfo": "/components/userinfo/userinfo",
"nav":"/components/nav/nav",
"formids":"/components/formids/formids"
}
}
\ No newline at end of file
... ...
<!--pages/manager-invitation/editor.wxml-->
<nav>修改信息</nav>
<view class="pages">
<view class="base block">
<view class="item Medium">预订信息</view>
<view class="item flex-ll">
<input value="{{form.name}}" bindinput="input"
data-key="name"
placeholder="请输入店铺名称" placeholder-class="placeholder-class"/>
<view class="quick">快速选择</view>
</view>
<view class="item flex-ll">
<picker
mode="multiSelector"
bindchange="bindMultiPickerChange"
bindcolumnchange="bindMultiPickerColumnChange"
value="{{pickerValue}}"
range="{{pickerData}}"
style="width: 100%"
>
<view class="picker" style="width: 100%;">
<!--
<block wx:if="{{pickerValue[0]>-1}}">
{{pickerData[0][pickerValue[0]]}} {{pickerData[1][pickerValue[1]]}} {{pickerData[2][pickerValue[2]]}}
</block>
-->
<text wx:if="{{timeStr}}">{{timeStr}}</text>
<text class="placeholder-class" wx:else="">请输入预订时间</text>
</view>
</picker>
</view>
<view class="item flex-ll">
<input value="{{form.room}}" bindinput="input"
data-key="room"
placeholder="请输入包间名称" placeholder-class="placeholder-class"/>
</view>
<view class="item flex-ll">
<input value="{{form.addr}}"
bindinput="input" bindfocus="input"
data-key="addr"
placeholder="请输入店铺地址" placeholder-class="placeholder-class"/>
<view class="caddr flex-rr" bindtap="onChangeAddress">
<image src="http://qn.colorcun.com/manager-invitation/wx/caddr.png" style="width: 28rpx; height: 36rpx;"></image>
</view>
</view>
</view>
<view class="upload block flex-vc" wx:if="{{tpl.hasImage}}">
<view class="image" bindtap="chooseImage">
<image src="{{form.image||defImage}}" mode="aspectFill"></image>
</view>
<view class="text">(此处照片为邀请函展示照片)</view>
</view>
<formids bindclick="submit" style="width: 100%;">
<view class="submit {{hasSubmit?'submit-active':''}}">确定</view>
</formids>
</view>
\ No newline at end of file
... ...
/* pages/manager-invitation/editor.wxss */
page{
background-color: #F5F5F5;
}
.pages{
background-color: #F5F5F5;
font-size: 34rpx;
padding-top: 20rpx;
padding-bottom: 160rpx;
}
.block{
width: 94%;
margin: 0 auto;
border-radius: 8rpx;
background-color: #FEFEFE;
}
.base .item{
height: 140rpx;
line-height: 140rpx;
width: 94%;
margin: 0 auto;
border-bottom: 2rpx solid #F1F0F4;
}
.item input{
width: 100%;
}
.base .item:last-child{
border-width: 0;
}
.upload{
margin-top: 20rpx;
height: 310rpx;
}
.image{
width: 220rpx;
height: 220rpx;
border: 2rpx #E0E0E0 dashed;
margin-top: 20rpx;
}
.image image{
width: 100%;
height: 100%;
}
.text{
margin-top: 20rpx;
font-size: 28rpx;
color: #999999;
}
.submit{
position: fixed;
bottom: 30rpx;
left: 0;
right:0;
margin: 0 auto;
height: 84rpx;
line-height: 84rpx;
width: 90%;
background-color: #74BBBE;
border-radius: 10rpx;
color: #FEFEFE;
}
.submit-active{
background-color: #199095;
}
.quick{
height: 50rpx;
line-height: 50rpx;
width: 140rpx;
background-color: #46A5A9;
font-size: 28rpx;
color: #FEFEFE;
text-align: center;
min-width: 140rpx;
}
.placeholder-class{
color: #999999;
}
.caddr{
width: 140rpx;
min-width: 140rpx;
height: 140rpx;
line-height: 140rpx;
}
... ...
// pages/manager-invitation/setting/sellers.js
import util from '../../../utils/util';
import App from '../../../utils/api';
const {regeneratorRuntime} = global
Page({
/**
* 页面的初始数据
*/
data: {
sellers:[],
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
App.Invitation.GetSellerList({openid:getApp().openid}).then(res=>{
this.setData({
sellers:res.data,
})
})
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
sellerEditor(e){
let i=util.attr(e,'index');
let sel=this.data.sellers[i];
wx.navigateTo({
url:'/pages/manager-invitation/setting/seller-editor?seller='+JSON.stringify(sel)
})
},
})
\ No newline at end of file
... ...
{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTextStyle":"white",
"usingComponents": {
"nav":"/components/nav/nav",
"formids":"/components/formids/formids"
}
}
\ No newline at end of file
... ...
<!--pages/manager-invitation/setting/sellers.wxml-->
<nav>我工作的店铺</nav>
<view style="background-color: #F5F5F5;height: 2rpx;width: 100%;"></view>
<view class="pages">
<block wx:for="{{sellers}}" wx:key="sellers.key">
<formids url="/pages/manager-invitation/setting/seller-editor" bindclick="sellerEditor" data-index="{{index}}">
<view class="seller {{item.is_default==1?'active':''}}">
<view class="name">{{item.name}}</view>
<view class="addr">{{item.address}}</view>
<view class="default" wx:if="{{item.is_default==1}}">默认</view>
</view>
</formids>
</block>
</view>
... ...
/* pages/manager-invitation/setting/sellers.wxss */
.pages{
width: 90%;
margin: 0 auto;
padding-top: 40rpx;
}
.seller{
margin-bottom: 40rpx;
border: 2rpx solid #999999;
border-radius: 10rpx;
width: 100%;
height: 200rpx;
color:#353535;
position: relative;
}
.name{
font-size: 34rpx;
width: 90%;
margin: 30rpx auto 0;
height: 48rpx;
line-height: 48rpx;
text-align: left;
}
.addr{
font-size: 30rpx;
width: 90%;
margin: 8rpx auto 0;
line-height: 40rpx;
text-align: left;
}
.seller.active{
background-color: #199095;
border: 2rpx solid #199095;
color:#FEFEFE;
}
.default{
background-color: #F05522;
color:#fefefe;
font-size: 28rpx;
height: 40rpx;
width: 90rpx;
position: absolute;
top: -2rpx;
right: -2rpx;
border-radius: 26rpx 10rpx 0 26rpx;
text-align: center;
line-height: 40rpx;
}
\ No newline at end of file
... ...
... ... @@ -31,7 +31,7 @@
"list": []
},
"miniprogram": {
"current": 43,
"current": 47,
"list": [
{
"id": 0,
... ... @@ -377,6 +377,20 @@
"pathName": "pages/manager-invitation/display",
"query": "rid=5&tplid=2&fromid=oB-xJ5KJCIasaEdgMRckqoL1cwg8&hasSellerShare=",
"scene": null
},
{
"id": -1,
"name": "pages/manager-invitation/setting/index",
"pathName": "pages/manager-invitation/setting/index",
"query": "",
"scene": null
},
{
"id": -1,
"name": "pages/manager-invitation/setting/sellers",
"pathName": "pages/manager-invitation/setting/sellers",
"query": "",
"scene": null
}
]
}
... ...