zhaoxiaohai 3 tahun lalu
induk
melakukan
80bb18a8e7

+ 17 - 3
pages/threadedTree/details/index.js

@@ -24,6 +24,7 @@ Page({
             "end": ""
         },
         teamList: [],
+        isEdit: false, //退出时是否重新获取列表
     },
     /**
      * 生命周期函数--监听页面加载
@@ -38,7 +39,7 @@ Page({
         this.query_teamList();
     },
     /* 团队成员 */
-    query_teamList(i=0) {
+    query_teamList(i = 0) {
         if (i == 5) return;
         _Http.basic({
             "classname": "sale.team.team",
@@ -95,7 +96,7 @@ Page({
                 where: this.data.where
             }
         }).then(res => {
-            console.log(res)
+            console.log("跟进", res)
             if (res.msg != '成功') return this.getFollowList(i + 1);
             this.setData({
                 followList: res.data
@@ -108,6 +109,7 @@ Page({
             name
         } = e.currentTarget.dataset;
         if (name == '线索编辑') this.selectComponent("#edit").initData();
+        if (name == '跟进计划') this.selectComponent("#follow").updateTime();
         this.setData({
             sheetTitle: name
         })
@@ -115,10 +117,16 @@ Page({
     /* 结束编辑 */
     endEdit() {
         this.setData({
-            sheetTitle: ""
+            sheetTitle: "",
+            isEdit: true
         })
         this.selectDetail();
     },
+    /* 结束跟进 */
+    endFollow() {
+        this.endEdit();
+        this.getFollowList();
+    },
     /* 修改排序方式 */
     changeIsdesc() {
         this.setData({
@@ -181,4 +189,10 @@ Page({
         });
         this.getFollowList();
     },
+    onUnload() {
+        if (this.data.isEdit) {
+            let pages = getCurrentPages();
+            pages[pages.length - 2].getList(true)
+        }
+    },
 })

+ 2 - 1
pages/threadedTree/details/index.json

@@ -6,6 +6,7 @@
         "My_datePicker": "/components/My_datePicker/index",
         "Popup": "../modules/popup",
         "Insert": "../modules/insert/insert",
-        "handOver": "./modules/handOver/index"
+        "handOver": "./modules/handOver/index",
+        "follow": "./modules/follow/index"
     }
 }

+ 6 - 3
pages/threadedTree/details/index.wxml

@@ -23,7 +23,7 @@
                 <van-icon style="margin-left: 8rpx;" name="arrow-down" />
             </view>
             <view class="sort" bindtap="changeIsdesc">
-                <text class="iconfont {{ isdesc==1?'icon-jiangxu':'icon-shengxu' }}" />
+                <text class="iconfont {{ isdesc==1?'icon-jiangxu':'icon-shengxu1' }}" />
             </view>
         </view>
         <Record followList='{{followList}}' />
@@ -32,7 +32,7 @@
     </van-tab>
 </van-tabs>
 
-<view class="footer">
+<view class="footer" wx:if="{{detailsData.status=='待跟进'||detailsData.status=='跟进中'}}">
     <navigator url="#" data-name="跟进计划" catchtap="openPoput">
         <view class="iconfont icon-a-yingxiaowuliaofuzhi" />
         <view class="text">跟进</view>
@@ -48,6 +48,9 @@
 </view>
 
 <Popup sheetTitle='{{sheetTitle}}'>
+    <view hidden="{{sheetTitle!='跟进计划'}}">
+        <follow id='follow' sat_orderclueid='{{sat_orderclueid}}' bind:endChange='endFollow' />
+    </view>
     <view hidden="{{sheetTitle!='线索编辑'}}">
         <Insert id="edit" content='{{detailsData}}' type="{{sheetTitle}}" bind:endInsert='endEdit' />
     </view>
@@ -56,7 +59,7 @@
     </view>
 </Popup>
 
-<van-action-sheet show="{{  timeRangeShow }}" bind:close='timeRangeClose'>
+<van-action-sheet show="{{ timeRangeShow }}" bind:close='timeRangeClose'>
     <view class="detePickerHeader">
         <text catchtap="toSeeAll">所有日期</text>
         <view class="type" catchtap="selectDateType">

+ 2 - 3
pages/threadedTree/details/modules/details/index.wxml

@@ -13,7 +13,6 @@
 <van-cell title-width='130px' clickable title-class='title-class' title="状态" color='#fff'>
     <text style="color: {{tagColor}};">{{detailsData.status}}</text>
 </van-cell>
-
 <view class="title">系统信息</view>
 <van-cell title-width='130px' clickable title-class='title-class' title="创建人" value="{{detailsData.createBy}}" />
 <van-cell title-width='130px' clickable title-class='title-class' title="创建时间" value="{{detailsData.createDate}}" />
@@ -21,6 +20,6 @@
 <van-cell title-width='130px' clickable title-class='title-class' title="分配时间" value="{{detailsData.assignedDate}}" />
 <van-cell title-width='130px' clickable title-class='title-class' title="最近跟进人" value="{{detailsData.followBy}}" />
 <van-cell title-width='130px' clickable title-class='title-class' title="最近跟进时间" value="{{detailsData.followDate}}" />
-<van-cell title-width='130px' clickable title-class='title-class' title="最近转移时间" value="{{detailsData.changeBy}}" />
-<van-cell title-width='130px' clickable title-class='title-class' title="最近转移" value="{{detailsData.changeDate}}" />
+<van-cell title-width='130px' clickable title-class='title-class' title="最近转移" value="{{detailsData.changeBy}}" />
+<van-cell title-width='130px' clickable title-class='title-class' title="最近转移时间" value="{{detailsData.changeDate}}" />
 <van-cell title-width='130px' clickable title-class='title-class' title="最近编辑时间" value="{{detailsData.editDate}}" />

+ 115 - 0
pages/threadedTree/details/modules/follow/index.js

@@ -0,0 +1,115 @@
+const getTime = require("../../../../../utils/getTime"),
+    deleteMark = require("../../../../../utils/deleteMark"),
+    _Http = getApp().globalData.http;
+Component({
+    /**
+     * 组件的属性列表
+     */
+    properties: {
+        endChange: Function,
+        sat_orderclueid: Number
+    },
+
+    /**
+     * 组件的初始数据
+     */
+    data: {
+        actionShow: false,
+        time: "",
+        actions: [{
+            name: '电话沟通',
+        }, {
+            name: '当面拜访',
+        }, ],
+        "content": {
+            "content": "",
+            "followupmode": "",
+            "logtype": "跟进",
+            "competitor": ""
+        },
+        disabled: true,
+        loading: false
+    },
+    /**
+     * 组件的方法列表
+     */
+    methods: {
+        submit() {
+            if (this.data.disabled || this.data.loading) return;
+            let content = this.data.content;
+            if (content.logtype != "丢单") content.competitor = '';
+            content.sat_orderclueid = this.data.sat_orderclueid;
+            this.setData({
+                loading: true
+            })
+            _Http.basic({
+                "classname": "saletool.orderclue.web.orderclue",
+                "method": "addFollowUpLog",
+                content
+            }).then(res => {
+                console.log(res)
+                this.setData({
+                    loading: false
+                })
+                if (res.msg != '成功') return wx.showToast({
+                    title: res.data,
+                    icon: "none"
+                });
+                wx.showToast({
+                    title: '保存成功!',
+                })
+                setTimeout(() => {
+                    this.triggerEvent("endChange");
+                }, 300);
+            })
+        },
+        /* 打开选择跟进方式 */
+        selectWay() {
+            this.setData({
+                actionShow: !this.data.actionShow
+            })
+        },
+        /* 选择方式 */
+        onSelect(e) {
+            this.setData({
+                "content.followupmode": e.detail.name
+            })
+            this.isDisabled();
+        },
+        /* 选择结果 */
+        changeType(e) {
+            if (e.target.dataset.name) this.setData({
+                'content.logtype': e.target.dataset.name
+            })
+            this.isDisabled();
+        },
+        /* 输入框输入内容 */
+        inputChange(e) {
+            let text = e.type == 'input' ? e.detail.value : e.detail;
+            text = deleteMark.queryStr(text);
+
+            const {
+                label
+            } = e.currentTarget.dataset;
+
+            this.setData({
+                ["content." + label]: text
+            })
+            this.isDisabled();
+        },
+        isDisabled() {
+            let data = this.data.content,
+                disabled = (data.followupmode != '' && data.content != '') ? false : true;
+            if (data.logtype == '成交' && data.followupmode != '') disabled = false;
+            if (data.logtype == '丢单' && data.competitor == '') disabled = true;
+            this.setData({
+                disabled
+            })
+        },
+        updateTime() {
+            this.setData({
+                time: getTime.formatTime(new Date(), "-")
+            })
+        }
+    }
+})

+ 6 - 0
pages/threadedTree/details/modules/follow/index.json

@@ -0,0 +1,6 @@
+{
+    "component": true,
+    "usingComponents": {
+        "van-field": "@vant/weapp/field/index"
+    }
+}

+ 40 - 0
pages/threadedTree/details/modules/follow/index.scss

@@ -0,0 +1,40 @@
+@import "../../../modules/insert/insert.scss";
+
+@import "../handOver/index.scss";
+
+.results {
+    display: flex;
+    justify-content: space-between;
+    padding: 0 30rpx;
+    width: 100vw;
+    box-sizing: border-box;
+    margin-top: 20rpx;
+
+    >view {
+        width: 160rpx;
+        height: 90rpx;
+        text-align: center;
+        line-height: 90rpx;
+        background: #FFFFFF;
+        border-radius: 16rpx;
+        border: 1px solid #CCCCCC;
+        font-size: 28rpx;
+        font-family: PingFang SC-Regular, PingFang SC;
+        color: #666666;
+    }
+
+    .op {
+        border-color: #3874F6;
+        background: #3874F6;
+        color: #FFFFFF;
+    }
+}
+
+.time {
+    height: 40rpx;
+    font-size: 28rpx;
+    font-family: PingFang SC-Regular, PingFang SC;
+    color: #333333;
+    padding-left: 30rpx;
+    margin-top: 20rpx;
+}

+ 70 - 0
pages/threadedTree/details/modules/follow/index.wxml

@@ -0,0 +1,70 @@
+<view class="box">
+    <view class="label"><text>*</text>跟进时间:</view>
+    <view class="time">{{time}}</view>
+    <view class="label"><text>*</text>本次跟进方式:</view>
+    <view class="selector" bindtap="selectWay">
+        <view>{{content.followupmode?content.followupmode:'请选择'}}</view>
+        <van-icon name="arrow-down" />
+    </view>
+
+    <view class="label"><text>*</text>本次跟进结果:</view>
+    <view class="results" bindtap="changeType">
+        <view class="{{content.logtype=='跟进'?'op':''}}" data-name="跟进">继续跟进</view>
+        <view class="{{content.logtype=='成交'?'op':''}}" data-name="成交">成交</view>
+        <view class="{{content.logtype=='丢单'?'op':''}}" data-name="丢单">丢单</view>
+        <view class="{{content.logtype=='无效'?'op':''}}" data-name="无效">无效</view>
+    </view>
+
+    <view hidden="{{content.logtype!='丢单'}}">
+        <view class="label"><text>*</text>已购买品牌:</view>
+        <van-field value="{{ content.competitor }}" input-class='input-class' border="{{ false }}" data-label="competitor" bind:change="inputChange" />
+    </view>
+
+    <view class="label"><text hidden="{{content.logtype=='成交'}}">*</text>{{text.type(content.logtype)}}</view>
+    <textarea value='{{content.content}}' class="textarea selector" data-label="content" bind:input="inputChange" placeholder="{{text.typeNote(content.logtype)}}"></textarea>
+</view>
+<view style="height: 140rpx;" />
+<view class="footer-but">
+    <van-button custom-class='button' disabled='{{disabled}}' bindtap="submit" loading='{{loading}}' loading-text="保存中...">确定</van-button>
+</view>
+
+<van-action-sheet show="{{ actionShow }}" actions="{{ actions }}" cancel-text="取消" bind:close="selectWay" bind:cancel='selectWay' bind:select="onSelect" />
+
+<wxs module="text">
+    module.exports.type = function (str) {
+        var text = '';
+        switch (str) {
+            case "跟进":
+                text = '本次跟进内容:'
+                break;
+            case "成交":
+                text = '添加备注:'
+                break;
+            case "丢单":
+                text = '丢单原因:'
+                break;
+            case "无效":
+                text = '无效原因:'
+                break;
+        }
+        return text
+    }
+    module.exports.typeNote = function (str) {
+        var text = '';
+        switch (str) {
+            case "跟进":
+                text = '请描述跟进情况及内容'
+                break;
+            case "成交":
+                text = '请填写备注'
+                break;
+            case "丢单":
+                text = '请填写丢单原因'
+                break;
+            case "无效":
+                text = '请填写无效原因'
+                break;
+        }
+        return text
+    }
+</wxs>

+ 2 - 2
pages/threadedTree/details/modules/record/index.wxml

@@ -1,5 +1,5 @@
 <navigator url="#" class="box" wx:for="{{followList}}">
     <view class="time">{{item.createdate}}</view>
-    <view class="content">由经销商端<text> {{item.createby}} </text>开始跟进,跟进方式:<text>{{item.followupmode}}</text><block wx:if="{{item.competitor}}">,跟进内容:</block></view>
-    <view class="explain" wx:if="{{item.competitor}}">{{item.competitor}}</view>
+    <view class="content">由经销商端<text style="color: var(--warning);"> {{item.createby}} </text>开始跟进,跟进方式:<text>{{item.followupmode}}</text><block wx:if="{{item.content}}">,跟进内容:</block></view>
+    <view class="explain" wx:if="{{item.content}}">{{item.content}}</view>
 </navigator>

+ 5 - 0
pages/threadedTree/index.js

@@ -3,6 +3,7 @@ const _Http = getApp().globalData.http;
 Page({
     data: {
         content: {
+            isAll: false,
             "pageNumber": 1,
             "pageSize": 20,
             "where": {
@@ -16,6 +17,7 @@ Page({
         sheetTitle: '',
         scrollHeight: 0, //滚动区域高度
         initInsert: true, //用于初始化新建组件
+        isReverse: false,
     },
     onLoad(options) {
         this.getList()
@@ -118,6 +120,9 @@ Page({
                 'sort[1].sorted': 0,
             })
         };
+        this.setData({
+            isReverse: !this.data.isReverse
+        })
         this.getList(true)
     },
     onReady() {

+ 2 - 2
pages/threadedTree/index.wxml

@@ -1,4 +1,4 @@
-<Search bind:inputSharch='inputSharch' bind:selectSort='selectSort' />
+<Search bind:inputSharch='inputSharch' bind:selectSort='selectSort' isReverse='{{isReverse}}' />
 
 <van-tabs class="tabs" active="{{ content.where.status }}" tab-class='tab-class' color='#3874F6' title-active-color='#3874F6' bind:change="tabsChange">
     <van-tab title="待跟进" />
@@ -11,7 +11,7 @@
 
 <!-- 浮动按钮 -->
 <FloatingButton>
-    <image style="width: 100rpx; height: 100rpx; transform: translate(-50%,-50%);" src='../../static/image/add.png' data-title="新建线索" bindtap="openSheet" />
+    <image style="width: 130rpx; height: 130rpx; transform: translate(-50%,-50%);" src='../../static/image/add.png' data-title="新建线索" bindtap="openSheet" />
 </FloatingButton>
 
 <My_listBox id='ListBox' bindgetlist="getList" height='{{scrollHeight}}'>

+ 41 - 58
pages/threadedTree/modules/insert/insert.scss

@@ -1,78 +1,61 @@
-.box {
-  width: 100vw;
-  box-sizing: border-box;
+@import "../../details/modules/handOver/index.scss";
 
-  .label {
-    height: 40rpx;
-    font-size: 28rpx;
-    font-family: PingFang SC-Regular, PingFang SC;
-    color: #333333;
-    line-height: 40rpx;
-    margin-top: 40rpx;
-    margin-left: 30rpx;
+.box {
+    width: 100vw;
+    box-sizing: border-box;
+
+    .label {
+        height: 40rpx;
+        font-size: 28rpx;
+        font-family: PingFang SC-Regular, PingFang SC;
+        color: #333333;
+        line-height: 40rpx;
+        margin-top: 40rpx;
+        margin-left: 30rpx;
+
+        text {
+            color: #FF3B30;
+            margin-right: 8rpx;
+        }
+    }
 
-    text {
-      color: #FF3B30;
-      margin-right: 8rpx;
+    .input-class {
+        width: 690rpx;
+        height: 90rpx;
+        background: #FFFFFF;
+        border-radius: 16rpx;
+        border: 1px solid #CCCCCC;
+        padding: 0 30rpx;
     }
-  }
+}
 
-  .input-class {
+/* 选择器样式 */
+.selector {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
     width: 690rpx;
     height: 90rpx;
     background: #FFFFFF;
     border-radius: 16rpx;
     border: 1px solid #CCCCCC;
+    margin: 0 auto;
+    margin-top: 20rpx;
     padding: 0 30rpx;
-  }
-}
-
-/* 选择器样式 */
-.selector {
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-  width: 690rpx;
-  height: 90rpx;
-  background: #FFFFFF;
-  border-radius: 16rpx;
-  border: 1px solid #CCCCCC;
-  margin: 0 auto;
-  margin-top: 20rpx;
-  padding: 0 30rpx;
-  box-sizing: border-box;
+    box-sizing: border-box;
 
 }
 
 .selector,
 .input-class,
 .textarea {
-  font-size: 28rpx;
-  font-family: PingFang SC-Regular, PingFang SC;
-  color: #666666;
+    font-size: 28rpx;
+    font-family: PingFang SC-Regular, PingFang SC;
+    color: #666666;
 }
 
 .textarea {
-  display: block;
-  height: 300rpx;
-  padding: 26rpx 30rpx;
+    display: block;
+    height: 300rpx;
+    padding: 26rpx 30rpx;
 }
-
-
-.button-box {
-  width: 100vw;
-  text-align: center;
-  margin-top: 60rpx;
-  padding-bottom: 150rpx;
-
-  .button {
-    width: 500rpx !important;
-    height: 90rpx !important;
-    background: #3874F6 !important;
-    border-radius: 45rpx !important;
-    font-size: 28rpx !important;
-    font-family: PingFang SC-Bold, PingFang SC !important;
-    font-weight: bold !important;
-    color: #FFFFFF !important;
-  }
-}

+ 22 - 20
pages/threadedTree/modules/insert/insert.wxml

@@ -1,22 +1,24 @@
 <view class="box">
-  <view class="label">客户名称:</view>
-  <van-field value="{{ content.name }}" input-class='input-class' border="{{ false }}" data-label="name" bind:change="inputChange" />
-  <view class="label"><text>*</text>手机号码:</view>
-  <van-field value="{{ content.phonenumber }}" type='number' input-class='input-class' border="{{ false }}" data-label="phonenumber" bind:change="inputChange" />
-  <view class="label"><text>*</text>省市县:</view>
-  <picker mode="region" bindchange="bindRegionChange" value="{{region}}">
-    <view class="selector">
-      <view>{{region[0]?region:'请选择'}}</view>
-      <van-icon name="arrow-down" />
-    </view>
-  </picker>
-  <view class="label">地址:</view>
-  <van-field value="{{ content.address }}" input-class='input-class' border="{{ false }}" data-label="address" bind:change="inputChange" />
-  <view class="label"><text>*</text>来源:</view>
-  <van-field value="{{ content.cluesource }}" input-class='input-class' border="{{ false }}" data-label="cluesource" bind:change="inputChange" />
-  <view class="label">备注:</view>
-  <textarea value='{{content.notes}}' class="textarea selector" data-label="notes" bind:input="inputChange" placeholder="请输入备注"></textarea>
+    <view class="label">客户名称:</view>
+    <van-field value="{{ content.name }}" input-class='input-class' border="{{ false }}" data-label="name" bind:change="inputChange" />
+    <view class="label"><text>*</text>手机号码:</view>
+    <van-field value="{{ content.phonenumber }}" type='number' input-class='input-class' border="{{ false }}" data-label="phonenumber" bind:change="inputChange" />
+    <view class="label"><text>*</text>省市县:</view>
+    <picker mode="region" bindchange="bindRegionChange" value="{{region}}">
+        <view class="selector">
+            <view>{{region[0]?region:'请选择'}}</view>
+            <van-icon name="arrow-down" />
+        </view>
+    </picker>
+    <view class="label">地址:</view>
+    <van-field value="{{ content.address }}" input-class='input-class' border="{{ false }}" data-label="address" bind:change="inputChange" />
+    <view class="label"><text>*</text>来源:</view>
+    <van-field value="{{ content.cluesource }}" input-class='input-class' border="{{ false }}" data-label="cluesource" bind:change="inputChange" />
+    <view class="label">备注:</view>
+    <textarea value='{{content.notes}}' class="textarea selector" data-label="notes" bind:input="inputChange" placeholder="请输入备注"></textarea>
+</view>
+
+<view style="height: 140rpx;" />
+<view class="footer-but">
+    <van-button custom-class='button' disabled='{{disabled}}' bindtap="submit" loading='{{loading}}' loading-text="保存中...">确定</van-button>
 </view>
-<view class="button-box">
-  <van-button disabled='{{disabled}}' custom-class='button' loading='{{loading}}' loading-text="保存中..." bindtap="submit">保存</van-button>
-</view>

+ 2 - 1
pages/threadedTree/modules/search/search.js

@@ -6,7 +6,8 @@ Component({
         },
         selectSort: {
             type: Function
-        }
+        },
+        isReverse: Boolean
     },
     data: {
         isClear: false

+ 1 - 1
pages/threadedTree/modules/search/search.wxml

@@ -1,5 +1,5 @@
 <van-search value="{{ value }}" shape="round" bind:change='textChange' bind:clear='onClear' bind:search='textChange' background="var(--bgColor)" use-action-slot placeholder="请输入搜索关键词">
     <view slot='action' class="right">
-        <text class="iconfont icon-paixu" catchtap="handleSort" />
+        <text class="iconfont {{isReverse?'icon-shengxu1':'icon-jiangxu'}}" catchtap="handleSort" />
     </view>
 </van-search>