xiaohaizhao 6 mesi fa
parent
commit
ba28734378

+ 4 - 1
app.json

@@ -209,7 +209,10 @@
                 "orderForm/add/add",
                 "select/address/addAndEdit",
                 "select/address/index",
-                "select/contract/index"
+                "select/contract/index",
+                "contract/index",
+                "contract/detail",
+                "contract/insert"
             ]
         },
         {

+ 9 - 2
project.private.config.json

@@ -11,12 +11,19 @@
         "miniprogram": {
             "list": [
                 {
-                    "name": "prsx/orderForm/index",
-                    "pathName": "prsx/orderForm/index",
+                    "name": "合同管理",
+                    "pathName": "prsx/contract/index",
                     "query": "",
                     "scene": null,
                     "launchMode": "default"
                 },
+                {
+                    "name": "prsx/orderForm/index",
+                    "pathName": "prsx/orderForm/index",
+                    "query": "",
+                    "launchMode": "default",
+                    "scene": null
+                },
                 {
                     "name": "prsx/dealer/insert",
                     "pathName": "prsx/dealer/insert",

+ 1 - 1
prsx/activity/index.js

@@ -38,7 +38,7 @@ Page({
         getApp().globalData.Language.getLanguagePackage(this);
         let templetList = wx.getStorageSync('templetList')
         this.setData({
-            insert: wx.getStorageSync('auth').wdepartment.options.some(v => v == 'insert'), //查询新增权限
+            insert: wx.getStorageSync('auth').wmarketing_activity.options.some(v => v == 'insert'), //查询新增权限
             classActions: templetList.map((v, i) => {
                 return {
                     name: v.templetname,

+ 324 - 0
prsx/contract/detail.js

@@ -0,0 +1,324 @@
+const _Http = getApp().globalData.http;
+Page({
+    data: {
+        loading: true,
+        isLeader: false, //是否为负责人
+        tabsActive: 0, //tabs 选中项
+        sa_contractid: 0,
+        sColors: getApp().globalData.sColors,
+        deletereasonShow: false,
+        deletereason: "",
+    },
+    onLoad(options) {
+        const appAuth = wx.getStorageSync('auth').wcontract;
+        this.setData({
+            sa_contractid: options.id,
+            appAuth
+        })
+        console.log("appAuth", appAuth)
+        this.getDetail();
+        getApp().globalData.Language.getLanguagePackage(this, '合同详情');
+    },
+
+    /* 获取详情 */
+    getDetail() {
+        /* 基本信息 */
+        _Http.basic({
+            id: 20221121195102,
+            "content": {
+                sa_contractid: this.data.sa_contractid
+            },
+        }).then(res => {
+            console.log("详情", res)
+            if (res.code != '1') return wx.showToast({
+                title: res.data,
+                icon: "none"
+            })
+            this.setPreview(res);
+            this.setData({
+                loading: false,
+                detail: res.data,
+            })
+            //获取标签
+            if (this.data.appAuth.isdatatag) this.getTags();
+            if (this.data.appAuth.isdatateam) this.getGroup()
+            this.setTabbar();
+            this.partialRenewal();
+        });
+    },
+    areaInput(e) {
+        this.setData({
+            deletereason: e.detail.value
+        })
+    },
+    onCancel() {
+        this.setData({
+            deletereasonShow: false,
+        })
+    },
+    deleteItem() {
+        if (this.data.deletereason.trim() == '') return wx.showToast({
+            title: '请输入作废原因',
+            icon: "none"
+        })
+        _Http.basic({
+            id: 20221121202502,
+            content: {
+                deletereason: this.data.deletereason,
+                sa_contractids: [this.data.sa_contractid]
+            }
+        }).then(res => {
+            console.log("作废", res)
+            wx.showToast({
+                title: res.code == 1 ? '作废成功' : res.msg,
+                icon: "none",
+                mask: res.code == 1
+            })
+            if (res.code == 1) setTimeout(() => {
+                wx.navigateBack()
+            }, 300)
+        })
+    },
+    setPreview(res) {
+        /* 摘要信息 */
+        let briefs = [{
+            label: "合同类型",
+            value: res.data.type
+        }, {
+            label: "经销商",
+            value: res.data.agentname
+        }, {
+            label: "有效期",
+            style: res.data.status == '有效' ? `color:#3874F6` : '',
+            value: res.data.begdate + '至' + res.data.enddate
+        }, {
+            label: "签约日期",
+            value: res.data.signdate
+        }, {
+            label: "备注",
+            value: res.data.remarks
+        }, {
+            label: "状态",
+            value: getApp().globalData.Language.getMapText(res.data.status),
+            style: `color:${this.data.sColors[res.data.status]}`
+        }];
+        /* 基本信息 */
+        let list1 = [{
+            label: "合同编号",
+            value: res.data.billno
+        }, {
+            label: "合同类型",
+            value: res.data.type
+        }, {
+            label: "经销商",
+            value: res.data.agentname
+        }, {
+            label: "有效期",
+            value: res.data.begdate + '至' + res.data.enddate
+        }, {
+            label: "签约日期",
+            value: res.data.signdate
+        }, {
+            label: "履约保证金",
+            value: res.data.earnestmoney
+        }, {
+            label: "货款支付",
+            value: res.data.payment
+        }, {
+            label: "奖励政策",
+            value: res.data.reward
+        }, {
+            label: "年目标手术量",
+            value: res.data.opqty
+        }, {
+            label: "备注",
+            value: res.data.remarks
+        }, {
+            label: "负责人",
+            value: res.data.leader.length ? res.data.leader[0].name : ''
+        }, {
+            label: "状态",
+            value: res.data.status,
+            style: `color:${this.data.sColors[res.data.status]}`
+        }];
+        if (res.data.type == '医院协议') {
+            const obj = {
+                label: "医院",
+                value: res.data.hospitalname
+            };
+            briefs.splice(1, 0, obj)
+            list1.splice(2, 0, obj)
+        }
+        /* 系统信息 */
+        let 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.deletereason
+        }, {
+            label: "转手次数",
+            value: res.data.leader.length ? res.data.leader[0].leadernum : ''
+        }];
+        this.setData({
+            briefs,
+            list1,
+            list2
+        });
+    },
+    //详情按钮回调
+    tabbarOnClick({
+        detail
+    }) {
+        let data = this.data.detail,
+            that = this;
+        switch (detail.label) {
+            case "编辑":
+                wx.navigateTo({
+                    url: `/prsx/contract/insert?data=${JSON.stringify(data)}&type=${data.type}`,
+                })
+                break;
+            case "作废":
+                that.setData({
+                    deletereasonShow: true
+                })
+                break;
+            case "跟进":
+                that.selectComponent("#Trace").toAdd()
+                break;
+            default:
+                console.log(detail)
+                break;
+        }
+    },
+    /* 底部功能 */
+    async setTabbar() {
+        let detail = this.data.detail,
+            isAdmin = wx.getStorageSync("userMsg").usertype == 0,
+            isLeader = detail.leader.length ? detail.leader.some(v => v.userid == wx.getStorageSync('userMsg').userid) : false,
+            editdataleader = isLeader ? 1 : 0,
+            tabbarList = [],
+            appAuth = this.data.appAuth,
+            tabsList = [{
+                label: "详细信息",
+                icon: "icon-tabxiangxixinxi1"
+            }];
+        if (!isLeader) {
+            let res = await getApp().agentOrNot("sa_contract", this.data.sa_contractid),
+                data = res.code == '1' ? res.data : {
+                    editable: 0,
+                    editdataleader: 0
+                }
+            if (appAuth.isdatateam) isLeader = this.selectComponent("#Group").data.editable == 1;
+            if (!isLeader) isLeader = data.editable == 1;
+            editdataleader = data.editdataleader;
+        }
+        if (appAuth.isdatafollowup) {
+            tabsList.unshift({
+                label: "跟进动态",
+                icon: "icon-tabgenjinjilu",
+                model: "#Trace"
+            })
+            tabbarList.push({
+                icon: "color-genjin",
+                label: "跟进"
+            });
+        }
+
+        if (appAuth.update || isLeader) tabbarList.push({
+            icon: "color-bianji",
+            label: "编辑"
+        })
+
+        if (appAuth.delete || isLeader) tabbarList.push({
+            icon: "icon-shanchu",
+            label: "作废"
+        })
+
+        tabsList = tabsList.concat([{
+            label: "附件",
+            icon: "icon-tabfujian1",
+            model: "#Files"
+        }, {
+            label: "操作",
+            icon: "icon-tabcaozuojilu1",
+            model: "#Record"
+        }])
+        this.setData({
+            tabbarList,
+            isLeader,
+            tabsList
+        })
+    },
+    //tabs 切换
+    tabsChange({
+        detail
+    }) {
+        this.setData({
+            tabsActive: detail
+        });
+        this.partialRenewal();
+    },
+    //局部数据更新 tabs
+    partialRenewal(init = false) {
+        try {
+            let model = this.data.tabsList[this.data.tabsActive].model;
+            if (model) {
+                let Component = this.selectComponent(model),
+                    {
+                        total,
+                        pageNumber,
+                        pageTotal
+                    } = Component.data.content,
+                    id = model == "#Address" ? this.data.detail.sys_enterpriseid : this.data.detail.sa_contractid;
+                if (model == "#Files") init = true;
+                if (total == null || init) {
+                    Component.getList(id, init);
+                } else if (pageNumber <= pageTotal) {
+                    Component.getList(id, false);
+                }
+            }
+        } catch (error) {
+
+        }
+    },
+    //更新标签
+    getTags() {
+        this.selectComponent("#Tags").getTags()
+    },
+    //更新团队成员
+    getGroup() {
+        this.selectComponent("#Group").getList().then(this.setTabbarList)
+    },
+    onReachBottom() {
+        this.partialRenewal();
+    },
+    onUnload() {
+        const page = getCurrentPages().find(v => v.__route__ == 'prsx/contract/index');
+        if (!page) return;
+        let content = JSON.parse(JSON.stringify(page.data.content));
+        content.pageSize = (content.pageNumber - 1) * content.pageSize;
+        content.pageNumber = 1;
+        _Http.basic({
+            id: '20221121201502',
+            content
+        }).then(res => {
+            console.log("更新列表", res);
+            if (res.code == '1') {
+                page.setData({
+                    list: res.data,
+                    "content.total": res.total
+                })
+            }
+        })
+    }
+})

+ 7 - 0
prsx/contract/detail.json

@@ -0,0 +1,7 @@
+{
+    "usingComponents": {
+        "van-dialog": "@vant/weapp/dialog/index",
+        "Trace": "/prsx/trace/index"
+    },
+    "navigationBarTitleText": "合同详情"
+}

+ 77 - 0
prsx/contract/detail.scss

@@ -0,0 +1,77 @@
+.setclient-list-item {
+	width: 100vw;
+	background-color: #fff;
+	box-sizing: border-box;
+
+	.con {
+		padding-left: 30rpx;
+		display: flex;
+		width: 100%;
+		box-sizing: border-box;
+		padding-top: 20rpx;
+
+		.mian {
+			flex: 1;
+			width: 0;
+			padding-right: 20rpx;
+			box-sizing: border-box;
+
+			.label {
+				font-size: 28rpx;
+				font-family: PingFang SC-Bold, PingFang SC;
+				font-weight: bold;
+				color: #333333;
+				height: 40rpx;
+				line-height: 40rpx;
+			}
+
+			.tag-box {
+				margin-top: 10rpx;
+
+				.tag {
+					height: 40rpx;
+					font-size: 20rpx;
+					font-family: PingFang SC-Regular, PingFang SC;
+					padding: 0 12rpx;
+					margin-right: 8rpx;
+				}
+			}
+		}
+
+		.icon {
+			display: flex;
+			height: 136rpx;
+			align-items: center;
+			margin-top: -20rpx;
+			color: #CFCFCF;
+			width: 28rpx;
+			margin-right: 30rpx;
+			flex-shrink: 0;
+		}
+
+		.extend {
+			display: flex;
+			height: 116rpx;
+			width: 48rpx;
+			margin-right: 30rpx;
+			flex-shrink: 0;
+		}
+	}
+}
+
+.line-1 {
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+
+.textarea {
+	width: 90%;
+	height: 200rpx;
+	box-sizing: border-box;
+	padding: 20rpx 30rpx;
+	background-color: #FDF9FC;
+	margin: 20rpx auto;
+	border: 1rpx solid #EEECEF;
+	border-radius: 8rpx;
+}

+ 30 - 0
prsx/contract/detail.wxml

@@ -0,0 +1,30 @@
+<view class="setclient-list-item" url="#">
+    <view class="con">
+        <view class="mian">
+            <view class="label line-1">{{detail.billno}}</view>
+            <view class="tag-box" wx:if="{{appAuth.isdatatag}}">
+                <Yl-tags id="Tags" wx:if="{{appAuth.isdatatag}}" wx:if="{{appAuth.isdatatag}}" add ownertable='sa_contract' bind:onGetList='onGetList' ownerid='{{sa_contractid}}' />
+            </view>
+        </view>
+    </view>
+</view>
+<view style="margin-top: -16rpx;">
+    <Yl_Detail list="{{briefs}}">
+        <Yl-group id='Group' wx:if="{{appAuth.isdatateam}}" add="{{isLeader}}" slot='bottom' ownertable='sa_contract' ownerid='{{sa_contractid}}' />
+    </Yl_Detail>
+</view>
+<view style="height: 20rpx;" />
+<!-- 功能 -->
+<Yl_FunTabs list='{{tabsList}}' active='{{tabsActive}}' bind:onChenge="tabsChange">
+    <Preview slot='详细信息' list1='{{list1}}' list2='{{list2}}' />
+    <Trace resource='合同管理' slot='跟进动态' id='Trace' ownertable='sa_contract' ownerid='{{sys_enterpriseid}}' disabled="{{detail.status != '已终止'}}" ownerid1='{{detail.sa_contractid}}' />
+    <Record slot="操作" id="Record" ownertable='sa_contract' ownerid='{{sa_contractid}}' />
+    <Files slot="附件" id="Files" ownertable='sa_contract' ownerid='{{sa_contractid}}' disabled="{{detail.status != '已终止'}}" />
+</Yl_FunTabs>
+<!-- 底部 -->
+<Yl_Tabbar wx:if="{{tabbarList.length}}" list='{{tabbarList}}' bind:callback="tabbarOnClick" />
+<wxs src='../../utils/wxmlQueryPer.wxs' module="per" />
+
+<van-dialog confirmButtonText="确定" cancelButtonText="取消" use-slot title="作废情况说明" show="{{ deletereasonShow }}" show-cancel-button confirm-button-color='#3874F6' bind:confirm='deleteItem' bind:cancel='onCancel'>
+    <textarea placeholder="情况说明" value="{{deletereason}}" data-name="deletereason" bindinput="areaInput" class="textarea" />
+</van-dialog>

+ 41 - 0
prsx/contract/float/index.js

@@ -0,0 +1,41 @@
+const _Http = getApp().globalData.http;
+Component({
+    data: {
+        types: [{
+            value: '经销商协议',
+            name: '经销商协议',
+        }, {
+            value: '医院协议',
+            name: '医院协议',
+        }],
+        actionShow: false,
+    },
+    lifetimes: {
+        attached: function () {
+            getApp().globalData.Language.getLanguagePackage(this)
+        }
+    },
+    methods: {
+        /* 挑选新增合作协议类型 */
+        onSelect() {
+            this.setData({
+                actionShow: true
+            })
+        },
+        /* 选择合作协议类型 */
+        selectType({
+            detail
+        }) {
+            wx.navigateTo({
+                url: '/prsx/contract/insert?type=' + detail.value,
+            })
+            this.onCancel();
+        },
+        /* 取消选择合作协议类型 */
+        onCancel() {
+            this.setData({
+                actionShow: false
+            })
+        },
+    }
+})

+ 4 - 0
prsx/contract/float/index.json

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

+ 1 - 0
prsx/contract/float/index.scss

@@ -0,0 +1 @@
+/* prsx/orderForm/add/float/index.wxss */

+ 2 - 0
prsx/contract/float/index.wxml

@@ -0,0 +1,2 @@
+<Yl_FloatingButton bindtap="onSelect" />
+<van-action-sheet show="{{ actionShow }}" actions="{{ types }}" cancel-text="{{language['取消']||'取消'}}" bind:select='selectType' bind:cancel='onCancel' bind:click-overlay='onCancel' />

+ 164 - 0
prsx/contract/index.js

@@ -0,0 +1,164 @@
+const _Http = getApp().globalData.http;
+
+Page({
+    data: {
+        navList: [{
+            label: "我负责的",
+            icon: "icon-webxialaxuanxiangjiantou",
+            color: "",
+            width: "",
+            id: "1"
+        }, {
+            label: "排序",
+            icon: "icon-jiangxu1",
+            color: "",
+            width: "",
+            id: "sort"
+        }, {
+            label: "筛选",
+            icon: "icon-shaixuan",
+            color: "",
+            width: "",
+            id: "2"
+        }],
+        content: {
+            "type": 99,
+            "pageNumber": 1,
+            "pageSize": 20,
+            "where": {
+                "status": "",
+                "type": "",
+                "begindate": "",
+                "enddate": "",
+                "condition": ""
+            }
+        },
+        filtratelist: [],
+        list: []
+    },
+    async onLoad(options) {
+        getApp().globalData.Language.getLanguagePackage(this);
+        let templetList = wx.getStorageSync('templetList')
+        this.setData({
+            insert: wx.getStorageSync('auth').wcontract.options.some(v => v == 'insert'), //查询新增权限
+            classActions: templetList.map((v, i) => {
+                return {
+                    name: v.templetname,
+                    index: v.templetid,
+                    color: i == 0 ? '#3874F6' : '',
+                    i: i,
+                }
+            }),
+            'navList[0].label': templetList[0].templetname,
+            "content.type": templetList[0].templetid,
+        });
+        this.getList(true)
+        getApp().globalData.Language.getLanguagePackage(this);
+        let filtratelist = [{
+            label: "状态",
+            index: null,
+            showName: "value", //显示字段
+            valueKey: "status", //返回Key
+            selectKey: "value", //传参 代表选着字段 不传参返回整个选择对象
+            value: "", //选中值
+            list: [{
+                value: '生效'
+            }, {
+                value: '未生效'
+            }, {
+                value: '结束'
+            }]
+        }, {
+            label: "合同类型",
+            index: null,
+            showName: "value", //显示字段
+            valueKey: "type", //返回Key
+            selectKey: "value", //传参 代表选着字段 不传参返回整个选择对象
+            value: "", //选中值
+            list: await _Http.getTypes('contracttype', _Http)
+        }]
+        this.setData({
+            filtratelist
+        })
+    },
+    getList(init = false) {
+        _Http.init(this.data.content, init).then(content => {
+            _Http.basic({
+                "id": 20221121201502,
+                content
+            }).then(res => {
+                console.log("合同列表", res)
+                this.selectComponent('#ListBox').RefreshToComplete();
+                if (res.code != '1') return wx.showToast({
+                    title: res.msg,
+                    icon: "none"
+                })
+                this.setData({
+                    content: _Http.paging(content, res),
+                    list: res.pageNumber == 1 ? res.data : this.data.list.concat(res.data)
+                })
+            })
+        })
+    },
+    /* 处理筛选 */
+    handleFilter({
+        detail
+    }) {
+        detail.condition = this.data.content.where.condition;
+        detail.begindate = detail.startdate;
+        delete detail.startdate;
+        this.data.content.where = detail;
+        this.data.content.where = detail;
+        this.getList(true);
+    },
+    /* 顶部条件导航回调 */
+    navClick({
+        detail
+    }) {
+        switch (detail.id) {
+            case '1':
+                this.setData({
+                    classShow: true
+                })
+                break;
+            case '2':
+                this.setData({
+                    'filterShow': true
+                })
+                break;
+            case '3':
+                this.setData({
+                    'content.sort[0].reversed': this.data.content.sort[0].reversed == 0 ? 1 : 0
+                });
+                this.getList(true)
+                break;
+        }
+    },
+    /* 处理搜索 */
+    onSearch({
+        detail
+    }) {
+        this.data.content.where.condition = detail;
+        this.getList(true);
+    },
+    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,
+            classActions: this.data.classActions.map(v => {
+                v.color = detail.i == v.i ? '#3874F6' : ''
+                return v
+            })
+        })
+        this.classClose();
+        this.getList(true)
+    }
+})

+ 6 - 0
prsx/contract/index.json

@@ -0,0 +1,6 @@
+{
+    "usingComponents": {
+        "float": "./float/index"
+    },
+    "navigationBarTitleText": "合同管理"
+}

+ 76 - 0
prsx/contract/index.scss

@@ -0,0 +1,76 @@
+.project-item {
+	background-color: #fff;
+	width: 690rpx;
+	border-radius: 8rpx;
+	margin: 0 auto 20rpx;
+
+	.label {
+		display: flex;
+		height: 42rpx;
+
+		.title {
+			flex: 1;
+			width: 0;
+			font-size: 30rpx;
+			font-family: PingFang SC-Regular, PingFang SC;
+			color: #333333;
+			margin-right: 20rpx;
+		}
+
+		.state {
+			flex-shrink: 0;
+			width: 132rpx;
+			height: 40rpx;
+			line-height: 40rpx;
+			border-radius: 20rpx 0px 0px 20rpx;
+			font-size: 24rpx;
+			font-family: PingFang SC-Regular, PingFang SC;
+			color: #FFFFFF;
+			text-align: center;
+			margin-right: -20rpx;
+		}
+	}
+
+	.tag-box {
+		display: flex;
+		align-items: center;
+		width: 100%;
+
+		.datatag,
+		.systemtag {
+			flex-shrink: 0;
+			margin-top: 6rpx;
+			background: #3874f6;
+			color: #ffffff;
+			margin-right: 10rpx;
+			display: flex;
+			align-items: center;
+			height: 40rpx;
+			font-size: 20rpx;
+			padding: 0 10rpx;
+			border-radius: 20rpx;
+			font-family: PingFang SC-Regular, PingFang SC;
+		}
+
+		.datatag {
+			background: #FA8C16;
+		}
+	}
+
+	.replenish {
+		display: flex;
+		min-height: 34rpx;
+		font-size: 24rpx;
+		font-family: PingFang SC-Regular, PingFang SC;
+		color: #333333;
+		margin-top: 8rpx;
+		word-break: break-all;
+		white-space: pre-wrap;
+	}
+}
+
+.line-1 {
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}

+ 47 - 0
prsx/contract/index.wxml

@@ -0,0 +1,47 @@
+<Yl_nav search list='{{navList}}' sort='{{content.sort}}' bind:onClick='navClick' bind:onSearch='onSearch' />
+<view class="global-total">
+	总共{{content.total}}个
+</view>
+<Yl_ListBox id='ListBox' bind:getlist='getList'>
+	<navigator url="/prsx/contract/detail?id={{item.sa_contractid}}" class="project-item global-card" wx:for="{{list}}" wx:key="sa_contractid">
+		<view class="label">
+			<view class="title line-1">{{item.billno}}</view>
+			<view class="state" style="background-color: {{sColors[item.status]}}">{{item.status}}</view>
+		</view>
+		<view class="tag-box">
+			<view class="systemtag" wx:for="{{item.tag_sys}}" wx:key="item">{{language[item]||item}}</view>
+			<view class="datatag" wx:for="{{item.tag}}" wx:key="item">{{language[item]||item}}</view>
+		</view>
+		<view class="replenish">
+			<text style="color: #666;">医院:</text>
+			<text>{{item.hospitalname || ' --'}}</text>
+		</view>
+		<view class="replenish">
+			<text style="color: #666;">经销商:</text>
+			<text>{{item.agentname || ' --'}}</text>
+		</view>
+		<view class="replenish">
+			<text style="color: #666;">合同类型:</text>
+			<text>{{item.type || ' --'}}</text>
+		</view>
+		<view class="replenish">
+			<text style="color: #666;">有效期:</text>
+			<text>{{item.begdate + '-' +item.enddate}}</text>
+		</view>
+		<view class="replenish">
+			<text style="color: #666;">签约日期:</text>
+			<text>{{item.signdate || ' --'}}</text>
+		</view>
+		<view class="replenish">
+			<text style="color: #666;">负责人:</text>
+			<text>{{item.leader.length? item.leader[0].name : ' --'}}</text>
+		</view>
+	</navigator>
+	<My_empty wx:if="{{list.length==0}}" />
+</Yl_ListBox>
+<!-- 显示类型 -->
+<van-action-sheet show="{{ classShow }}" actions="{{ classActions }}" cancel-text="取消" bind:click-overlay='classClose' bind:cancel="classClose" bind:select="classSelect" />
+<!-- 筛选条件 -->
+<Yl_Filtrate1 show='{{filterShow}}' list="{{filtratelist}}" dateRange bindhandle="handleFilter" dateRangeName='创建日期' />
+<!-- 浮动按钮 -->
+<float wx:if="{{insert}}" />

+ 299 - 0
prsx/contract/insert.js

@@ -0,0 +1,299 @@
+let _Http = getApp().globalData.http,
+    count = null;
+
+Page({
+    data: {
+        loading: false,
+        showAll: false,
+        content: {
+            sa_contractid: 0
+        },
+        disabled: true,
+    },
+    onLoad(options) {
+        console.log("options", options)
+        let type = '';
+        if (options.type) type = options.type;
+
+        let form = [{
+            label: "经销商",
+            error: false,
+            errMsg: "",
+            type: "route",
+            url: "/prsx/select/firm/index",
+            value: "",
+            params: {
+                id: 2025102416055302,
+                "content": {
+                    "pageSize": 20,
+                    "pageNumber": 1,
+                    sa_customersid: 0
+                },
+            },
+            query: "&radio=true",
+            placeholder: "选择经销商",
+            valueName: "sa_agentsid",
+            checking: "base",
+            required: options.type == '经销商协议',
+            interrupt: options.type == '经销商协议',
+            disabled: options.type == '医院合作协议'
+        }, {
+            label: "签约日期",
+            error: false,
+            errMsg: "",
+            type: "date",
+            start: '',
+            value: '',
+            placeholder: "签约日期",
+            valueName: "signdate",
+            checking: "base",
+            required: true,
+        }, {
+            label: "生效日期",
+            error: false,
+            errMsg: "",
+            type: "date",
+            start: '',
+            value: '',
+            placeholder: "生效日期",
+            valueName: "begdate",
+            checking: "base",
+            required: true,
+        }, {
+            label: "截止日期",
+            error: false,
+            errMsg: "",
+            type: "date",
+            start: '',
+            value: '',
+            placeholder: "截止日期",
+            valueName: "enddate",
+            checking: "base",
+            required: true,
+        }, {
+            label: "履约保证金",
+            error: false,
+            errMsg: "",
+            type: "option",
+            optionNmae: "contractbond",
+            optionType: "radio", //复选   radio 单选
+            value: "",
+            placeholder: "履约保证金",
+            valueName: "earnestmoney",
+            checking: "base",
+            required: true
+        }, {
+            label: "货款支付",
+            error: false,
+            errMsg: "",
+            type: "option",
+            optionNmae: "deliverymode",
+            optionType: "radio", //复选   radio 单选
+            value: "",
+            placeholder: "货款支付",
+            valueName: "payment",
+            checking: "base",
+            required: true
+        }, {
+            label: "奖励政策",
+            error: false,
+            errMsg: "",
+            type: "textarea",
+            value: "",
+            placeholder: "奖励政策",
+            valueName: "reward",
+            checking: "base",
+            required: true
+        }, {
+            label: "年目标手术量",
+            error: false,
+            errMsg: "",
+            type: "number",
+            value: "",
+            placeholder: "年目标手术量",
+            valueName: "opqty",
+            checking: "base",
+            required: true
+        }, {
+            label: "负责人",
+            error: false,
+            errMsg: "",
+            type: "route",
+            url: "/prsx/select/saler/index",
+            value: "",
+            placeholder: "负责人",
+            valueName: "saler_hrid",
+            checking: "base",
+            required: true,
+            params: {
+                "content": {
+                    "sys_enterpriseid": 0,
+                    "pageNumber": 1,
+                    "pageSize": 20,
+                    "where": {
+                        "condition": ""
+                    }
+                },
+                "id": 2025061911194602,
+            },
+            query: "&radio=true",
+            interrupt: true,
+            required: true,
+            disabled: true
+        }, {
+            label: "备注",
+            error: false,
+            errMsg: "",
+            type: "textarea",
+            value: "",
+            placeholder: "备注",
+            valueName: "remarks",
+            checking: "base",
+            required: false
+        }]
+        if (type == '医院合作协议') form.unshift({
+            label: "医院",
+            error: false,
+            errMsg: "",
+            type: "route",
+            url: "/prsx/select/hospital/index",
+            value: "",
+            placeholder: "医院",
+            valueName: "sa_customersid",
+            checking: "base",
+            required: true,
+            params: {
+                "content": {
+                    "isExport": 0,
+                    "pageNumber": 1,
+                    "pageSize": 20,
+                    "where": {
+                        "condition": ""
+                    }
+                },
+                "id": 2025102416054102,
+            },
+            query: "&radio=true",
+            required: true,
+            interrupt: true,
+        })
+
+        if (options.data) {
+            let data = JSON.parse(options.data);
+            console.log(data)
+            data.sa_customersid = [data.hospitalname, [data.sa_customersid]]
+            data.sa_agentsid = [data.agentname, [data.sa_agentsid]]
+            data.saler_hrid = [data.leader[0].name, [data.leader[0].hr.hrid]]
+            form = form.map(v => {
+                v.value = data[v.valueName];
+                if (v.label == '负责人') {
+                    v.params.sys_enterpriseid = data.sa_agentsid[1][0]
+                    v.disabled = false
+                }
+                return v
+            })
+            this.setData({
+                disabled: false,
+                content: {
+                    sa_contractid: data.sa_contractid,
+                },
+                form
+            })
+        }
+        this.setData({
+            form,
+            type
+        })
+        getApp().globalData.Language.getLanguagePackage(this, options.data ? '编辑' + type : '新建' + type);
+
+    },
+    interrupt(e) {
+        const {
+            data,
+            form,
+            temporary
+        } = e.detail;
+        console.log(data, form, temporary)
+        if (temporary.item.label == '医院') {
+            form.find(v => v.label == '医院').value = data.value;
+            let obj2 = form.find(v => v.label == '经销商')
+            obj2.params.content.sa_customersid = data.id[0];
+            obj2.value = '';
+            obj2.disabled = false;
+            wx.navigateBack()
+        } else if (temporary.item.label == '经销商') {
+            form.find(v => v.label == '经销商').value = data.value;
+            let obj = form.find(v => v.label == '负责人')
+            obj.params.content.sys_enterpriseid = data.id[0]
+            obj.disabled = false;
+            wx.navigateBack()
+        } else if (temporary.item.label == '负责人') {
+            data.value[1][0] = data.item.hrid;
+            form.find(v => v.label == '负责人').value = data.value;
+            wx.navigateBack()
+        }
+        this.selectComponent("#Form").confirm();
+        this.setData({
+            form
+        })
+    },
+    /* 表单必填项是否完成 */
+    onConfirm({
+        detail
+    }) {
+        this.setData({
+            disabled: detail
+        })
+    },
+    // 是否显示全部
+    onChange({
+        detail
+    }) {
+        this.setData({
+            showAll: detail
+        })
+    },
+    async submit() {
+        this.setData({
+            loading: true
+        })
+        let data = this.selectComponent("#Form").submit(),
+            content = this.data.content
+        data.sa_agentsid = data.sa_agentsid.length ? data.sa_agentsid[1][0] : 0
+        data.saler_hrid = data.saler_hrid.length ? data.saler_hrid[1][0] : 0
+        try {
+            data.sa_customersid = data.sa_customersid.length ? data.sa_customersid[1][0] : 0
+        } catch (error) {
+
+        }
+        _Http.basic({
+            "id": 20221121185302,
+            "content": {
+                ...content,
+                ...data,
+            }
+        }).then(res => {
+            this.setData({
+                loading: false
+            })
+            wx.showToast({
+                title: res.code != '1' ? res.msg : '保存成功',
+                icon: "none",
+                mask: res.code == '1'
+            })
+            if (res.code != '1') return;
+            getCurrentPages().forEach(v => {
+                if (v.route == 'prsx/contract/detail') v.getDetail()
+            })
+            setTimeout(() => {
+                if (content.sa_contractid == 0) {
+                    wx.redirectTo({
+                        url: '/prsx/contract/detail?id=' + res.data.sa_contractid,
+                    })
+                } else {
+                    wx.navigateBack()
+                }
+            }, 300)
+        })
+    },
+})

+ 3 - 0
prsx/contract/insert.json

@@ -0,0 +1,3 @@
+{
+    "usingComponents": {}
+}

+ 32 - 0
prsx/contract/insert.scss

@@ -0,0 +1,32 @@
+.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;
+	z-index: 999;
+
+	.new-submit {
+		width: 156rpx;
+		height: 90rpx;
+		border-radius: 8rpx;
+		font-size: 28rpx;
+		font-family: PingFang SC-Bold, PingFang SC;
+		font-weight: bold;
+		color: #FFFFFF;
+		margin-right: 30rpx;
+	}
+
+	.blue {
+		background: #3874F6;
+	}
+
+	.orange {
+		background: #F29C37;
+	}
+
+}

+ 8 - 0
prsx/contract/insert.wxml

@@ -0,0 +1,8 @@
+<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: 160rpx;" />
+<view class="new-footer" style="padding-bottom:12rpx;">
+	<van-button custom-class="new-submit {{content.sa_contractid ? 'orange' : 'blue' }}" disabled='{{disabled ||loading}}' loading='{{loading}}' bindclick='submit'>
+		{{content.sa_contractid ? '保存' : '确定'}}
+	</van-button>
+</view>

+ 1 - 1
prsx/dealer/index.js

@@ -41,7 +41,7 @@ Page({
         getApp().globalData.Language.getLanguagePackage(this);
         let templetList = wx.getStorageSync('templetList')
         this.setData({
-            insert: wx.getStorageSync('auth').wdepartment.options.some(v => v == 'insert'), //查询新增权限
+            insert: wx.getStorageSync('auth').wdealerMag.options.some(v => v == 'insert'), //查询新增权限
             classActions: templetList.map((v, i) => {
                 return {
                     name: v.templetname,

+ 1 - 1
prsx/hospital/index.js

@@ -40,7 +40,7 @@ Page({
         getApp().globalData.Language.getLanguagePackage(this);
         let templetList = wx.getStorageSync('templetList')
         this.setData({
-            insert: wx.getStorageSync('auth').wdepartment.options.some(v => v == 'insert'), //查询新增权限
+            insert: wx.getStorageSync('auth').wCustomer.options.some(v => v == 'insert'), //查询新增权限
             classActions: templetList.map((v, i) => {
                 return {
                     name: v.templetname,

+ 2 - 1
prsx/orderForm/index.js

@@ -47,7 +47,8 @@ Page({
             list: await _Http.getTypes('purchasetype', _Http)
         }]
         this.setData({
-            filter
+            filter,
+            insert: wx.getStorageSync('auth').newsale.options.some(v => v == 'insert'), //查询新增权限
         })
     },
     /* 处理筛选 */

+ 1 - 1
prsx/orderForm/index.wxml

@@ -16,6 +16,6 @@
     <view style="height: 20px;" />
 </Yl_ListBox>
 <!-- 新建浮动按钮 -->
-<Float />
+<Float wx:if="{{insert}}" />
 <!-- 筛选条件 -->
 <Yl_Filtrate1 id='Filtrate' list="{{filter}}" dateRange dateRangeName='单据日期' dateRange1 dateRangeName1='审核时间' bind:handle="handleFilter" />

+ 1 - 1
utils/work/apps.js

@@ -72,7 +72,7 @@ function getcrm() {
 		objectname: "sa_doctor"
 	}, {
 		name: "合同管理",
-		path: "/packageA/contract/index",
+		path: "/prsx/contract/index",
 		icon: "work-hetong",
 		objectname: "sa_contract"
 	}, {