dever 3 年之前
父节点
当前提交
f9c3c9e6c4

+ 1 - 1
app/shop/database/info.php

@@ -244,7 +244,7 @@ return array
             'desc'      => '地理位置',
             'match'     => 'is_string',
             # 如果是map,必须在config的base.php中设置map信息
-            'update'  => 'map',
+            //'update'  => 'map',
         ),
 
         'lng'       => array

+ 23 - 0
app/shop/lib/Cron.php

@@ -6,6 +6,29 @@ use Dever;
 
 class Cron
 {
+    # 定时更新店铺经纬度
+    public function geo()
+    {
+        Dever::config('base')->hook = true;
+        $shop = Dever::db('shop/info')->select();
+        if ($shop) {
+            foreach ($shop as $k => $v) {
+                $temp = explode(',', $v['area']);
+                if (isset($temp[1]) && $v['address']) {
+                    $geo = Dever::load('shop/lib/info')->geo($temp[1], $v['address']);
+                    $update['lng'] = $geo[0];
+                    $update['lat'] = $geo[1];
+                    $update['map'] = $geo[2];
+                    $update['coord_address'] = $address;
+                    $update['where_id'] = $v['id'];
+                    Dever::db('shop/info')->update($update);
+                }
+            }
+        }
+
+        return 'ok';
+    }
+
     # 同步退款状态
     public function refund_status_api()
     {

+ 11 - 0
app/shop/lib/Manage.php

@@ -321,6 +321,16 @@ class Manage
             Dever::db('shop/out_order')->updates($gup);
         }
 
+        $address = Dever::param('address', $data);
+        if ($address && isset($update['city'])) {
+            $geo = Dever::load('shop/lib/info')->geo($update['city'], $address);
+            $update['lng'] = $geo[0];
+            $update['lat'] = $geo[1];
+            $update['map'] = $geo[2];
+            $update['coord_address'] = $address;
+        }
+
+        /*
         $map = Dever::param('map', $data);
         if ($map) {
             $temp = is_string($map) ? explode(',', $map) : $map;
@@ -336,6 +346,7 @@ class Manage
                 }
             }
         }
+        */
 
         $act = Dever::param('act', $data);
         if ($act) {

+ 17 - 1
service/agent/database/member.php

@@ -47,8 +47,13 @@ $parent_mid = Dever::input('search_option_parent_mid');
 $getInfo = Dever::input('getInfo');
 
 $info = '';
+$button = array();
 if ($parent_mid && $parent_mid > 0 && $getInfo != 1) {
-    $info = Dever::load('agent/lib/member')->getInfoString($parent_mid);
+    $info = Dever::load('agent/lib/member')->getInfoString($parent_mid) . ', 以下为直推列表:';
+    $button = array
+    (
+        '返回上一页' => array('location', 'l=project/database/list&project=agent&table=member_area&page_type=1&mid=' . $parent_mid),
+    );
 }
 return array
 (
@@ -340,6 +345,16 @@ return array
             'show'      => 'type=2',
         ),
 
+        'address'      => array
+        (
+            'type'      => 'varchar-800',
+            'name'      => '地址',
+            'default'   => '',
+            'desc'      => '地址',
+            'match'     => 'is_string',
+            'update'    => 'text',
+        ),
+
         'cash'      => array
         (
             'type'      => 'float-11,2',
@@ -412,6 +427,7 @@ return array
         'insert' => false,
         'delete' => false,
         'edit' => false,
+        'button' => $button,
 
         'list_button' => array
         (

+ 422 - 0
service/agent/database/member_agreement.php

@@ -0,0 +1,422 @@
+<?php
+
+$status = array
+(
+    1 => '待签署',
+    2 => '有效',
+    3 => '作废',
+);
+$mid = Dever::input('search_option_mid');
+$button = array();
+if ($mid) {
+    $button = array
+    (
+        '返回上一页' => array('location', 'l=project/database/list&project=agent&table=member_area&page_type=1&mid=' . $mid),
+    );
+}
+return array
+(
+    # 表名
+    'name' => 'member_agreement',
+    # 显示给用户看的名称
+    'lang' => '合同管理',
+    'order' => 10,
+    'status' => $status,
+    # 数据结构
+    'struct' => array
+    (
+    
+        'id'        => array
+        (
+            'type'      => 'int-11',
+            'name'      => 'ID',
+            'default'   => '',
+            'desc'      => '',
+            'match'     => 'is_numeric',
+            'search'    => 'order',
+            //'list'        => true,
+        ),
+
+        'mid'      => array
+        (
+            'type'      => 'int-11',
+            'name'      => '手机号',
+            'default'   => '-1',
+            'desc'      => '代理商',
+            'match'     => 'is_string',
+            'update'    => 'text',
+            /*
+            'search'    => $mid ? 'hidden' : array
+            (
+                'api' => 'agent/member-select',
+                'col' => 'mobile',
+                'result' => 'id',
+            ),*/
+            //'list_name' => '手机号',
+            //'list'      => $mid ? false : 'Dever::load("agent/member-find#mobile", {mid})',
+            //'list_order' => 2,
+        ),
+
+        'agent-member-name'=> array
+        (
+            'name'      => '姓名',
+            'default'   => '',
+            'desc'      => '姓名',
+            'match'     => 'option',
+            # 读取另外表的关联方式
+            'sync'      => array('mid', 'id'),
+            'list'      => $mid ? false : true,
+            'list_order' => 1,
+        ),
+
+        'agent-member-role'=> array
+        (
+            'name'      => '代理角色',
+            'default'   => '',
+            'desc'      => '代理角色',
+            'match'     => 'option',
+            # 读取另外表的关联方式
+            'sync'      => array('mid', 'id'),
+            'list'      => 'Dever::load("setting/role-find#name", "{agent-member-role}")',
+            'list_order' => 3,
+        ),
+
+        'order_num'      => array
+        (
+            'type'      => 'varchar-100',
+            'name'      => '合同编号',
+            'default'   => '',
+            'desc'      => '合同编号',
+            'match'     => 'is_string',
+            'update'    => 'text',
+        ),
+
+        'order_id'      => array
+        (
+            'type'      => 'int-11',
+            'name'      => '关联订单表id',
+            'default'   => '',
+            'desc'      => '关联订单表id',
+            'match'     => 'is_numeric',
+        ),
+
+        'agreement_id'      => array
+        (
+            'type'      => 'int-11',
+            'name'      => '合同模板id',
+            'default'   => '',
+            'desc'      => '合同模板id',
+            'match'     => 'is_numeric',
+        ),
+
+        'agreement_name'      => array
+        (
+            'type'      => 'varchar-500',
+            'name'      => '合同名称',
+            'default'   => '',
+            'desc'      => '合同名称',
+            'match'     => 'is_string',
+            'update'    => 'text',
+            'search'    => 'fulltext',
+            'list'      => true,
+            'list_order' => 6,
+        ),
+
+        'type'        => array
+        (
+            'type'      => 'tinyint-1',
+            'name'      => '类型',
+            'default'   => '1',
+            'desc'      => '类型',
+            'match'     => 'is_numeric',
+        ),
+
+        'sign'     => array
+        (
+            'type'      => 'varchar-150',
+            'name'      => '合同签名',
+            'default'   => '',
+            'desc'      => '合同签名',
+            'match'     => 'option',
+            'update'    => 'image',
+            'key'       => '7',
+            'list'      => '"<img src=\'{sign}\' width=\'150\'>"',
+            'list_order' => 7,
+        ),
+
+        'name'      => array
+        (
+            'type'      => 'varchar-100',
+            'name'      => '姓名',
+            'default'   => '',
+            'desc'      => '姓名',
+            'match'     => 'is_string',
+            'update'    => 'text',
+        ),
+
+        'mobile'      => array
+        (
+            'type'      => 'bigint-11',
+            'name'      => '手机号',
+            'default'   => '',
+            'desc'      => '请输入手机号',
+            'match'     => Dever::rule('mobile'),
+            'update'    => 'text',
+            'search'    => $mid ? 'hidden' : 'fulltext',
+            'list'      => $mid ? false : true,
+            'list_order' => 2,
+        ),
+
+        'role'      => array
+        (
+            'type'      => 'int-11',
+            'name'      => '代理角色',
+            'default'   => '',
+            'desc'      => '代理角色',
+            'match'     => 'is_numeric',
+        ),
+
+		'price'      => array
+        (
+            'type'      => 'float-11,2',
+            'name'      => '实付金额',
+            'default'   => '0',
+            'desc'      => '金额',
+            'match'     => 'option',
+            'update'    => 'text',
+        ),
+
+        'area'       => array
+        (
+            'type'      => 'varchar-500',
+            'name'      => '区域',
+            'default'   => '',
+            'desc'      => '区域',
+            'match'     => 'option',
+        ),
+
+        'idcard'      => array
+        (
+            'type'      => 'varchar-32',
+            'name'      => '身份证号码',
+            'default'   => '',
+            'desc'      => '身份证号码',
+            'match'     => 'is_string',
+            'update'    => 'text',
+        ),
+
+        'idcard_front'     => array
+        (
+            'type'      => 'varchar-150',
+            'name'      => '身份证正面',
+            'default'   => '',
+            'desc'      => '身份证正面',
+            'match'     => 'option',
+            'update'    => 'image',
+            'key'       => '8',
+            'place'     => '660*660',
+        ),
+
+        'idcard_back'     => array
+        (
+            'type'      => 'varchar-150',
+            'name'      => '身份证背面',
+            'default'   => '',
+            'desc'      => '身份证背面',
+            'match'     => 'option',
+            'update'    => 'image',
+            'key'       => '8',
+            'place'     => '660*660',
+        ),
+
+        'company_name'      => array
+        (
+            'type'      => 'varchar-100',
+            'name'      => '公司名称',
+            'default'   => '',
+            'desc'      => '公司名称',
+            'match'     => 'is_string',
+            'update'    => 'text',
+            //'search'    => 'fulltext',
+            //'list'      => true,
+        ),
+
+        'company_pic'      => array
+        (
+            'type'      => 'varchar-150',
+            'name'      => '营业执照',
+            'default'   => '',
+            'desc'      => '营业执照',
+            'match'     => 'option',
+            'update'    => 'image',
+            'key'       => '8',
+            'place'     => '660*660',
+        ),
+
+        'company_number'      => array
+        (
+            'type'      => 'varchar-80',
+            'name'      => '营业执照号码',
+            'default'   => '',
+            'desc'      => '营业执照号码',
+            'match'     => 'is_string',
+            'update'    => 'text',
+        ),
+
+        'address'      => array
+        (
+            'type'      => 'varchar-800',
+            'name'      => '地址',
+            'default'   => '',
+            'desc'      => '地址',
+            'match'     => 'is_string',
+            'update'    => 'text',
+        ),
+
+        'qdate'     => array
+        (
+            'type'      => 'int-11',
+            'name'      => '协议签订时间',
+            'match'     => 'is_numeric',
+            'desc'      => '协议签订时间',
+            'update'    => 'text',
+        ),
+
+        'sdate'     => array
+        (
+            'type'      => 'int-11',
+            'name'      => '有效期开始时间',
+            'match'     => 'is_numeric',
+            'desc'      => '有效期开始时间',
+            'update'    => 'text',
+        ),
+
+        'edate'     => array
+        (
+            'type'      => 'int-11',
+            'name'      => '有效期结束时间',
+            'match'     => 'is_numeric',
+            'desc'      => '有效期结束时间',
+            'update'    => 'text',
+        ),
+
+        'udate'     => array
+        (
+            'type'      => 'int-11',
+            'name'      => '更新时间',
+            'match'     => 'is_numeric',
+            'desc'      => '更新时间',
+            'search'    => 'date',
+            'list'      => 'date("Y-m-d H:i", {udate})',
+            'list_order' => 5,
+        ),
+
+        'status'        => array
+        (
+            'type'      => 'tinyint-1',
+            'name'      => '合同状态',
+            'default'   => '1',
+            'desc'      => '合同状态',
+            'match'     => 'is_numeric',
+            'option'    => $status,
+            'search'    => 'select',
+            'list'      => true,
+            'list_order' => 8,
+        ),
+
+        'state'     => array
+        (
+            'type'      => 'tinyint-1',
+            'name'      => '状态',
+            'default'   => '1',
+            'desc'      => '请选择状态',
+            'match'     => 'is_numeric',
+        ),
+        
+        'cdate'     => array
+        (
+            'type'      => 'int-11',
+            'name'      => '创建时间',
+            'match'     => array('is_numeric', time()),
+            'desc'      => '',
+            # 只有insert时才生效
+            'insert'    => true,
+            //'search'    => 'date',
+            'list'      => 'date("Y-m-d H:i", {cdate})',
+            'list_order' => 4,
+        ),
+    ),
+
+    'manage' => array
+    (
+        'insert' => false,
+        'delete' => false,
+        'edit' => false,
+        'button' => $button,
+        'list_button' => array
+        (
+            'new' => array('查看', '"lib/agreement.location?id={id}"', 'agent'),
+        ),
+    ),
+
+    'request' => array
+    (
+        'getData' => array
+        (
+            # 匹配的正则或函数 选填项
+            'option' => array
+            (
+                'mid' => 'yes',
+                'order_id' => 'yes',
+                'agreement_id' => 'yes',
+                'state' => 1,
+            ),
+            'type' => 'all',
+            'order' => array('id' => 'desc'),
+            'col' => '*',
+        ),
+
+        'getOld' => array
+        (
+            # 匹配的正则或函数 选填项
+            'option' => array
+            (
+                'mid' => 'yes',
+                'order_id' => 'yes',
+                'agreement_id' => 'yes',
+                'state' => 1,
+            ),
+            'type' => 'one',
+            'order' => array('id' => 'desc'),
+            'col' => '*',
+        ),
+
+        'getOne' => array
+        (
+            # 匹配的正则或函数 选填项
+            'option' => array
+            (
+                'mid' => 'yes',
+                'type' => 'yes',
+                'state' => 1,
+            ),
+            'type' => 'one',
+            'order' => array('id' => 'desc'),
+            'col' => '*',
+        ),
+
+        'getAll' => array
+        (
+            # 匹配的正则或函数 选填项
+            'option' => array
+            (
+                'mid' => 'yes',
+                'state' => 1,
+            ),
+            'type' => 'all',
+            'order' => array('id' => 'desc'),
+            'page' => array(10, 'list'),
+            'col' => 'id,mid,agreement_id,status,qdate,role,name,area,agreement_name',
+        ),
+    ),
+);

+ 10 - 0
service/agent/database/order.php

@@ -388,6 +388,16 @@ return array
             'update'    => 'text',
         ),
 
+        'address'      => array
+        (
+            'type'      => 'varchar-800',
+            'name'      => '地址',
+            'default'   => '',
+            'desc'      => '地址',
+            'match'     => 'is_string',
+            'update'    => 'text',
+        ),
+
         'status'        => array
         (
             'type'      => 'tinyint-1',

+ 628 - 128
service/agent/lib/Agreement.php

@@ -6,18 +6,570 @@ use Dever;
 
 class Agreement
 {
-    public function printer_api()
+	private $font_size = 15;
+
+	# 查看合同
+	public function show_api()
+	{
+		$p = Dever::input('p');
+		if (!$p) {
+			Dever::alert('传入参数有误');
+		}
+		$p = Dever::json_decode(Dever::decode($p));
+		if (!$p) {
+			Dever::alert('传入参数有误');
+		}
+		$source = $p['source'];
+		if ($source == 1) {
+			Dever::load('manage/auth')->init();
+			$mid = false;
+		} else {
+			# 获取当前登录的uid
+			$mid = Dever::load('passport/user')->check(false);
+			if (!$mid) {
+				Dever::alert('请先登录');
+			}
+		}
+		$agreement_id = $p['agreement_id'];
+		$status = $p['status'];
+		$id = $p['id'];
+
+		if ($status == 1) {
+			$info = Dever::db('agent/order')->find($id);
+		} elseif ($status == 2) {
+			$info = Dever::db('agent/member_agreement')->find($id);
+			if (!$info) {
+				Dever::alert('未生成合同');
+			}
+			$agreement_id = $info['agreement_id'];
+		}
+		$agreement = Dever::db('setting/agreement')->find($agreement_id);
+		if (!$agreement) {
+			Dever::alert('合同模板不存在');
+		}
+
+		if ($mid && $mid != $info['mid']) {
+			Dever::alert('您没有权限查看');
+		}
+
+		$method = 'pdf_' . $agreement['type'];
+		return $this->$method($agreement, $info);
+	}
+
+	# 生成跳转链接
+	public function location_api()
+	{
+		Dever::load('manage/auth')->init();
+		$id = Dever::input('id');
+		$info = Dever::db('agent/member_agreement')->find($id);
+		$info = $this->name($info['agreement_id'], $info, $info['role'], 1, 2);
+
+		Dever::location($info[1]);
+	}
+
+	# 合同名称
+    public function name($agreement, $info, $role, $status = -1, $source = 1)
     {
-        $main_config = Dever::db('main/config')->find();
+    	if (is_numeric($agreement)) {
+    		$agreement = Dever::db('setting/agreement')->find($agreement);
+    	}
+    	if (is_numeric($role)) {
+    		$role = Dever::db('setting/role')->find($role);
+    	}
+    	$name = $agreement['name'];
+        if (strstr($name, '{name}')) {
+        	$name = str_replace('{name}', $info['name'], $name);
+        }
+        if (strstr($name, '{role}')) {
+        	$name = str_replace('{role}', $role['name'], $name);
+        }
+        if (strstr($name, '{area}')) {
+        	$info['area'] = Dever::load("area/api.string", $info['area'], '');
+        	$name = str_replace('{area}', $info['area'], $name);
+        }
+        if (strstr($name, '{date}')) {
+        	if (isset($info['sdate'])) {
+        		$sdate = date('Y年m月d日', $info['sdate']);
+        	} else {
+        		$sdate = date('Y年m月d日');
+        	}
+        	$name = str_replace('{date}', $sdate, $name);
+        }
+
+        if ($status > 0) {
+        	$param = array();
+        	$param['source'] = $source;
+        	$param['status'] = $status;
+        	$param['id'] = $info['id'];
+        	$param['agreement_id'] = $agreement['id'];
+        	$param = Dever::encode(Dever::json_encode($param));
+        	$link = Dever::url('agent/lib/agreement.show?p=' . $param);
+        	if ($source == 1) {
+	        	# 1 是未生成合同,预览
+	        	# 2 是已生成合同
+	        	$name = '<a href="'.$link.'" target="_blank">'.$name.'</a>';
+	        } elseif ($source == 2) {
+	        	return array($name, $link);
+	        }
+        }
+
+        return $name;
+    }
+
+	# 新建合同
+	public function up($order)
+	{
+		$agreement = Dever::db('setting/agreement')->getData();
+		$role = Dever::db('setting/role')->find($order['role']);
+        foreach ($agreement as $k => $v) {
+        	if ($k == 5) {
+        		continue;
+        	}
+        	if ($k == 2 && $order['order_type'] == 1) {
+        		continue;
+        	}
+        	if ($k == 4 && $order['order_type'] == 2) {
+        		continue;
+        	}
+        	$qdate = time();
+        	$sdate = $qdate;
+        	$edate = strtotime('+3 year', $sdate);
+        	if ($k == 2 && $order['order_type'] == 2) {
+        		# 查找旧合同
+        		$old = Dever::db('agent/member_agreement')->getOld(array('mid' => $order['mid'], 'agreement_id' => 1));
+        		if (!$old) {
+        			continue;
+        		} else {
+        			$sdate = $old['sdate'];
+        			$edate = $old['edate'];
+        		}
+        	}
+
+            $where['mid'] = $order['mid'];
+            $where['agreement_id'] = $v['id'];
+            $where['order_id'] = $order['id'];
+
+            $info = Dever::db('agent/member_agreement')->find($where);
+
+            $where['order_num'] = $this->getOrderId();
+            $where['agreement_name'] = $this->name($v, $order, $role);
+            $where['type'] = $order['type'];
+            $where['sign'] = $order['sign'];
+            $where['name'] = $order['name'];
+            $where['mobile'] = $order['mobile'];
+            $where['role'] = $order['role'];
+            $where['price'] = $order['price'];
+            $where['area'] = $order['area'];
+            $where['idcard'] = $order['idcard'];
+            $where['idcard_front'] = $order['idcard_front'];
+            $where['idcard_back'] = $order['idcard_back'];
+            $where['company_name'] = $order['company_name'];
+            $where['company_pic'] = $order['company_pic'];
+            $where['address'] = '';
+            $where['status'] = 2;
+            $where['udate'] = $where['cdate'] = time();
+            $where['qdate'] = $qdate;
+            $where['sdate'] = $sdate;
+            $where['edate'] = $edate;
+
+            if ($info) {
+                $up['where_id'] = $info['id'];
+                $state = Dever::db('agent/member_agreement')->update($up);
+            } else {
+                $up = $where;
+                $state = Dever::db('agent/member_agreement')->insert($up);
+            }
+        }
+	}
+
+	/**
+     * 生成订单号
+     *
+     * @return mixed
+     */
+    public function getOrderId()
+    {
+        $where['order_num'] = Dever::order('AG');
+        $state = Dever::db('agent/member_agreement')->one($where);
+        if (!$state) {
+            return $where['order_num'];
+        } else {
+            return $this->getOrderId();
+        }
+    }
+
+	# 市场管理培训师承诺书
+    public function pdf_4($agreement, $info)
+    {
+    	$base = Dever::db('setting/base')->find();
+
+        if (isset($info['sdate'])) {
+        	$qdate = date('Y年m月d日', $info['qdate']);
+        } else {
+        	$qdate = date('Y年m月d日');
+        }
+        $role = Dever::db('setting/role')->find($info['role']);
+        $name = $this->name($agreement, $info, $role);
+
+        $pdf = Dever::load('pdf/lib/core')->init();
+        $pdf->SetTitle($name);
+        $pdf->setCellHeightRatio(1.8);
+        $pdf->setCellPaddings(10, 0, 10, 0);
+        $pdf->font(18, 'B');
+        $pdf->center('市场管理培训师承诺书');
+        $pdf->br();
+        $pdf->font($this->font_size, 'B');
+        $pdf->left('承诺人:' . $info['name']);
+        $pdf->left('身份证号:' . $info['idcard']);
+        $pdf->left('电话:' . $info['mobile']);
+        $pdf->br(2);
+
+        $pdf->content('', '	承诺人曾与中食民安(北京)科技有限公司(以下简称“中食民安”)签订《中食民安(北京)科技有限公司代理商合作协议》,为便于更好的工作,承诺人自愿成为中食民安的市场管理培训师并销售产品,为更好的开展相关工作,承诺如下:');
+
+        $pdf->content('一、我知悉相关定义', '市场管理培训师(以下简称培训师):是培训和辅导其管理区域内其他代理商,在进行销售渠道的拓展、营销推广技巧、公司政策的传达和讲解的辅导后,达到提升销售额、完成业绩指标,并对其他代理商进行监督和管理的身份。');
+
+        $pdf->content('二、我确认培训师与被培训人的关系', '1、培训师管理区域与《中食民安(北京)科技有限公司代理商合作协议》中授权区域保持一致。
+2、被培训人:指每个培训师管理区域内的其他代理,被培训人以中食民安规定方式签订《中食民安(北京)科技有限公司代理商合作协议》,即视为被培训人同意成为并自愿接受培训师的培训和管理。');
+
+        $pdf->content('三、培训师及被培训人的权利和义务', '1、培训师的权利
+1)培训师的服务费,按周结算,具体服务费标准与培训内容、培训时间另行约定;
+2)管理和被管理关系存续期间,根据实际的培训情况、政策讲解的掌握、业绩完成情况,进行综合评定,评定标准见《市场管理培训费》,完成考核的培训师在每个奖励周期相应收益(包括物质和荣誉奖励,愿意服从中食民安根据实际完成情况及市场状态等定期或不定期调整奖励内容及标准)
+2、培训师的义务
+1)及时传达中食民安各项新颁布的通知、公告等各类文件并将内容解读清楚;
+2)每周不少于三次,对被培训人进行业务培训,包括社群的建立、销售技巧、销售渠道拓展、客户服务、如何办理沙龙等;
+3)随时帮助被培训人解决实际销售中遇到的任何问题。
+3、被培训人的义务
+1)督促并指导被培训人按照中食民安要求进行招商活动,接受中食民安监管;
+2)督促并指导被培训人在培训师的培训指导下,积极开拓市场,努力完成业绩。
+');
+
+        $pdf->content('四、其它', '1、培训师与被培训人,合作过程中出现任何争议,可申请中食民安进行协调;
+2、本承诺书作为《中食民安(北京)科技有限公司代理商合作协议》的附件,是《中食民安(北京)科技有限公司代理商合作协议》的不可分割部分,我愿意遵守。
+');
+
+        $pdf->center('                                                                                  承诺人:');
+        $pdf->center('                                                                                                             日期:' . $qdate);
+
+        $pic = Dever::pic($base['agreement_sign']);
+
+        $cx = $pdf->GetX();
+        $cy = $pdf->GetY();
+
+        $x = $cx - 40;
+        $y = $cy - 15;
+
+        if ($info['sign']) {
+        	$info['sign'] = Dever::pic($info['sign']);
+        	if (strstr($info['sign'], 'http')) {
+        		$pdf->Image($pic, $x, $y, 15, 15);
+        	}
+        }
+
+        $pdf->out($name);
+    }
+
+    # 合同解除协议
+    public function pdf_2($agreement, $info)
+    {
+    	$base = Dever::db('setting/base')->find();
+
+        if (isset($info['agreement_id'])) {
+        	$order_num = $info['order_num'];
+        } else {
+        	$order_num = '待生成';
+        }
+        if ($info['type'] == 1) {
+        	$idcard = $info['idcard'];
+        } else {
+        	$idcard = $info['company_number'];
+        }
+        $address = '';
+
+        $role = Dever::db('setting/role')->find($info['role']);
+        $name = $this->name($agreement, $info, $role);
+
+        $oagreement = Dever::db('setting/agreement')->find(1);
+        $oname = $this->name($oagreement, $info, $role);
+
+        $price = $info['price'];
+
+        $area = Dever::load("area/api.string", $info['area'], '-');
+
+        if (isset($info['sdate'])) {
+        	$sdate = date('Y年m月d日', $info['sdate']);
+        	$edate = date('Y年m月d日', $info['edate']);
+        	$qdate = date('Y年m月d日', $info['qdate']);
+        } else {
+        	$sdate = date('Y年m月d日');
+        	$edate = date('Y年m月d日', strtotime('+3 year'));
+        	$qdate = $sdate;
+
+        	$old = Dever::db('agent/member_agreement')->getOld(array('mid' => $info['mid'], 'agreement_id' => 1));
+        	if ($old) {
+        		$sdate = date('Y年m月d日', $old['sdate']);
+        		$edate = date('Y年m月d日', $old['edate']);
+        	}
+        }
+
+        $company_name = '中食民安(北京)科技有限公司';
+
+        $pdf = Dever::load('pdf/lib/core')->init();
+        $pdf->SetTitle($name);
+        $pdf->font(18, 'B');
+        $pdf->center('合 同 解 除 协 议');
+        $pdf->br(2);
+        
+        $content = array();
+
+        $content[] = array
+        (
+        	'name' => array
+	        (
+	        	'甲 方',
+	        	15,
+	        	STR_PAD_LEFT,
+	        	25,
+	        ),
+	        'content' => array
+	        (
+	        	' 中食民安(北京)科技有限公司(以下简称“甲方”)',
+	        	100,
+	        	STR_PAD_RIGHT,
+	        	80,
+	        ),
+        );
+
+        $content[] = array
+        (
+        	'name' => array
+	        (
+	        	'统一社会信用代码',
+	        	26,
+	        	STR_PAD_LEFT,
+	        	55,
+	        ),
+	        'content' => array
+	        (
+	        	' 91110106MA01T8R42B',
+	        	100,
+	        	STR_PAD_RIGHT,
+	        	40,
+	        ),
+        );
+
+        $content[] = array
+        (
+        	'name' => array
+	        (
+	        	'地 址',
+	        	15,
+	        	STR_PAD_LEFT,
+	        	25,
+	        ),
+	        'content' => array
+	        (
+	        	' 北京经济技术开发区经海四路22号院四区5号楼14层1706',
+	        	100,
+	        	STR_PAD_RIGHT,
+	        	80,
+	        ),
+        );
+
+        $content[] = array
+        (
+        	'name' => array
+	        (
+	        	'电 话',
+	        	15,
+	        	STR_PAD_LEFT,
+	        	25,
+	        ),
+	        'content' => array
+	        (
+	        	' 010-53391855',
+	        	160,
+	        	STR_PAD_RIGHT,
+	        	80,
+	        ),
+        );
+
+        $content[] = array
+        (
+        	'name' => array
+	        (
+	        	'乙 方',
+	        	15,
+	        	STR_PAD_LEFT,
+	        	25,
+	        ),
+	        'content' => array
+	        (
+	        	' ' . $info['name'],
+	        	100,
+	        	STR_PAD_RIGHT,
+	        	80,
+	        ),
+        );
+
+        $content[] = array
+        (
+        	'name' => array
+	        (
+	        	'统一社会信用代码/身份证号码',
+	        	37,
+	        	STR_PAD_LEFT,
+	        	83,
+	        ),
+	        'content' => array
+	        (
+	        	' ' . $idcard,
+	        	100,
+	        	STR_PAD_RIGHT,
+	        	40,
+	        ),
+        );
+
+        $content[] = array
+        (
+        	'name' => array
+	        (
+	        	'地 址',
+	        	15,
+	        	STR_PAD_LEFT,
+	        	25,
+	        ),
+	        'content' => array
+	        (
+	        	' ' . $address,
+	        	100,
+	        	STR_PAD_RIGHT,
+	        	80,
+	        ),
+        );
+
+        $content[] = array
+        (
+        	'name' => array
+	        (
+	        	'电 话',
+	        	15,
+	        	STR_PAD_LEFT,
+	        	25,
+	        ),
+	        'content' => array
+	        (
+	        	' ' . $info['mobile'],
+	        	160,
+	        	STR_PAD_RIGHT,
+	        	80,
+	        ),
+        );
+        $pdf->setCellHeightRatio(2);
+        foreach ($content as $k => $v) {
+        	$pdf->font($this->font_size);
+	        $pdf->left(Dever::mb_str_pad($v['name'][0] . ':', $v['name'][1], ' ', $v['name'][2]), $v['name'][3]);
+	        $pdf->font($this->font_size, '');
+	        $pdf->left(Dever::mb_str_pad($v['content'][0], $v['content'][1], ' ', $v['content'][2]), $v['content'][3]);
+	        $pdf->br();
+	        if ($k == 3) {
+	        	$pdf->br();
+	        }
+        }
+
+        $pdf->br();
+        $pdf->setCellPaddings(10, 0, 10, 0);
+        
+        $oname = str_replace('.pdf', '', $oname);
+        $pdf->content('', '        甲乙双方曾于'.$sdate.'签订《'.$oname.'》(以下简称“原协议”),原协议有效期至'.$edate.',现经甲乙双方友、充分协商,决定解除双方签订的原协议,具体内容如下:
+        第一,原协议自'.$qdate.'解除,自解除之日起,原协议中约定的双方权利义务终止。
+        第二,本协议由甲乙双方签字或盖章后生效,本协议生效之日,原协议解除,双方互不追究因原协议履行而产生的法律责任。
+        第三,本协议一式两份,甲乙双方各执一份,均具有同等法律效力。
+');
+
+        $pdf->br(1, 20);
+        $pdf->font($this->font_size, '');
+        $pdf->left('甲方(盖章) :                                                乙方(盖章/签字):', 100);
+        $pdf->br();
+
+        $pdf->br(1, 1);
+        $pdf->font($this->font_size, '');
+        $pdf->left('日                      期:'.$qdate, 90);
+        $pdf->left('日                      期:'.$qdate, 80);
+        $pdf->br();
+
+        $pic = Dever::pic($base['agreement_sign']);
+
+        $cx = $pdf->GetX();
+        $cy = $pdf->GetY();
+
+        $x = $cx + 50;
+        $y = $cy - 25;
+
+        $pdf->Image($pic, $x, $y, 15, 15);
+
+        $x += 100;
+
+        if ($info['sign']) {
+        	$info['sign'] = Dever::pic($info['sign']);
+        	if (strstr($info['sign'], 'http')) {
+        		$pdf->Image($pic, $x, $y, 15, 15);
+        	}
+        }
+
+        
+
+        $pdf->out($name);
+    }
+
+	# 代理商合同模板
+    public function pdf_1($agreement, $info)
+    {
+        $base = Dever::db('setting/base')->find();
 
-        # 常规字体
-        $font_size = 15;
+        if (isset($info['agreement_id'])) {
+        	$order_num = $info['order_num'];
+        } else {
+        	$order_num = '待生成';
+        }
+        if ($info['type'] == 1) {
+        	$idcard = $info['idcard'];
+        } else {
+        	$idcard = $info['company_number'];
+        }
+        $address = '';
+
+        $role = Dever::db('setting/role')->find($info['role']);
+        $name = $this->name($agreement, $info, $role);
+
+        $price = $info['price'];
+        # 转大写
+        $price_str = Dever::convertNum($price);
+
+        $area = '【' . Dever::load("area/api.string", $info['area'], '') . '】';
+
+        if (isset($info['sdate'])) {
+        	$sdate = date('Y年m月d日', $info['sdate']);
+        	$edate = date('Y年m月d日', $info['edate']);
+        	$qdate = date('Y年m月d日', $info['qdate']);
+        } else {
+        	//$sdate = date('Y年m月d日', $info['cdate']);
+        	$sdate = date('Y年m月d日');
+        	$edate = date('Y年m月d日', strtotime('+3 year'));
+        	$qdate = $sdate;
+        }
+
+        $company_name = '中食民安(北京)科技有限公司';
 
         $pdf = Dever::load('pdf/lib/core')->init();
+        $pdf->SetTitle($name);
+        //$pdf->setPrintHeader(true);
+        //$pdf->setPrintFooter(true);
+        $pdf->SetHeaderData('', 0, $company_name);
+
         $pdf->font(25, 'B');
         $pdf->center('');
         $pdf->br(3);
-        $pdf->center('北京橙猫美家科技有限公司');
+        $pdf->center($company_name);
         $pdf->br(3);
         $pdf->center('代');
         $pdf->br();
@@ -37,13 +589,13 @@ class Agreement
         $pdf->font(18, 'B');
         $pdf->center('代理商合作协议');
         $pdf->br();
-        $pdf->font($font_size, '');
-        $pdf->right('合同编号:xxxxxx');
+        $pdf->font($this->font_size, '');
+        $pdf->right('合同编号:' . $order_num);
         $pdf->br(2);
 
-        $info = array();
+        $content = array();
 
-        $info[] = array
+        $content[] = array
         (
         	'name' => array
 	        (
@@ -61,7 +613,7 @@ class Agreement
 	        ),
         );
 
-        $info[] = array
+        $content[] = array
         (
         	'name' => array
 	        (
@@ -79,7 +631,7 @@ class Agreement
 	        ),
         );
 
-        $info[] = array
+        $content[] = array
         (
         	'name' => array
 	        (
@@ -97,7 +649,7 @@ class Agreement
 	        ),
         );
 
-        $info[] = array
+        $content[] = array
         (
         	'name' => array
 	        (
@@ -115,7 +667,7 @@ class Agreement
 	        ),
         );
 
-        $info[] = array
+        $content[] = array
         (
         	'name' => array
 	        (
@@ -126,14 +678,14 @@ class Agreement
 	        ),
 	        'content' => array
 	        (
-	        	' 惺惺惜惺惺',
+	        	' ' . $info['name'],
 	        	100,
 	        	STR_PAD_RIGHT,
 	        	80,
 	        ),
         );
 
-        $info[] = array
+        $content[] = array
         (
         	'name' => array
 	        (
@@ -144,14 +696,14 @@ class Agreement
 	        ),
 	        'content' => array
 	        (
-	        	' 91110106MA01T8R42B',
+	        	' ' . $idcard,
 	        	100,
 	        	STR_PAD_RIGHT,
 	        	40,
 	        ),
         );
 
-        $info[] = array
+        $content[] = array
         (
         	'name' => array
 	        (
@@ -162,14 +714,14 @@ class Agreement
 	        ),
 	        'content' => array
 	        (
-	        	' 北京经济技术开发区经海四路22号院四区5号楼14层1706',
+	        	' ' . $address,
 	        	100,
 	        	STR_PAD_RIGHT,
 	        	80,
 	        ),
         );
 
-        $info[] = array
+        $content[] = array
         (
         	'name' => array
 	        (
@@ -180,17 +732,17 @@ class Agreement
 	        ),
 	        'content' => array
 	        (
-	        	' 010-53391855',
+	        	' ' . $info['mobile'],
 	        	160,
 	        	STR_PAD_RIGHT,
 	        	80,
 	        ),
         );
-
-        foreach ($info as $k => $v) {
-        	$pdf->font($font_size);
+        $pdf->setCellHeightRatio(2);
+        foreach ($content as $k => $v) {
+        	$pdf->font($this->font_size);
 	        $pdf->left(Dever::mb_str_pad($v['name'][0] . ':', $v['name'][1], ' ', $v['name'][2]), $v['name'][3]);
-	        $pdf->font($font_size, '');
+	        $pdf->font($this->font_size, '');
 	        $pdf->left(Dever::mb_str_pad($v['content'][0], $v['content'][1], ' ', $v['content'][2]), $v['content'][3]);
 	        $pdf->br();
 	        if ($k == 3) {
@@ -198,33 +750,24 @@ class Agreement
 	        }
         }
 
-        $pdf->br();
-        $pdf->font($font_size, 'B');
+        $pdf->br(1,1);
+        $pdf->font($this->font_size, 'B');
         $pdf->left('        鉴于:');
         $pdf->br();
-        $pdf->font($font_size, '');
+        $pdf->font($this->font_size, '');
         $pdf->setCellPaddings(16, 0, 16, 0);
-        $pdf->setCellHeightRatio(2);
-        $pdf->mleft('(1)甲方是一家依法成立、合法存续的有限公司,具有技术开发、技术服务、电商运营、市场拓展、产品设计、产品生产等经验;
+        
+
+        $pdf->content('', '(1)甲方是一家依法成立、合法存续的有限公司,具有技术开发、技术服务、电商运营、市场拓展、产品设计、产品生产等经验;
 (2)乙方认同甲方公司营业执照上许可的经营内容,经市场考察及调研后愿意成为甲方的代理商,在相关区域进行市场推广及业务拓展;
 (3)本协议所称“代理”非《中和人民共和国民法典》第七章之规定的代理法律关系,乙方非甲方授权代理人。双方系平等民事主体合作关系,乙方以自己名义独立开展与甲方及其他第三方民事活动,独自承担民事责任。
 (4)乙方为依法成立、合法存续的企业法人或具有完全行为能力的自然人,在其经营地拥有丰富的社会资源并有能力依法按照本协议的约定搭建各项管理架构、成立线下门店、以及履行运营规则及相关义务。
 根据《中华人民共和国民法典》及我国相关法律法规定,甲乙双方本着“平等自愿,互惠互利、共同发展”的原则,就乙方自愿成为甲方代理商并销售甲方产品相关事宜,经双方友好协商一致,达成如下协议:');
 
-        $pdf->br(1, 1);
-        $pdf->font($font_size, 'B');
-        $pdf->left('第一条	主体合法', 100);
-        $pdf->br();
-        $pdf->font($font_size, '');
-        $pdf->mleft('1.1:甲方和乙方分别向对方承诺:本协议的主体依法具有履行本协议要求的行为能力(包括但不限于依法设立且仍存续合法有效),拥有履行本协议要求的合法有效的资格或资质。
+        $pdf->content('第一条	主体合法', '1.1:甲方和乙方分别向对方承诺:本协议的主体依法具有履行本协议要求的行为能力(包括但不限于依法设立且仍存续合法有效),拥有履行本协议要求的合法有效的资格或资质。
 1.2:若乙方为企业法人的,则必须以独立法人形式运营,其公司经营地须在中华人民共和国境内,乙方同时承诺其股东之间的任何争议事项(如有)均不影响本协议的签订及履行。');
 
-        $pdf->br(1, 1);
-        $pdf->font($font_size, 'B');
-        $pdf->left('第二条	能力要求与代理职责', 100);
-        $pdf->br();
-        $pdf->font($font_size, '');
-        $pdf->mleft('2.1:行为能力
+        $pdf->content('第二条	能力要求与代理职责','2.1:行为能力
 2.1.1:本协议生效后,乙方应有能力合法协调和充分运用本协议规定的业务覆盖区域内的各种资源,确保协议顺利履行。
 2.1.2:本协议有效期间,乙方应有能力及时完成本协议约定的事项,推动实现本协议目的。
 2.2:行为规范
@@ -241,40 +784,23 @@ class Agreement
 ⑨乙方须积极维护甲方及相关平台商誉,及时处理因经营产生的任何争议;
 ⑩完成甲方交办的其他事项。');
 
-        $pdf->br(1, 1);
-        $pdf->font($font_size, 'B');
-        $pdf->left('第三条	具体合作内容', 100);
-        $pdf->br();
-        $pdf->font($font_size, '');
-        $pdf->mleft('3.1:合作方式:
+        $pdf->content('第三条	具体合作内容', '3.1:合作方式:
 甲方提供产品、线上销售平台,并为乙方提供销售培训、线下销售店面装修设计建议、线下收银系统等服务。乙方进行线下销售,或介绍客户至甲方线上平台购买商品。乙方亦可向甲方介绍新的代理商。乙方应按合同约定合作期限向甲方支付代理费,乙方可以获得本协议第五条约定的相关收益。
 乙方销售的所有产品,皆通过甲方销售管理系统进行收费及结算,乙方不得私自收费。否则甲方有权要求乙方返还全部收益并赔偿损失,并有权解除本协议。
 3.2:合作期限:
-自本协议生效之日起有效期三年。即自                        至
-                       止。合同到期后,乙方无违约或侵权行为,并经过甲方考核合格后可申请顺延。甲方考核标准见附件1《代理商考核办法》。
-3.3:甲方授权乙方在               省            市        区/县                 街镇区域内推广、发展、销售甲方产品相关业务。
+自本协议生效之日起有效期三年。即自【'.$sdate.'至'.$edate.'】止。合同到期后,乙方无违约或侵权行为,并经过甲方考核合格后可申请顺延。甲方考核标准见附件1《代理商考核办法》。
+3.3:甲方授权乙方在'.$area.'区域内推广、发展、销售甲方产品相关业务。
 3.4:乙方在此不可撤销地承诺并确认:在签署本协议时,乙方已经知悉并接受甲方的商业模式、运作思路等信息,所收取的代理费用将不予退还。乙方同时承诺将不得以个人原因或使用频率不高、未实际使用或收益太少等其他事由要求单方提前解约等为由提出任何形式的抗辩或退费要求。
 3.5:代理级别及费用
-代理级别为:               ,代理费用为【          】元,大写:                  ,自本协议签订之日起的5日内,乙方向甲方缴纳代理费用。');
+代理级别为:【'.$role['name'].'】,代理费用为【'.$price.'】元,大写:【'.$price_str.'】,自本协议签订之日起的5日内,乙方向甲方缴纳代理费用。');
 
-        $pdf->br(1, 1);
-        $pdf->font($font_size, 'B');
-        $pdf->left('第四条 甲方服务内容', 100);
-        $pdf->br();
-        $pdf->font($font_size, '');
-        $pdf->mleft('乙方签订完毕本协议并支付代理费后3日内,甲方作为权利人将:
+        $pdf->content('第四条	甲方服务内容','乙方签订完毕本协议并支付代理费后3日内,甲方作为权利人将:
 4.1:向乙方交付中食民安经销商后台管理系统、线上商城分销系统等科技软件使用权。
 4.2:合法授权乙方在辖区内根据甲方的市场运营方案做项目推广,享有相应的权益。
 4.3:合法授权乙方销售甲方已有产品,并向乙方提供此类产品,以便乙方销售。若提前向乙方提供产品的,甲方有权收取相应的产品成本费用,在向乙方分配该部分产品收益时一并退还。
 4.4:开始向乙方提供技术及服务支持,包括但不限于人员培训、业务考核、系统开通、产品发布、代理商申请等。
 ');
-
-        $pdf->br(1, 1);
-        $pdf->font($font_size, 'B');
-        $pdf->left('第五条	乙方收益', 100);
-        $pdf->br();
-        $pdf->font($font_size, '');
-        $pdf->mleft('5.1:乙方可享受以下收益。
+        $pdf->content('第五条	乙方收益', '5.1:乙方可享受以下收益。
 5.1.1:享有中食民安经销商后台管理系统、线上商城分销系统等科技软件使用权;
 5.1.2:享有招商销售收益并享受相关的权益;
 5.1.3:享受产品销售推荐收益;
@@ -285,24 +811,14 @@ class Agreement
 5.4:若乙方服务区域内或乙方介绍到线上的客户出现交易取消而产生退款,乙方应于该等交易取消之日起3个自然日内将所有的收益全额及时退还甲方,如乙方未及时退还给乙方,甲方直接从乙方的收益中扣除对等金额。
 ');
 
-        $pdf->br(1, 1);
-        $pdf->font($font_size, 'B');
-        $pdf->left('第六条	甲方权利及义务', 100);
-        $pdf->br();
-        $pdf->font($font_size, '');
-        $pdf->mleft('6.1:甲方有权监督、检查乙方服务期间的运营管理活动;
+        $pdf->content('第六条	甲方权利及义务', '6.1:甲方有权监督、检查乙方服务期间的运营管理活动;
 6.2:甲方负责提供合格的智能电器产品、半成品食材以及稳定的网络平台和技术服务,保证产品用户端顺利运作;
 6.3:甲方按约定支付约定收益给乙方,若乙方为个人,甲方提供所得税的代扣代缴义务;
 6.4:如果甲方被第三方收购,或者发生与其它公司之合并、拆分、重组的,甲方的权利义务由第三方公司或新公司承担,并不影响本合同的继续履行,不影响乙方在本合同中的权利义务;
 6.5:若乙方辖区运营达不到同级别平均水平(《级别标准》见附件2),甲方有权在乙方管辖区内另行设立分公司或相应的机构,乙方有义务配合上述机构的工作与安排,且不得以此为由追究甲方违约责任。
 ');
 
-        $pdf->br(1, 1);
-        $pdf->font($font_size, 'B');
-        $pdf->left('第七条	乙方的权利及义务', 100);
-        $pdf->br();
-        $pdf->font($font_size, '');
-        $pdf->mleft('7.1:乙方在本协议签订完毕之后,甲方作为权利人交付给乙方中食民安经销商后台管理系统、线上商城分销系统等科技软件使用权。乙方有权使用公司相关技术入驻公司线上商城并在线下开展自己的经营活动;
+        $pdf->content('第七条	乙方的权利及义务', '7.1:乙方在本协议签订完毕之后,甲方作为权利人交付给乙方中食民安经销商后台管理系统、线上商城分销系统等科技软件使用权。乙方有权使用公司相关技术入驻公司线上商城并在线下开展自己的经营活动;
 7.2:乙方在本协议签订完毕之后,甲方作为权利人合法授权乙方在辖区内根据甲方的市场运营方案做项目推广,享有相应的权益:
 7.3:乙方在本协议签订完毕之后,甲方作为权利人合法授权乙方销售甲方已有产品;
 7.4:乙方承诺遵守法律规定和甲方制定的市场推广方案以及甲方的各项运营规则和甲方相关系统的后台规则;
@@ -325,22 +841,12 @@ class Agreement
 7.21:乙方不得通过任何手段、以任何方式自行或者委托他人进行违法或者作弊行为以获得不正当交易机会。
 ');
         
-        $pdf->br(1, 1);
-        $pdf->font($font_size, 'B');
-        $pdf->left('第八条 结算方式', 100);
-        $pdf->br();
-        $pdf->font($font_size, '');
-        $pdf->mleft('8.1:自甲方信息发布/约定功能上线之日起,乙方关联方/乙方合作方按双方约定的结算周期将代收净额结算到乙方账户,每单的结算时间以C端确认收货为时间点,系统自动将代收净额结算到乙方账户。
+        $pdf->content('第八条	结算方式', '8.1:自甲方信息发布/约定功能上线之日起,乙方关联方/乙方合作方按双方约定的结算周期将代收净额结算到乙方账户,每单的结算时间以C端确认收货为时间点,系统自动将代收净额结算到乙方账户。
 8.2:若双方数据存在差异,乙方同意代收净额数据以甲方平台数据为准。本协议项下款项结算活动,依据甲方平台定期制定和发布的规则和流程进行。
 8.3:甲方通过平台自助结算,将相关款项付至双方约定的平台上乙方管理账户内,由乙方自行转入到个人银行卡内。
 ');
 
-        $pdf->br(1, 1);
-        $pdf->font($font_size, 'B');
-        $pdf->left('第九条	违约责任', 100);
-        $pdf->br();
-        $pdf->font($font_size, '');
-        $pdf->mleft('9.1:双方应正当行使权利,履行义务,保证本协议的顺利履行。任何一方没有充分、及时履行义务的,应当承担违约责任:违约方给守约方造成损失的,应赔偿守约方由此所遭受的实际损失(包括但不限于直接经济损失、预期利益损失以及守约方为维护其权益而发生的律师费、诉讼费、保全费、公证费等其他合理费用);如违约方按前述约定支付的违约金不足以弥补因其违约行为给守约方造成的经济损失时,违约方还应承担赔偿责任。
+        $pdf->content('第九条	违约责任', '9.1:双方应正当行使权利,履行义务,保证本协议的顺利履行。任何一方没有充分、及时履行义务的,应当承担违约责任:违约方给守约方造成损失的,应赔偿守约方由此所遭受的实际损失(包括但不限于直接经济损失、预期利益损失以及守约方为维护其权益而发生的律师费、诉讼费、保全费、公证费等其他合理费用);如违约方按前述约定支付的违约金不足以弥补因其违约行为给守约方造成的经济损失时,违约方还应承担赔偿责任。
 9.2:乙方存在如下任一违约情形的,甲方有权解除本协议,且乙方应按照本协议有效期内代理费用总金额的30%标准向甲方支付违约金,并赔偿给甲方造成的所有损失,该损失包括但不限于甲方为实施权利救济而发生的人力成本、公证费、律师费等:
 9.2.1:乙方不具备签订本协议的合法经营资质;
 9.2.2:乙方拒绝甲方对乙方服务期间的经营管理活动合法合规的监督;
@@ -350,33 +856,17 @@ class Agreement
 9.3:乙方无正当理由逾期支付各项费用的,每逾期一日,应当向甲方支付应付未付金额千分之二的违约金。
 9.4:如乙方存有违约行为的,甲方有权从其收益中暂扣。');
 
-        $pdf->br(1, 1);
-        $pdf->font($font_size, 'B');
-        $pdf->left('第十条	保密协议', 100);
-        $pdf->br();
-        $pdf->font($font_size, '');
-        $pdf->mleft('10.1:除另有约定外,本合同任何一方未经对方书面确认均应对其获得的对方之业务内容、专利技术、经营模式、后台数据、客户信息、财务状况和其他保密资料予以严格保密,不得以任何形式向任何第三方披露。否则,因此给另一方造成任何损失的,违约方应承担因此给守约方造成的全部损失。保密义务在合同有效期间及终止后始终有效,不因本合同的解除或本合同其他条款整体或部分无效、被撤销而失效。
+        $pdf->content('第十条	保密协议', '10.1:除另有约定外,本合同任何一方未经对方书面确认均应对其获得的对方之业务内容、专利技术、经营模式、后台数据、客户信息、财务状况和其他保密资料予以严格保密,不得以任何形式向任何第三方披露。否则,因此给另一方造成任何损失的,违约方应承担因此给守约方造成的全部损失。保密义务在合同有效期间及终止后始终有效,不因本合同的解除或本合同其他条款整体或部分无效、被撤销而失效。
 10.2:乙方保证,未经甲方的事先书面同意,乙方及乙方工作人员、乙方关联方、外部顾问、会计师事务所及律师不得向其他人员泄露任何甲方/甲方关联方/甲方合作方商业秘密及其他保密信息,商业秘密及其他保密信息包括但不限于:业务数据、客户信息、财务报表、甲方管理制度等。乙方除以下情况外,不可使任何保密信息公开化:乙方在相关案件、诉讼或索赔中应司法行政程序要求而泄露,即便如此,乙方应先通知甲方以使甲方有充足机会采取保护措施。
 10.3:如果一方因盗用另一方的商业秘密或违反本“保密协议”条款约定而导致对方涉诉的,应承担合理的诉讼相关费用并赔偿损失。
 ');
-
-        $pdf->br(1, 1);
-        $pdf->font($font_size, 'B');
-        $pdf->left('第十一条 合同终止和解除', 100);
-        $pdf->br();
-        $pdf->font($font_size, '');
-        $pdf->mleft('11.1:本合同期限届满或本合同约定的其他终止情形发生时,本合同终止。除合同另有约定外,合同履行过程中,一方经书面通知对方且经双方协商一致后,可解除本合同。
+        $pdf->content('第十一条	合同终止和解除', '11.1:本合同期限届满或本合同约定的其他终止情形发生时,本合同终止。除合同另有约定外,合同履行过程中,一方经书面通知对方且经双方协商一致后,可解除本合同。
 11.2:本合同终止或解除后,甲方有权删除平台上已发布的乙方信息(若有),且有权拒绝提供相关信息;
 11.3:本合同终止或解除后,在合同终止前乙方已与用户达成的尚未履行完毕的订单.乙方应按照本本合同及订单的约定继续履行相应义务;
 11.4:本合同终止或解除后,按照相关法律法规,乙方理解并同意甲方保存乙方资质信息、商品信息、交包记录等相关资料。
 11.5:如任何一方出现违约情况,且经守约方书面通知后3日内未能纠正违约行为的,守约方有权决定是否解除本协议,如守约方解除本协议的,则本协议自守约方发出的解除通知送达违约方时终止;如守约方决定继续履行本协议的,则违约方按照本协议约定承担完相应的违约责任后,本协议继续履行。');
 
-        $pdf->br(1, 1);
-        $pdf->font($font_size, 'B');
-        $pdf->left('第十二条 有限责任', 100);
-        $pdf->br();
-        $pdf->font($font_size, '');
-        $pdf->mleft('12.1:甲方无需对平台使用人(包括但不限于乙方、发展商、乙方的客户、有效上线者等)因第三方原因产生的传输、联络迟延、错误和疏漏(包括但不限于用户个人网络不稳定、个人电脑、网站遭遇攻击)而产生的损害承担责任。
+        $pdf->content('第十二条	有限责任', '12.1:甲方无需对平台使用人(包括但不限于乙方、发展商、乙方的客户、有效上线者等)因第三方原因产生的传输、联络迟延、错误和疏漏(包括但不限于用户个人网络不稳定、个人电脑、网站遭遇攻击)而产生的损害承担责任。
 12.2:甲乙双方认可不论在任何情况下,对因网络连接故障、通讯、电力或其他系统故障,罢工、暴乱、火灾、洪水等不可抗力事件,以及战争、政府行为、政府管制政府行政措施、银行限制规定等原因导致的甲方无法提供服务或提供服务迟延的情形,甲方均无需承担责任。
 12.3:使用本公司平台服务下载或者获取任何资料的行为均出于乙方的独立判断,并由乙方自行承担因此产生的风险和责任,但不得侵犯甲方的知识产权。
 12.4:本协议提及的相应规则、规范和注意事项,将通过甲方进行公示,任何未经甲方确认、承认或盖章生效的文件、承诺对甲方无法律约束力。
@@ -384,14 +874,7 @@ class Agreement
 12.5.1:乙方理解,基于市场整体利益考虑及经营需要,甲方可能不定期对产品、服务内容、版面布局、页面设计等有关方面进行调整,如因上述调整而影响乙方信息的发布(包括发布位置和/或发布期间等),乙方将给予充分的谅解,甲方则应该尽可能将上述影响减少到最低程度。
 12.5.2:乙方理解,为了信息推广/广告发布媒体正常运行,甲方需要定期或不定期地进行停机维护,如因此类情况而造成乙方信息推广/广告不能按计划发布,乙方将予以谅解,甲方则有义务尽力避免服务中断或将中断时间限制在最短时间内。
 ');
-
-
-        $pdf->br(1, 1);
-        $pdf->font($font_size, 'B');
-        $pdf->left('第十三条	其他条款', 100);
-        $pdf->br();
-        $pdf->font($font_size, '');
-        $pdf->mleft('13.1:若甲方向乙方发出书面的通知,甲方可不经过乙方同意向其关联公司部分或全部转让本合同项下权利、义务。本合同对双方各自的继受人和允许的受让人有约束力。
+        $pdf->content('第十三条	其他条款', '13.1:若甲方向乙方发出书面的通知,甲方可不经过乙方同意向其关联公司部分或全部转让本合同项下权利、义务。本合同对双方各自的继受人和允许的受让人有约束力。
 13.2:与本合同有关的全部通知,双方可选择采用书面、邮件或平台公告任一方式变更及确认。乙方确认本协议中所列明的联系方式系乙方真实联系方式,协议有效期内,甲方通过本协议联系方式向乙方送达的所有信息都视为已成功送达,送达即产生法律效力。
 13.3:乙方作为甲方的代理商,在任何情况任何场合都不得以任何形式诋毁甲方,包括但不限于用微信、微博、社群、自媒体、百度贴吧、各类视频平台等发布不实或有损于甲方声誉、形象包括甲方董事、股东、管理团队的言论帖子或图片、动画等。
 13.4:作为长期合作及潜在持股的代理商,乙方应积极维护公司的形象和利益,遇到有损于甲方及甲方关联公司的形象、利益的事件应及时阻止、反馈。
@@ -408,36 +891,53 @@ class Agreement
         $pdf->AddPage();
 
         $pdf->br(1, 1);
-        $pdf->font($font_size, 'B');
+        $pdf->font($this->font_size, 'B');
         $pdf->left('【以下为签署页,无正文】', 100);
         $pdf->br();
 
         $pdf->br(1, 1);
-        $pdf->font($font_size, '');
+        $pdf->font($this->font_size, '');
         $pdf->left('甲方(盖章) :                                                乙方(盖章/签字):');
         $pdf->br();
 
         $pdf->br(1, 1);
-        $pdf->font($font_size, '');
-        $sign = '于斌';
+        $pdf->font($this->font_size, '');
+        $sign = '';
         $pdf->left('代表人(签字):' . $sign, 90)->left('代表人(签字):' . $sign, 90);
         $pdf->br();
 
         $pdf->br(1, 1);
-        $pdf->font($font_size, '');
-        $mobile = 15810090845;
-        $pdf->left('代  表  人  电  话:' . $mobile, 90)->left('代  表  人  电  话:' . $mobile, 90);
+        $pdf->font($this->font_size, '');
+        $mobile = '';
+        //$base['agreement_mobile']
+        $pdf->left('代  表  人  电  话:' . '', 90)->left('代  表  人  电  话:' . $mobile, 90);
         $pdf->br();
 
-        $date = date('Y.m.d');
         $pdf->br(1, 1);
-        $pdf->font($font_size, '');
-        $pdf->left('日                      期:'.$date, 90);
-        $pdf->left('日                      期:' . $date, 80);
+        $pdf->font($this->font_size, '');
+        $pdf->left('日                      期:'.$qdate, 90);
+        $pdf->left('日                      期:'.$qdate, 80);
         $pdf->br();
 
-        $pdf->Image('../img/test.png');
+        $pic = Dever::pic($base['agreement_sign']);
+
+        $cx = $pdf->GetX();
+        $cy = $pdf->GetY();
+
+        $x = $cx + 55;
+        $y = $cy - 55;
+
+        $pdf->Image($pic, $x, $y, 30, 30);
+
+        $x += 100;
+
+        if ($info['sign']) {
+        	$info['sign'] = Dever::pic($info['sign']);
+        	if (strstr($info['sign'], 'http')) {
+        		$pdf->Image($pic, $x, $y, 30, 30);
+        	}
+        }
 
-        $pdf->out('库存清单');
+        $pdf->out($name);
     }
 }

+ 1 - 1
service/agent/lib/Core.php

@@ -14,7 +14,7 @@ class Core
     {
         $this->uid = Dever::load('passport/user')->check(false);
         if ($this->uid <= 0) {
-            $this->uid = 1;
+            $this->uid = 12;
         }
         $this->checkLogin();
         if ($this->uid) {

+ 7 - 0
service/agent/lib/Manage.php

@@ -180,6 +180,8 @@ class Manage
                     $this->setGoods($order);
                 } elseif ($type == 3) {
                     $this->setCash($order);
+                } elseif ($type == 5) {
+                    $this->setAgreement($order);
                 }
             }
             return 'reload';
@@ -255,6 +257,11 @@ class Manage
         }
     }
 
+    private function setAgreement($order)
+    {
+        Dever::load('agent/lib/agreement')->up($order);
+    }
+
     public function sellOrderUpdate($id, $name, $data)
     {
         Dever::config('base')->hook = true;

+ 6 - 2
service/agent/lib/Member.php

@@ -272,30 +272,34 @@ class Member
         $button[2]['btn'][] = array
         (
             'type' => 'link',
-            'link' => Dever::url('project/database/list?project=agent&table=dh_order&search_option_mid='.$member['id'].'', 'manage'),
+            'link' => Dever::url('project/database/list?project=agent&table=member_agreement&search_option_mid='.$member['id'].'', 'manage'),
             'name' => '代理商合同',
         );
 
         $button[2]['btn'][] = array
         (
             'type' => 'link',
-            'link' => Dever::url('lib/member.setStatus?id=' . $member['id'] . '&value=5', 'agent'),
+            'link' => Dever::url('project/database/list?project=agent&table=member&search_option_parent_mid='.$member['id'].'', 'manage'),
             'name' => '查看直推团队',
         );
 
+        /*
         $button[2]['btn'][] = array
         (
             'type' => 'edit',
             'link' => Dever::url('lib/member.setStatus?id=' . $member['id'] . '&value=5', 'agent'),
             'name' => '查看邀请关系',
         );
+        */
 
+        /*
         $button[2]['btn'][] = array
         (
             'type' => 'edit',
             'link' => Dever::url('lib/member.setStatus?id=' . $member['id'] . '&value=5', 'agent'),
             'name' => '设置直推上级',
         );
+        */
 
         $head_btn[] = array
         (

+ 46 - 1
service/agent/lib/Order.php

@@ -294,11 +294,12 @@ class Order
         if (is_int($data['price'])) {
             $data['price_str'] .= '整';
         }
-
+        $data['order_type'] = 1;
         if ($member) {
             $area = Dever::db('agent/member_area')->getOne(array('mid' => $member['id'], 'type' => 1));
             if ($area && $area['price'] > 0 && $data['price'] > $area['price']) {
                 $data['price'] -= $area['price'];
+                $data['order_type'] = 2;
             } else {
                 Dever::alert('代理区域无法升级');
             }
@@ -707,6 +708,50 @@ class Order
                     'content' => $body,
                 );
             }
+
+            $body = array();
+            $agreement_type = Dever::db('setting/agreement')->config['config_type'];
+            if (isset($process[3]['type']) && is_array($process[3]['type']) && in_array(5, $process[3]['type'])) {
+                $agreement_status = 1;
+                $agreement_title = '(已生成合同)';
+                $agreement_button = array();
+
+                $agreement = Dever::db('agent/member_agreement')->getData(array('order_id' => $info['id']));
+                foreach ($agreement as $k => $v) {
+                    $agreement_info = Dever::db('setting/agreement')->find($v['agreement_id']);
+
+                    $body[] = array($agreement_type[$agreement_info['type']], Dever::load('agent/lib/agreement')->name($agreement_info, $v, $role, 2));
+                }
+
+            } else {
+                $agreement_status = 2;
+                $agreement_title = '(未生成合同)';
+                
+                $agreement_button[] = array(
+                    'type' => 'action',
+                    'link' => Dever::url('lib/manage.set_commit?json=1&type=5&order_id='.$info['id'], 'agent'),
+                    'name' => '生成代理合同'
+                );
+
+                $agreement = Dever::db('setting/agreement')->getData();
+                $body[] = array($agreement_type[$agreement[1]['type']], Dever::load('agent/lib/agreement')->name($agreement[1], $info, $role, 1));
+                if ($info['order_type'] == 2) {
+                    # 升级的话,增加解除合同
+                    $body[] = array($agreement_type[$agreement[2]['type']], Dever::load('agent/lib/agreement')->name($agreement[2], $info, $role, 1));
+                } else {
+                    $body[] = array($agreement_type[$agreement[4]['type']], Dever::load('agent/lib/agreement')->name($agreement[4], $info, $role, 1));
+                }
+            }
+
+            $result['代理合同' . $agreement_title] = array
+            (
+                'type' => 'info',
+                'head' => array('name' => '&nbsp;', 'btn' => $agreement_button),
+                'content' => array
+                (
+                    $body,
+                )
+            );
         }
         
         

+ 2 - 4
service/agent/src/Area.php

@@ -42,7 +42,7 @@ class Area
                         $county_level = $county['level'];
                     }
                 } elseif ($role['area'] == 3 && isset($temp[3])) {
-                    # 如果是区县,只能升级为更高等级的城市和区县
+                    # 如果是街道,只能升级为更高等级的城市和区县
                     $town = Dever::db('area/town')->find($temp[3]);
                     if ($town) {
                         $town_level = $town['type'];
@@ -122,9 +122,7 @@ class Area
         if ($level_search || $level_num > 1) {
             array_unshift($data, $default);
         }
-
-
-
+        
         $result['level_total'] = $level_total;
         $result['list'] = $data;
         return $result;

+ 20 - 0
service/agent/src/My.php

@@ -392,4 +392,24 @@ class My extends Core
 
         return Dever::db('agent/member')->find(array('id' => $this->id, 'clear' => true));
     }
+
+    # 获取我的合同
+    public function getAgreement()
+    {
+        $where['mid'] = $this->uid;
+        $this->data['list'] = Dever::db('agent/member_agreement')->getAll($where);
+
+        if ($this->data['list']) {
+            $status = Dever::db('agent/member_agreement')->config['status'];
+            foreach ($this->data['list'] as $k => $v) {
+                $this->data['list'][$k]['status_name'] = $status[$v['status']];
+                $this->data['list'][$k]['qdate_string'] = date('Y.m.d', $v['qdate']);
+                $role = Dever::db('setting/role')->find($v['role']);
+                $name = Dever::load('agent/lib/agreement')->name($v['agreement_id'], $v, $role, 2, 2);
+                $this->data['list'][$k]['link'] = $name[1];
+            }
+        }
+
+        return $this->data;
+    }
 }

+ 38 - 32
service/setting/database/agreement.php

@@ -9,8 +9,10 @@ $role = function()
 $type = array
 (
     1 => '代理商合同',
-    2 => '代理升级变更合同',
-    3 => '软件服务合同',
+    2 => '代理商解除合同',
+    //3 => '软件服务合同',
+    4 => '市场管理培训师承诺书',
+    5 => '5000合同',
 );
 
 return array
@@ -20,6 +22,7 @@ return array
     # 显示给用户看的名称
     'lang' => '合同模板',
     'order' => 3,
+    'config_type' => $type,
     # 数据结构
     'struct' => array
     (
@@ -43,30 +46,17 @@ return array
             'default'   => '1',
             'desc'      => '合同类型',
             'match'     => 'is_numeric',
-            'update'    => 'radio',
+            //'update'    => 'radio',
             'option'    => $type,
             'search'    => 'select',
             'list'      => true,
-            'control'   => 'type',
-        ),
-
-        'role_id'      => array
-        (
-            'type'      => 'int-11',
-            'name'      => '代理商角色',
-            'default'   => '',
-            'desc'      => '代理商角色',
-            'match'     => 'is_numeric',
-            'update'    => 'hidden',
-            'search'    => 'hidden',
-            'list'      => 'Dever::load("setting/role-one#name", {role_id})',
-            'show'      => 'type=1',
+            //'control'   => 'type',
         ),
 
         'name'      => array
         (
             'type'      => 'varchar-500',
-            'name'      => '合同名称-变量说明:{name}是用户姓名,{role}代理商名称,{area}城市地区',
+            'name'      => '合同名称-变量说明:{name}是代理商姓名,{role}代理商角色,{area}签署地区,{date}签署时间',
             'default'   => '',
             'desc'      => '合同名称',
             'match'     => 'is_string',
@@ -75,16 +65,6 @@ return array
             'list'      => true,
         ),
 
-        'content'      => array
-        (
-            'type'      => 'text-255',
-            'name'      => '合同内容-变量说明:{name}是用户姓名,{role}代理商名称,{area}城市地区',
-            'default'   => '',
-            'desc'      => '合同内容',
-            'match'     => 'is_string',
-            'update'    => 'textarea',
-        ),
-
         'state'     => array
         (
             'type'      => 'tinyint-1',
@@ -101,19 +81,45 @@ return array
             'match'     => array('is_numeric', time()),
             'desc'      => '',
             # 只有insert时才生效
-            //'insert'    => true,
-            'search'    => 'date',
+            'insert'    => true,
+            //'search'    => 'date',
             'list'      => 'date("Y-m-d H:i:s", {cdate})',
         ),
     ),
 
+    'default' => array
+    (
+        'col' => 'id,name,type,state,cdate',
+        'value' => array
+        (
+            '1,"{name}{role}{area}代理商合作协议{date}.pdf", 1, 1,' . DEVER_TIME,
+
+            '2,"代理商合同解除协议.pdf", 2, 1,' . DEVER_TIME,
+
+            '3,"市场管理培训师承诺书.pdf", 4, 1,' . DEVER_TIME,
+
+            '4,"5000合同.pdf", 5, 1,' . DEVER_TIME,
+        ),
+    ),
+
     'manage' => array
     (
-        
+        'insert' => false,
+        'delete' => false,
     ),
 
     'request' => array
     (
-        
+        'getData' => array
+        (
+            # 匹配的正则或函数 选填项
+            'option' => array
+            (
+                'state' => 1,
+            ),
+            'order' => array('id' => 'desc'),
+            'type' => 'all',
+            'col' => '*|type',
+        ),
     ),
 );

+ 22 - 0
service/setting/database/base.php

@@ -55,6 +55,28 @@ return array
             'update'    => 'text',
         ),
 
+        'agreement_sign'		=> array
+		(
+			'type' 		=> 'varchar-150',
+			'name' 		=> '合同盖章图片',
+			'default' 	=> '',
+			'desc' 		=> '合同盖章图片',
+			'match' 	=> 'option',
+			'update'	=> 'image',
+			'key' 		=> '1',
+			'place'		=> '150*150',
+		),
+
+		'agreement_mobile'      => array
+        (
+            'type'      => 'varchar-100',
+            'name'      => '合同代表人电话',
+            'default'   => '',
+            'desc'      => '合同代表人电话',
+            'match'     => 'option',
+            'update'    => 'text',
+        ),
+
 		'desc'      => array
         (
             'type'      => 'text-255',