codeMan 3 лет назад
Родитель
Сommit
56ee6cd5c1
33 измененных файлов с 1613 добавлено и 2 удалено
  1. 5 1
      app.json
  2. 4 0
      components/Yl_filtrate/index.js
  3. 1 1
      components/Yl_filtrate/index.wxml
  4. 147 0
      packageA/activity/addActivity.js
  5. 4 0
      packageA/activity/addActivity.json
  6. 23 0
      packageA/activity/addActivity.scss
  7. 6 0
      packageA/activity/addActivity.wxml
  8. 339 0
      packageA/activity/detail.js
  9. 8 0
      packageA/activity/detail.json
  10. 15 0
      packageA/activity/detail.scss
  11. 19 0
      packageA/activity/detail.wxml
  12. 268 0
      packageA/activity/index.js
  13. 6 0
      packageA/activity/index.json
  14. 16 0
      packageA/activity/index.scss
  15. 46 0
      packageA/activity/index.wxml
  16. 217 0
      packageA/activity/modules/clue/addClue.js
  17. 4 0
      packageA/activity/modules/clue/addClue.json
  18. 23 0
      packageA/activity/modules/clue/addClue.scss
  19. 6 0
      packageA/activity/modules/clue/addClue.wxml
  20. 171 0
      packageA/activity/modules/clue/clue.js
  21. 6 0
      packageA/activity/modules/clue/clue.json
  22. 3 0
      packageA/activity/modules/clue/clue.scss
  23. 22 0
      packageA/activity/modules/clue/clue.wxml
  24. 34 0
      packageA/activity/modules/clue/list/index.js
  25. 4 0
      packageA/activity/modules/clue/list/index.json
  26. 78 0
      packageA/activity/modules/clue/list/index.scss
  27. 12 0
      packageA/activity/modules/clue/list/index.wxml
  28. 23 0
      packageA/activity/modules/list/index.js
  29. 4 0
      packageA/activity/modules/list/index.json
  30. 53 0
      packageA/activity/modules/list/index.scss
  31. 26 0
      packageA/activity/modules/list/index.wxml
  32. 6 0
      pages/tabbar/home/index.js
  33. 14 0
      project.private.config.json

+ 5 - 1
app.json

@@ -84,7 +84,11 @@
                 "contract/add/type2/index",
                 "contract/add/type3/index",
                 "contract/add/type4/index",
-                "contract/add/type5/index"
+                "contract/add/type5/index",
+                "activity/index",
+                "activity/detail",
+                "activity/addActivity",
+                "activity/modules/clue/addClue"
             ]
         }
     ],

+ 4 - 0
components/Yl_filtrate/index.js

@@ -3,6 +3,10 @@ Component({
     properties: {
         show: Boolean,
         handle: Function, //按钮回调函数
+        zIndex:{
+            type:String,
+            value:99999,
+        },
     },
     lifetimes: {
         ready() {

+ 1 - 1
components/Yl_filtrate/index.wxml

@@ -1,4 +1,4 @@
-<van-popup show="{{ show }}" position="right" custom-style="width: 660rpx; height:100vh;" bind:close="onClose">
+<van-popup show="{{ show }}" position="right" custom-style="width: 660rpx; height:100vh;" z-index="{{zIndex}}" bind:close="onClose">
     <view class="head" />
     <My_listBox height="{{listHeight}}" pullDown='{{false}}'>
         <slot />

+ 147 - 0
packageA/activity/addActivity.js

@@ -0,0 +1,147 @@
+const _Http = getApp().globalData.http,
+    getTime = require("../../utils/getTime");
+
+Page({
+    data: {
+        showAll: false,
+        form: [{
+            label: "活动类型",
+            error: false,
+            errMsg: "",
+            type: "option",
+            optionNmae: "campaigntype",
+            optionType: "radio", //复选   radio 单选
+            value: "",
+            placeholder: "选择类型",
+            valueName: "type",
+            checking: "base",
+            required: true
+        }, {
+            label: "市场活动名称",
+            error: false,
+            errMsg: "",
+            type: "label",
+            value: "",
+            placeholder: "市场活动名称",
+            valueName: "name",
+            checking: "base",
+            required: true
+        }, {
+            label: "负责人",
+            error: false,
+            errMsg: "",
+            type: "label",
+            value: "",
+            placeholder: "负责人",
+            valueName: "director",
+            checking: "base",
+            required: false
+        }, {
+            label: "地址",
+            error: false,
+            errMsg: "",
+            type: "label",
+            value: "",
+            placeholder: "地址",
+            valueName: "address",
+            checking: "base",
+            required: false
+        }, {
+            label: "开始日期",
+            error: false,
+            errMsg: "",
+            type: "date",
+            start: getTime.formatTime(new Date(), '-').split(' ')[0],
+            value: getTime.formatTime(new Date(), '-').split(' ')[0],
+            placeholder: "报价日期",
+            valueName: "begdate",
+            checking: "base",
+            required: true
+        }, {
+            label: "结束日期",
+            error: false,
+            errMsg: "",
+            type: "date",
+            start: getTime.formatTime(new Date(), '-').split(' ')[0],
+            value: "",
+            placeholder: "结束时间",
+            valueName: "enddate",
+            checking: "base",
+            required: false
+        }],
+        "content": {
+            "sat_campaignid": "0",
+            "name":"",
+            "director":"",
+            "address":"",
+            "type":"",
+        },
+        disabled: true
+    },
+    onLoad(options) {
+        if (options.rowData) {
+            // wx.setNavigationBarTitle({
+            //   title: 'title',
+            // })
+            let data = JSON.parse(options.rowData);
+            this.setData({
+                disabled: false,
+                form: this.data.form.map(v => {
+                    if (v.valueName != 'region') {
+                        v.value = data[v.valueName];
+                    } else {
+                        v.value = data.province ? [data.province, data.city, data.county] : []
+                    }
+                    return v
+                }),
+                'content.sat_campaignid':data.sat_campaignid
+            })
+        }
+    },
+    submit() {
+        let content = {
+            ...this.data.content,
+            ...this.selectComponent("#Form").submit()
+        };
+        _Http.basic({
+            "classname":"webmanage.saletool.orderclue.ordercluecampaign",
+            "method": "insertormodify_campaign",
+            "version": 1,
+            content
+        }).then(res => {
+            console.log("添加普通报价单", res)
+            wx.showToast({
+                title: res.msg != '成功' ? res.msg : '保存成功',
+                icon: "none"
+            })
+            if (res.msg != '成功') return;
+            setTimeout(() => {
+                wx.navigateBack();
+                getCurrentPages().forEach(v => {
+                    console.log(v,'路径');
+                    if(v.__route__=='packageA/activity/detail'){
+                        v.getDetail();
+                    }else if(v.__route__=='packageA/activity/index'){
+                        v.getList(true);
+                    }
+                })
+            }, 300)
+        })
+    },
+    // 是否显示全部
+    onChange({
+        detail
+    }) {
+        this.setData({
+            showAll: detail
+        })
+    },
+    /* 表单必填项是否完成 */
+    onConfirm({
+        detail
+    }) {
+        this.setData({
+            disabled: detail
+        })
+    }
+})

+ 4 - 0
packageA/activity/addActivity.json

@@ -0,0 +1,4 @@
+{
+    "usingComponents": {},
+    "navigationBarTitleText": "添加活动"
+}

+ 23 - 0
packageA/activity/addActivity.scss

@@ -0,0 +1,23 @@
+.new-footer {
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+    position: fixed;
+    width: 100vw;
+    height: 130rpx;
+    background: #FFFFFF;
+    box-shadow: 0px -4rpx 16rpx 2rpx rgba(150, 157, 165, 0.16);
+    bottom: 0;
+
+    .new-submit {
+        width: 156rpx;
+        height: 90rpx;
+        background: #3874F6;
+        border-radius: 8rpx;
+        font-size: 28rpx;
+        font-family: PingFang SC-Bold, PingFang SC;
+        font-weight: bold;
+        color: #FFFFFF;
+        margin-right: 30rpx;
+    }
+}

+ 6 - 0
packageA/activity/addActivity.wxml

@@ -0,0 +1,6 @@
+<Yl_Headline title='基本信息' type='switch' switchLabel='仅显示必填信息' switch='{{showAll}}' bind:callBack='onChange' />
+<Yl_field id='Form' form='{{form}}' showAll='{{!showAll}}' bind:onConfirm='onConfirm' bind:interrupt="interrupt" />
+<view style="height: 100rpx;" />
+<view class="new-footer">
+    <van-button custom-class='new-submit' disabled='{{disabled}}' bindclick='submit'>提交</van-button>
+</view>

+ 339 - 0
packageA/activity/detail.js

@@ -0,0 +1,339 @@
+const _Http = getApp().globalData.http;
+Page({
+    data: {
+        tabsActive: 0, //tabs 选中项
+        sat_campaignid: "",
+        detail:'',
+        tabsList: [{
+            label: "详细信息",
+            num: 132
+        }, {
+            label: "活动线索",
+            num: 132
+        }, {
+            label: "操作",
+            num: 132
+        }, {
+            label: "跟进动态",
+            num: 132
+        }],
+        tabbarList: [{
+            icon: "icon-bianji",
+            label: "编辑"
+        }, {
+            icon: "icon-dibu-chengjiao",
+            label: "发布"
+        }, {
+            icon: "icon-dibu-jieshu",
+            label: "结束"
+        },{
+            icon: "icon-zhuanyi",
+            label: "更换负责人"
+        }],
+        oldtabbarList: [{
+            icon: "icon-bianji",
+            label: "编辑"
+        }, {
+            icon: "icon-dibu-chengjiao",
+            label: "发布"
+        }, {
+            icon: "icon-dibu-jieshu",
+            label: "结束"
+        },{
+            icon: "icon-zhuanyi",
+            label: "更换负责人"
+        }],
+    },
+    onLoad(options) {
+        this.setData({
+            sat_campaignid: options.sat_campaignid
+        });
+        this.getDetail();
+    },
+    getDetail() {
+        console.log(111);
+        _Http.basic({
+            "classname": "webmanage.saletool.orderclue.ordercluecampaign",
+            "method": "queryCampaignMain",
+            "version": 1,
+            "content": {
+                "nocache":true,
+                "sat_campaignid": this.data.sat_campaignid
+            },
+        }).then(res => {
+            console.log("市场活动详情", res)
+            if (res.msg != '成功') return wx.showToast({
+                title: res.msg,
+                icon: "none"
+            });
+            this.setData({
+                detail: res.data,
+                briefs: [{
+                    label: "市场活动名称",
+                    value: res.data.name
+                }, {
+                    label: "活动类型",
+                    value: res.data.type
+                }, {
+                    label: "线索数",
+                    value: res.data.ordercluecount||'0'
+                }, {
+                    label: "负责人",
+                    value: res.data.director
+                }, {
+                    label: "状态",
+                    value: res.data.status
+                }],
+                list1: [{
+                    label: "市场活动名称",
+                    value: res.data.name
+                }, {
+                    label: "活动类型",
+                    value: res.data.type
+                }, {
+                    label: "线索数",
+                    value: res.data.ordercluecount||'0'
+                }, {
+                    label: "活动地点",
+                    value: res.data.address
+                }, {
+                    label: "状态",
+                    value: res.data.status
+                }, {
+                    label: "开始时间",
+                    value: res.data.begdate
+                }, {
+                    label: "结束时间",
+                    value: res.data.enddate
+                }, {
+                    label: "负责人",
+                    value: res.data.director
+                }],
+                list2: [{
+                    label: "创建人",
+                    value: res.data.createby
+                }, {
+                    label: "创建时间",
+                    value: res.data.createdate
+                }, {
+                    label: "最近编辑人",
+                    value: res.data.changeby
+                }, {
+                    label: "最近编辑时间",
+                    value: res.data.changedate
+                }, {
+                    label: "发布人",
+                    value: res.data.changeby
+                }, {
+                    label: "发布时间",
+                    value: res.data.followdate
+                }, {
+                    label: "结束人",
+                    value: res.data.followdate
+                }],
+                tabsList: this.data.tabsList,
+                'tabbarList[1].label':res.data.status == '新建' ? '发布' : '取消发布'
+            });
+            let arr = this.data.oldtabbarList
+            if(res.data.status == '结束') {
+                arr = this.data.tabbarList.filter(item => item.label == '结束')
+            } else if (res.data.status == '发布') {
+                arr = this.data.tabbarList.filter(item => item.label != '编辑')
+            }
+            this.setData({
+                tabbarList: arr
+            })
+            this.getTags();
+            this.getGroup();
+            this.partialRenewal();
+        })
+    },
+    //tabs 切换
+    tabsChange({
+        detail
+    }) {
+        this.setData({
+            tabsActive: detail
+        });
+        this.partialRenewal();
+    },
+    //更新标签
+    getTags() {
+        this.selectComponent("#Tags").getTags();
+    },
+    //更新团队成员
+    getGroup() {
+        this.selectComponent("#Group").getList();
+    },
+    //局部数据更新 tabs
+    partialRenewal(init = false) {
+        let id = this.data.detail.sat_campaignid;
+        let model = '';
+        let name = this.data.tabsList[this.data.tabsActive].label;
+        switch (name) {
+            case "活动线索":
+                model = "#clue"
+                break;
+            case "操作":
+                model = "#hadnle"
+                break;
+            case "跟进动态":
+                model = "#Trace"
+                break;
+        };
+        if (model) {
+            // 确定好模块ID total = null 是第一次加载 加载数据
+            // init是新增或修改需要清数据
+            let Component = this.selectComponent(model);
+            const {
+                total,
+                pageNumber,
+                pageTotal
+            } = Component.data.content;
+            if (total == null || init) {
+                Component.getList(id, init);
+            } else if (pageNumber <= pageTotal) {
+                Component.getList(id, false);
+            } else {
+                //用来判断 在搜索页面修改,与tabs选项不一致 但是切换到该选项 重置数据
+            }
+        }
+    },
+    onReachBottom() {
+        this.partialRenewal();
+    },
+    //详情按钮回调
+    tabbarOnClick({
+        detail
+    }) {
+        let data = this.data.detail;
+        switch (detail.label) {
+            case "编辑":
+                wx.navigateTo({
+                    url: `/packageA/activity/addActivity?rowData=${JSON.stringify(this.data.detail)}`,
+                })
+                break;
+            case "发布":
+                wx.showModal({
+                    title: '提示',
+                    content: `是否确认发布该市场活动?`,
+                    complete: ({
+                        confirm
+                    }) => {
+                        if (confirm) _Http.basic({
+                            "classname":"webmanage.saletool.orderclue.ordercluecampaign",
+                            method:'release',
+                            "content": {
+                                "sat_campaignids": [this.data.detail.sat_campaignid]
+                            }
+                        }).then(res => {
+                            wx.showToast({
+                                title: res.msg == '成功' ? `已发布该活动` : res.msg,
+                                icon: "none"
+                            });
+                            if (res.msg == '成功') {
+                                this.getDetail()
+                            }
+                        })
+                    }
+                })
+                break;
+            case "结束":
+                wx.showModal({
+                    title: '提示',
+                    content: `是否确认结束该市场活动?`,
+                    complete: ({
+                        confirm
+                    }) => {
+                        if (confirm) _Http.basic({
+                            "classname":"webmanage.saletool.orderclue.ordercluecampaign",
+                            method:'endcampaign',
+                            "content": {
+                                "sat_campaignids": [this.data.detail.sat_campaignid]
+                            }
+                        }).then(res => {
+                            wx.showToast({
+                                title: res.msg == '成功' ? `已结束该活动` : res.msg,
+                                icon: "none"
+                            });
+                            if (res.msg == '成功') {
+                                this.getDetail()
+                            }
+                        })
+                    }
+                })
+                break;
+            case "取消发布":
+                wx.showModal({
+                    title: '提示',
+                    content: `是否确认取消发布该市场活动?`,
+                    complete: ({
+                        confirm
+                    }) => {
+                        if (confirm) _Http.basic({
+                            "classname":"webmanage.saletool.orderclue.ordercluecampaign",
+                            method:"undercarriage",
+                            "content": {
+                                "sat_campaignids": [this.data.detail.sat_campaignid]
+                            }
+                        }).then(res => {
+                            wx.showToast({
+                                title: res.msg == '成功' ? `已取消该活动` : res.msg,
+                                icon: "none"
+                            });
+                            if (res.msg == '成功') {
+                                this.getDetail()
+                            }
+                        })
+                    }
+                })
+                break;
+            case "更换负责人":
+                wx.navigateTo({
+                    url: `/packageA/group/select?data=${JSON.stringify({
+                             ownertable:"sat_campaign",
+                             ownerid:data.sat_campaignid,
+                        })}&radio=true&principal=true`,
+                })
+                break;
+        }
+    },
+    /* 更换负责人 */
+    handelSubmit(arr) {
+        const that = this;
+        wx.showModal({
+            title: '提示',
+            content: '是否确认更换负责人',
+            complete: ({
+                confirm
+            }) => {
+                if (confirm) _Http.basic({
+                    "id": 20220930103701,
+                    "content": {
+                        ownertable: "sat_campaign",
+                        ownerid: that.data.detail.sat_campaignid,
+                        userid: arr[0]
+                    }
+                }).then(res => {
+                    console.log("更换负责人", res)
+                    if (res.msg != '成功') return wx.showToast({
+                        title: res.data,
+                        icon: "none"
+                    });
+                    wx.showToast({
+                        title: '更换成功!',
+                        icon: "none"
+                    });
+                    setTimeout(() => {
+                        that.getDetail();
+                        wx.navigateBack();
+                        /*  getCurrentPages().forEach(v => {
+                             if (['packageA/project/index'].includes(v.__route__)) v.getList(true)
+                         }) */
+                    }, 300)
+                })
+            }
+        })
+    },
+    onShareAppMessage() {}
+})

+ 8 - 0
packageA/activity/detail.json

@@ -0,0 +1,8 @@
+{
+    "usingComponents": {
+        "Preview": "../setclient/modules/preview/index",
+        "Trace": "../setclient/modules/trace/index",
+        "Clue": "./modules/clue/clue"
+    },
+    "navigationBarTitleText": "活动详情"
+}

+ 15 - 0
packageA/activity/detail.scss

@@ -0,0 +1,15 @@
+.header {
+    background-color: #fff;
+    padding: 20rpx 30rpx 0rpx;
+    box-sizing: border-box;
+    margin-bottom: -16rpx;
+
+    .title {
+        height: 40rpx;
+        font-size: 28rpx;
+        font-family: PingFang SC-Bold, PingFang SC;
+        font-weight: bold;
+        color: #333333;
+        margin-bottom: 16rpx;
+    }
+}

+ 19 - 0
packageA/activity/detail.wxml

@@ -0,0 +1,19 @@
+<view class="header">
+    <view class="title">{{detail.name}}</view>
+    <Yl-tags id="Tags" add ownertable='sat_campaign' ownerid='{{detail.sat_campaignid}}' />
+</view>
+<!-- 简介 -->
+<Yl_Detail list="{{briefs}}">
+    <Yl-group slot='bottom' id='Group' add ownertable='sat_campaign' ownerid='{{detail.sat_campaignid}}' />
+</Yl_Detail>
+<view style="height: 20rpx;" />
+
+<Yl_FunTabs list='{{tabsList}}' active='{{tabsActive}}' bind:onChenge="tabsChange">
+    <Preview slot='详细信息' list1='{{list1}}' list2='{{list2}}' />
+    <Clue slot='活动线索' id='clue'/>
+    <Trace slot='跟进动态' id='Trace' ownertable='sat_campaign' ownerid='{{detail.sat_campaignid}}' />
+    <view style="height: 140rpx;" />
+</Yl_FunTabs>
+
+<!-- 底部 -->
+<Yl_Tabbar list='{{tabbarList}}' bind:callback="tabbarOnClick" />

+ 268 - 0
packageA/activity/index.js

@@ -0,0 +1,268 @@
+const _Http = getApp().globalData.http,
+    getHeight = require("../../utils/getRheRemainingHeight");
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+        navList: [{
+            label: "排序",
+            icon: "icon-shengxu",
+            color: "",
+            width: "",
+            id: "sort"
+        }, {
+            label: "筛选",
+            icon: "icon-shaixuan",
+            color: "",
+            width: "",
+            id: "2"
+        }],
+        classShow: false,
+        classActions: [{
+                name: '全部',
+                index: 0
+            }, {
+                name: '我负责的',
+                index: 1
+            },
+            {
+                name: '我参与的',
+                index: 2
+            },
+            {
+                name: "我下属负责的",
+                index: 3
+            }, {
+                name: "我下属参与的",
+                index: 4
+            }
+        ],
+        content: {
+            "isAll":0,
+            "nocache": true,
+            "version": 1,
+            "pageNumber": 1,
+            "pageSize": 20,
+            "where": {
+                "condition": "",
+                "startdate": "",
+                "enddate": "",
+                "status": "",
+            },
+            "sort": []
+        },
+        filter: {
+            show: false,
+            type: ['行业峰会', '区域交流会'], //状态项
+            typeActive: "",
+            status: ['新建', '发布', '结束'], //状态项
+            statusActive: "",
+            startdate: "",
+            enddate: ""
+        }
+    },
+    onLoad(options) {
+        this.getList();
+        this.getTypeList()
+    },
+    /* 获取列表 */
+    getList(init = false, data) {
+        if (init.detail != undefined) init = init.detail;
+        let content = this.data.content;
+        if (init) content.pageNumber = 1;
+        if (content.pageNumber > content.pageTotal) return;
+        if (data) {
+            content.where.type = data.typeActive
+            content.where.status = data.statusActive;
+            content.where.startdate = data.startdate;
+            content.where.enddate = data.enddate;
+        }
+        _Http.basic({
+            "id": 20221101095102,
+            content
+        }).then(res => {
+            console.log("市场活动", res)
+            this.selectComponent('#ListBox').RefreshToComplete();
+            if (res.msg != '成功') return wx.showToast({
+                title: res.data,
+                icon: "none"
+            })
+            res.data = res.data.map(v => {
+                v.progress = v.stage / v.totalstage * 100;
+                return v
+            })
+            this.setData({
+                'content.pageNumber': res.pageNumber + 1,
+                'content.pageTotal': res.pageTotal,
+                'content.total': res.total,
+                'content.sort': res.sort,
+                list: res.pageNumber == 1 ? res.data : this.data.list.concat(res.data)
+            });
+            this.setListHeight();
+            this.getTags();
+        })
+    },
+    /* 获取活动类型 */
+    getTypeList () {
+        _Http.basic({
+            "id": 20220901092501,
+            "content": {
+                "typename":'campaigntype'
+            }
+        }).then(res => {
+            console.log("活动类型", res)
+            if (res.msg != '成功') return wx.showToast({
+                title: res.data,
+                icon: "none"
+            })
+            let type = res.data.map(item => {
+                return item.value
+            })
+            this.setData({
+                'filter.type': type
+            });
+            this.setListHeight();
+        })
+    },
+    /* 处理搜索 */
+    onSearch({
+        detail
+    }) {
+        this.setData({
+            "content.where.condition": detail
+        });
+        this.getList(true);
+    },
+    /* 获取列表标签 */
+    getTags() {
+        let list = this.data.list,
+            ownerids = list.map(v => v.sat_campaignid);
+        _Http.basic({
+            "id": 20221018102001,
+            "content": {
+                nocache: true,
+                "ownertable": "sat_campaign",
+                ownerids
+            }
+        }).then(res => {
+            console.log("标签", res)
+            for (let key in res.data) {
+                let index = list.findIndex(v => v.sat_campaignid == key);
+                list[index].tags = res.data[key]
+            };
+            this.setData({
+                list
+            })
+        })
+    },
+    /* 去添加 */
+    openType() {
+        wx.navigateTo({
+          url: '/packageA/activity/addActivity',
+        })
+    },
+    /* 选择添加报价形式 */
+    typeSelect({
+        detail
+    }) {
+        wx.navigateTo({
+            url: detail.name == '项目报价' ? '/packageA/offers/addProjectOffer' : '/packageA/offers/addSetclientOffer',
+        });
+        this.typeCancel();
+    },
+    onReady() {
+        this.setListHeight();
+    },
+    setListHeight() {
+        getHeight.getHeight('.total', this).then(res => {
+            if (this.data.listHeight != res)
+                this.setData({
+                    listHeight: res
+                })
+        });
+    },
+    /* 顶部条件导航回调 */
+    navClick({
+        detail
+    }) {
+        switch (detail.id) {
+            case '1':
+                this.setData({
+                    classShow: true
+                })
+                break;
+            case '2':
+                this.setData({
+                    'filter.show': true
+                })
+                break;
+        }
+    },
+    classClose() {
+        this.setData({
+            classShow: false
+        })
+    },
+    classSelect({
+        detail
+    }) {
+        if (this.data.content.type == detail.index) return this.classClose();
+        this.setData({
+            "content.type": detail.index,
+            'navList[0].label': detail.name
+        })
+        this.classClose();
+        this.getList(true)
+    },
+    /* 筛选状态选择 */
+    selectStatus(e) {
+        const {
+            item
+        } = e.currentTarget.dataset;
+        this.setData({
+            "filter.statusActive": this.data.filter.statusActive == item ? "" : item
+        })
+    },
+    /* 筛选状态选择 */
+    typeStatus(e) {
+        const {
+            item
+        } = e.currentTarget.dataset;
+        this.setData({
+            "filter.typeActive": this.data.filter.typeActive == item ? "" : item
+        })
+    },
+    /* 处理筛选 */
+    handleFilter({
+        detail
+    }) {
+        const data = this.data.filter;
+        switch (detail) {
+            case 'confirm':
+                this.setData({
+                    'filter.show': false
+                });
+                this.getList(true, data);
+                break;
+            case 'reset':
+                this.setData({
+                    'filter.statusActive': "",
+                    'filter.typeActive': "",
+                    'filter.startdate': "",
+                    'filter.enddate': "",
+                });
+                this.getList(true, this.data.filter)
+                break;
+            case 'close':
+                this.setData({
+                    'filter.show': false
+                });
+                break;
+        }
+    },
+    onShareAppMessage() {
+
+    }
+})

+ 6 - 0
packageA/activity/index.json

@@ -0,0 +1,6 @@
+{
+    "usingComponents": {
+        "list":"./modules/list/index"
+    },
+    "navigationBarTitleText": "市场活动"
+}

+ 16 - 0
packageA/activity/index.scss

@@ -0,0 +1,16 @@
+@import "../../components/Yl_filtrate/groud.scss";
+
+page {
+    height: 100vh;
+    overflow: hidden;
+}
+
+.total {
+    height: 64rpx;
+    line-height: 64rpx;
+    font-size: 24rpx;
+    font-family: PingFang SC-Regular, PingFang SC;
+    color: #666666;
+    background: #F4F5F7;
+    padding-left: 30rpx;
+}

+ 46 - 0
packageA/activity/index.wxml

@@ -0,0 +1,46 @@
+<Yl_nav search list='{{navList}}' sort='{{content.sort}}' bind:onClick='navClick' bindonSearch="onSearch" />
+<!-- 显示类型 -->
+<van-action-sheet show="{{ classShow }}" actions="{{ classActions }}" cancel-text="取消" bind:cancel="classClose" bind:select="classSelect" />
+<view class="total">共{{content.total}}个</view>
+
+<My_listBox id='ListBox' height="{{listHeight}}" bind:getlist='getList'>
+    <list list='{{list}}' />
+    <view style="height: 80rpx;" />
+</My_listBox>
+
+<!-- 筛选条件 -->
+<Yl_filtrate show="{{filter.show}}" bind:handle="handleFilter">
+    <view class="groud">
+        <view class="label">
+            报价单类型
+        </view>
+        <view class="content">
+            <van-button custom-class='but {{filter.typeActive==item?"active":""}}' wx:for="{{filter.type}}" wx:key="item" bindtap="typeStatus" data-item="{{item}}">{{item}}</van-button>
+        </view>
+    </view>
+    <view class="groud">
+        <view class="label">
+            报价单状态
+        </view>
+        <view class="content">
+            <van-button custom-class='but {{filter.statusActive==item?"active":""}}' wx:for="{{filter.status}}" wx:key="item" bindtap="selectStatus" data-item="{{item}}">{{item}}</van-button>
+        </view>
+    </view>
+    <view class="groud">
+        <view class="label">
+            时间范围
+        </view>
+        <view class="content time">
+            <picker mode="date" bindchange='changeDate' data-name="startdate">
+                <view class="tbox">{{filter.startdate||'开始时间'}}</view>
+            </picker>
+            <view class="partition">-</view>
+            <picker mode="date" bindchange='changeDate' data-name="enddate">
+                <view class="tbox">{{filter.enddate||"结束时间"}}</view>
+            </picker>
+        </view>
+    </view>
+</Yl_filtrate>
+
+<!-- 浮动按钮 -->
+<Yl_FloatingButton bindtap="openType" />

+ 217 - 0
packageA/activity/modules/clue/addClue.js

@@ -0,0 +1,217 @@
+const _Http = getApp().globalData.http,
+    getTime = require("../../../../utils/getTime");
+
+Page({
+    data: {
+        showAll: false,
+        form: [{
+            label: "活动类型",
+            error: false,
+            errMsg: "",
+            type: "option",
+            optionNmae: "campaigntype",
+            optionType: "radio", //复选   radio 单选
+            value: "",
+            placeholder: "选择类型",
+            valueName: "type",
+            checking: "base",
+            required: true
+        }, {
+            label: "市场活动名称",
+            error: false,
+            errMsg: "",
+            type: "label",
+            value: "",
+            placeholder: "市场活动名称",
+            valueName: "name",
+            checking: "base",
+            required: true
+        }, {
+            label: "负责人",
+            error: false,
+            errMsg: "",
+            type: "label",
+            value: "",
+            placeholder: "负责人",
+            valueName: "director",
+            checking: "base",
+            required: false
+        }, {
+            label: "地址",
+            error: false,
+            errMsg: "",
+            type: "label",
+            value: "",
+            placeholder: "地址",
+            valueName: "address",
+            checking: "base",
+            required: false
+        }, {
+            label: "开始日期",
+            error: false,
+            errMsg: "",
+            type: "date",
+            start: getTime.formatTime(new Date(), '-').split(' ')[0],
+            value: getTime.formatTime(new Date(), '-').split(' ')[0],
+            placeholder: "报价日期",
+            valueName: "begdate",
+            checking: "base",
+            required: true
+        }, {
+            label: "结束日期",
+            error: false,
+            errMsg: "",
+            type: "date",
+            start: getTime.formatTime(new Date(), '-').split(' ')[0],
+            value: "",
+            placeholder: "结束时间",
+            valueName: "enddate",
+            checking: "base",
+            required: false
+        }],
+        "content": {
+            "sat_campaignid": "0",
+            "name":"",
+            "director":"",
+            "address":"",
+            "type":"",
+        },
+        disabled: true
+    },
+    onLoad(options) {
+        return console.log(options);
+        if (options.data) {
+            let data = JSON.parse(options.data);
+            this.setData({
+                disabled: false,
+                form: this.data.form.map(v => {
+                    if (v.valueName != 'region') {
+                        v.value = data[v.valueName];
+                    } else {
+                        v.value = data.province ? [data.province, data.city, data.county] : []
+                    }
+                    return v
+                })
+            })
+        }
+    },
+    /* 打断处理form */
+    interrupt(e) {
+        let {
+            data,
+            form
+        } = e.detail;
+        console.log("处理", data, form)
+        //选择客户
+        if (data.valueName == "sa_projectid") {
+            let obj = {
+                label: "选择客户",
+                error: false,
+                errMsg: "",
+                type: "route",
+                url: "/packageA/select/setclient/select",
+                radio: true,
+                value: "",
+                params: {
+                    id: 20221027143702,
+                    "content": {
+                        nocache: true,
+                        "sa_projectid": data.value[1][0],
+                        "pageNumber": 1,
+                        "pageSize": 20,
+                        "where": {
+                            "condition": ""
+                        }
+                    },
+                },
+                placeholder: "选择客户",
+                valueName: "sys_enterpriseid",
+                checking: "base",
+                required: true
+            };
+            if (form[1].label == "选择客户") {
+                form[1] = obj
+            } else {
+                form.splice(1, 0, obj)
+            }
+            this.setData({
+                form
+            })
+        } else if (data.valueName == "sys_enterpriseid") {
+            let obj = {
+                label: "联系人",
+                error: false,
+                errMsg: "",
+                type: "route",
+                url: "/packageA/select/contacts/select",
+                model: "#Form",
+                value: "",
+                radio: true,
+                params: {
+                    "id": "20221022165503",
+                    "version": 1,
+                    "content": {
+                        "sys_enterpriseid": data.value[1][0],
+                        "where": {
+                            "condition": "",
+                            "workaddress": 0
+                        }
+                    }
+                },
+                placeholder: "选择客户联系人",
+                valueName: "contactsid",
+                checking: "base",
+                required: true
+            };
+            if (form[2].label == "联系人") {
+                form[2] = obj
+            } else {
+                form.splice(2, 0, obj)
+            }
+            this.setData({
+                form
+            })
+        }
+    },
+    submit() {
+        let content = {
+            ...this.data.content,
+            ...this.selectComponent("#Form").submit()
+        };
+        _Http.basic({
+            "classname":"webmanage.saletool.orderclue.ordercluecampaign",
+            "method": "insertormodify_campaign",
+            "version": 1,
+            content
+        }).then(res => {
+            console.log("添加普通报价单", res)
+            wx.showToast({
+                title: res.msg != '成功' ? res.msg : '保存成功',
+                icon: "none"
+            })
+            if (res.msg != '成功') return;
+            setTimeout(() => {
+                wx.navigateBack();
+                getCurrentPages().forEach(v => {
+                    if (v.getList) v.getList(true);
+                })
+            }, 300)
+        })
+    },
+    // 是否显示全部
+    onChange({
+        detail
+    }) {
+        this.setData({
+            showAll: detail
+        })
+    },
+    /* 表单必填项是否完成 */
+    onConfirm({
+        detail
+    }) {
+        this.setData({
+            disabled: detail
+        })
+    }
+})

+ 4 - 0
packageA/activity/modules/clue/addClue.json

@@ -0,0 +1,4 @@
+{
+    "usingComponents": {},
+    "navigationBarTitleText": "添加线索"
+}

+ 23 - 0
packageA/activity/modules/clue/addClue.scss

@@ -0,0 +1,23 @@
+.new-footer {
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+    position: fixed;
+    width: 100vw;
+    height: 130rpx;
+    background: #FFFFFF;
+    box-shadow: 0px -4rpx 16rpx 2rpx rgba(150, 157, 165, 0.16);
+    bottom: 0;
+
+    .new-submit {
+        width: 156rpx;
+        height: 90rpx;
+        background: #3874F6;
+        border-radius: 8rpx;
+        font-size: 28rpx;
+        font-family: PingFang SC-Bold, PingFang SC;
+        font-weight: bold;
+        color: #FFFFFF;
+        margin-right: 30rpx;
+    }
+}

+ 6 - 0
packageA/activity/modules/clue/addClue.wxml

@@ -0,0 +1,6 @@
+<Yl_Headline title='基本信息' type='switch' switchLabel='仅显示必填信息' switch='{{showAll}}' bind:callBack='onChange' />
+<Yl_field id='Form' form='{{form}}' showAll='{{!showAll}}' bind:onConfirm='onConfirm' bind:interrupt="interrupt" />
+<view style="height: 100rpx;" />
+<view class="new-footer">
+    <van-button custom-class='new-submit' disabled='{{disabled}}' bindclick='submit'>提交</van-button>
+</view>

+ 171 - 0
packageA/activity/modules/clue/clue.js

@@ -0,0 +1,171 @@
+const _Http = getApp().globalData.http,
+    file = require("../../../../utils/matchingFeilType");
+let queue = [],
+    downCounter = null;
+Component({
+    options: {
+        addGlobalClass: true
+    },
+    data: {
+        disabled: false,
+        "content": {
+            nocache: true,
+            "pageNumber": 1,
+            pageTotal: 1,
+            total: null,
+            cluetype:'',
+        },
+        filter: {
+            show: false,
+            type: ['业务员', '经销商'], //状态项
+            typeActive: "",
+        }
+    },
+    methods: {
+        /* 筛选状态选择 */
+        typeStatus(e) {
+            const {
+                item
+            } = e.currentTarget.dataset;
+            this.setData({
+                "filter.typeActive": this.data.filter.typeActive == item ? "" : item
+            })
+            console.log(this.data.filter.typeActive);
+        },
+        /* 处理筛选 */
+        handleFilter({
+            detail
+        }) {
+            const data = this.data.filter;
+            switch (detail) {
+                case 'confirm':
+                    this.setData({
+                        'filter.show': false
+                    });
+                    this.getList(this.data.sat_campaignid,true, data);
+                    break;
+                case 'reset':
+                    this.setData({
+                        'filter.typeActive': "",
+                    });
+                    this.getList(true, this.data.filter)
+                    break;
+                case 'close':
+                    this.setData({
+                        'filter.show': false
+                    });
+                    break;
+            }
+        },
+        selectBtn () {
+            this.setData({
+                'filter.show':true
+            })
+        },
+        /* 获取产品列表 */
+        getList(id, init=false,data) {
+            let content = this.data.content;
+            content.sat_campaignid = id;
+            if (init) content.pageNumber = 1
+            if (data) {
+                content.cluetype = data.typeActive
+            }
+            _Http.basic({
+                "id": "20221102102602",
+                content
+            }).then(res => {
+                console.log("活动线索", res)
+                if (res.msg != '成功') return wx.showToast({
+                    title: res.data,
+                    icon: "none"
+                })
+                this.setData({
+                    list: res.pageNumber == 1 ? res.data : this.data.list.concat(res.data),
+                    "content.pageNumber": res.pageNumber + 1,
+                    "content.pageTotal": res.pageTotal,
+                    "content.total": res.total,
+                    sat_campaignid: id
+                })
+            })
+        },
+        //详情按钮回调
+        tabbarOnClick({
+            detail
+        }) {
+            let data = this.data.detail;
+            switch (detail.label) {
+                case "跟进":
+                    wx.navigateTo({
+                        url: `/packageA/setclient/modules/trace/add/index?ownertable=sat_campaign&ownerid=${data.sat_campaignid}`,
+                    })
+                    break;
+                case "作废":
+                    wx.showModal({
+                        title: '提示',
+                        content: '是否确认作废该报价单?',
+                        complete: ({
+                            confirm
+                        }) => {
+                            if (confirm) _Http.basic({
+                                "id": 20221020165503,
+                                "version": 1,
+                                "content": {
+                                    "sat_campaignids": [this.data.detail.sat_campaignid]
+                                }
+                            }).then(res => {
+                                wx.showToast({
+                                    title: res.msg == '成功' ? '已作废报价单' : res.msg,
+                                    icon: "none"
+                                });
+                                if (res.msg == '成功') {
+                                    setTimeout(() => {
+                                        getCurrentPages().forEach(v => {
+                                            if (v.__route__ == 'packageA/offers/index') {
+                                                v.setData({
+                                                    list: v.data.list.filter(value => value.sat_campaignid != this.data.detail.sat_campaignid),
+                                                    'content.total': v.data.content.total - 1
+                                                })
+                                            }
+                                        })
+                                        wx.navigateBack();
+                                    }, 300)
+                                }
+                            })
+                        }
+                    })
+
+
+                    break;
+                case "更换负责人":
+                    wx.navigateTo({
+                        url: `/packageA/group/select?data=${JSON.stringify({
+                                ownertable:"sat_campaign",
+                                ownerid:data.sat_campaignid,
+                            })}&radio=true&principal=true`,
+                    })
+                    break;
+            }
+        },
+        /* 删除产品 */
+        handleDelete({
+            detail
+        }) {
+            _Http.basic({
+                "id": 20221021145602,
+                "content": {
+                    "deletereason": "",
+                    "sa_project_itemsids": detail
+                }
+            }).then(res => {
+                console.log("批量删除产品", res);
+                wx.showToast({
+                    title: res.msg == '成功' ? '删除成功!' : res.msg,
+                    icon: "none"
+                })
+                if (res.msg == '成功') this.setData({
+                    list: this.data.list.filter(v => detail.indexOf(v.sa_project_itemsid) == -1)
+                })
+            })
+        },
+    }
+})

+ 6 - 0
packageA/activity/modules/clue/clue.json

@@ -0,0 +1,6 @@
+{
+    "component": true,
+    "usingComponents": {
+        "List":"./list/index"
+    }
+}

+ 3 - 0
packageA/activity/modules/clue/clue.scss

@@ -0,0 +1,3 @@
+/* packageA/activity/modules/clue/clue.wxss */
+@import "../../../../components/Yl_filtrate/groud.scss";
+@import "../../../setclient/modules/address/head.scss";

+ 22 - 0
packageA/activity/modules/clue/clue.wxml

@@ -0,0 +1,22 @@
+<view class="head">
+    <view class="count">活动线索</view>
+    <view class="expand">
+        <navigator url="#" class="but" bind:tap="selectBtn">
+            <text class="iconfont icon-shaixuan"></text>
+        </navigator>
+        <navigator wx:if="{{!disabled}}" url="/packageA/activity/modules/clue/addClue?sat_campaignid={{sat_campaignid}}" class="but" >
+            <van-icon name="plus" />
+        </navigator>
+    </view>
+</view>
+<Yl_filtrate show="{{filter.show}}" bind:handle="handleFilter">
+    <view class="groud">
+        <view class="label">
+            范围筛选
+        </view>
+        <view class="content">
+            <van-button custom-class='but {{filter.typeActive==item?"active":""}}' wx:for="{{filter.type}}" wx:key="item" bindtap="typeStatus" data-item="{{item}}">{{item}}</van-button>
+        </view>
+    </view>
+</Yl_filtrate>
+<List bind:deleteItem='handleDelete' list="{{list}}" />

+ 34 - 0
packageA/activity/modules/clue/list/index.js

@@ -0,0 +1,34 @@
+// packageA/activity/modules/clue/list/index.js
+Component({
+    /**
+     * 组件的属性列表
+     */
+    properties: {
+        deleteItem:Function,
+        list:Array,
+    },
+    options:{
+        addGlobalClass:true,
+    },
+
+    /**
+     * 组件的初始数据
+     */
+    data: {
+        tagColor:{
+            '待跟进':'#FA8C16',
+            '跟进中':'#52C41A',
+            '已成交':'#ffffff',
+            '丢单':'#FF3B30',
+        }
+    },
+    created () {
+
+    },
+    /**
+     * 组件的方法列表
+     */
+    methods: {
+  
+    }
+})

+ 4 - 0
packageA/activity/modules/clue/list/index.json

@@ -0,0 +1,4 @@
+{
+    "component": true,
+    "usingComponents": {}
+}

+ 78 - 0
packageA/activity/modules/clue/list/index.scss

@@ -0,0 +1,78 @@
+.clue_box {
+    position: relative;
+    width: 100vw;
+    background: #FFFFFF;
+    box-sizing: border-box;
+    padding: 20rpx 30rpx;
+    margin-bottom: 20rpx;
+    >view {
+        margin-top: 20rpx;
+        font-size: 24rpx;
+        font-family: PingFang SC-Regular, PingFang SC;
+        color: #333333;
+    }
+    .title {
+        display: flex;
+        height: 40rpx;
+        font-size: 28rpx;
+        font-family: PingFang SC-Bold, PingFang SC;
+        font-weight: bold;
+        color: #333333;
+        margin-top: 0;
+
+        .line-1 {
+            width: 400rpx;
+        }
+
+        text {
+            line-height: 44rpx;
+            width: 130rpx;
+            display: block;
+            font-size: 20rpx;
+            text-align: center;
+            font-weight: 400;
+            color: #3131FA;
+        }
+    }
+
+    /* 右上 */
+    .r-t-state {
+        position: absolute;
+        width: 112rpx;
+        height: 48rpx;
+        border-radius: 8rpx;
+        text-align: center;
+        line-height: 48rpx;
+        font-size: 24rpx;
+        font-family: PingFang SC-Regular, PingFang SC;
+        color: #FFFFFF;
+        top: 0rpx;
+        right: 20rpx;
+    }
+
+    .fff {
+        font-size: 24rpx;
+        font-family: PingFang SC-Regular, PingFang SC;
+        color: #666666;
+        background: #FFFFFF;
+        border-radius: 8rpx;
+        border: 1px solid #CCCCCC;
+        box-sizing: border-box;
+    }
+
+    /* 右下 */
+    .r-b-state {
+        position: absolute;
+        width: 112rpx;
+        height: 48rpx;
+        line-height: 44rpx;
+        text-align: center;
+        background: #FFFFFF;
+        border-radius: 8rpx;
+        border: 1px solid #CCCCCC;
+        box-sizing: border-box;
+        font-size: 24rpx;
+        font-family: PingFang SC-Regular, PingFang SC;
+        color: #666666;
+    }
+}

+ 12 - 0
packageA/activity/modules/clue/list/index.wxml

@@ -0,0 +1,12 @@
+<navigator url="#" class="clue_box" wx:for="{{list}}">
+    <view class="title">
+        <view class="line-1">{{item.enterprisename}}</view>
+    </view>
+    <view>联系人:{{item.name}}</view>
+    <view class="line-1">地址:{{item.province?item.province+item.city+item.county+item.address:"暂无"}}</view>
+    <view class="line-1">手机号:{{item.phonenumber}}</view>
+    <view>备注:{{item.notes ? item.notes : '--'}}</view>
+    <view>所属经销商/业务员:{{item.salename ? item.salename : '--'}}</view>
+    <view>负责人:{{item.notes ? item.notes : '--'}}</view>
+    <view class="r-t-state {{tagColor[item.status]=='#ffffff'?'fff':''}}" style="background: {{tagColor[item.status]}};">{{item.status}}</view>
+</navigator>

+ 23 - 0
packageA/activity/modules/list/index.js

@@ -0,0 +1,23 @@
+// packageA/activity/modules/list/index.js
+Component({
+    /**
+     * 组件的属性列表
+     */
+    properties: {
+        list:Array
+    },
+
+    /**
+     * 组件的初始数据
+     */
+    data: {
+
+    },
+
+    /**
+     * 组件的方法列表
+     */
+    methods: {
+        
+    }
+})

+ 4 - 0
packageA/activity/modules/list/index.json

@@ -0,0 +1,4 @@
+{
+    "component": true,
+    "usingComponents": {}
+}

+ 53 - 0
packageA/activity/modules/list/index.scss

@@ -0,0 +1,53 @@
+.offer-list {
+    width: 100%;
+    padding: 20rpx 30rpx;
+    box-sizing: border-box;
+    background-color: #fff;
+    border-bottom: 1rpx solid #ddd;
+    font-family: PingFang SC-Regular, PingFang SC;
+
+    .title {
+        position: relative;
+        display: flex;
+        height: 42rpx;
+        align-items: center;
+
+        >text {
+            display: inline-block;
+            width: 80%;
+            font-size: 30rpx;
+            color: #333333;
+        }
+
+        .status {
+            position: absolute;
+            right: -30rpx;
+            width: 132rpx;
+            height: 40rpx;
+            border-radius: 20rpx 0px 0px 20rpx;
+            box-sizing: border-box;
+            padding-left: 30rpx;
+            line-height: 40rpx;
+            font-size: 24rpx;
+            font-family: PingFang SC-Regular, PingFang SC;
+            color: #FFFFFF;
+        }
+    }
+
+    .exp {
+        height: 34rpx;
+        font-size: 24rpx;
+        color: #666;
+        margin-top: 8rpx;
+
+        text {
+            color: #333333;
+        }
+    }
+}
+
+.line-1 {
+    overflow: hidden;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+}

+ 26 - 0
packageA/activity/modules/list/index.wxml

@@ -0,0 +1,26 @@
+<!--packageA/activity/modules/list/index.wxml-->
+<navigator class="offer-list" url="/packageA/activity/detail?sat_campaignid={{item.sat_campaignid}}" wx:for="{{list}}" wx:key="item.sat_campaignid">
+    <view class="title">
+        <text class="line-1">{{item.name}}</text>
+        <view class="status" style="background-color: {{backColor.getColor(item.status)}};">{{item.status}}</view>
+    </view>
+    <view class="exp line-1">活动类型:<text>{{item.type}}</text></view>
+    <view class="exp line-1">线索数:<text>{{item.ordercluecount}}</text></view>
+    <view class="exp line-1">负责人:<text>{{item.director ? item.director : '--'}}</text></view>
+</navigator>
+
+<My_empty wx:if="{{list.length == 0}}" />
+
+<wxs module="backColor">
+    module.exports.getColor = function(status) {
+        var color = null;
+        if (status == '新建') {
+            color = '#3874F6';
+        } else if (status == '发布') {
+            color = '#52C41A';
+        } else {
+            color = '#FA8C16';
+        };
+        return color
+    }
+</wxs>

+ 6 - 0
pages/tabbar/home/index.js

@@ -146,6 +146,12 @@ Page({
                     icon: "icon-hetong",
                     apps: {}
                 })
+                gridList.push({
+                    name: "市场活动",
+                    path: "/packageA/activity/index",
+                    icon: "icon-xiaochengxutongxunlu",
+                    apps: {}
+                })
             }
             /* 首页小组件查询 */
             try {

+ 14 - 0
project.private.config.json

@@ -112,6 +112,20 @@
                     "query": "sa_contractid=102",
                     "launchMode": "default",
                     "scene": null
+                },
+                {
+                    "name": "市场活动",
+                    "pathName": "packageA/activity/index",
+                    "query": "",
+                    "launchMode": "default",
+                    "scene": null
+                },
+                {
+                    "name": "a",
+                    "pathName": "packageA/activity/addActivity",
+                    "query": "",
+                    "launchMode": "default",
+                    "scene": null
                 }
             ]
         }