dever 3 years ago
parent
commit
6666f8b6fd

+ 25 - 0
config/base.php

@@ -44,6 +44,31 @@ $config['base'] = array
     # 站点使用邮箱还是手机作为主账号
     'account' => 'mobile',//SMS_228142347
 
+    # 发送邮件的配置
+    'email' => array
+    (
+        'pop' => 'pop3.sina.net',
+        'smtp' => 'smtp.sina.net',
+        'imap' => 'imap.sina.net',
+        'username' => '',
+        'password' => '',
+        'from' => array('test@dever.cc', 'dever'),
+        'renzheng' => array
+        (
+            'title' => '厨人易料代理商邮箱认证',
+            'link' => 'agent/lib/email.act',
+            'content' => '尊敬的厨人易料用户:
+
+您好!
+
+请点击下方链接进行邮箱认证
+
+【{link}】
+
+如果上面的链接无法点击,您也可以复制链接到您的浏览器内打开,完成邮箱认证(链接有效期一天)。',
+        ),
+    ),
+
     # 直接使用sms组件,这部分配置废弃
     
     'mobileCode' => array

+ 4 - 0
package/email/index.php

@@ -0,0 +1,4 @@
+<?php 
+define('DEVER_PACKAGE', 'email');
+define('DEVER_APP_SETUP', dirname(__FILE__) . DIRECTORY_SEPARATOR);
+include(dirname(__FILE__) . DIRECTORY_SEPARATOR . '../boot.php');

+ 32 - 0
service/agent/database/member.php

@@ -117,6 +117,37 @@ return array
             'list'      => true,
         ),
 
+        'email'     => array
+        (
+            'type'      => 'varchar-150',
+            'name'      => '邮箱',
+            'default'   => '',
+            'desc'      => '请输入邮箱',
+            'match'     => 'option',
+            'update'    => 'text',
+        ),
+
+        'username'      => array
+        (
+            'type'      => 'varchar-100',
+            'name'      => '昵称',
+            'default'   => '',
+            'desc'      => '昵称',
+            'match'     => 'is_string',
+            'update'    => 'text',
+        ),
+
+        'birthday'      => array
+        (
+            'type'      => 'int-11',
+            'name'      => '生日',
+            'default'   => '',
+            'match'     => 'option',
+            'desc'      => '生日',
+            'update'    => 'time',
+            'callback'  => 'maketime',
+        ),
+
         'password'		=> array
 		(
 			'type' 		=> 'varchar-50',
@@ -203,6 +234,7 @@ return array
             'desc'      => '所属门店',
             'match'     => 'is_numeric',
             'update'    => 'select',
+            'update_search' => 'shop/lib/manage.search',
             'list'      => '{shop_id} > 0 ? Dever::load("shop/info-one#name", {shop_id}) : "无"',
         ),
 

+ 85 - 0
service/agent/lib/Email.php

@@ -0,0 +1,85 @@
+<?php
+
+namespace Agent\Lib;
+
+use Dever;
+
+class Email
+{
+	# 修改邮箱
+    public function act_api()
+    {
+        $signature = Dever::input('signature');
+        if (!$signature) {
+            Dever::alert('您的验证信息已失效,请重新发送验证邮件');
+        }
+
+        $signature = Dever::decode($signature);
+        $temp = explode('|||', $signature);
+        $code = $temp[2];
+
+        $state = Dever::load('passport/reg')->code($code);
+        if (!$state) {
+            Dever::alert('您的验证信息已失效,请重新发送验证邮件');
+        }
+
+        $check = Dever::db('agent/member')->find(array('email' => $temp[1]));
+        if ($check) {
+            Dever::alert('该邮箱已被认证');
+        }
+
+        $where['where_id'] = $temp[0];
+        $where['email'] = $temp[1];
+
+        Dever::db('agent/member')->update($where);
+
+        return '邮箱认证成功';
+    }
+
+	public function renzheng()
+	{
+		$email = Dever::input('email');
+		$code = Dever::input('code');
+		$mid = Dever::input('mid');
+		$email = base64_decode($email);
+		$config = Dever::config('base', 'project')->email['renzheng'];
+		$title = $config['title'];
+		$content = $config['content'];
+
+		$signature = Dever::encode($mid . '|||' . $email . '|||' . $code);
+
+		$link = Dever::url($config['link'] . '?signature=' . $signature);
+		$content = str_replace('{link}', $link, $content);
+		$this->send($email, $title, $content);
+	}
+
+	public function send($email, $title, $content)
+    {
+        $config = Dever::config('base', 'project')->email;
+
+        Dever::apply('src/PHPMailer', 'email');
+        Dever::apply('src/Exception', 'email');
+        Dever::apply('src/SMTP', 'email');
+        $mail = new \PHPMailer\PHPMailer\PHPMailer();
+
+        $mail->isSMTP();
+        //$mail->SMTPDebug = 2;
+        $mail->CharSet = 'UTF-8';
+        $mail->Host = $config['smtp'];
+        $mail->Port = 465;
+        $mail->SMTPSecure = 'ssl';
+        $mail->SMTPAuth = true;
+        $mail->Username = $config['username'];
+        $mail->Password = $config['password'];
+        $mail->setFrom($config['from'][0], $config['from'][1]);
+        $mail->addAddress($user['email'], $user['username']);
+        $mail->Subject = "=?utf-8?B?" . base64_encode($title) . "?=";
+        $mail->Body = $content;
+        //$mail->addAttachment($file);
+        if (!$mail->send()) {
+            Dever::alert("Mailer Error: " . $mail->ErrorInfo);
+        } else {
+            return 'ok';
+        }
+    }
+}

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

@@ -8,7 +8,7 @@ class Member
 {
     public function getInfo($member)
     {
-        $member['area'] = Dever::load("area/api.string", $member['area'], '/');
+        $member['area_string'] = Dever::load("area/api.string", $member['area'], '/');
         $member['role'] = Dever::db('setting/role')->find($member['role']);
         $member['level'] = Dever::db('setting/level')->find($member['level_id']);
 
@@ -171,7 +171,7 @@ class Member
         $button[] = array
         (
             'type' => 'edit',
-            'link' => Dever::url('project/database/update?project=agent&table=member&where_id='.$member['id'].'&status=1&col=name,mobile,area,role,level_id', 'manage'),
+            'link' => Dever::url('project/database/update?project=agent&table=member&where_id='.$member['id'].'&status=1&col=name,mobile,password,email,shop_id,area,role,level_id', 'manage'),
             'name' => '修改基础资料',
         );
         $button[] = array
@@ -180,12 +180,15 @@ class Member
             'link' => Dever::url('project/database/update?project=agent&table=member&where_id='.$member['id'].'&status=1&col=type,idcard,idcard_front,idcard_back,company_name,company_pic,company_number', 'manage'),
             'name' => '修改认证资料',
         );
+
+        /*
         $button[] = array
         (
             'type' => 'edit',
             'link' => Dever::url('project/database/update?project=agent&table=member&where_id='.$member['id'].'&status=1&col=shop_id', 'manage'),
             'name' => '修改归属门店',
         );
+        */
         $url = '';
         $button[] = array
         (

+ 133 - 0
service/agent/src/Area.php

@@ -0,0 +1,133 @@
+<?php
+
+namespace Agent\Src;
+
+use Dever;
+
+class Area
+{
+    private $default = array
+    (
+        'value' => -1,
+        'name' => '不限',
+    );
+
+    private $search_default = array
+    (
+        'value' => -1,
+        'name' => '地区选择',
+    );
+
+	/**
+     * 获取地区数据
+     *
+     * @return mixed
+     */
+    public function get()
+    {
+        $mid = Dever::load('passport/user')->check(false);
+        $mid = 1000000;
+        if ($mid && $mid > 0) {
+            $member = Dever::db('agent/member')->find($mid);
+            $role = Dever::db('setting/role')->find($member['role']);
+            if ($role['type'] == 2) {
+                $temp = explode(',', $member['area']);
+                $city = Dever::db('area/city')->find($temp[1]);
+                if ($city) {
+                    $city_level = $city['level_id'];
+                }
+                if ($role['area'] == 2 && isset($temp[2])) {
+                    # 如果是区县,只能升级为更高等级的城市和区县
+                    $county = Dever::db('area/county')->find($temp[2]);
+                    if ($county) {
+                        $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'];
+                    }
+                }
+            }
+        }
+
+        # 联动总数,默认到县区
+        $level_total = Dever::input('level_total', 3);
+
+        # 当前联动级别
+        $level_num = Dever::input('level_num');
+
+        # 一般为id
+        $level_id = Dever::input('level_id');
+
+        # 是否是搜索列表页
+        $level_search = Dever::input('level_search');
+        if ($level_search) {
+            $default = $this->search_default;
+            if ($level_num == 1) {
+                $default['name'] = '省份选择';
+            } elseif ($level_num == 2) {
+                $default['name'] = '城市选择';
+            } elseif ($level_num == 3) {
+                $default['name'] = '县区选择';
+            } elseif ($level_num == 4) {
+                $default['name'] = '街道选择';
+            } else {
+                $default['name'] = '社区选择';
+            }
+        } else {
+            $default = $this->default;
+        }
+
+        # 四级联动
+        if ($level_num == 1) {
+            $data = Dever::db('area/province')->getAll();
+        } elseif ($level_num == 2) {
+            $where = array('province_id' => $level_id);
+            if (isset($city_level)) {
+                $where['level_id'] = $city_level;
+            }
+            $data = Dever::db('area/city')->getAll($where);
+        } elseif ($level_num == 3) {
+            $where = array('city_id' => $level_id);
+            if (isset($county_level)) {
+                $where['level'] = $county_level;
+            }
+            $data = Dever::db('area/county')->getAll($where);
+            /*
+            if (isset($town_level)) {
+                foreach ($data as $k => $v) {
+                    $where = array('county_id' => $v['value']);
+                    $where['type'] = $town_level;
+                    $town = Dever::db('area/town')->getTotal($where);
+                    if ($town <= 0) {
+                        unset($data[$k]);
+                    }
+                }
+            }*/
+        } elseif ($level_num == 4) {
+            $where = array('county_id' => $level_id);
+            if (isset($town_level)) {
+                $where['type'] = $town_level;
+            }
+            $data = Dever::db('area/town')->getAll($where);
+        } else {
+            $data = Dever::db('area/village')->getAll(array('town_id' => $level_id));
+        }
+
+        if (!$data) {
+            Dever::alert('error');
+        }
+
+        if ($level_search || $level_num > 1) {
+            array_unshift($data, $default);
+        }
+
+
+
+        $result['level_total'] = $level_total;
+        $result['list'] = $data;
+        return $result;
+    }
+}

+ 117 - 2
service/agent/src/My.php

@@ -109,6 +109,13 @@ class My extends Core
         if ($this->data['user']['role']) {
             if ($this->data['user']['role']['levelup'] == 1) {
                 $this->data['button']['up'] = 1;
+                if ($this->data['user']['role']['type'] == 2 && $this->data['user']['role']['area'] == 1) {
+                    $temp = explode(',', $this->data['user']['area']);
+                    $city = Dever::db('area/city')->find($temp[1]);
+                    if ($city && $city['level'] == 1) {
+                        $this->data['button']['up'] = 2;
+                    }
+                }
             }
             if ($this->data['user']['role']['isbuy'] == 1) {
                 $this->data['button']['buy'] = 2;//不允许购买新区域
@@ -121,8 +128,45 @@ class My extends Core
     # 账号与代理区域
     public function getUpInfo()
     {
-        $this->data['user'] = $this->getInfo();
-        $this->data['role'] = Dever::db('setting/role')->getInfo(array('isbuy' => 1, 'type' => 2));
+        $this->data['user'] = Dever::load('agent/lib/member')->getInfo($this->user);
+
+        if ($this->data['user']['role']['type'] == 2) {
+            $temp = explode(',', $this->data['user']['area']);
+
+            # 如果当前是城市,只能升级为更高级的城市
+            if ($this->data['user']['role']['area'] == 1) {
+                $city = Dever::db('area/city')->find($temp[1]);
+                if ($city && $city['level_id'] == 1) {
+                    $this->data['role'] = array();
+                } else {
+                    $this->data['role'] = Dever::db('setting/role')->getInfo(array('isbuy' => 1, 'type' => 2, 'area' => 1));
+                }
+            }
+            # 如果当前是区县,可以升级为城市和更高级的区县
+            if ($this->data['user']['role']['area'] == 2) {
+                $area = '1,2';
+                $county = Dever::db('area/county')->find($temp[2]);
+                if ($county && $county['level'] == 1) {
+                    $area = '1';
+                }
+                $this->data['role'] = Dever::db('setting/role')->getInfo(array('isbuy' => 1, 'type' => 2, 'area' => $area));
+            }
+            # 如果当前是街道,都可以升级
+            if ($this->data['user']['role']['area'] == 3) {
+                $area = '1,2,3';
+                $town = Dever::db('area/town')->find($temp[3]);
+                if ($town && $town['type'] == 3) {
+                    $area = '1,2';
+                }
+
+                $this->data['role'] = Dever::db('setting/role')->getInfo(array('isbuy' => 1, 'type' => 2, 'area' => $area));
+            }
+        } else {
+            $this->data['role'] = Dever::db('setting/role')->getInfo(array('isbuy' => 1, 'type' => 2));
+        }
+
+        $this->data['level_total'] = count($this->data['role']) + 1;
+
         $this->data['config'] = Dever::db('setting/base')->find();
 
         return $this->data;
@@ -336,4 +380,75 @@ class My extends Core
 
         return $this->data;
     }
+
+    # 修改密码
+    public function setPass()
+    {
+        $pass = Dever::input('pass');
+        if (!$pass) {
+            Dever::alert('请输入密码');
+        }
+
+        $where['where_id'] = $this->uid;
+        $where['password'] = sha1($pass);
+
+        Dever::db('agent/member')->update($where);
+
+        return Dever::db('agent/member')->find(array('id' => $this->uid, 'clear' => true));
+    }
+
+    # 修改资料
+    public function setInfo()
+    {
+        $where = array();
+        $name = Dever::input('name');
+        if ($name) {
+            $where['name'] = $name;
+        }
+        $avatar = Dever::input('avatar');
+        if ($avatar) {
+            $where['avatar'] = $avatar;
+        }
+        $username = Dever::input('username');
+        if ($username) {
+            $where['username'] = $username;
+        }
+        $birthday = Dever::input('birthday');
+        if ($birthday) {
+            $where['birthday'] = Dever::maketime($birthday);
+        }
+
+        if ($where) {
+            $where['where_id'] = $this->uid;
+            Dever::db('agent/member')->update($where);
+        }
+
+        return Dever::db('agent/member')->find(array('id' => $this->uid, 'clear' => true));
+    }
+
+    # 发送邮件
+    public function sendEmail()
+    {
+        $email = Dever::input('email');
+        if ($email) {
+            if (!preg_match(Dever::rule('email'), $email)) {
+                Dever::alert('请输入正确的邮箱');
+            }
+
+            $check = Dever::db('agent/member')->find(array('email' => $email));
+            if ($check) {
+                Dever::alert('该邮箱已被认证,请更换');
+            }
+
+            $code = Dever::load('passport/reg')->code(false, false);
+
+            $email = base64_encode($email);
+            //return Dever::load('agent/lib/email')->renzheng($this->uid, $email, $code);
+            Dever::daemon('lib/email.renzheng?mid='.$this->uid.'&email=' . $email . '&code=' . $code, 'agent');
+
+            return '邮件已经发送成功!请到您的邮箱里查看。';
+        } else {
+            Dever::alert('请输入邮箱');
+        }
+    }
 }

+ 1 - 0
service/setting/database/role.php

@@ -227,6 +227,7 @@ return array
                 'type' => array('yes', 'in'),
                 'levelup' => 'yes',
                 'isbuy' => 'yes',
+                'area' => array('yes', 'in'),
                 'state' => 1,
             ),
             'type' => 'all',