zhaoxiaohai %!s(int64=2) %!d(string=hai) anos
pai
achega
92a786df83

+ 163 - 20
packageA/setclient/modules/trace/add/index.js

@@ -1,10 +1,18 @@
-const _Http = getApp().globalData.http;
+const _Http = getApp().globalData.http,
+    MFT = require("../../../../../utils/matchingFeilType");
 Page({
     data: {
         isNew: false, //是否为新增
         ownerid: null,
         ownertable: null,
         sys_datafollowupid: 0, //数据ID
+        files: {
+            images: [],
+            viewImages: [],
+            videos: [],
+            viewVideos: [],
+            files: []
+        },
         type: "",
         content: "",
         user: {}, //联系人
@@ -25,7 +33,142 @@ Page({
                 ...options
             })
         };
-        if (!options.sys_datafollowupid) this.initTemplate();
+        //编辑获取原信息,新建初始化模板
+        if (options.sys_datafollowupid) {
+            _Http.basic({
+                "id": 20221026085601,
+                "content": {
+                    "sys_datafollowupid": options.sys_datafollowupid
+                }
+            }).then(res => {
+                console.log("跟进详情", res)
+                if (res.msg != '成功') {
+                    wx.showToast({
+                        title: res.data,
+                        icon: "none"
+                    })
+                    setTimeout(() => {
+                        wx.navigateBack()
+                    }, 300)
+                };
+                this.handleFiles(MFT.fileList(res.data.attinfos));
+                this.setData({
+                    type: res.data.type,
+                    content: res.data.content
+                })
+            })
+        } else {
+            this.initTemplate()
+        }
+    },
+    deleteFile(e) {
+        let item = e.detail.attachmentid ? e.detail : e.currentTarget.dataset.item,
+            that = this;
+        if (!e.detail.attachmentid) {
+            wx.showModal({
+                title: '提示',
+                content: '是否确认删除该附件',
+                complete: ({
+                    confirm
+                }) => {
+                    if (confirm) that.handleDelete([item.linksid]).then(res => {
+                        if (res.msg != '成功') return wx.showToast({
+                            title: res.data,
+                            icon: "none"
+                        })
+                        let files = that.data.files,
+                            name = item.fileType == "image" ? "images" : "videos",
+                            name2 = item.fileType == "image" ? "viewImages" : "viewVideos",
+                            data = that.data.files[name].find(v => v.url == item.url);
+                        files[name] = files[name].filter(v => v.url != data.url);
+                        files[name2] = files[name2].filter(v => v.url != data.url);
+                        that.setData({
+                            files
+                        })
+                    })
+                }
+            })
+        } else {
+            that.handleDelete([item.linksid]).then(res => {
+                if (res.msg != '成功') return wx.showToast({
+                    title: res.data,
+                    icon: "none"
+                })
+                let files = that.data.files;
+                files.files = files.files.filter(v => v.url != item.url);
+                that.setData({
+                    files
+                })
+            })
+        }
+    },
+    handleDelete(linksid) {
+        return _Http.basic({
+            "classname": "system.attachment.Attachment",
+            "method": "deleteFileLink",
+            "content": {
+                "linksids": linksid
+            }
+        })
+    },
+    /* 绑定媒体 */
+    insertImgEdit({
+        detail
+    }) {
+        _Http.basic({
+            "classname": "system.attachment.Attachment",
+            "method": "createFileLink",
+            "content": {
+                "ownertable": "sys_datafollowup",
+                "ownerid": this.data.sys_datafollowupid,
+                "usetype": "default",
+                "attachmentids": detail
+            }
+        }).then(res => {
+            console.log('跟进记录绑定附件', res)
+            this.handleFiles(MFT.fileList(res.data));
+        })
+    },
+    /* 处理附件 */
+    handleFiles(list) {
+        let files = this.data.files;
+
+        list.forEach(v => {
+            switch (v.fileType) {
+                case "video":
+                    files.videos.push(v)
+                    files.viewVideos.push({
+                        url: v.url,
+                        type: "video",
+                        poster: v.subfiles[0].url
+                    })
+                    break;
+                case "image":
+                    files.images.push(v)
+                    files.viewImages.push({
+                        url: v.url,
+                        type: "image"
+                    })
+                    break;
+                default:
+                    files.files.push(v)
+                    break;
+            }
+        });
+        this.setData({
+            files
+        })
+    },
+    /* 预览媒体 */
+    viewMedias(e) {
+        const {
+            index,
+            type
+        } = e.currentTarget.dataset;
+        wx.previewMedia({
+            current: index,
+            sources: type == 'image' ? this.data.files.viewImages : this.data.files.viewVideos,
+        })
     },
     /* 初始化模板 */
     initTemplate() {
@@ -39,24 +182,25 @@ Page({
                 sys_datafollowupid: this.data.sys_datafollowupid
             }
         }).then(res => {
-            console.log("新增初始化模板", res)
-
             this.setData({
                 sys_datafollowupid: res.data.sys_datafollowupid,
                 isNew: true
             })
         })
     },
+    //开始选择跟进方式
     openSelect() {
         this.setData({
             show: true
         })
     },
+    //取消选择
     onCancel() {
         this.setData({
             show: false
         })
     },
+    //确定选择
     onSelect({
         detail
     }) {
@@ -65,26 +209,12 @@ Page({
         })
         this.onCancel();
     },
+    //文本域输入
     onInput(e) {
         this.setData({
             content: e.detail.value
         })
     },
-    selectUser() {
-        let result = this.data.user.userid ? [this.data.user.userid] : [];
-        wx.navigateTo({
-            url: `/packageA/group/select?data=${JSON.stringify({
-                    ownertable:this.data.ownertable,
-                    ownerid:this.data.ownerid
-                })}&radio=true&obj=true&result=${result}`,
-        })
-    },
-    handelSubmit(arr) {
-        wx.navigateBack();
-        this.setData({
-            user: arr[0]
-        })
-    },
     submit() {
         const content = {
             type: this.data.type,
@@ -98,7 +228,6 @@ Page({
             "id": 20220930121601,
             content
         }).then(res => {
-            console.log("新增或编辑", res)
             if (res.msg != '成功') return wx.showToast({
                 title: res.data,
                 icon: "none"
@@ -107,6 +236,9 @@ Page({
                 title: '保存成功',
                 icon: "none"
             });
+            this.setData({
+                isNew: false
+            })
             setTimeout(() => {
                 getCurrentPages().forEach(v => {
                     //详情界面更新数据
@@ -144,4 +276,15 @@ Page({
             }, 300)
         })
     },
+    onUnload() {
+        if (this.data.isNew) _Http.basic({
+            "id": 20220930121701,
+            "content": {
+                "sys_datafollowupid": this.data.sys_datafollowupid,
+                "deletereason": "系统删除"
+            }
+        }).then(res => {
+            console.log("初始化模板后未保存删除", res)
+        })
+    }
 })

+ 4 - 1
packageA/setclient/modules/trace/add/index.json

@@ -1,4 +1,7 @@
 {
-    "usingComponents": {},
+    "usingComponents": {
+        "My_upload":"/components/My_upload/index",
+        "My_accessory":"/components/My_accessory/index"
+    },
     "navigationBarTitleText": "跟进"
 }

+ 51 - 1
packageA/setclient/modules/trace/add/index.scss

@@ -28,12 +28,23 @@
         }
 
         .upload {
+            display: flex;
+            align-items: center;
             width: 100%;
             height: 88rpx;
             box-sizing: border-box;
             border-bottom: 2rpx solid #CCCCCC;
             border-top: 2rpx solid #CCCCCC;
             background-color: #F4F5F7;
+
+            navigator {
+                width: 100rpx;
+                height: 80rpx;
+                line-height: 80rpx;
+                text-align: center;
+                padding: 0;
+                background-color: #F4F5F7;
+            }
         }
 
         .title {
@@ -41,7 +52,7 @@
         }
     }
 
-    navigator {
+    .navigator {
         width: 750rpx;
         background: #FFFFFF;
         box-sizing: border-box;
@@ -56,6 +67,7 @@
             box-sizing: border-box;
 
             .label {
+                flex-shrink: 0;
                 font-size: 28rpx;
                 font-family: PingFang SC-Regular, PingFang SC;
                 color: #666666;
@@ -77,6 +89,44 @@
             }
         }
     }
+
+    .media {
+        width: 100%;
+        display: flex;
+        flex-wrap: wrap;
+        margin-top: 20rpx;
+        padding: 0 30rpx;
+        box-sizing: border-box;
+
+        .image {
+            position: relative;
+            width: 116rpx;
+            height: 116rpx;
+            margin-right: 8rpx;
+            margin-bottom: 8rpx;
+
+            image {
+                width: 100%;
+                height: 100%;
+            }
+
+            .icon {
+                position: absolute;
+                top: 6rpx;
+                right: 6rpx;
+                color: #DF1C34;
+            }
+
+            .suspend {
+                position: absolute;
+                top: 50%;
+                left: 50%;
+                width: 36rpx;
+                height: 36rpx;
+                transform: translate(-50%, -50%);
+            }
+        }
+    }
 }
 
 .footer {

+ 25 - 11
packageA/setclient/modules/trace/add/index.wxml

@@ -3,30 +3,44 @@
     <view class="content">
         <textarea class="textarea" placeholder='请填写' value="{{content}}" bindinput='onInput' />
         <view class="upload">
-
+            <My_upload accept='media' binduploadCallback="insertImgEdit">
+                <navigator url="#">
+                    <text class="iconfont icon-a-tonggaofujian" />
+                </navigator>
+            </My_upload>
+            <My_upload accept='file' binduploadCallback="insertImgEdit">
+                <navigator url="#">
+                    <text class="iconfont icon-a-biaoqianlanzhiku" />
+                </navigator>
+            </My_upload>
         </view>
         <view class="title">
             附件列表:
         </view>
+        <view class="media">
+            <navigator url="#" class="image" wx:for="{{files.images}}" wx:key="item.attachmentid">
+                <image src="{{item.url}}" data-index="{{index}}" data-type='image' mode="aspectFill" bindtap="viewMedias" />
+                <van-icon custom-class='icon' name="clear" data-item="{{item}}" bindtap="deleteFile" />
+            </navigator>
+        </view>
+        <view class="media">
+            <navigator url="#" class="image" wx:for="{{files.videos}}" wx:key="item.attachmentid">
+                <image src="{{item.subfiles[0].url}}" data-index="{{index}}" data-type='video' mode="aspectFill" bindtap="viewMedias" />
+                <van-icon custom-class='icon' name="clear" data-item="{{item}}" bindtap="deleteFile" />
+                <image class="suspend" src="/static/image/suspend.png" />
+            </navigator>
+        </view>
+        <My_accessory butType='删除' list="{{files.files}}" binddeleteFile='deleteFile' />
     </view>
-    <navigator url="#" bindtap="openSelect">
+    <navigator class="navigator" url="#" bindtap="openSelect">
         <view>
             <view class="label">跟进方式</view>
             <view class="text">{{type||"请选择"}}</view>
             <text class="iconfont icon-a-wodetiaozhuan" />
         </view>
     </navigator>
-    <navigator url="#" bindtap="selectUser" wx:if="{{false}}">
-        <view>
-            <view class="label">跟进客户联系人</view>
-            <view class="text">{{user.name||"请选择"}}</view>
-            <text class="iconfont icon-a-wodetiaozhuan" />
-        </view>
-    </navigator>
 </view>
-
 <van-action-sheet show="{{ show }}" actions="{{ actions }}" bind:cancel='onCancel' bind:select='onSelect' cancel-text="取消" />
-
 <view style="height: 130rpx;" />
 <view class="footer">
     <van-button custom-class='but' disabled='{{!content}}' bindtap="submit">确定</van-button>

+ 2 - 3
packageA/setclient/modules/trace/detail/index.js

@@ -41,12 +41,11 @@ Page({
     tabbarOnClick({
         detail
     }) {
-        const pages = getCurrentPages(),
-            item = this.data.detail;
+        const item = this.data.detail;
         switch (detail.label) {
             case "编辑":
                 wx.navigateTo({
-                    url: `/packageA/setclient/modules/trace/add/index?ownertable=${this.data.ownertable}&ownerid=${this.data.ownerid}&content=${item.content}&type=${item.type}&sys_datafollowupid=${item.sys_datafollowupid}`
+                    url: `/packageA/setclient/modules/trace/add/index?ownertable=${this.data.ownertable}&ownerid=${this.data.ownerid}&sys_datafollowupid=${item.sys_datafollowupid}`
                 });
                 break;
             case "作废":

+ 19 - 2
packageA/setclient/modules/trace/index.js

@@ -37,11 +37,28 @@ Component({
                     title: res.data,
                     icon: "none"
                 });
+                let deleteList = res.data.filter(v => v.content == "" && v.type == ""),
+                    list = res.data.filter(v => v.content != "" || !v.type == "");
+                this.handleDeleteList(deleteList);
                 this.setData({
                     "content.pageNumber": res.pageNumber + 1,
                     "content.pageTotal": res.pageTotal,
-                    "content.total": res.total,
-                    list: res.pageNumber == 1 ? res.data : this.data.list.concat(res.data)
+                    "content.total": res.total - deleteList.length,
+                    list: res.pageNumber == 1 ? list : this.data.list.concat(list)
+                })
+            })
+        },
+        /* 批量删除空模板 */
+        handleDeleteList(list) {
+            list.forEach(v => {
+                _Http.basic({
+                    "id": 20220930121701,
+                    "content": {
+                        "sys_datafollowupid": v.sys_datafollowupid,
+                        "deletereason": "系统删除空模板"
+                    }
+                }, false).then(res => {
+                    console.log(res)
                 })
             })
         },

+ 1 - 1
packageA/setclient/modules/trace/list/index.js

@@ -31,7 +31,7 @@ Component({
                 item
             } = e.currentTarget.dataset;
             wx.navigateTo({
-                url: `/packageA/setclient/modules/trace/add/index?ownertable=${this.data.ownertable}&ownerid=${this.data.ownerid}&content=${item.content}&type=${item.type}&sys_datafollowupid=${item.sys_datafollowupid}`
+                url: `/packageA/setclient/modules/trace/add/index?ownertable=${this.data.ownertable}&ownerid=${this.data.ownerid}&sys_datafollowupid=${item.sys_datafollowupid}`
             });
         },
         deleteItem(e) {