first commit
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
======================
|
||||
*模块数据获取公共文件
|
||||
======================
|
||||
*/
|
||||
use think\facade\Db;
|
||||
|
||||
//客户查看编辑数据权限判断
|
||||
function customer_auth($uid,$customer_id)
|
||||
{
|
||||
$customer = Db::name('Customer')->where(['id' => $customer_id])->find();
|
||||
if($customer['belong_uid']==0){
|
||||
return $customer;
|
||||
}
|
||||
//是否是客户管理员
|
||||
$auth = isAuth($uid,'customer_admin','conf_1');
|
||||
$role= 0;
|
||||
if($auth==1){
|
||||
//可见部门数据
|
||||
$dids = get_role_departments($uid);
|
||||
if(in_array($customer['belong_did'],$dids)){
|
||||
$role= 1;
|
||||
}
|
||||
}
|
||||
else if($auth==0){
|
||||
$auth_array=[];
|
||||
if(!empty($customer['share_ids'])){
|
||||
$share_ids = explode(",",$customer['share_ids']);
|
||||
$auth_array = array_merge($auth_array,$share_ids);
|
||||
}
|
||||
array_push($auth_array,$customer['belong_uid']);
|
||||
//部门负责人
|
||||
$dids = get_leader_departments($uid);
|
||||
if(in_array($uid,$auth_array) || in_array($customer['belong_did'],$dids)){
|
||||
$role= 1;
|
||||
}
|
||||
}
|
||||
if($role == 0){
|
||||
throw new \think\exception\HttpException(405, '无权限访问');
|
||||
}
|
||||
else{
|
||||
return $customer;
|
||||
}
|
||||
}
|
||||
|
||||
//读取联系人
|
||||
function customer_contact($cid)
|
||||
{
|
||||
$contact = Db::name('CustomerContact')->where(['delete_time' => 0,'cid'=>$cid])->select()->toArray();
|
||||
return $contact;
|
||||
}
|
||||
|
||||
//读取销售机会
|
||||
function customer_chance($cid)
|
||||
{
|
||||
$chance = Db::name('CustomerChance')->where(['delete_time' => 0,'cid'=>$cid])->select()->toArray();
|
||||
return $chance;
|
||||
}
|
||||
@@ -0,0 +1,251 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
declare (strict_types = 1);
|
||||
namespace app\customer\controller;
|
||||
|
||||
use app\api\BaseController;
|
||||
use app\customer\model\Customer;
|
||||
use app\customer\model\CustomerTrace;
|
||||
use app\customer\model\CustomerContact;
|
||||
use app\customer\model\CustomerChance;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Api extends BaseController
|
||||
{
|
||||
//获取客户列表
|
||||
public function get_customer()
|
||||
{
|
||||
$param = get_params();
|
||||
$uid = $this->uid;
|
||||
$where = array();
|
||||
$whereOr = array();
|
||||
if (!empty($param['keywords'])) {
|
||||
$where[] = ['id|name', 'like', '%' . $param['keywords'] . '%'];
|
||||
}
|
||||
$where[]=['delete_time','=',0];
|
||||
$where[]=['discard_time','=',0];
|
||||
|
||||
if (!empty($param['uid'])) {
|
||||
$where[] = ['belong_uid', '=', $param['uid']];
|
||||
}
|
||||
else{
|
||||
//是否是客户管理员
|
||||
$auth = isAuth($uid,'customer_admin','conf_1');
|
||||
if($auth == 0){
|
||||
$whereOr[] = ['belong_uid','=',$uid];
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',share_ids)")];
|
||||
$dids_a = get_leader_departments($uid);
|
||||
$dids_b = get_role_departments($uid);
|
||||
$dids = array_merge($dids_a, $dids_b);
|
||||
if(!empty($dids)){
|
||||
$whereOr[] = ['belong_did','in',$dids];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$model = new Customer();
|
||||
$list = $model->datalist($param,$where,$whereOr);
|
||||
table_assign(0, '', $list);
|
||||
}
|
||||
//分配客户
|
||||
public function distribute()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$params = get_params();
|
||||
//是否是客户管理员
|
||||
$auth = isAuth($this->uid,'customer_admin','conf_1');
|
||||
if($auth==0){
|
||||
return to_assign(1, "只有客户管理员才有权限操作");
|
||||
}
|
||||
$data['id'] = $params['id'];
|
||||
$data['belong_uid'] = $params['uid'];
|
||||
$data['belong_did'] = $params['did'];
|
||||
$data['distribute_time'] = time();
|
||||
if (Db::name('Customer')->update($data) !== false) {
|
||||
add_log('allot', $data['id'],[],'客户');
|
||||
return to_assign(0, "操作成功");
|
||||
} else {
|
||||
return to_assign(1, "操作失败");
|
||||
}
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
//锁住、解锁客户
|
||||
public function customer_lock()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$params = get_params();
|
||||
//是否是客户管理员
|
||||
$auth = isAuth($this->uid,'customer_admin','conf_1');
|
||||
if($auth==0){
|
||||
return to_assign(1, "只有客户管理员才有权限操作");
|
||||
}
|
||||
$data['id'] = $params['id'];
|
||||
$data['is_lock'] = $params['is_lock'];
|
||||
if (Db::name('Customer')->update($data) !== false) {
|
||||
if($data['is_lock']==1){
|
||||
add_log('lock', $data['id'],[],'客户');
|
||||
}
|
||||
else{
|
||||
add_log('unlock', $data['id'],[],'客户');
|
||||
}
|
||||
return to_assign(0, "操作成功");
|
||||
} else {
|
||||
return to_assign(1, "操作失败");
|
||||
}
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//彻底删除客户
|
||||
public function delete()
|
||||
{
|
||||
if (request()->isDelete()) {
|
||||
$params = get_params();
|
||||
//是否是客户管理员
|
||||
$auth = isAuth($this->uid,'customer_admin','conf_1');
|
||||
if($auth==0){
|
||||
return to_assign(1, "只有客户管理员才有权限操作");
|
||||
}
|
||||
$data['id'] = $params['id'];
|
||||
$data['delete_time'] = -1;
|
||||
if (Db::name('Customer')->update($data) !== false) {
|
||||
//删除客户联系人
|
||||
Db::name('CustomerContact')->where(['cid' => $params['id']])->update(['delete_time'=>time()]);
|
||||
//删除客户机会
|
||||
Db::name('CustomerChance')->where(['cid' => $params['id']])->update(['delete_time'=>time()]);
|
||||
add_log('delete', $params['id']);
|
||||
return to_assign();
|
||||
} else {
|
||||
return to_assign(1, "操作失败");
|
||||
}
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
//跟进记录列表
|
||||
public function get_trace()
|
||||
{
|
||||
$param = get_params();
|
||||
$where = array();
|
||||
$where[] = ['a.delete_time', '=', 0];
|
||||
$where[] = ['a.cid', '=', $param['cid']];
|
||||
$model = new CustomerTrace();
|
||||
$list = $model->datalist($param,$where);
|
||||
return table_assign(0, '', $list);
|
||||
}
|
||||
|
||||
//销售机会列表
|
||||
public function get_chance()
|
||||
{
|
||||
$param = get_params();
|
||||
$where = array();
|
||||
$where[] = ['a.delete_time', '=', 0];
|
||||
$where[] = ['a.cid', '=', $param['cid']];
|
||||
if (!empty($param['keywords'])) {
|
||||
$where[] = ['a.title|a.content', 'like', '%' . $param['keywords'] . '%'];
|
||||
}
|
||||
$model = new CustomerChance();
|
||||
$list = $model->datalist($param,$where);
|
||||
return table_assign(0, '', $list);
|
||||
}
|
||||
|
||||
//获取联系人数据
|
||||
public function get_contact()
|
||||
{
|
||||
$param = get_params();
|
||||
$where = array();
|
||||
$where[] = ['delete_time', '=', 0];
|
||||
$where[] = ['cid', '=', $param['cid']];
|
||||
$model = new CustomerContact();
|
||||
$list = $model->datalist($param,$where);
|
||||
return table_assign(0, '', $list);
|
||||
}
|
||||
|
||||
//设置联系人
|
||||
public function set_contact()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$detail= Db::name('CustomerContact')->where(['id' => $param['id']])->find();
|
||||
CustomerContact::where(['cid' => $detail['cid']])->update(['is_default'=>0]);
|
||||
$res = CustomerContact::where(['id' => $param['id']])->update(['is_default'=>1]);
|
||||
if ($res) {
|
||||
add_log('edit', $param['id'], $param,'客户联系人');
|
||||
return to_assign();
|
||||
} else {
|
||||
return to_assign(1, '操作失败');
|
||||
}
|
||||
} else {
|
||||
return to_assign(1, '参数错误');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//添加附件
|
||||
public function add_file()
|
||||
{
|
||||
$param = get_params();
|
||||
$param['create_time'] = time();
|
||||
$param['admin_id'] = $this->uid;
|
||||
$fid = Db::name('CustomerFile')->strict(false)->field(true)->insertGetId($param);
|
||||
if ($fid) {
|
||||
return to_assign(0, '上传成功', $fid);
|
||||
}
|
||||
}
|
||||
|
||||
//删除附件
|
||||
public function delete_file()
|
||||
{
|
||||
if (request()->isDelete()) {
|
||||
$id = get_params("id");
|
||||
$data['id'] = $id;
|
||||
$data['delete_time'] = time();
|
||||
if (Db::name('CustomerFile')->update($data) !== false) {
|
||||
$detail = Db::name('CustomerFile')->where('id', $id)->find();
|
||||
$file_name = Db::name('File')->where('id', $detail['file_id'])->value('name');
|
||||
return to_assign(0, "删除成功");
|
||||
} else {
|
||||
return to_assign(1, "删除失败");
|
||||
}
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
//获取客户等级
|
||||
public function get_customer_grade()
|
||||
{
|
||||
$list = get_base_data('customer_grade');
|
||||
return to_assign(0, '', $list);
|
||||
}
|
||||
//获取客户状态
|
||||
public function get_customer_status()
|
||||
{
|
||||
$list = get_base_type_data('basic_customer',1);
|
||||
return to_assign(0, '', $list);
|
||||
}
|
||||
//获取客户意向
|
||||
public function get_intent_status()
|
||||
{
|
||||
$list = get_base_type_data('basic_customer',2);
|
||||
return to_assign(0, '', $list);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\customer\controller;
|
||||
|
||||
use app\base\BaseController;
|
||||
use app\customer\validate\BasicCustomerCheck;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Basic extends BaseController
|
||||
{
|
||||
public function datalist()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$where=[];
|
||||
if (!empty($param['types'])) {
|
||||
$where[] = ['types', '=', $param['types']];
|
||||
}
|
||||
$list = Db::name('BasicCustomer')->where($where)->order('create_time asc')->select();
|
||||
return to_assign(0, '', $list);
|
||||
} else {
|
||||
return view();
|
||||
}
|
||||
}
|
||||
//新建编辑
|
||||
public function add()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
try {
|
||||
validate(BasicCustomerCheck::class)->scene('edit')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$param['update_time'] = time();
|
||||
$res = Db::name('BasicCustomer')->strict(false)->field('title,types,id,update_time')->update($param);
|
||||
if ($res) {
|
||||
add_log('edit', $param['id'], $param);
|
||||
}
|
||||
return to_assign();
|
||||
} else {
|
||||
try {
|
||||
validate(BasicCustomerCheck::class)->scene('add')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$param['create_time'] = time();
|
||||
$insertId = Db::name('BasicCustomer')->strict(false)->field('title,types,id,create_time')->insertGetId($param);
|
||||
if ($insertId) {
|
||||
add_log('add', $insertId, $param);
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//设置
|
||||
public function set()
|
||||
{
|
||||
$param = get_params();
|
||||
$res = Db::name('BasicCustomer')->strict(false)->field('id,status')->update($param);
|
||||
if ($res) {
|
||||
if($param['status'] == 0){
|
||||
add_log('disable', $param['id'], $param);
|
||||
}
|
||||
else if($param['status'] == 1){
|
||||
add_log('recovery', $param['id'], $param);
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
else{
|
||||
return to_assign(0, '操作失败');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,161 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\customer\controller;
|
||||
|
||||
use app\base\BaseController;
|
||||
use app\customer\model\CustomerChance as CustomerChanceModel;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Chance extends BaseController
|
||||
{
|
||||
/**
|
||||
* 构造函数
|
||||
*/
|
||||
protected $model;
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(); // 调用父类构造函数
|
||||
$this->model = new CustomerChanceModel();
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据列表
|
||||
*/
|
||||
public function datalist()
|
||||
{
|
||||
$param = get_params();
|
||||
$uid=$this->uid;
|
||||
if (request()->isAjax()) {
|
||||
$where=[];
|
||||
$whereOr=[];
|
||||
$where[]=['a.delete_time','=',0];
|
||||
if (!empty($param['keywords'])) {
|
||||
$where[] = ['a.title|a.content|c.name', 'like', '%' . $param['keywords'] . '%'];
|
||||
}
|
||||
if (!empty($param['stage'])) {
|
||||
$where[] = ['a.stage','=',$param['stage']];
|
||||
}
|
||||
if (!empty($param['uid'])) {
|
||||
$where[] = ['a.belong_uid','=',$param['uid']];
|
||||
}
|
||||
|
||||
$map=[];
|
||||
$mapOr=[];
|
||||
$map[]=['delete_time','=',0];
|
||||
$map[]=['discard_time','=',0];
|
||||
|
||||
$mapOr[] = ['belong_uid','=',$uid];
|
||||
$mapOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',share_ids)")];
|
||||
$dids_a = get_leader_departments($uid);
|
||||
//是否是客户管理员
|
||||
$auth = isAuth($uid,'customer_admin','conf_1');
|
||||
if($auth == 0){
|
||||
if(!empty($dids_a)){
|
||||
$mapOr[] = ['belong_did','in',$dids_a];
|
||||
}
|
||||
$cids = Db::name('Customer')
|
||||
->where($map)
|
||||
->where(function ($query) use($mapOr) {
|
||||
if (!empty($mapOr)){
|
||||
$query->whereOr($mapOr);
|
||||
}
|
||||
})->column('id');
|
||||
$where[] = ['a.cid', 'in',$cids];
|
||||
}
|
||||
$list = $this->model->datalist($param,$where);
|
||||
return table_assign(0, '', $list);
|
||||
}
|
||||
else{
|
||||
View::assign('is_auth', isAuth($uid,'customer_admin','conf_1'));
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加/编辑
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()){
|
||||
if(isset($param['discovery_time'])){
|
||||
$param['discovery_time'] = strtotime($param['discovery_time']);
|
||||
}
|
||||
if(isset($param['expected_time'])){
|
||||
$param['expected_time'] = strtotime($param['expected_time']);
|
||||
}
|
||||
$param['update_time'] = time();
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
$this->model->edit($param);
|
||||
} else {
|
||||
$param['create_time'] = time();
|
||||
$param['admin_id'] = $this->uid;
|
||||
$this->model->add($param);
|
||||
}
|
||||
}else{
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
if ($id>0) {
|
||||
$detail = $this->model->getById($id);
|
||||
View::assign('detail', $detail);
|
||||
return view('edit');
|
||||
}
|
||||
$customer_id = isset($param['cid']) ? $param['cid'] : 0;
|
||||
$customer_name = Db::name('Customer')->where('id',$customer_id)->value('name');
|
||||
View::assign('customer_id', $customer_id);
|
||||
View::assign('customer_name', $customer_name);
|
||||
if(is_mobile()){
|
||||
return view('qiye@/customer/chance_add');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
public function view($id)
|
||||
{
|
||||
$detail = $this->model->getById($id);
|
||||
if (!empty($detail)) {
|
||||
$detail['contact'] = Db::name('CustomerContact')->where('id',$detail['contact_id'])->value('name');
|
||||
$detail['stage_name'] =Db::name('BasicCustomer')->where('id',$detail['stage'])->value('title');
|
||||
View::assign('detail', $detail);
|
||||
if(is_mobile()){
|
||||
return view('qiye@/customer/chance_view');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
else{
|
||||
return view(EEEOR_REPORTING,['code'=>404,'warning'=>'找不到页面']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
public function del()
|
||||
{
|
||||
$param = get_params();
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
if (request()->isDelete()) {
|
||||
$this->model->delById($id);
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,164 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\customer\controller;
|
||||
|
||||
use app\base\BaseController;
|
||||
use app\customer\model\CustomerContact as CustomerContactModel;
|
||||
use app\customer\validate\ContactValidate;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Contact extends BaseController
|
||||
{
|
||||
/**
|
||||
* 构造函数
|
||||
*/
|
||||
protected $model;
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(); // 调用父类构造函数
|
||||
$this->model = new CustomerContactModel();
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据列表
|
||||
*/
|
||||
public function datalist()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$uid=$this->uid;
|
||||
$where=[];
|
||||
$whereOr=[];
|
||||
$where[]=['delete_time','=',0];
|
||||
if (!empty($param['keywords'])) {
|
||||
$where[] = ['id|name|mobile|email', 'like', '%' . $param['keywords'] . '%'];
|
||||
}
|
||||
$map=[];
|
||||
$mapOr=[];
|
||||
$map[]=['delete_time','=',0];
|
||||
$map[]=['discard_time','=',0];
|
||||
|
||||
$mapOr[] = ['belong_uid','=',$uid];
|
||||
$mapOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',share_ids)")];
|
||||
$dids_a = get_leader_departments($uid);
|
||||
//是否是客户管理员
|
||||
$auth = isAuth($uid,'customer_admin','conf_1');
|
||||
if($auth == 0){
|
||||
if(!empty($dids_a)){
|
||||
$mapOr[] = ['belong_did','in',$dids_a];
|
||||
}
|
||||
|
||||
$cids = Db::name('Customer')
|
||||
->where($map)
|
||||
->where(function ($query) use($mapOr) {
|
||||
if (!empty($mapOr)){
|
||||
$query->whereOr($mapOr);
|
||||
}
|
||||
})->column('id');
|
||||
$whereOr[] = ['cid', 'in',$cids];
|
||||
}
|
||||
$whereOr[] = ['admin_id','=',$uid];
|
||||
$list = $this->model->datalist($param,$where,$whereOr);
|
||||
return table_assign(0, '', $list);
|
||||
}
|
||||
else{
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加/编辑
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
if (isset($param['birthday'])) {
|
||||
$param['birthday'] = strtotime($param['birthday']);
|
||||
}
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
try {
|
||||
validate(ContactValidate::class)->scene('edit')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$this->model->edit($param);
|
||||
} else {
|
||||
try {
|
||||
validate(ContactValidate::class)->scene('add')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$param['admin_id'] = $this->uid;
|
||||
$this->model->add($param);
|
||||
}
|
||||
}else{
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
$cid = isset($param['cid']) ? $param['cid'] : 0;
|
||||
if ($id>0) {
|
||||
$detail = $this->model->getById($id);
|
||||
View::assign('detail', $detail);
|
||||
return view('edit');
|
||||
}
|
||||
if($cid>0){
|
||||
View::assign('customer_name', Db::name('Customer')->where('id',$cid)->value('name'));
|
||||
}
|
||||
View::assign('customer_id', $cid);
|
||||
View::assign('customer_id', $cid);
|
||||
if(is_mobile()){
|
||||
return view('qiye@/customer/contact_add');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
public function view($id)
|
||||
{
|
||||
$detail = $this->model->getById($id);
|
||||
if (!empty($detail)) {
|
||||
View::assign('detail', $detail);
|
||||
if(is_mobile()){
|
||||
return view('qiye@/customer/contact_view');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
else{
|
||||
return view(EEEOR_REPORTING,['code'=>404,'warning'=>'找不到页面']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
public function del()
|
||||
{
|
||||
$param = get_params();
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
if (request()->isDelete()) {
|
||||
$this->model->delById($id);
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,236 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\customer\controller;
|
||||
|
||||
use app\base\BaseController;
|
||||
use app\customer\model\Customer as CustomerModel;
|
||||
use app\customer\validate\CustomerValidate;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Customer extends BaseController
|
||||
{
|
||||
/**
|
||||
* 构造函数
|
||||
*/
|
||||
protected $model;
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(); // 调用父类构造函数
|
||||
$this->model = new CustomerModel();
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据列表
|
||||
*/
|
||||
public function datalist()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$where=[];
|
||||
$whereOr = [];
|
||||
$uid = $this->uid;
|
||||
$tab = isset($param['tab']) ? $param['tab'] : 0;
|
||||
if (!empty($param['keywords'])) {
|
||||
$where[] = ['id|name', 'like', '%' . $param['keywords'] . '%'];
|
||||
}
|
||||
if (!empty($param['customer_status'])) {
|
||||
$where[] = ['customer_status', '=', $param['customer_status']];
|
||||
}
|
||||
if (!empty($param['industry_id'])) {
|
||||
$where[] = ['industry_id', '=', $param['industry_id']];
|
||||
}
|
||||
if (!empty($param['source_id'])) {
|
||||
$where[] = ['source_id', '=', $param['source_id']];
|
||||
}
|
||||
if (!empty($param['grade_id'])) {
|
||||
$where[] = ['grade_id', '=', $param['grade_id']];
|
||||
}
|
||||
if (!empty($param['intent_status'])) {
|
||||
$where[] = ['intent_status', '=', $param['intent_status']];
|
||||
}
|
||||
if (!empty($param['follow_time'])) {
|
||||
$follow_time =explode('~', $param['follow_time']);
|
||||
$where[] = ['follow_time', 'between',[strtotime(urldecode($follow_time[0])),strtotime(urldecode($follow_time[1].' 23:59:59'))]];
|
||||
}
|
||||
if (!empty($param['next_time'])) {
|
||||
$next_time =explode('~', $param['next_time']);
|
||||
$where[] = ['next_time', 'between',[strtotime(urldecode($next_time[0])),strtotime(urldecode($next_time[1].' 23:59:59'))]];
|
||||
}
|
||||
$where[]=['delete_time','=',0];
|
||||
$where[]=['discard_time','=',0];
|
||||
|
||||
if($tab == 0){
|
||||
if (!empty($param['uid'])) {
|
||||
$where[] = ['belong_uid', '=', $param['uid']];
|
||||
}
|
||||
else{
|
||||
//是否是客户管理员
|
||||
$auth = isAuth($uid,'customer_admin','conf_1');
|
||||
if($auth == 0){
|
||||
$whereOr[] = ['belong_uid','=',$uid];
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',share_ids)")];
|
||||
$dids_a = get_leader_departments($uid);
|
||||
$dids_b = get_role_departments($uid);
|
||||
$dids = array_merge($dids_a, $dids_b);
|
||||
if(!empty($dids)){
|
||||
$whereOr[] = ['belong_did','in',$dids];
|
||||
}
|
||||
}
|
||||
else{
|
||||
$where[] = ['belong_did','<>',0];
|
||||
}
|
||||
}
|
||||
}
|
||||
//我的客户
|
||||
if($tab == 1){
|
||||
$where[] = ['belong_uid','=',$uid];
|
||||
}
|
||||
//下属客户
|
||||
if($tab == 2){
|
||||
$where[] = ['belong_uid','<>',$uid];
|
||||
$dids_a = get_leader_departments($uid);
|
||||
if(!empty($dids_a)){
|
||||
$where[] = ['belong_did','in',$dids_a];
|
||||
}
|
||||
}
|
||||
//分享客户
|
||||
if($tab == 3){
|
||||
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',share_ids)")];
|
||||
}
|
||||
$list = $this->model->datalist($param,$where,$whereOr);
|
||||
return table_assign(0, '', $list);
|
||||
}
|
||||
else{
|
||||
View::assign('is_leader', isLeader($this->uid));
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加/编辑
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
try {
|
||||
validate(CustomerValidate::class)->scene($param['scene'])->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
$param['edit_id'] = $this->uid;
|
||||
$this->model->edit($param);
|
||||
} else {
|
||||
$param['admin_id'] = $this->uid;
|
||||
$this->model->add($param);
|
||||
}
|
||||
}else{
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
$sea = isset($param['sea']) ? $param['sea'] : 0;
|
||||
View::assign('sea', $sea);
|
||||
if ($id>0) {
|
||||
$detail = $this->model->getById($id);
|
||||
View::assign('detail', $detail);
|
||||
return view('edit');
|
||||
}
|
||||
if($this->uid>1){
|
||||
View::assign('userinfo', get_admin($this->uid));
|
||||
}
|
||||
if(is_mobile()){
|
||||
return view('qiye@/customer/add');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
public function view($id)
|
||||
{
|
||||
$detail = $this->model->getById($id);
|
||||
$detail['admin_name'] = Db::name('Admin')->where(['id' => $detail['admin_id']])->value('name');
|
||||
if($detail['customer_status']>0){
|
||||
$detail['customer_status_name'] = Db::name('BasicCustomer')->where(['id' => $detail['customer_status']])->value('title');
|
||||
}
|
||||
else{
|
||||
$detail['customer_status_name']='-';
|
||||
}
|
||||
if($detail['intent_status']>0){
|
||||
$detail['intent_status_name'] = Db::name('BasicCustomer')->where(['id' => $detail['intent_status']])->value('title');
|
||||
}
|
||||
else{
|
||||
$detail['intent_status_name']='-';
|
||||
}
|
||||
|
||||
$detail['industry'] = Db::name('Industry')->where(['id' => $detail['industry_id']])->value('title');
|
||||
$detail['source'] = Db::name('CustomerSource')->where(['id' => $detail['source_id']])->value('title');
|
||||
$detail['grade'] = Db::name('CustomerGrade')->where(['id' => $detail['grade_id']])->value('title');
|
||||
|
||||
//附件
|
||||
$file_array = Db::name('CustomerFile')
|
||||
->field('cf.id,f.filepath,f.name,f.filesize,f.fileext,f.create_time,f.admin_id')
|
||||
->alias('cf')
|
||||
->join('File f', 'f.id = cf.file_id', 'LEFT')
|
||||
->order('cf.create_time asc')
|
||||
->where(array('cf.customer_id' => $id, 'cf.delete_time' => 0))
|
||||
->select()->toArray();
|
||||
$detail['file_array'] = $file_array;
|
||||
|
||||
$role=0;
|
||||
if($detail['belong_uid'] == $this->uid && $detail['is_lock'] == 0){
|
||||
$role=1;
|
||||
}
|
||||
View::assign('detail', $detail);
|
||||
View::assign('role', $role);
|
||||
if(is_mobile()){
|
||||
return view('qiye@/customer/view');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
public function del()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isDelete()) {
|
||||
$id = get_params("id");
|
||||
$idArray = explode(',', strval($id));
|
||||
$list = [];
|
||||
foreach ($idArray as $key => $val) {
|
||||
$list[] = [
|
||||
'id' => $val,
|
||||
'discard_time' => time()
|
||||
];
|
||||
}
|
||||
foreach ($list as $key => $v) {
|
||||
if (Db::name('Customer')->update($v) !== false) {
|
||||
add_log('delete', $param['id']);
|
||||
}
|
||||
}
|
||||
return to_assign(0, '操作成功');
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\customer\controller;
|
||||
|
||||
use app\base\BaseController;
|
||||
use app\customer\model\CustomerGrade as CustomerGradeModel;
|
||||
use app\customer\validate\GradeValidate;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Grade extends BaseController
|
||||
{
|
||||
/**
|
||||
* 构造函数
|
||||
*/
|
||||
protected $model;
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(); // 调用父类构造函数
|
||||
$this->model = new CustomerGradeModel();
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据列表
|
||||
*/
|
||||
public function datalist()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$list = $this->model->where('delete_time',0)->order('sort asc')->select();
|
||||
return to_assign(0, '', $list);
|
||||
}
|
||||
else{
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加/编辑
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
try {
|
||||
validate(GradeValidate::class)->scene('edit')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$this->model->edit($param);
|
||||
} else {
|
||||
try {
|
||||
validate(GradeValidate::class)->scene('add')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$this->model->add($param);
|
||||
}
|
||||
}else{
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
if ($id>0) {
|
||||
$detail = $this->model->getCateById($id);
|
||||
View::assign('detail', $detail);
|
||||
}
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
public function view($id)
|
||||
{
|
||||
$detail = $this->model->getById($id);
|
||||
if (!empty($detail)) {
|
||||
View::assign('detail', $detail);
|
||||
return view();
|
||||
}
|
||||
else{
|
||||
return view(EEEOR_REPORTING,['code'=>404,'warning'=>'找不到页面']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
public function del()
|
||||
{
|
||||
if (request()->isDelete()) {
|
||||
$param = get_params();
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
$type = isset($param['type']) ? $param['type'] : 0;
|
||||
$this->model->delById($id,$type);
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置
|
||||
*/
|
||||
public function set()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$res = $this->model->strict(false)->field('id,status')->update($param);
|
||||
if ($res) {
|
||||
if($param['status'] == 0){
|
||||
add_log('disable', $param['id'], $param);
|
||||
}
|
||||
else if($param['status'] == 1){
|
||||
add_log('recovery', $param['id'], $param);
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
else{
|
||||
return to_assign(0, '操作失败');
|
||||
}
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,224 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\customer\controller;
|
||||
|
||||
use app\base\BaseController;
|
||||
use app\customer\model\Customer as CustomerModel;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Index extends BaseController
|
||||
{
|
||||
/**
|
||||
* 构造函数
|
||||
*/
|
||||
protected $model;
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(); // 调用父类构造函数
|
||||
$this->model = new CustomerModel();
|
||||
}
|
||||
//抢客宝
|
||||
public function rush()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$param['order'] = 'rand()';
|
||||
$where = array();
|
||||
$where[] = ['delete_time', '=', 0];
|
||||
$where[] = ['discard_time', '=', 0];
|
||||
$where[] = ['belong_uid', '=', 0];
|
||||
$list = $this->model->datalist($param,$where);
|
||||
return table_assign(0, '', $list);
|
||||
} else {
|
||||
$time = strtotime(date('Y-m-d')." 00:00:00");
|
||||
$max_num = Db::name('DataAuth')->where('name','customer_admin')->value('conf_2');
|
||||
$count = Db::name('Customer')->where([['belong_time','>',$time],['belong_uid','=',$this->uid]])->count();
|
||||
View::assign('max_num', $max_num);
|
||||
View::assign('count', $count);
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
//公海客户
|
||||
public function sea()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$where = array();
|
||||
if (!empty($param['keywords'])) {
|
||||
$where[] = ['id|name', 'like', '%' . $param['keywords'] . '%'];
|
||||
}
|
||||
if (!empty($param['industry_id'])) {
|
||||
$where[] = ['industry_id', '=', $param['industry_id']];
|
||||
}
|
||||
if (!empty($param['source_id'])) {
|
||||
$where[] = ['source_id', '=', $param['source_id']];
|
||||
}
|
||||
if (!empty($param['grade_id'])) {
|
||||
$where[] = ['grade_id', '=', $param['grade_id']];
|
||||
}
|
||||
if (!empty($param['follow_time'])) {
|
||||
$follow_time =explode('~', $param['follow_time']);
|
||||
$where[] = ['follow_time', 'between',[strtotime(urldecode($follow_time[0])),strtotime(urldecode($follow_time[1].' 23:59:59'))]];
|
||||
}
|
||||
$where[] = ['delete_time', '=', 0];
|
||||
$where[] = ['discard_time', '=', 0];
|
||||
$where[] = ['belong_uid', '=', 0];
|
||||
|
||||
$list = $this->model->datalist($param,$where);
|
||||
return table_assign(0, '', $list);
|
||||
} else {
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
//废池客户
|
||||
public function trash()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$where = array();
|
||||
if (!empty($param['keywords'])) {
|
||||
$where[] = ['id|name', 'like', '%' . $param['keywords'] . '%'];
|
||||
}
|
||||
if (!empty($param['industry_id'])) {
|
||||
$where[] = ['industry_id', '=', $param['industry_id']];
|
||||
}
|
||||
if (!empty($param['source_id'])) {
|
||||
$where[] = ['source_id', '=', $param['source_id']];
|
||||
}
|
||||
if (!empty($param['grade_id'])) {
|
||||
$where[] = ['grade_id', '=', $param['grade_id']];
|
||||
}
|
||||
$where[] = ['delete_time', '>', 0];
|
||||
$where[] = ['discard_time', '=', 0];
|
||||
$where[] = ['belong_uid', '=', 0];
|
||||
$list = $this->model->datalist($param,$where);
|
||||
return table_assign(0, '', $list);
|
||||
} else {
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
//移入公海
|
||||
public function to_sea()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$id = get_params("id");
|
||||
$idArray = explode(',', strval($id));
|
||||
$list = [];
|
||||
foreach ($idArray as $key => $val) {
|
||||
$list[] = [
|
||||
'id' => $val,
|
||||
'belong_uid' => 0,
|
||||
'belong_did' => 0,
|
||||
'belong_time' => 0
|
||||
];
|
||||
}
|
||||
foreach ($list as $key => $v) {
|
||||
if (Db::name('Customer')->update($v) !== false) {
|
||||
add_log('tosea', $v['id']);
|
||||
}
|
||||
}
|
||||
return to_assign(0, '操作成功');
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
//获取客户
|
||||
public function to_get()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$id = get_params("id");
|
||||
$time = strtotime(date('Y-m-d')." 00:00:00");
|
||||
$max_num_day = Db::name('DataAuth')->where('name','customer_admin')->value('conf_2');
|
||||
$count_day = Db::name('Customer')->where([['belong_time','between',[$time,time()]],['belong_uid','=',$this->uid]])->count();
|
||||
if($count_day>=$max_num_day){
|
||||
return to_assign(1, "今日领取客户数已到达上限,请明天再来领取");
|
||||
}
|
||||
|
||||
$max_num = Db::name('DataAuth')->where('name','customer_admin')->value('conf_3');
|
||||
$count = Db::name('Customer')->where([['belong_uid','=',$this->uid]])->count();
|
||||
if($count>=$max_num){
|
||||
return to_assign(1, "领取客户数已到达上限,请把部分客户移到公海里再来领取");
|
||||
}
|
||||
$data['id'] = $id;
|
||||
$data['belong_uid'] = $this->uid;
|
||||
$data['belong_did'] = $this->did;
|
||||
$data['belong_time'] = time();
|
||||
if (Db::name('Customer')->update($data) !== false) {
|
||||
add_log('tosea', $id);
|
||||
return to_assign(0, "操作成功");
|
||||
} else {
|
||||
return to_assign(1, "操作失败");
|
||||
}
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
//客户移入废弃池
|
||||
public function to_trash()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$params = get_params();
|
||||
$id = get_params("id");
|
||||
$idArray = explode(',', strval($id));
|
||||
$list = [];
|
||||
foreach ($idArray as $key => $val) {
|
||||
$list[] = [
|
||||
'id' => $val,
|
||||
'delete_time' => time()
|
||||
];
|
||||
}
|
||||
foreach ($list as $key => $v) {
|
||||
if (Db::name('Customer')->update($v) !== false) {
|
||||
add_log('totrash', $params['id']);
|
||||
}
|
||||
}
|
||||
return to_assign(0, '操作成功');
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
//还原客户
|
||||
public function to_revert()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$params = get_params();
|
||||
$id = get_params("id");
|
||||
$idArray = explode(',', strval($id));
|
||||
$list = [];
|
||||
foreach ($idArray as $key => $val) {
|
||||
$list[] = [
|
||||
'id' => $val,
|
||||
'delete_time' => 0
|
||||
];
|
||||
}
|
||||
foreach ($list as $key => $v) {
|
||||
if (Db::name('Customer')->update($v) !== false) {
|
||||
add_log('recovery', $params['id']);
|
||||
}
|
||||
}
|
||||
return to_assign(0, '操作成功');
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\customer\controller;
|
||||
|
||||
use app\base\BaseController;
|
||||
use app\customer\model\Industry as IndustryModel;
|
||||
use app\customer\validate\IndustryValidate;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Industry extends BaseController
|
||||
{
|
||||
/**
|
||||
* 构造函数
|
||||
*/
|
||||
protected $model;
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(); // 调用父类构造函数
|
||||
$this->model = new IndustryModel();
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据列表
|
||||
*/
|
||||
public function datalist()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$list = $this->model->select();
|
||||
return to_assign(0, '', $list);
|
||||
}
|
||||
else{
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加/编辑
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
try {
|
||||
validate(IndustryValidate::class)->scene('edit')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$this->model->edit($param);
|
||||
} else {
|
||||
try {
|
||||
validate(IndustryValidate::class)->scene('add')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$this->model->add($param);
|
||||
}
|
||||
}else{
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
if ($id>0) {
|
||||
$detail = $this->model->getById($id);
|
||||
View::assign('detail', $detail);
|
||||
}
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
public function view($id)
|
||||
{
|
||||
$detail = $this->model->getById($id);
|
||||
if (!empty($detail)) {
|
||||
View::assign('detail', $detail);
|
||||
return view();
|
||||
}
|
||||
else{
|
||||
return view(EEEOR_REPORTING,['code'=>404,'warning'=>'找不到页面']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
public function del()
|
||||
{
|
||||
if (request()->isDelete()) {
|
||||
$param = get_params();
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
$type = isset($param['type']) ? $param['type'] : 0;
|
||||
$this->model->delById($id,$type);
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置
|
||||
*/
|
||||
public function set()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$res = $this->model->strict(false)->field('id,status')->update($param);
|
||||
if ($res) {
|
||||
if($param['status'] == 0){
|
||||
add_log('disable', $param['id'], $param);
|
||||
}
|
||||
else if($param['status'] == 1){
|
||||
add_log('recovery', $param['id'], $param);
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
else{
|
||||
return to_assign(0, '操作失败');
|
||||
}
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\customer\controller;
|
||||
|
||||
use app\base\BaseController;
|
||||
use app\customer\model\CustomerSource as CustomerSourceModel;
|
||||
use app\customer\validate\SourceValidate;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Source extends BaseController
|
||||
{
|
||||
/**
|
||||
* 构造函数
|
||||
*/
|
||||
protected $model;
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(); // 调用父类构造函数
|
||||
$this->model = new CustomerSourceModel();
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据列表
|
||||
*/
|
||||
public function datalist()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$list = $this->model->where('delete_time',0)->order('sort asc')->select();
|
||||
return to_assign(0, '', $list);
|
||||
}
|
||||
else{
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加/编辑
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
try {
|
||||
validate(SourceValidate::class)->scene('edit')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$this->model->edit($param);
|
||||
} else {
|
||||
try {
|
||||
validate(SourceValidate::class)->scene('add')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$this->model->add($param);
|
||||
}
|
||||
}else{
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
if ($id>0) {
|
||||
$detail = $this->model->getCateById($id);
|
||||
View::assign('detail', $detail);
|
||||
}
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
public function view($id)
|
||||
{
|
||||
$detail = $this->model->getById($id);
|
||||
if (!empty($detail)) {
|
||||
View::assign('detail', $detail);
|
||||
return view();
|
||||
}
|
||||
else{
|
||||
return view(EEEOR_REPORTING,['code'=>404,'warning'=>'找不到页面']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
public function del()
|
||||
{
|
||||
if (request()->isDelete()) {
|
||||
$param = get_params();
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
$type = isset($param['type']) ? $param['type'] : 0;
|
||||
$this->model->delById($id,$type);
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置
|
||||
*/
|
||||
public function set()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$res = $this->model->strict(false)->field('id,status')->update($param);
|
||||
if ($res) {
|
||||
if($param['status'] == 0){
|
||||
add_log('disable', $param['id'], $param);
|
||||
}
|
||||
else if($param['status'] == 1){
|
||||
add_log('recovery', $param['id'], $param);
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
else{
|
||||
return to_assign(0, '操作失败');
|
||||
}
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,168 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\customer\controller;
|
||||
|
||||
use app\base\BaseController;
|
||||
use app\customer\model\CustomerTrace as CustomerTraceModel;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Trace extends BaseController
|
||||
{
|
||||
/**
|
||||
* 构造函数
|
||||
*/
|
||||
protected $model;
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(); // 调用父类构造函数
|
||||
$this->model = new CustomerTraceModel();
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据列表
|
||||
*/
|
||||
public function datalist()
|
||||
{
|
||||
$param = get_params();
|
||||
$uid=$this->uid;
|
||||
if (request()->isAjax()) {
|
||||
$where=[];
|
||||
$where[]=['a.delete_time','=',0];
|
||||
if (!empty($param['keywords'])) {
|
||||
$where[] = ['a.content|c.name|cc.title', 'like', '%' . $param['keywords'] . '%'];
|
||||
}
|
||||
if (!empty($param['follow_time'])) {
|
||||
$follow_time =explode('~', $param['follow_time']);
|
||||
$where[] = ['a.follow_time', 'between',[strtotime(urldecode($follow_time[0])),strtotime(urldecode($follow_time[1].' 23:59:59'))]];
|
||||
}
|
||||
if (!empty($param['uid'])) {
|
||||
$where[] = ['a.admin_id','=',$param['uid']];
|
||||
}
|
||||
$map=[];
|
||||
$mapOr=[];
|
||||
$map[]=['delete_time','=',0];
|
||||
$map[]=['discard_time','=',0];
|
||||
|
||||
$mapOr[] = ['belong_uid','=',$uid];
|
||||
$mapOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',share_ids)")];
|
||||
$dids_a = get_leader_departments($uid);
|
||||
//是否是客户管理员
|
||||
$auth = isAuth($uid,'customer_admin','conf_1');
|
||||
if($auth == 0){
|
||||
if(!empty($dids_a)){
|
||||
$mapOr[] = ['belong_did','in',$dids_a];
|
||||
}
|
||||
|
||||
$cids = Db::name('Customer')
|
||||
->where($map)
|
||||
->where(function ($query) use($mapOr) {
|
||||
if (!empty($mapOr)){
|
||||
$query->whereOr($mapOr);
|
||||
}
|
||||
})->column('id');
|
||||
|
||||
$where[] = ['a.cid', 'in',$cids];
|
||||
}
|
||||
$list = $this->model->datalist($param,$where);
|
||||
return table_assign(0, '', $list);
|
||||
}
|
||||
else{
|
||||
View::assign('is_auth', isAuth($uid,'customer_admin','conf_1'));
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加/编辑
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
if(isset($param['follow_time'])){
|
||||
$param['follow_time'] = strtotime($param['follow_time']);
|
||||
}
|
||||
if(isset($param['next_time'])){
|
||||
$param['next_time'] = strtotime($param['next_time']);
|
||||
}
|
||||
$param['update_time'] = time();
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
$this->model->edit($param);
|
||||
} else {
|
||||
$param['create_time'] = time();
|
||||
$param['admin_id'] = $this->uid;
|
||||
$this->model->add($param);
|
||||
}
|
||||
}else{
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
if ($id > 0) {
|
||||
View::assign('detail', $this->model->getById($id));
|
||||
return view('edit');
|
||||
}
|
||||
$customer_id = isset($param['cid']) ? $param['cid'] : 0;
|
||||
$customer_name = Db::name('Customer')->where('id',$customer_id)->value('name');
|
||||
View::assign('customer_id', $customer_id);
|
||||
View::assign('customer_name', $customer_name);
|
||||
if(is_mobile()){
|
||||
return view('qiye@/customer/trace_add');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
public function view($id)
|
||||
{
|
||||
$detail = $this->model->getById($id);
|
||||
if (!empty($detail)) {
|
||||
$detail['contact'] = Db::name('CustomerContact')->where('id',$detail['contact_id'])->value('name');
|
||||
$detail['types_name'] = Db::name('BasicCustomer')->where('id',$detail['types'])->value('title');
|
||||
$detail['stage_name'] = Db::name('BasicCustomer')->where('id',$detail['stage'])->value('title');
|
||||
if($detail['chance_id']>0){
|
||||
$detail['chance'] = Db::name('CustomerChance')->where(['id' => $detail['chance_id']])->value('title');
|
||||
}
|
||||
else{
|
||||
$detail['chance']='-';
|
||||
}
|
||||
View::assign('detail', $detail);
|
||||
if(is_mobile()){
|
||||
return view('qiye@/customer/trace_view');
|
||||
}
|
||||
return view();
|
||||
}
|
||||
else{
|
||||
return view(EEEOR_REPORTING,['code'=>404,'warning'=>'找不到页面']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
public function del()
|
||||
{
|
||||
$param = get_params();
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
if (request()->isDelete()) {
|
||||
$this->model->delById($id);
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
// 这是系统自动生成的event定义文件
|
||||
return [
|
||||
|
||||
];
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
// 这是系统自动生成的middleware定义文件
|
||||
return [
|
||||
//开启session中间件
|
||||
//'think\middleware\SessionInit',
|
||||
//验证勾股OA是否完成安装
|
||||
\app\home\middleware\Install::class,
|
||||
];
|
||||
@@ -0,0 +1,208 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
namespace app\customer\model;
|
||||
use think\model;
|
||||
use think\facade\Db;
|
||||
use app\api\model\EditLog;
|
||||
class Customer extends Model
|
||||
{
|
||||
/**
|
||||
* 获取分页列表
|
||||
* @param $where
|
||||
* @param $param
|
||||
*/
|
||||
public function datalist($param=[],$where=[],$whereOr=[])
|
||||
{
|
||||
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
|
||||
$order = 'id desc';
|
||||
if(!empty($param['order_field']) && !empty($param['order_type'])){
|
||||
$order = $param['order_field'].' '.$param['order_type'];
|
||||
}
|
||||
try {
|
||||
$list = self::where($where)
|
||||
->where(function ($query) use($whereOr) {
|
||||
if (!empty($whereOr)){
|
||||
$query->whereOr($whereOr);
|
||||
}
|
||||
})
|
||||
->orderRaw($order)
|
||||
->paginate(['list_rows'=> $rows])
|
||||
->each(function ($item, $key){
|
||||
$item->create_time = to_date($item->create_time);
|
||||
$item->update_time = to_date($item->update_time);
|
||||
if($item->belong_uid>0){
|
||||
$item->belong_name = Db::name('Admin')->where('id',$item->belong_uid)->value('name');
|
||||
$item->belong_department = Db::name('Department')->where(['id' => $item->belong_did])->value('title');
|
||||
}
|
||||
else{
|
||||
$item->belong_name='-';
|
||||
$item->belong_department='-';
|
||||
}
|
||||
if($item->industry_id>0){
|
||||
$item->industry = Db::name('Industry')->where(['id' => $item->industry_id])->value('title');
|
||||
}
|
||||
else{
|
||||
$item->industry='-';
|
||||
}
|
||||
if($item->grade_id>0){
|
||||
$item->grade = Db::name('CustomerGrade')->where(['id' => $item->grade_id])->value('title');
|
||||
}
|
||||
else{
|
||||
$item->grade='-';
|
||||
}
|
||||
if($item->source_id>0){
|
||||
$item->source = Db::name('CustomerSource')->where(['id' => $item->source_id])->value('title');
|
||||
}
|
||||
else{
|
||||
$item->source='-';
|
||||
}
|
||||
if($item->customer_status>0){
|
||||
$item->customer_status_name = Db::name('BasicCustomer')->where(['id' => $item->customer_status])->value('title');
|
||||
}
|
||||
else{
|
||||
$item->customer_status_name='-';
|
||||
}
|
||||
if($item->intent_status>0){
|
||||
$item->intent_status_name = Db::name('BasicCustomer')->where(['id' => $item->intent_status])->value('title');
|
||||
}
|
||||
else{
|
||||
$item->intent_status_name='-';
|
||||
}
|
||||
if($item->follow_time==0){
|
||||
$item->follow_time='-';
|
||||
}
|
||||
else{
|
||||
$item->follow_time = date('Y-m-d',$item->follow_time);
|
||||
}
|
||||
if($item->next_time==0){
|
||||
$item->next_time='-';
|
||||
}
|
||||
else{
|
||||
$item->next_time = date('Y-m-d',$item->next_time);
|
||||
}
|
||||
$contact = Db::name('CustomerContact')->where(['is_default'=>1,'cid' => $item->id])->find();
|
||||
if(!empty($contact)){
|
||||
$item->contact_name = $contact['name'];
|
||||
$item->contact_mobile = $contact['mobile'];
|
||||
$item->contact_email = $contact['email'];
|
||||
}
|
||||
else{
|
||||
$item->contact_name = '';
|
||||
$item->contact_mobile = '';
|
||||
$item->contact_email = '';
|
||||
}
|
||||
});
|
||||
return $list;
|
||||
} catch(\Exception $e) {
|
||||
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加数据
|
||||
* @param $param
|
||||
*/
|
||||
public function add($param)
|
||||
{
|
||||
$insertId = 0;
|
||||
try {
|
||||
$param['create_time'] = time();
|
||||
$param['update_time'] = time();
|
||||
$insertId = self::strict(false)->field(true)->insertGetId($param);
|
||||
$contact = [
|
||||
'name' => $param['c_name'],
|
||||
'mobile' => $param['c_mobile'],
|
||||
'sex' => $param['c_sex'],
|
||||
'qq' => $param['c_qq'],
|
||||
'wechat' => $param['c_wechat'],
|
||||
'email' => $param['c_email'],
|
||||
'cid' => $insertId,
|
||||
'is_default' => 1,
|
||||
'create_time' => time(),
|
||||
'admin_id' => $param['admin_id']
|
||||
];
|
||||
Db::name('CustomerContact')->strict(false)->field(true)->insert($contact);
|
||||
add_log('add', $insertId, $param);
|
||||
$log=new EditLog();
|
||||
$log->add('Customer',$insertId);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$insertId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑信息
|
||||
* @param $param
|
||||
*/
|
||||
public function edit($param)
|
||||
{
|
||||
try {
|
||||
$param['update_time'] = time();
|
||||
$old = self::find($param['id']);
|
||||
self::where('id', $param['id'])->strict(false)->field(true)->update($param);
|
||||
add_log('edit', $param['id'], $param);
|
||||
$log=new EditLog();
|
||||
$log->edit('Customer',$param['id'],$param,$old);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$param['id']]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据id获取信息
|
||||
* @param $id
|
||||
*/
|
||||
public function getById($id)
|
||||
{
|
||||
$info = self::find($id);
|
||||
$info['belong_department'] = Db::name('Department')->where(['id' => $info['belong_did']])->value('title');
|
||||
$info['belong_name'] = Db::name('Admin')->where(['id' => $info['belong_uid']])->value('name');
|
||||
if(!empty($info['share_ids'])){
|
||||
$share_names = Db::name('Admin')->where([['id','in',$info['share_ids']]])->column('name');
|
||||
$info['share_names'] = implode(',',$share_names);
|
||||
}
|
||||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除信息
|
||||
* @param $id
|
||||
* @param $type
|
||||
* @return array
|
||||
*/
|
||||
public function delById($id,$type=0)
|
||||
{
|
||||
if($type==0){
|
||||
//逻辑删除
|
||||
try {
|
||||
self::where('id', $id)->update(['discard_time'=>time()]);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
else{
|
||||
//物理删除
|
||||
try {
|
||||
self::destroy($id);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,130 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
namespace app\customer\model;
|
||||
use think\model;
|
||||
use think\facade\Db;
|
||||
class CustomerChance extends Model
|
||||
{
|
||||
/**
|
||||
* 获取分页列表
|
||||
* @param $where
|
||||
* @param $param
|
||||
*/
|
||||
public function datalist($param=[],$where=[])
|
||||
{
|
||||
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
|
||||
$order = empty($param['order']) ? 'a.id desc' : $param['order'];
|
||||
try {
|
||||
$list = self::where($where)
|
||||
->field('a.*')
|
||||
->alias('a')
|
||||
->join('Customer c','a.cid = c.id')
|
||||
->order($order)
|
||||
->paginate(['list_rows'=> $rows])
|
||||
->each(function ($item, $key){
|
||||
$item->customer = Db::name('Customer')->where(['id' => $item->cid])->value('name');
|
||||
$item->belong_name = Db::name('Admin')->where('id',$item->belong_uid)->value('name');
|
||||
$item->stage_name = Db::name('BasicCustomer')->where(['id' => $item->stage])->value('title');
|
||||
$item->expected_time = date('Y-m-d', $item->expected_time);
|
||||
$item->discovery_time = date('Y-m-d', $item->discovery_time);
|
||||
$item->is_contract = Db::name('Contract')->where(['chance_id'=>$item->id,'delete_time'=>0])->count();
|
||||
});
|
||||
return $list;
|
||||
} catch(\Exception $e) {
|
||||
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加数据
|
||||
* @param $param
|
||||
*/
|
||||
public function add($param)
|
||||
{
|
||||
$insertId = 0;
|
||||
try {
|
||||
$param['create_time'] = time();
|
||||
$insertId = self::strict(false)->field(true)->insertGetId($param);
|
||||
add_log('add', $insertId, $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$insertId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑信息
|
||||
* @param $param
|
||||
*/
|
||||
public function edit($param)
|
||||
{
|
||||
try {
|
||||
$param['update_time'] = time();
|
||||
self::where('id', $param['id'])->strict(false)->field(true)->update($param);
|
||||
add_log('edit', $param['id'], $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$param['id']]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据id获取信息
|
||||
* @param $id
|
||||
*/
|
||||
public function getById($id)
|
||||
{
|
||||
$info = self::find($id);
|
||||
$info['customer'] = Db::name('Customer')->where(['id' => $info['cid']])->value('name');
|
||||
$info['belong_name'] = Db::name('Admin')->where(['id' => $info['belong_uid']])->value('name');
|
||||
$assist_names = Db::name('Admin')->where([['id','in',$info['assist_ids']]])->column('name');
|
||||
$info['assist_names'] = implode(',',$assist_names);
|
||||
$contract = Db::name('Contract')->where(['chance_id'=>$info['id'],'delete_time'=>0])->find();
|
||||
if(!empty($contract)){
|
||||
$info['contract'] = $contract['name'];
|
||||
$info['contract_id'] = $contract['id'];
|
||||
}
|
||||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除信息
|
||||
* @param $id
|
||||
* @param $type
|
||||
* @return array
|
||||
*/
|
||||
public function delById($id,$type=0)
|
||||
{
|
||||
if($type==0){
|
||||
//逻辑删除
|
||||
try {
|
||||
$param['delete_time'] = time();
|
||||
self::where('id', $id)->update(['delete_time'=>time()]);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
else{
|
||||
//物理删除
|
||||
try {
|
||||
self::destroy($id);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,134 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
namespace app\customer\model;
|
||||
use think\model;
|
||||
use think\facade\Db;
|
||||
class CustomerContact extends Model
|
||||
{
|
||||
/**
|
||||
* 获取分页列表
|
||||
* @param $where
|
||||
* @param $param
|
||||
*/
|
||||
public function datalist($param,$where,$whereOr=[])
|
||||
{
|
||||
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
|
||||
$order = empty($param['order']) ? 'id desc' : $param['order'];
|
||||
try {
|
||||
$list = self::where($where)
|
||||
->where(function ($query) use($whereOr) {
|
||||
if (!empty($whereOr)){
|
||||
$query->whereOr($whereOr);
|
||||
}
|
||||
})
|
||||
->order($order)
|
||||
->paginate(['list_rows'=> $rows])
|
||||
->each(function ($item, $key){
|
||||
$item->admin_name = Db::name('Admin')->where('id',$item->admin_id)->value('name');
|
||||
$item->customer = Db::name('Customer')->where(['id' => $item->cid])->value('name');
|
||||
$item->create_time = to_date($item->create_time);
|
||||
});
|
||||
return $list;
|
||||
} catch(\Exception $e) {
|
||||
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加数据
|
||||
* @param $param
|
||||
*/
|
||||
public function add($param)
|
||||
{
|
||||
$insertId = 0;
|
||||
try {
|
||||
$param['create_time'] = time();
|
||||
$insertId = self::strict(false)->field(true)->insertGetId($param);
|
||||
add_log('add', $insertId, $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$insertId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑信息
|
||||
* @param $param
|
||||
*/
|
||||
public function edit($param)
|
||||
{
|
||||
try {
|
||||
$param['update_time'] = time();
|
||||
self::where('id', $param['id'])->strict(false)->field(true)->update($param);
|
||||
add_log('edit', $param['id'], $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$param['id']]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据id获取信息
|
||||
* @param $id
|
||||
*/
|
||||
public function getById($id)
|
||||
{
|
||||
$info = self::find($id);
|
||||
if(!empty($info['birthday'])){
|
||||
$info['birthday'] = date('Y-m-d',$info['birthday']);
|
||||
}
|
||||
else{
|
||||
$info['birthday'] = '';
|
||||
}
|
||||
$info['customer'] = Db::name('Customer')->where(['id' => $info['cid']])->value('name');
|
||||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除信息
|
||||
* @param $id
|
||||
* @param $type
|
||||
* @return array
|
||||
*/
|
||||
public function delById($id,$type=0)
|
||||
{
|
||||
$detail=self::find($id);
|
||||
if($detail['is_default'] == 1){
|
||||
$count = Db::name('Customer')->where(['id' => $detail['cid'],'delete_time'=>0])->count();
|
||||
if($count>0){
|
||||
return to_assign(1, '首要联系人,不能删除');
|
||||
}
|
||||
}
|
||||
if($type==0){
|
||||
//逻辑删除
|
||||
try {
|
||||
$param['delete_time'] = time();
|
||||
self::where('id', $id)->update(['delete_time'=>time()]);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
else{
|
||||
//物理删除
|
||||
try {
|
||||
self::destroy($id);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
namespace app\customer\model;
|
||||
use think\model;
|
||||
use think\facade\Db;
|
||||
class CustomerGrade extends Model
|
||||
{
|
||||
/**
|
||||
* 获取分页列表
|
||||
* @param $where
|
||||
* @param $param
|
||||
*/
|
||||
public function datalist($where, $param)
|
||||
{
|
||||
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
|
||||
$order = empty($param['order']) ? 'id desc' : $param['order'];
|
||||
try {
|
||||
$list = self::where($where)->order($order)->paginate(['list_rows'=> $rows]);
|
||||
return $list;
|
||||
} catch(\Exception $e) {
|
||||
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加数据
|
||||
* @param $param
|
||||
*/
|
||||
public function add($param)
|
||||
{
|
||||
$insertId = 0;
|
||||
try {
|
||||
$param['create_time'] = time();
|
||||
$insertId = self::strict(false)->field(true)->insertGetId($param);
|
||||
add_log('add', $insertId, $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$insertId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑信息
|
||||
* @param $param
|
||||
*/
|
||||
public function edit($param)
|
||||
{
|
||||
try {
|
||||
$param['update_time'] = time();
|
||||
self::where('id', $param['id'])->strict(false)->field(true)->update($param);
|
||||
add_log('edit', $param['id'], $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$param['id']]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据id获取信息
|
||||
* @param $id
|
||||
*/
|
||||
public function getById($id)
|
||||
{
|
||||
$info = self::find($id);
|
||||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除信息
|
||||
* @param $id
|
||||
* @param $type
|
||||
* @return array
|
||||
*/
|
||||
public function delById($id,$type=0)
|
||||
{
|
||||
if($type==0){
|
||||
//逻辑删除
|
||||
try {
|
||||
$param['delete_time'] = time();
|
||||
self::where('id', $id)->update(['delete_time'=>time()]);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
else{
|
||||
//物理删除
|
||||
try {
|
||||
self::destroy($id);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
namespace app\customer\model;
|
||||
use think\model;
|
||||
use think\facade\Db;
|
||||
class CustomerSource extends Model
|
||||
{
|
||||
/**
|
||||
* 获取分页列表
|
||||
* @param $where
|
||||
* @param $param
|
||||
*/
|
||||
public function datalist($where, $param)
|
||||
{
|
||||
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
|
||||
$order = empty($param['order']) ? 'id desc' : $param['order'];
|
||||
try {
|
||||
$list = self::where($where)->order($order)->paginate(['list_rows'=> $rows]);
|
||||
return $list;
|
||||
} catch(\Exception $e) {
|
||||
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加数据
|
||||
* @param $param
|
||||
*/
|
||||
public function add($param)
|
||||
{
|
||||
$insertId = 0;
|
||||
try {
|
||||
$param['create_time'] = time();
|
||||
$insertId = self::strict(false)->field(true)->insertGetId($param);
|
||||
add_log('add', $insertId, $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$insertId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑信息
|
||||
* @param $param
|
||||
*/
|
||||
public function edit($param)
|
||||
{
|
||||
try {
|
||||
$param['update_time'] = time();
|
||||
self::where('id', $param['id'])->strict(false)->field(true)->update($param);
|
||||
add_log('edit', $param['id'], $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$param['id']]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据id获取信息
|
||||
* @param $id
|
||||
*/
|
||||
public function getById($id)
|
||||
{
|
||||
$info = self::find($id);
|
||||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除信息
|
||||
* @param $id
|
||||
* @param $type
|
||||
* @return array
|
||||
*/
|
||||
public function delById($id,$type=0)
|
||||
{
|
||||
if($type==0){
|
||||
//逻辑删除
|
||||
try {
|
||||
$param['delete_time'] = time();
|
||||
self::where('id', $id)->update(['delete_time'=>time()]);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
else{
|
||||
//物理删除
|
||||
try {
|
||||
self::destroy($id);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,149 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
namespace app\customer\model;
|
||||
use think\model;
|
||||
use think\facade\Db;
|
||||
class CustomerTrace extends Model
|
||||
{
|
||||
/**
|
||||
* 获取分页列表
|
||||
* @param $where
|
||||
* @param $param
|
||||
*/
|
||||
public function datalist($param,$where)
|
||||
{
|
||||
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
|
||||
$order = empty($param['order']) ? 'a.id desc' : $param['order'];
|
||||
try {
|
||||
$list = self::where($where)
|
||||
->field('a.*')
|
||||
->alias('a')
|
||||
->join('Customer c','a.cid = c.id')
|
||||
->join('CustomerChance cc','a.chance_id = cc.id','left')
|
||||
->order($order)
|
||||
->paginate(['list_rows'=> $rows])
|
||||
->each(function ($item, $key){
|
||||
$item->follow_time = date('Y-m-d H:i',$item->follow_time);
|
||||
$item->next_time = date('Y-m-d H:i',$item->next_time);
|
||||
$item->admin_name = Db::name('Admin')->where('id',$item->admin_id)->value('name');
|
||||
$item->type_name = Db::name('BasicCustomer')->where(['id' => $item->types])->value('title');
|
||||
$item->stage_name = Db::name('BasicCustomer')->where(['id' => $item->stage])->value('title');
|
||||
$item->customer = Db::name('Customer')->where(['id' => $item->cid])->value('name');
|
||||
if($item->chance_id>0){
|
||||
$item->chance = Db::name('CustomerChance')->where(['id' => $item->chance_id])->value('title');
|
||||
}
|
||||
else{
|
||||
$item->chance='-';
|
||||
}
|
||||
});
|
||||
return $list;
|
||||
} catch(\Exception $e) {
|
||||
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加数据
|
||||
* @param $param
|
||||
*/
|
||||
public function add($param)
|
||||
{
|
||||
$insertId = 0;
|
||||
try {
|
||||
$param['create_time'] = time();
|
||||
$insertId = self::strict(false)->field(true)->insertGetId($param);
|
||||
$follow_time = self::order('follow_time', 'desc')->where(['delete_time'=>0,'cid'=>$param['cid']])->value('follow_time');
|
||||
$next_time = self::order('next_time', 'desc')->where(['delete_time'=>0,'cid'=>$param['cid']])->value('next_time');
|
||||
Db::name('Customer')->strict(false)->field(true)->update(['id'=>$param['cid'],'follow_time'=>$follow_time,'next_time'=>$next_time]);
|
||||
add_log('add', $insertId, $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$insertId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑信息
|
||||
* @param $param
|
||||
*/
|
||||
public function edit($param)
|
||||
{
|
||||
try {
|
||||
$param['update_time'] = time();
|
||||
self::where('id', $param['id'])->strict(false)->field(true)->update($param);
|
||||
$follow_time = self::order('follow_time', 'desc')->where(['delete_time'=>0,'cid'=>$param['cid']])->value('follow_time');
|
||||
$next_time = self::order('next_time', 'desc')->where(['delete_time'=>0,'cid'=>$param['cid']])->value('next_time');
|
||||
Db::name('Customer')->strict(false)->field(true)->update(['id'=>$param['cid'],'follow_time'=>$follow_time,'next_time'=>$next_time]);
|
||||
add_log('edit', $param['id'], $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$param['id']]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据id获取信息
|
||||
* @param $id
|
||||
*/
|
||||
public function getById($id)
|
||||
{
|
||||
$info = self::find($id);
|
||||
$info['customer'] = Db::name('Customer')->where(['id' => $info['cid']])->value('name');
|
||||
$file_array=[];
|
||||
if(!empty($info['file_ids'])){
|
||||
$file_array = Db::name('File')->where('id','in',$info['file_ids'])->select()->toArray();
|
||||
}
|
||||
$info['file_array'] = $file_array;
|
||||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除信息
|
||||
* @param $id
|
||||
* @param $type
|
||||
* @return array
|
||||
*/
|
||||
public function delById($id,$type=0)
|
||||
{
|
||||
$cid = self::where('id', $id)->value('cid');
|
||||
if($type==0){
|
||||
//逻辑删除
|
||||
try {
|
||||
$param['delete_time'] = time();
|
||||
self::where('id', $id)->update(['delete_time'=>time()]);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
else{
|
||||
//物理删除
|
||||
try {
|
||||
self::destroy($id);
|
||||
add_log('delete', $id);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
$follow_time = self::order('follow_time', 'desc')->where(['delete_time'=>0,'cid'=>$cid])->value('follow_time');
|
||||
$next_time = self::order('next_time', 'desc')->where(['delete_time'=>0,'cid'=>$cid])->value('next_time');
|
||||
if(!empty($follow_time)){
|
||||
Db::name('Customer')->strict(false)->field(true)->update(['id'=>$cid,'follow_time'=>$follow_time,'next_time'=>$next_time]);
|
||||
}
|
||||
else{
|
||||
Db::name('Customer')->strict(false)->field(true)->update(['id'=>$cid,'follow_time'=>0,'next_time'=>0]);
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
namespace app\customer\model;
|
||||
use think\model;
|
||||
use think\facade\Db;
|
||||
class Industry extends Model
|
||||
{
|
||||
/**
|
||||
* 获取分页列表
|
||||
* @param $where
|
||||
* @param $param
|
||||
*/
|
||||
public function datalist($where, $param)
|
||||
{
|
||||
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
|
||||
$order = empty($param['order']) ? 'id desc' : $param['order'];
|
||||
try {
|
||||
$list = self::where($where)->order($order)->paginate(['list_rows'=> $rows]);
|
||||
return $list;
|
||||
} catch(\Exception $e) {
|
||||
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加数据
|
||||
* @param $param
|
||||
*/
|
||||
public function add($param)
|
||||
{
|
||||
$insertId = 0;
|
||||
try {
|
||||
$param['create_time'] = time();
|
||||
$insertId = self::strict(false)->field(true)->insertGetId($param);
|
||||
add_log('add', $insertId, $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$insertId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑信息
|
||||
* @param $param
|
||||
*/
|
||||
public function edit($param)
|
||||
{
|
||||
try {
|
||||
$param['update_time'] = time();
|
||||
self::where('id', $param['id'])->strict(false)->field(true)->update($param);
|
||||
add_log('edit', $param['id'], $param);
|
||||
} catch(\Exception $e) {
|
||||
return to_assign(1, '操作失败,原因:'.$e->getMessage());
|
||||
}
|
||||
return to_assign(0,'操作成功',['return_id'=>$param['id']]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据id获取信息
|
||||
* @param $id
|
||||
*/
|
||||
public function getById($id)
|
||||
{
|
||||
$info = self::find($id);
|
||||
return $info;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
namespace app\customer\validate;
|
||||
|
||||
use think\Validate;
|
||||
|
||||
class BasicCustomerCheck extends Validate
|
||||
{
|
||||
protected $rule = [
|
||||
'title' => 'require',
|
||||
'id' => 'require',
|
||||
];
|
||||
|
||||
protected $message = [
|
||||
'title.require' => '名称不能为空',
|
||||
'id.require' => '缺少更新条件',
|
||||
];
|
||||
|
||||
protected $scene = [
|
||||
'add' => ['title'],
|
||||
'edit' => ['id', 'title'],
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
namespace app\customer\validate;
|
||||
use think\Validate;
|
||||
use think\facade\Db;
|
||||
|
||||
class ChanceValidate extends Validate
|
||||
{
|
||||
// 自定义验证规则
|
||||
protected function checkOne($value,$rule,$data=[])
|
||||
{
|
||||
$id = isset($data['id'])?$data['id']:0;
|
||||
$count = Db::name('CustomerChance')->where([['title','=',$data['title']],['id','<>',$id],['delete_time','=',0]])->count();
|
||||
return $count == 0 ? true : false;
|
||||
}
|
||||
|
||||
protected $rule = [
|
||||
'title' => 'require|checkOne',
|
||||
'id' => 'require',
|
||||
];
|
||||
|
||||
protected $message = [
|
||||
'title.require' => '名称不能为空',
|
||||
'title.checkOne' => '同样的名称已经存在',
|
||||
'id.require' => '缺少更新条件',
|
||||
];
|
||||
|
||||
protected $scene = [
|
||||
'add' => ['title'],
|
||||
'edit' => ['title', 'id'],
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
namespace app\customer\validate;
|
||||
use think\Validate;
|
||||
use think\facade\Db;
|
||||
|
||||
class ContactValidate extends Validate
|
||||
{
|
||||
protected $rule = [
|
||||
'name' => 'require',
|
||||
'id' => 'require',
|
||||
];
|
||||
|
||||
protected $message = [
|
||||
'title.require' => '名称不能为空',
|
||||
'id.require' => '缺少更新条件',
|
||||
];
|
||||
|
||||
protected $scene = [
|
||||
'add' => ['title'],
|
||||
'edit' => ['title', 'id'],
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
namespace app\customer\validate;
|
||||
use think\Validate;
|
||||
use think\facade\Db;
|
||||
|
||||
class CustomerValidate extends Validate
|
||||
{
|
||||
// 自定义验证规则
|
||||
protected function checkOne($value,$rule,$data=[])
|
||||
{
|
||||
$id = isset($data['id'])?$data['id']:0;
|
||||
$count = Db::name('Customer')->where([['name','=',$data['name']],['id','<>',$id],['delete_time','=',0]])->count();
|
||||
return $count == 0 ? true : false;
|
||||
}
|
||||
|
||||
protected $rule = [
|
||||
'name' => 'require|checkOne',
|
||||
'id' => 'require',
|
||||
];
|
||||
|
||||
protected $message = [
|
||||
'name.require' => '名称不能为空',
|
||||
'name.checkOne' => '同样的名称已经存在',
|
||||
'id.require' => '缺少更新条件',
|
||||
];
|
||||
|
||||
protected $scene = [
|
||||
'add' => ['name'],
|
||||
'edit' => ['name','id'],
|
||||
'oaedit' => ['id'],
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
namespace app\customer\validate;
|
||||
use think\Validate;
|
||||
use think\facade\Db;
|
||||
|
||||
class GradeValidate extends Validate
|
||||
{
|
||||
// 自定义验证规则
|
||||
protected function checkOne($value,$rule,$data=[])
|
||||
{
|
||||
$id = isset($data['id'])?$data['id']:0;
|
||||
$count = Db::name('CustomerGrade')->where([['title','=',$data['title']],['id','<>',$id],['delete_time','=',0]])->count();
|
||||
return $count == 0 ? true : false;
|
||||
}
|
||||
|
||||
protected $rule = [
|
||||
'title' => 'require|checkOne',
|
||||
'id' => 'require',
|
||||
];
|
||||
|
||||
protected $message = [
|
||||
'title.require' => '名称不能为空',
|
||||
'title.checkOne' => '同样的名称已经存在',
|
||||
'id.require' => '缺少更新条件',
|
||||
];
|
||||
|
||||
protected $scene = [
|
||||
'add' => ['title'],
|
||||
'edit' => ['title', 'id'],
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
namespace app\customer\validate;
|
||||
use think\Validate;
|
||||
use think\facade\Db;
|
||||
|
||||
class IndustryValidate extends Validate
|
||||
{
|
||||
// 自定义验证规则
|
||||
protected function checkOne($value,$rule,$data=[])
|
||||
{
|
||||
$id = isset($data['id'])?$data['id']:0;
|
||||
$count = Db::name('Industry')->where([['title','=',$data['title']],['id','<>',$id]])->count();
|
||||
return $count == 0 ? true : false;
|
||||
}
|
||||
|
||||
protected $rule = [
|
||||
'title' => 'require|checkOne',
|
||||
'id' => 'require',
|
||||
];
|
||||
|
||||
protected $message = [
|
||||
'title.require' => '名称不能为空',
|
||||
'title.checkOne' => '同样的名称已经存在',
|
||||
'id.require' => '缺少更新条件',
|
||||
];
|
||||
|
||||
protected $scene = [
|
||||
'add' => ['title'],
|
||||
'edit' => ['title', 'id'],
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
* @Author 勾股工作室 <hdm58@qq.com>
|
||||
+-----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
namespace app\customer\validate;
|
||||
use think\Validate;
|
||||
use think\facade\Db;
|
||||
|
||||
class SourceValidate extends Validate
|
||||
{
|
||||
// 自定义验证规则
|
||||
protected function checkOne($value,$rule,$data=[])
|
||||
{
|
||||
$id = isset($data['id'])?$data['id']:0;
|
||||
$count = Db::name('CustomerSource')->where([['title','=',$data['title']],['id','<>',$id],['delete_time','=',0]])->count();
|
||||
return $count == 0 ? true : false;
|
||||
}
|
||||
|
||||
protected $rule = [
|
||||
'title' => 'require|checkOne',
|
||||
'id' => 'require',
|
||||
];
|
||||
|
||||
protected $message = [
|
||||
'title.require' => '名称不能为空',
|
||||
'title.checkOne' => '同样的名称已经存在',
|
||||
'id.require' => '缺少更新条件',
|
||||
];
|
||||
|
||||
protected $scene = [
|
||||
'add' => ['title'],
|
||||
'edit' => ['title', 'id'],
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,140 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-3">
|
||||
<div class="layui-card">
|
||||
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
|
||||
<ul class="layui-tab-title" style="border-bottom:none;">
|
||||
<li class="layui-this" data-index="1">客户状态</li>
|
||||
<li data-index="2">客户意向</li>
|
||||
<li data-index="3">跟进方式</li>
|
||||
<li data-index="4">销售阶段</li>
|
||||
</ul>
|
||||
<div class="layui-tab-content" style="padding:0">
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm add-new" type="button">+ 新增内容</button>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var table = layui.table, tool = layui.tool, element = layui.element,form = layui.form;
|
||||
var data_type=1;
|
||||
element.on('tab(tab)', function(data){
|
||||
data_type = data.index+1;
|
||||
layui.pageTable.reload({where:{types:data_type},page:{curr:1}});
|
||||
return false;
|
||||
});
|
||||
|
||||
layui.pageTable = table.render({
|
||||
elem: '#test'
|
||||
,toolbar: '#toolbarDemo'
|
||||
,title:'基础数据列表'
|
||||
,url: "/customer/basic/datalist"
|
||||
,where:{types:data_type}
|
||||
,page: false
|
||||
,cellMinWidth: 80
|
||||
,cols: [[
|
||||
{field:'id',width:80, title: 'ID号', align:'center'}
|
||||
,{field:'title',title: '名称'}
|
||||
,{field:'status', title: '状态',width:80,align:'center',templet: function(d){
|
||||
var html1='<span class="green">正常</span>';
|
||||
var html2='<span class="yellow">禁用</span>';
|
||||
if(d.status==1){
|
||||
return html1;
|
||||
}
|
||||
else{
|
||||
return html2;
|
||||
}
|
||||
}}
|
||||
,{width:100,title: '操作', align:'center',templet: function(d){
|
||||
var html='';
|
||||
var btn='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</a>';
|
||||
var btn1='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="disable">禁用</a>';
|
||||
var btn2='<a class="layui-btn layui-btn-xs" lay-event="open">启用</a>';
|
||||
if(d.status==1){
|
||||
html = '<div class="layui-btn-group">'+btn+btn1+'</div>';
|
||||
}
|
||||
else{
|
||||
html = '<div class="layui-btn-group">'+btn+btn2+'</div>';
|
||||
}
|
||||
return html;
|
||||
}}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(test)',function (obj) {
|
||||
if(obj.event === 'edit'){
|
||||
addExpense(obj.data.id,obj.data.title);
|
||||
}
|
||||
if(obj.event === 'disable'){
|
||||
layer.confirm('确定要禁用该数据吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/basic/set", { id: obj.data.id,status: 0,title: obj.data.title}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if(obj.event === 'open'){
|
||||
layer.confirm('确定要启用该数据吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/basic/set", { id: obj.data.id,status: 1,title: obj.data.title}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('body').on('click','.add-new',function(){
|
||||
addExpense(0,'');
|
||||
});
|
||||
|
||||
function addExpense(id,val){
|
||||
var title = '新增内容';
|
||||
if(id>0){
|
||||
title = '编辑内容';
|
||||
}
|
||||
layer.prompt({
|
||||
title: title,
|
||||
value: val,
|
||||
yes: function(index, layero) {
|
||||
// 获取文本框输入的值
|
||||
var value = layero.find(".layui-layer-input").val();
|
||||
if (value) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/basic/add", {id: id,types:data_type,title: value}, callback);
|
||||
layer.close(index);
|
||||
} else {
|
||||
layer.msg('请填写内容');
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,89 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-3">新增销售机会</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户名称</td>
|
||||
<td colspan="3">{$customer_name}</td>
|
||||
<td class="layui-td-gray-2">客户联系人<font>*</font></td>
|
||||
<td>
|
||||
<select name="contact_id" lay-verify="required" lay-reqText="请选择联系人">
|
||||
<option value="">请选择</option>
|
||||
{volist name=":customer_contact($customer_id)" id="v"}
|
||||
<option value="{$v.id}">{$v.name}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">机会标题<font>*</font></td>
|
||||
<td colspan="3"><input type="text" name="title" autocomplete="off" lay-verify="required" lay-reqText="请输入机会标题" placeholder="请输入机会标题" class="layui-input"></td>
|
||||
<td class="layui-td-gray">发现时间<font>*</font></td>
|
||||
<td><input type="text" name="discovery_time" readonly lay-verify="required" lay-reqText="请选择发现时间" placeholder="请选择发现时间" class="layui-input tool-time"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">销售阶段<font>*</font></td>
|
||||
<td>
|
||||
<select name="stage" lay-verify="required" lay-reqText="请选择">
|
||||
<option value="">请选择</option>
|
||||
{volist name=":get_base_type_data('basic_customer',4)" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">预计金额<font>*</font></td>
|
||||
<td><input type="text" name="expected_amount" autocomplete="off" lay-verify="required|number" lay-reqText="请输入预计金额" placeholder="请输入预计金额" class="layui-input"></td>
|
||||
<td class="layui-td-gray-2">预计签单时间<font>*</font></td>
|
||||
<td><input type="text" name="expected_time" readonly lay-verify="required" lay-reqText="请选择预计签单时间" placeholder="请选择预计签单时间" class="layui-input tool-time"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray" style="vertical-align:top">需求描述<font>*</font></td>
|
||||
<td colspan="5"><textarea name="content" placeholder="请输入需求描述" lay-verify="required" lay-reqText="请输入需求描述" class="layui-textarea"></textarea></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">归属人员<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="belong_name" readonly placeholder="请选择归属人员" class="layui-input picker-admin">
|
||||
<input type="hidden" name="belong_uid" lay-verify="required" lay-reqText="请选择归属人员">
|
||||
</td>
|
||||
<td class="layui-td-gray">协助人员</td>
|
||||
<td colspan="3">
|
||||
<input type="text" name="assist_names" placeholder="请选择协助人员" class="layui-input picker-admin" data-type="2">
|
||||
<input type="hidden" name="assist_ids">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-4">
|
||||
<input type="hidden" name="cid" value="{$customer_id}">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','oaPicker'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,oaPicker = layui.oaPicker;
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000,'chanceTable');
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/customer/chance/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,127 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<form class="layui-form gg-form-bar border-x border-t" lay-filter="barsearchform">
|
||||
{gt name="$is_auth" value="0"}
|
||||
<div class="layui-input-inline user-name" style="width:100px;">
|
||||
<input type="text" name="username" placeholder="选择归属人" class="layui-input picker-admin" readonly />
|
||||
<input type="text" name="uid" value="" style="display:none" />
|
||||
</div>
|
||||
{/gt}
|
||||
<div class="layui-input-inline" style="width:120px;">
|
||||
<select name="stage">
|
||||
<option value="">销售阶段</option>
|
||||
{volist name=":get_base_type_data('basic_customer',4)" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:300px;">
|
||||
<input type="text" name="keywords" placeholder="输入关键字,机会主题/沟通内容/客户名称" class="layui-input" autocomplete="off" />
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div>
|
||||
<h3>线索机会</h3>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','oaPicker','tablePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, tool = layui.tool, form = layui.form;
|
||||
layui.chanceTable = table.render({
|
||||
elem: '#test'
|
||||
,toolbar: '#toolbarDemo'
|
||||
,title:'线索机会列表'
|
||||
,url: "/customer/chance/datalist"
|
||||
,cellMinWidth: 80
|
||||
,page: true //开启分页
|
||||
,is_excel: true
|
||||
,height: 'full-114'
|
||||
,limit: 20
|
||||
,cols: [[
|
||||
{field: 'id', title: '编号', width: 80, align: 'center'}
|
||||
,{field:'belong_name',title: '归属人',align:'center',width: 80}
|
||||
,{field:'title',title: '机会主题'}
|
||||
,{field:'customer',title: '关联客户',width: 300}
|
||||
,{field:'discovery_time',title: '发现时间',align:'center',width: 100}
|
||||
,{ field: 'expected_time', title: '预计签单时间', width: 110, align: 'center'}
|
||||
,{ field: 'expected_amount', title: '预计签单金额', width: 110, align: 'center'}
|
||||
,{field:'stage_name',title: '当前阶段',width: 80, align: 'center'}
|
||||
,{field:'is_contract',title: '是否签单', align:'center',width: 80,templet: function(d){
|
||||
if(d.is_contract>0){
|
||||
return '<span class="green">已签单</span>';
|
||||
}
|
||||
else{
|
||||
return '<span class="red">未签单</span>';
|
||||
}
|
||||
}}
|
||||
,{fixed:'right',width:130,title: '操作', align:'center',templet: function(d){
|
||||
var html = '<div class="layui-btn-group">';
|
||||
var btn1='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>';
|
||||
var btn2='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</a>';
|
||||
var btn3='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>';
|
||||
if(d.is_contract>0){
|
||||
btn1='';
|
||||
btn3='';
|
||||
}
|
||||
if(d.admin_id == login_admin){
|
||||
return '<div class="layui-btn-group">'+btn1+btn2+btn3+'</div>';
|
||||
}
|
||||
else{
|
||||
return '<div class="layui-btn-group">'+btn2+'</div>';
|
||||
}
|
||||
}}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(test)', function(obj){
|
||||
var data = obj.data; //获得当前行数据
|
||||
var layEvent = obj.event;
|
||||
if(layEvent === 'edit'){ //编辑
|
||||
let url = '/customer/chance/add/id/'+data.id;
|
||||
tool.side(url);
|
||||
}
|
||||
if(layEvent === 'view'){ //查看
|
||||
let url = '/customer/chance/view/id/'+data.id;
|
||||
tool.side(url);
|
||||
}
|
||||
if(layEvent === 'del'){ //删除
|
||||
layer.confirm('确定要删除该销售机会吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.delete('/customer/chance/chance_del',{'id':data.id},callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
return false;
|
||||
})
|
||||
|
||||
//监听搜索提交
|
||||
form.on('submit(webform)', function(data) {
|
||||
layui.pageTable.reload({
|
||||
where: data.field,
|
||||
page: {curr: 1}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,90 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-4">
|
||||
<h3 class="pb-3">编辑销售机会</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户名称</td>
|
||||
<td colspan="3">{$detail.customer}</td>
|
||||
<td class="layui-td-gray-2">客户联系人<font>*</font></td>
|
||||
<td>
|
||||
<select name="contact_id" lay-verify="required" lay-reqText="请选择联系人">
|
||||
<option value="">请选择</option>
|
||||
{volist name=":customer_contact($detail.cid)" id="v"}
|
||||
<option value="{$v.id}" {eq name="$v.id" value="$detail.contact_id"} selected{/eq}>{$v.name}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">机会标题<font>*</font></td>
|
||||
<td colspan="3"><input type="text" name="title" value="{$detail.title}" autocomplete="off" lay-verify="required" lay-reqText="请输入机会标题" placeholder="请输入机会标题" class="layui-input"></td>
|
||||
<td class="layui-td-gray">发现时间<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="discovery_time" value="{$detail.discovery_time|date='Y-m-d'}" readonly lay-verify="required" lay-reqText="请选择发现时间" placeholder="请选择发现时间" class="layui-input tool-time">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">销售阶段<font>*</font></td>
|
||||
<td>
|
||||
<select name="stage" lay-verify="required" lay-reqText="请选择">
|
||||
<option value="">请选择</option>
|
||||
{volist name=":get_base_type_data('basic_customer',4)" id="v"}
|
||||
<option value="{$v.id}" {eq name="$v.id" value="$detail.stage"} selected{/eq}>{$v.title}</option>
|
||||
{/volist}
|
||||
</td>
|
||||
<td class="layui-td-gray">预计金额<font>*</font></td>
|
||||
<td> <input type="text" name="expected_amount" autocomplete="off" value="{$detail.expected_amount}" lay-verify="required|number" lay-reqText="请输入预计金额" placeholder="请输入预计金额" class="layui-input"></td>
|
||||
<td class="layui-td-gray-2">预计签单时间<font>*</font></td>
|
||||
<td><input type="text" name="expected_time" value="{$detail.expected_time|date='Y-m-d'}" readonly lay-verify="required" lay-reqText="请选择预计签单时间" placeholder="请选择预计签单时间" class="layui-input tool-time"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray" style="vertical-align:top">需求描述<font>*</font></td>
|
||||
<td colspan="5"><textarea name="content" placeholder="请输入需求描述" lay-verify="required" lay-reqText="请输入需求描述" class="layui-textarea">{$detail.content}</textarea></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">归属人员<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="belong_name" value="{$detail.belong_name}" readonly placeholder="请选择归属人员" class="layui-input picker-admin">
|
||||
<input type="hidden" name="belong_uid" value="{$detail.belong_uid}" lay-verify="required" lay-reqText="请选择归属人员">
|
||||
</td>
|
||||
<td class="layui-td-gray">协助人员</td>
|
||||
<td colspan="3">
|
||||
<input type="text" name="assist_names" value="{$detail.assist_names}" placeholder="请选择协助人员" class="layui-input picker-admin" data-type="2">
|
||||
<input type="hidden" name="assist_ids" value="{$detail.assist_ids}">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-4">
|
||||
<input type="hidden" name="id" value="{$detail.id}">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','oaPicker'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,oaPicker = layui.oaPicker;
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code==0){
|
||||
tool.sideClose(1000,'chanceTable');
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/customer/chance/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,57 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-4">
|
||||
<h3 class="pb-3">销售机会</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户名称</td>
|
||||
<td colspan="3">{$detail.customer}</td>
|
||||
<td class="layui-td-gray-2">客户联系人</td>
|
||||
<td>{$detail.contact}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">机会标题</td>
|
||||
<td colspan="3">{$detail.title}</td>
|
||||
<td class="layui-td-gray">发现时间</td>
|
||||
<td>{$detail.discovery_time|date="Y-m-d"}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">销售阶段</td>
|
||||
<td>{$detail.stage_name}</td>
|
||||
<td class="layui-td-gray">预计金额</td>
|
||||
<td>{$detail.expected_amount}</td>
|
||||
<td class="layui-td-gray-2">预计签单时间</td>
|
||||
<td>{$detail.expected_time|date="Y-m-d"}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray" style="vertical-align:top">需求描述</td>
|
||||
<td colspan="5">{$detail.content}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">归属人员</td>
|
||||
<td>{$detail.belong_name}</td>
|
||||
<td class="layui-td-gray">协助人员</td>
|
||||
<td colspan="3">{$detail.assist_names}</td>
|
||||
</tr>
|
||||
{notempty name="$detail.contract"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">签单合同</td>
|
||||
<td colspan="5">{$detail.contract} <span class="layui-btn layui-btn-normal layui-btn-xs side-a" data-href="/contract/contract/view?id={$detail.contract_id}">详情</span></td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
</table>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
var moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,96 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-2">新增联系人</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户名称</td>
|
||||
<td colspan="5">{$customer_name|default=''}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">姓名<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="name" autocomplete="off" lay-verify="required" lay-reqText="请输入联系人姓名" placeholder="请输入联系人姓名" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">联系电话<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="mobile" autocomplete="off" lay-verify="required" lay-reqText="请输入联系人电话" placeholder="请输入联系人电话" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">性别<font>*</font></td>
|
||||
<td>
|
||||
<input type="radio" name="sex" value="1" title="男">
|
||||
<input type="radio" name="sex" value="2" title="女">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">微 信 号</td>
|
||||
<td>
|
||||
<input type="text" name="wechat" autocomplete="off" placeholder="请输入联系人微信号" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">QQ号码</td>
|
||||
<td>
|
||||
<input type="text" name="qq" autocomplete="off" placeholder="请输入联系人QQ号码" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">电子邮箱</td>
|
||||
<td>
|
||||
<input type="text" name="email" autocomplete="off" placeholder="请输入联系人电子邮箱" class="layui-input">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">称谓</td>
|
||||
<td>
|
||||
<input type="text" name="nickname" autocomplete="off" placeholder="请输入联系人的称谓" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">部门</td>
|
||||
<td>
|
||||
<input type="text" name="department" autocomplete="off" placeholder="请输入联系人所在部门" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">职务</td>
|
||||
<td>
|
||||
<input type="text" name="position" autocomplete="off" placeholder="请输入联系人担任的职务" class="layui-input">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">生日</td>
|
||||
<td><input type="text" name="birthday" readonly placeholder="请选择" class="layui-input tool-time"></td>
|
||||
<td class="layui-td-gray">家庭住址</td>
|
||||
<td colspan="3"><input type="text" name="address" placeholder="请输入联系人家庭住址" class="layui-input"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-3">
|
||||
<input type="hidden" name="cid" value="{$customer_id}">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool;
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
if(!data.field.sex){
|
||||
layer.msg('请选择性别');
|
||||
return false;
|
||||
}
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000,'contactTable');
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/customer/contact/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,103 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<form class="layui-form gg-form-bar border-t border-x" lay-filter="barsearchform">
|
||||
<div class="layui-input-inline" style="width:300px">
|
||||
<input type="text" name="keywords" placeholder="输入关键字,姓名/手机/邮箱" class="layui-input" autocomplete="off" />
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="table_customer_contact" lay-filter="table_customer_contact"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div>
|
||||
<h3>客户联系人</h3>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tablePlus','oaPicker'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, tool = layui.tool;
|
||||
|
||||
layui.contactTable = table.render({
|
||||
elem: "#table_customer_contact"
|
||||
,toolbar: "#toolbarDemo"
|
||||
,url: "/customer/contact/datalist"
|
||||
,page: true
|
||||
,limit: 20
|
||||
,is_excel: true
|
||||
,cellMinWidth: 80
|
||||
,height: 'full-114'
|
||||
,cols: [[
|
||||
{field:'id',width:80, title: 'ID号', align:'center'}
|
||||
,{field:'name',title: '姓名',align:'center',width:80}
|
||||
,{field:'mobile',title: '手机号码', align:'center',width:120}
|
||||
,{field:'email',title: '电子邮箱',width:200,templet: function(d){
|
||||
return d.email==''?'-':d.email;
|
||||
}}
|
||||
,{field:'qq',title: 'QQ号码', align:'center',width:100,templet: function(d){
|
||||
return d.qq==''?'-':d.qq;
|
||||
}}
|
||||
,{field:'wechat',title: '微信号', align:'center',width:100,templet: function(d){
|
||||
return d.wechat==''?'-':d.wechat;
|
||||
}}
|
||||
,{field:'customer',title: '关联客户'}
|
||||
,{field:'admin_name',title: '创建人',width:90,align:'center'}
|
||||
,{field:'create_time', title: '创建时间',width:150,align:'center'}
|
||||
,{width:120,fixed:'right',title: '操作', align:'center',ignoreExport:true,templet: function(d){
|
||||
var html='';
|
||||
var btn0='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">查看</a>';
|
||||
var btn1='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>';
|
||||
var btn2='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>';
|
||||
html = '<div class="layui-btn-group">'+btn0+btn1+btn2+'</div>';
|
||||
if(d.admin_id == login_admin){
|
||||
return html;
|
||||
}
|
||||
else{
|
||||
return btn0;
|
||||
}
|
||||
}}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(table_customer_contact)',function (obj) {
|
||||
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/customer/contact/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'edit') {
|
||||
tool.side("/customer/contact/add?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'del') {
|
||||
layer.confirm('确定要删除该联系人吗?', { icon: 3, title: '提示' }, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
obj.del();
|
||||
}
|
||||
}
|
||||
tool.delete("/customer/contact/del", { id: data.id }, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,97 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-2">编辑联系人</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户名称</td>
|
||||
<td colspan="5">{$detail.customer}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">姓名<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="name" value="{$detail.name}" autocomplete="off" lay-verify="required" lay-reqText="请输入联系人姓名" placeholder="请输入联系人姓名" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">联系电话<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="mobile" value="{$detail.mobile}" autocomplete="off" lay-verify="required" lay-reqText="请输入联系人电话" placeholder="请输入联系人电话" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">性别<font>*</font></td>
|
||||
<td>
|
||||
<input type="radio" name="sex" value="1" title="男" {eq name="$detail.sex" value="1"} checked{/eq}>
|
||||
<input type="radio" name="sex" value="2" title="女" {eq name="$detail.sex" value="2"} checked{/eq}>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">微 信 号</td>
|
||||
<td>
|
||||
<input type="text" name="wechat" value="{$detail.wechat}" autocomplete="off" placeholder="请输入联系人微信号" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">QQ号码</td>
|
||||
<td>
|
||||
<input type="text" name="qq" value="{$detail.qq}" autocomplete="off" placeholder="请输入联系人QQ号码" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">电子邮箱</td>
|
||||
<td>
|
||||
<input type="text" name="email" value="{$detail.email}" autocomplete="off" placeholder="请输入联系人电子邮箱" class="layui-input">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">称谓</td>
|
||||
<td>
|
||||
<input type="text" name="nickname" value="{$detail.nickname}" autocomplete="off" placeholder="请输入联系人的称谓" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">部门</td>
|
||||
<td>
|
||||
<input type="text" name="department" value="{$detail.department}" autocomplete="off" placeholder="请输入联系人所在部门" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">职务</td>
|
||||
<td>
|
||||
<input type="text" name="position" value="{$detail.position}" autocomplete="off" placeholder="请输入联系人担任的职务" class="layui-input">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">生日</td>
|
||||
<td><input type="text" name="birthday" value="{$detail.birthday}" readonly placeholder="请选择" class="layui-input tool-time"></td>
|
||||
<td class="layui-td-gray">家庭住址</td>
|
||||
<td colspan="3"><input type="text" value="{$detail.address}" name="address" placeholder="请输入联系人家庭住址" class="layui-input"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-3">
|
||||
<input type="hidden" name="id" value="{$detail.id}">
|
||||
<input type="hidden" name="scene" value="edit">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool;
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
if(!data.field.sex){
|
||||
layer.msg('请选择性别');
|
||||
return false;
|
||||
}
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000,'contactTable');
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/customer/contact/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,59 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-2">联系人信息</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户名称</td>
|
||||
<td colspan="5">{$detail.customer}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">姓名</td>
|
||||
<td>{$detail.name} </td>
|
||||
<td class="layui-td-gray">联系电话</td>
|
||||
<td>{$detail.mobile}</td>
|
||||
<td class="layui-td-gray">性别</td>
|
||||
<td>
|
||||
{eq name="$detail.sex" value="1"}男{/eq}
|
||||
{eq name="$detail.sex" value="2"}女{/eq}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">微 信 号</td>
|
||||
<td>{$detail.wechat}</td>
|
||||
<td class="layui-td-gray">QQ号码</td>
|
||||
<td>{$detail.qq}</td>
|
||||
<td class="layui-td-gray">电子邮箱</td>
|
||||
<td>{$detail.email}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">称谓</td>
|
||||
<td>{$detail.nickname}</td>
|
||||
<td class="layui-td-gray">部门</td>
|
||||
<td>{$detail.department}</td>
|
||||
<td class="layui-td-gray">职务</td>
|
||||
<td>{$detail.position}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">生日</td>
|
||||
<td>{$detail.birthday}</td>
|
||||
<td class="layui-td-gray">家庭住址</td>
|
||||
<td colspan="3">{$detail.address}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,151 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-3">新增客户信息</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户名称<font>*</font></td>
|
||||
<td colspan="3"><input type="text" name="name" lay-verify="required" lay-reqText="请输入客户名称" autocomplete="off" placeholder="请输入客户名称" class="layui-input"></td>
|
||||
<td class="layui-td-gray">客户来源<font>*</font></td>
|
||||
<td>
|
||||
<select name="source_id" lay-verify="required" lay-reqText="请选择客户来源">
|
||||
<option value="">请选择客户来源</option>
|
||||
{volist name=":get_base_data('customer_source')" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">联系地址<font>*</font></td>
|
||||
<td><input type="text" name="address" autocomplete="off" lay-verify="required" lay-reqText="请输入客户联系地址" placeholder="请输入客户联系地址" class="layui-input"></td>
|
||||
<td class="layui-td-gray">所属行业<font>*</font></td>
|
||||
<td>
|
||||
<select name="industry_id" lay-verify="required" lay-reqText="请选择所属行业">
|
||||
<option value="">请选择所属行业</option>
|
||||
{volist name=":get_base_data('Industry')" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">客户等级<font>*</font></td>
|
||||
<td>
|
||||
<select name="grade_id" lay-verify="required" lay-reqText="请选择客户等级">
|
||||
<option value="">请选择客户等级</option>
|
||||
{volist name=":get_base_data('customer_grade')" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
{eq name="$sea" value="0"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">归属员工</td>
|
||||
<td>
|
||||
<input type="text" name="belong_name" value="{$userinfo.name|default=''}" autocomplete="off" readonly placeholder="请选择客户归属人" class="layui-input">
|
||||
<input type="hidden" name="belong_uid" value="{$userinfo.id|default=0}">
|
||||
<input type="hidden" name="belong_did" value="{$userinfo.did|default=0}">
|
||||
</td>
|
||||
<td class="layui-td-gray">归属部门</td>
|
||||
<td><input type="text" name="belong_department" value="{$userinfo.department|default=''}" autocomplete="off" readonly class="layui-input"></td>
|
||||
<td class="layui-td-gray">共享员工</td>
|
||||
<td>
|
||||
<input type="text" name="share_names" autocomplete="off" readonly placeholder="请选择共享人员" class="layui-input picker-admin" data-type="2">
|
||||
<input type="hidden" name="share_ids">
|
||||
</td>
|
||||
</tr>
|
||||
{/eq}
|
||||
<tr>
|
||||
<td class="layui-td-gray" style="vertical-align:top">客户介绍<font>*</font></td>
|
||||
<td colspan="5"><textarea name="content" placeholder="请输入客户介绍信息" lay-verify="required" lay-reqText="请输入客户介绍信息" class="layui-textarea"></textarea></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray" style="vertical-align:top">经营业务</td>
|
||||
<td colspan="5"><textarea name="market" placeholder="请输入客户主要经营业务" class="layui-textarea"></textarea></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6"><strong>首要联系人</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">联 系 人<font>*</font></td>
|
||||
<td><input type="text" name="c_name" autocomplete="off" lay-verify="required" lay-reqText="请输入联系人姓名" placeholder="请输入联系人姓名" class="layui-input"></td>
|
||||
<td class="layui-td-gray">联系电话<font>*</font></td>
|
||||
<td><input type="text" name="c_mobile" autocomplete="off" lay-verify="required" lay-reqText="请输入联系人电话" placeholder="请输入联系人电话" class="layui-input"></td>
|
||||
<td class="layui-td-gray">性别<font>*</font></td>
|
||||
<td>
|
||||
<input type="radio" name="c_sex" value="1" title="男">
|
||||
<input type="radio" name="c_sex" value="2" title="女" >
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">电子邮箱</td>
|
||||
<td><input type="text" name="c_email" autocomplete="off" placeholder="请输入联系人电子邮箱" class="layui-input"></td>
|
||||
<td class="layui-td-gray">微 信 号</td>
|
||||
<td><input type="text" name="c_wechat" autocomplete="off" placeholder="请输入联系人微信号" class="layui-input"></td>
|
||||
<td class="layui-td-gray">QQ号码</td>
|
||||
<td><input type="text" name="c_qq" autocomplete="off" placeholder="请输入联系人QQ号码" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr><td colspan="6"><strong>备注信息</strong></td></tr>
|
||||
<tr>
|
||||
<td colspan="6"><textarea name="remark" placeholder="请输入备注信息" class="layui-textarea"></textarea></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-4">
|
||||
<input type="hidden" name="id" value="{$detail.id|default=0}"/>
|
||||
<input type="hidden" name="scene" value="add"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','oaPicker'];
|
||||
function gouguInit() {
|
||||
var form = layui.form, tool = layui.tool,oaPicker = layui.oaPicker;
|
||||
//选择归属人人弹窗
|
||||
$('body').on('click','[name="belong_name"]',function () {
|
||||
var ids=$('[name="belong_uid"]').val(),names=$('[name="belong_name"]').val();
|
||||
oaPicker.employeeInit({
|
||||
ids:ids,
|
||||
names:names,
|
||||
type:1,
|
||||
callback:function(data){
|
||||
let select_id=[],select_name=[],select_did=[],select_dname=[];
|
||||
for(var a=0; a<data.length;a++){
|
||||
select_id.push(data[a].id);
|
||||
select_name.push(data[a].name);
|
||||
select_did.push(data[a].did);
|
||||
select_dname.push(data[a].department);
|
||||
}
|
||||
$('[name="belong_uid"]').val(select_id.join(','));
|
||||
$('[name="belong_name"]').val(select_name.join(','));
|
||||
$('[name="belong_did"]').val(select_did.join(','));
|
||||
$('[name="belong_department"]').val(select_dname.join(','));
|
||||
}
|
||||
});
|
||||
});
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
if(!data.field.c_sex){
|
||||
layer.msg('请完善首要联系人性别');
|
||||
return false;
|
||||
}
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/customer/customer/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,290 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
{block name="style"}
|
||||
<style>
|
||||
.tab-1 .user-name,.tab-2 .user-name{display:none;}
|
||||
</style>
|
||||
{/block}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
|
||||
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this">全部客户</li>
|
||||
<li>我的客户</li>
|
||||
<li {eq name="$is_leader" value="0"} style="display:none;"{/eq}>下属客户</li>
|
||||
<li>共享客户</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<form class="layui-form gg-form-bar border-x tab-0" id="barsearchform" lay-filter="barsearchform">
|
||||
<div class="layui-input-inline" style="width:172px;">
|
||||
<input type="text" class="layui-input" data-range="~" placeholder="最近跟进日期" readonly name="follow_time" id="follow_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:172px;">
|
||||
<input type="text" class="layui-input" data-range="~" placeholder="下次跟进日期" readonly name="next_time" id="next_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:100px;">
|
||||
<select name="industry_id">
|
||||
<option value="">所属行业</option>
|
||||
{volist name=":get_base_data('Industry')" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:100px;">
|
||||
<select name="grade_id">
|
||||
<option value="">客户等级</option>
|
||||
{volist name=":get_base_data('customer_grade')" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:100px;">
|
||||
<select name="source_id">
|
||||
<option value="">渠道来源</option>
|
||||
{volist name=":get_base_data('customer_source')" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:100px;">
|
||||
<select name="customer_status">
|
||||
<option value="">客户状态</option>
|
||||
{volist name=":get_base_type_data('basic_customer',1)" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:100px;">
|
||||
<select name="intent_status">
|
||||
<option value="">客户意向</option>
|
||||
{volist name=":get_base_type_data('basic_customer',2)" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
{gt name="$is_leader" value="0"}
|
||||
<div class="layui-input-inline user-name" style="width:100px;">
|
||||
<input type="text" name="username" placeholder="下属员工" class="layui-input picker-sub" readonly />
|
||||
<input type="text" name="uid" value="" style="display:none" />
|
||||
</div>
|
||||
{/gt}
|
||||
<div class="layui-input-inline" style="width:188px;">
|
||||
<input type="text" name="keywords" placeholder="输入关键字,客户名称" class="layui-input" autocomplete="off" />
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:148px">
|
||||
<input type="hidden" name="tab" value="0" />
|
||||
<input type="hidden" name="order_field" value=''>
|
||||
<input type="hidden" name="order_type" value=''>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="table_customer" lay-filter="table_customer"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-group">
|
||||
<button class="layui-btn layui-btn-sm tool-add" type="button" data-href="/customer/customer/add">+ 添加客户</button>
|
||||
<button class="layui-btn layui-btn-normal layui-btn-sm" lay-event="import"><i class="layui-icon"></i>批量导入</button>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const is_leader = '{$is_leader}';
|
||||
const moduleInit = ['tool','tablePlus','oaPicker','uploadPlus','laydatePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, tool = layui.tool ,form = layui.form,element = layui.element, oaPicker = layui.oaPicker,uploadPlus=layui.uploadPlus,laydatePlus=layui.laydatePlus;
|
||||
var follow_time = new laydatePlus({'target':'follow_time'});
|
||||
var next_time = new laydatePlus({'target':'next_time'});
|
||||
//tab切换
|
||||
element.on('tab(tab)', function(data){
|
||||
$('[name="tab"]').val(data.index);
|
||||
$("#barsearchform")[0].reset();
|
||||
$("#barsearchform").attr('class','layui-form gg-form-bar border-x tab-'+data.index);
|
||||
let searchObject = form.val('barsearchform');
|
||||
layui.pageTable.reload({where:searchObject,page:{curr:1}});
|
||||
return false;
|
||||
});
|
||||
layui.pageTable = table.render({
|
||||
elem: "#table_customer"
|
||||
,title: '客户列表'
|
||||
,toolbar: "#toolbarDemo"
|
||||
,url: "/customer/customer/datalist"
|
||||
,page: true
|
||||
,limit: 20
|
||||
,cellMinWidth: 80
|
||||
,height: 'full-154'
|
||||
,autoSort: false
|
||||
,cols:[
|
||||
[ //表头
|
||||
{type:'checkbox',fixed:'left'},
|
||||
{field: 'id',title: 'ID号',align: 'center',sort: true,width: 80},
|
||||
{
|
||||
field: 'name',
|
||||
title: '客户名称',
|
||||
minWidth:300,
|
||||
templet: function (d) {
|
||||
return '<span class="layui-color-' + d.grade_id + '">『' + d.grade + '』</span>'+d.name
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'customer_status_name',
|
||||
title: '客户状态',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'intent_status_name',
|
||||
title: '客户意向',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'contact_name',
|
||||
title: '联系人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'contact_mobile',
|
||||
title: '手机号码',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},{
|
||||
field: 'follow_time',
|
||||
title: '最近跟进时间',
|
||||
align: 'center',
|
||||
sort: true,
|
||||
width: 120
|
||||
},{
|
||||
field: 'next_time',
|
||||
title: '下次跟进时间',
|
||||
align: 'center',
|
||||
sort: true,
|
||||
width: 120
|
||||
},{
|
||||
field: 'source',
|
||||
title: '来源渠道',
|
||||
align: 'center',
|
||||
width: 100
|
||||
}, {
|
||||
field: 'industry',
|
||||
title: '客户所属行业',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},{
|
||||
field: 'belong_name',
|
||||
title: '所属员工',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'belong_department',
|
||||
title: '所属部门',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'create_time',
|
||||
title: '创建时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'right',
|
||||
fixed:'right',
|
||||
title: '操作',
|
||||
width: 142,
|
||||
align: 'center',
|
||||
templet: function (d) {
|
||||
var html = '<div class="layui-btn-group">';
|
||||
var btn0='<span class="layui-btn layui-btn-xs layui-bg-blue" lay-event="view">查看</span>';
|
||||
var btn1='<span class="layui-btn layui-btn-xs" lay-event="edit">编辑</span>';
|
||||
var btn2='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="remove">移入公海</span>';
|
||||
if(d.belong_uid == login_admin && d.is_lock==0){
|
||||
return html+btn0+btn1+btn2+'</div>';
|
||||
}
|
||||
else{
|
||||
return html+btn0+'</div>';
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
//表头工具栏事件
|
||||
table.on('toolbar(table_customer)', function(obj){
|
||||
var checkStatus = table.checkStatus(obj.config.id);
|
||||
var data = checkStatus.data;
|
||||
if (obj.event === 'import') {
|
||||
let importUpload = new uploadPlus({
|
||||
"title":'批量导入客户',
|
||||
"use":'import',
|
||||
"url":'/api/import/import_customer/type/my',
|
||||
"import":{
|
||||
"template":'/static/home/file/勾股OA客户导入模板.xlsx',
|
||||
"tips":'如果导入失败,请根据提示注意检查表格数据,客户来源、所属行业、需要是系统中存在的数据,如果不存在的话可能会导入失败。'
|
||||
},
|
||||
callback:function(res){
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
var idArray=[];
|
||||
for(var i=0;i<data.length;i++){
|
||||
idArray.push(data[i].id);
|
||||
}
|
||||
if (obj.event === 'sea') {
|
||||
if(data.length==0){
|
||||
layer.msg('请选择要操作的客户');
|
||||
return false;
|
||||
}
|
||||
layer.confirm('您确定要把选中的客户移入公海?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/index/to_sea", {id: idArray.join(',')}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
table.on('tool(table_customer)',function (obj) {
|
||||
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/customer/customer/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'edit') {
|
||||
tool.side("/customer/customer/add?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'remove') {
|
||||
layer.confirm('确定把该客户移入公海吗?', { icon: 3, title: '提示' }, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
obj.del();
|
||||
}
|
||||
}
|
||||
tool.delete("/customer/index/to_sea", { id: data.id }, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,145 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-3">编辑客户信息</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户名称<font>*</font></td>
|
||||
<td colspan="3"><input type="text" name="name" lay-verify="required" value="{$detail.name}" lay-reqText="请输入客户名称" autocomplete="off" placeholder="请输入客户名称" class="layui-input"></td>
|
||||
<td class="layui-td-gray">客户来源<font>*</font></td>
|
||||
<td>
|
||||
<select name="source_id" lay-verify="required" lay-reqText="请选择客户来源">
|
||||
<option value="">请选择客户来源</option>
|
||||
{volist name=":get_base_data('customer_source')" id="v"}
|
||||
<option value="{$v.id}" {eq name="$v.id" value="$detail.source_id"} selected{/eq}>{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">联系地址<font>*</font></td>
|
||||
<td colspan="3"><input type="text" name="address" value="{$detail.address}" autocomplete="off" lay-verify="required" lay-reqText="请输入客户联系地址" placeholder="请输入客户联系地址" class="layui-input"></td>
|
||||
<td class="layui-td-gray">所属行业<font>*</font></td>
|
||||
<td>
|
||||
<select name="industry_id" lay-verify="required" lay-reqText="请选择所属行业">
|
||||
<option value="">请选择所属行业</option>
|
||||
{volist name=":get_base_data('Industry')" id="v"}
|
||||
<option value="{$v.id}" {eq name="$v.id" value="$detail.industry_id"} selected{/eq}>{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户等级<font>*</font></td>
|
||||
<td>
|
||||
<select name="grade_id" lay-verify="required" lay-reqText="请选择客户等级">
|
||||
<option value="">请选择客户等级</option>
|
||||
{volist name=":get_base_data('customer_grade')" id="v"}
|
||||
<option value="{$v.id}" {eq name="$v.id" value="$detail.grade_id"} selected{/eq}>{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">客户状态<font>*</font></td>
|
||||
<td>
|
||||
<select name="customer_status" lay-verify="required" lay-reqText="请选择客户状态">
|
||||
<option value="">请选择客户当前状态</option>
|
||||
{volist name=":get_base_type_data('basic_customer',1)" id="v"}
|
||||
<option value="{$v.id}" {eq name="$v.id" value="$detail.customer_status"} selected{/eq}>{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">客户意向<font>*</font></td>
|
||||
<td>
|
||||
<select name="intent_status" lay-verify="required" lay-reqText="请选择客户意向">
|
||||
<option value="">请选择客户意向</option>
|
||||
{volist name=":get_base_type_data('basic_customer',2)" id="v"}
|
||||
<option value="{$v.id}" {eq name="$v.id" value="$detail.intent_status"} selected{/eq}>{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
{eq name="$sea" value="0"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">归属员工</td>
|
||||
<td>
|
||||
<input type="text" name="belong_name" value="{$detail.belong_name|default=''}" autocomplete="off" readonly placeholder="请选择客户归属人" class="layui-input">
|
||||
<input type="hidden" name="belong_uid" value="{$detail.belong_uid|default=0}">
|
||||
<input type="hidden" name="belong_did" value="{$detail.belong_did|default=0}">
|
||||
</td>
|
||||
<td class="layui-td-gray">归属部门</td>
|
||||
<td><input type="text" name="belong_department" value="{$detail.belong_department|default=''}" autocomplete="off" readonly class="layui-input"></td>
|
||||
<td class="layui-td-gray">共享员工</td>
|
||||
<td colspan="3">
|
||||
<input type="text" name="share_names" value="{$detail.share_names|default=''}" autocomplete="off" readonly placeholder="请选择共享人员" class="layui-input picker-admin" data-type="2">
|
||||
<input type="hidden" name="share_ids" value="{$detail.share_ids}">
|
||||
</td>
|
||||
</tr>
|
||||
{/eq}
|
||||
<tr>
|
||||
<td class="layui-td-gray" style="vertical-align:top">客户介绍<font>*</font></td>
|
||||
<td colspan="5"><textarea name="content" placeholder="请输入客户介绍信息" lay-verify="required" lay-reqText="请输入客户介绍信息" class="layui-textarea">{$detail.content|default=""}</textarea></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray" style="vertical-align:top">经营业务</td>
|
||||
<td colspan="5"><textarea name="market" placeholder="请输入客户主要经营业务" class="layui-textarea">{$detail.market|default=""}</textarea></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray" style="vertical-align:top">备注信息</td>
|
||||
<td colspan="5"><textarea name="remark" placeholder="请输入备注信息" class="layui-textarea">{$detail.remark|default=""}</textarea></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-4">
|
||||
<input type="hidden" name="id" value="{$detail.id}">
|
||||
<input type="hidden" name="scene" value="edit"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
{block name="copyright"}{/block}
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
var moduleInit = ['tool','oaPicker'];
|
||||
function gouguInit() {
|
||||
var form = layui.form, tool = layui.tool,oaPicker = layui.oaPicker;
|
||||
//选择归属人人弹窗
|
||||
$('body').on('click','[name="belong_name"]',function () {
|
||||
var ids=$('[name="belong_uid"]').val(),names=$('[name="belong_name"]').val();
|
||||
oaPicker.employeeInit({
|
||||
ids:ids,
|
||||
names:names,
|
||||
type:1,
|
||||
callback:function(data){
|
||||
let select_id=[],select_name=[],select_did=[],select_dname=[];
|
||||
for(var a=0; a<data.length;a++){
|
||||
select_id.push(data[a].id);
|
||||
select_name.push(data[a].name);
|
||||
select_did.push(data[a].did);
|
||||
select_dname.push(data[a].department);
|
||||
}
|
||||
$('[name="belong_uid"]').val(select_id.join(','));
|
||||
$('[name="belong_name"]').val(select_name.join(','));
|
||||
$('[name="belong_did"]').val(select_did.join(','));
|
||||
$('[name="belong_department"]').val(select_dname.join(','));
|
||||
}
|
||||
});
|
||||
});
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/customer/customer/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,202 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
{block name="style"}
|
||||
<style>
|
||||
.layui-tab-card1{border:0}
|
||||
.layui-tab-title .layui-this{background-color:#fff;}
|
||||
.layui-tab-card,.layui-card{box-shadow:0 0 0 0 rgb(0 0 0 / 10%); border-radius:0; border-top:none;}
|
||||
</style>
|
||||
{/block}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="layui-form p-page">
|
||||
<h3 class="pb-3">
|
||||
客户详情
|
||||
{eq name="$detail.is_lock" value="1"}
|
||||
<div class="layui-input-inline"><button type="button" class="layui-btn layui-btn-warm layui-btn-xs" id="lock" title="去解锁" data-lock="0"><i class="iconfont icon-suozhu"></i></button></div>
|
||||
{else/}
|
||||
<div class="layui-input-inline"><button type="button" class="layui-btn layui-btn-xs" id="lock" title="去锁定" data-lock="1"><i class="iconfont icon-jiesuo"></i></button></div>
|
||||
{/eq}
|
||||
</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户名称</td>
|
||||
<td colspan="3">{$detail.name}</td>
|
||||
<td class="layui-td-gray">录入人</td>
|
||||
<td>{$detail.admin_name}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">联系地址</td>
|
||||
<td colspan="3">{$detail.address}</td>
|
||||
<td class="layui-td-gray">录入时间</td>
|
||||
<td>{$detail.create_time|date='Y-m-d H:i:s'}</td>
|
||||
</tr>
|
||||
{gt name="$detail.belong_uid" value="0"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">归属员工</td>
|
||||
<td>{$detail.belong_name}</td>
|
||||
<td class="layui-td-gray">归属部门</td>
|
||||
<td>{$detail.belong_department}</td>
|
||||
<td class="layui-td-gray">共享员工</td>
|
||||
<td>{$detail.share_names|default="-"}</td>
|
||||
</tr>
|
||||
{/gt}
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户等级</td>
|
||||
<td>{$detail.grade}</td>
|
||||
<td class="layui-td-gray">所属行业</td>
|
||||
<td>{$detail.industry}</td>
|
||||
<td class="layui-td-gray-2">最后更新时间</td>
|
||||
<td>{$detail.update_time|date='Y-m-d H:i:s'}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户来源</td>
|
||||
<td>{$detail.source}</td>
|
||||
<td class="layui-td-gray">客户状态</td>
|
||||
<td>{$detail.customer_status_name}</td>
|
||||
<td class="layui-td-gray">客户意向</td>
|
||||
<td>{$detail.intent_status_name}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<div>相关附件</div>
|
||||
<div><button type="button" class="layui-btn layui-btn-xs" id="uploadBtn">附件上传</button></div>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="row" id="uploadBox">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="file_{$vo.id}">{:file_card($vo)}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6" style="background-color:#FAFAFA;"><strong>客户介绍</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">{$detail.content|default=""}</td>
|
||||
</tr>
|
||||
{notempty name="$detail.market"}
|
||||
<tr>
|
||||
<td colspan="6" style="background-color:#FAFAFA;"><strong>经营业务</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">{$detail.market}</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
{notempty name="$detail.remark"}
|
||||
<tr>
|
||||
<td colspan="6" style="background-color:#FAFAFA;"><strong>备注信息</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">{$detail.remark}</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
</table>
|
||||
<div class="layui-tab layui-tab-card" style="margin:0; background-color:#fff;" lay-filter="customer" id="customerTab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this" data-load="true">跟进记录</li>
|
||||
<li>线索机会</li>
|
||||
<li>联 系 人</li>
|
||||
<li>操作记录</li>
|
||||
</ul>
|
||||
<div class="layui-tab-content" style="padding:0;">
|
||||
<div class="layui-tab-item layui-show">
|
||||
{include file="/customer/view_trace" /}
|
||||
</div>
|
||||
<div class="layui-tab-item">
|
||||
{include file="/customer/view_chance" /}
|
||||
</div>
|
||||
<div class="layui-tab-item">
|
||||
{include file="/customer/view_contact" /}
|
||||
</div>
|
||||
<div class="layui-tab-item">
|
||||
{include file="/customer/view_log" /}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const customer_id = '{$detail.id}';
|
||||
const moduleInit = ['tool','oaPicker','uploadPlus','oaEdit'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool, upload = layui.upload,element = layui.element,uploadPlus = layui.uploadPlus;
|
||||
trace();
|
||||
element.on('tab(customer)', function(data){
|
||||
let index = data.index;
|
||||
if(index == 1){
|
||||
chance();
|
||||
}
|
||||
if(index == 2){
|
||||
contact();
|
||||
}
|
||||
if(index == 3){
|
||||
log();
|
||||
}
|
||||
});
|
||||
//客户加锁
|
||||
$('#lock').on('click',function () {
|
||||
let is_lock=$(this).data('lock');
|
||||
let tips = '确定要锁住该客户信息吗?锁住后该客户的基本信息不能编辑。';
|
||||
if(is_lock==0){
|
||||
tips = '确定要解锁该客户信息吗?';
|
||||
}
|
||||
layer.confirm(tips, {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
parent.layui.pageTable.reload();
|
||||
setTimeout(function(){
|
||||
location.reload();
|
||||
},1000);
|
||||
}
|
||||
}
|
||||
tool.post("/customer/api/customer_lock", {id: customer_id,is_lock:is_lock}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
})
|
||||
var attachment = new uploadPlus({
|
||||
"attachment":{
|
||||
"type":1,//0ajax多文件模式,1ajax单文件单记录模式
|
||||
"uidDelete":true,//是否开启只有上传人自己才能删除自己的附件
|
||||
"ajaxSave":function(res){
|
||||
$.ajax({
|
||||
url: "/customer/api/add_file",
|
||||
type:'post',
|
||||
data:{
|
||||
'customer_id':customer_id,
|
||||
'file_id':res.data.id,
|
||||
'file_name':res.data.name
|
||||
},
|
||||
success: function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
setTimeout(function(){
|
||||
location.reload();
|
||||
},1000)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
"ajaxDelete":function(file_id){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
$('#file_' + file_id).remove();
|
||||
}
|
||||
}
|
||||
tool.delete("/customer/api/delete_file", {id: file_id}, callback);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,82 @@
|
||||
<div class="p-3">
|
||||
<button class="layui-btn layui-btn-sm add-chance">+ 新建线索机会</button>
|
||||
</div>
|
||||
<div>
|
||||
<table class="layui-hide" id="chance" lay-filter="chance"></table>
|
||||
</div>
|
||||
<script>
|
||||
function chance(){
|
||||
if($('#customerTab').find('li').eq(4).data('load') =='true'){
|
||||
return false;
|
||||
}
|
||||
$('#customerTab').find('li').eq(4).data('load','true');
|
||||
let tool = layui.tool, table = layui.table;
|
||||
//项目任务
|
||||
layui.chanceTable = table.render({
|
||||
elem: '#chance',
|
||||
title: '线索机会列表',
|
||||
cellMinWidth:80,
|
||||
url: "/customer/api/get_chance",
|
||||
where:{'cid':customer_id},
|
||||
page: true, //开启分页
|
||||
limit: 20,
|
||||
cols: [[
|
||||
{field: 'id', title: '序号', width: 80, align: 'center'}
|
||||
,{field:'belong_name',title: '归属人',align:'center',width: 80}
|
||||
,{field:'title',title: '机会主题'}
|
||||
,{field:'stage_name',title: '当前阶段',width: 90, align: 'center'}
|
||||
,{field:'discovery_time',title: '发现时间',align:'center',width: 90}
|
||||
,{ field: 'expected_time', title: '预计签单时间', width: 100, align: 'center'}
|
||||
,{ field: 'expected_amount', title: '预计签单金额', width: 100, align: 'center'}
|
||||
,{field:'is_contract',title: '是否签单', align:'center',width: 80,templet: function(d){
|
||||
if(d.is_contract>0){
|
||||
return '<span class="green">已签单</span>';
|
||||
}
|
||||
else{
|
||||
return '<span class="red">未签单</span>';
|
||||
}
|
||||
}}
|
||||
,{fixed:'right',width:132,title: '操作', align:'center',templet: function(d){
|
||||
var html = '<div class="layui-btn-group">';
|
||||
var btn1='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>';
|
||||
var btn2='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</a>';
|
||||
var btn3='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>';
|
||||
if(d.is_contract>0){
|
||||
btn1='';
|
||||
btn3='';
|
||||
}
|
||||
return '<div class="layui-btn-group">'+btn1+btn2+btn3+'</div>';
|
||||
}}
|
||||
]]
|
||||
});
|
||||
$('body').on('click','.add-chance',function(){
|
||||
tool.side('/customer/chance/add?cid='+customer_id);
|
||||
});
|
||||
|
||||
table.on('tool(chance)', function(obj){
|
||||
var data = obj.data; //获得当前行数据
|
||||
var layEvent = obj.event;
|
||||
if(layEvent === 'edit'){ //编辑
|
||||
let url = '/customer/chance/add/id/'+data.id;
|
||||
tool.side(url);
|
||||
}
|
||||
if(layEvent === 'view'){ //查看
|
||||
let url = '/customer/chance/view/id/'+data.id;
|
||||
tool.side(url);
|
||||
}
|
||||
if(layEvent === 'del'){ //删除
|
||||
layer.confirm('确定要删除该线索机会吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.chanceTable.reload();
|
||||
}
|
||||
}
|
||||
tool.delete("/customer/chance/del",{"id":data.id},callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
return false;
|
||||
})
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,102 @@
|
||||
<div class="p-3">
|
||||
<button class="layui-btn layui-btn-sm add-contact">+ 新增联系人</button>
|
||||
</div>
|
||||
<div>
|
||||
<table class="layui-hide" id="contact" lay-filter="contact"></table>
|
||||
</div>
|
||||
<script>
|
||||
function contact(){
|
||||
if($('#customerTab').find('li').eq(2).data('load') =='true'){
|
||||
return false;
|
||||
}
|
||||
$('#customerTab').find('li').eq(2).data('load','true');
|
||||
let tool = layui.tool, table = layui.table;
|
||||
//项目任务
|
||||
layui.contactTable = table.render({
|
||||
elem: '#contact',
|
||||
title: '联系人列表',
|
||||
cellMinWidth:80,
|
||||
url: "/customer/api/get_contact",
|
||||
where:{'cid':customer_id},
|
||||
page: true, //开启分页
|
||||
limit: 20,
|
||||
cols: [[
|
||||
{field:'id',width:80, title: 'ID号', align:'center'}
|
||||
,{field:'name',width:100,title: '联系人姓名', align:'center'}
|
||||
,{field:'status', title: '性别',width:80,align:'center',templet: function(d){
|
||||
var html='未知';
|
||||
var html1='<span class="green">男</span>';
|
||||
var html2='<span class="blue">女</span>';
|
||||
if(d.sex==1){
|
||||
return html1;
|
||||
}
|
||||
if(d.sex==2){
|
||||
return html2;
|
||||
}
|
||||
else{
|
||||
return html;
|
||||
}
|
||||
}}
|
||||
,{field:'mobile',width:110,title: '手机号码', align:'center'}
|
||||
,{field:'email',title: '电子邮箱'}
|
||||
,{field:'wechat',width:110,title: '微信号码', align:'center'}
|
||||
,{field:'qq',width:100,title: 'QQ号码', align:'center'}
|
||||
,{field:'position',width:120,title: '担任职位', align:'center'}
|
||||
,{field:'is_default',width:90,title: '首要联系人', align:'center',templet: function(d){
|
||||
if(d.is_default==1){
|
||||
return '<span class="green layui-icon layui-icon-success"></span>';
|
||||
}
|
||||
else{
|
||||
return '<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="set" title="设为首要联系人">设置</a>';
|
||||
}
|
||||
}}
|
||||
,{fixed:'right',width:120,title: '操作', align:'center',templet: function(d){
|
||||
var html = '<div class="layui-btn-group">';
|
||||
var btn='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>';
|
||||
var btn1='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">查看</a>';
|
||||
var btn2='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>';
|
||||
return html+btn+btn1+btn2+'</div>';
|
||||
}}
|
||||
]]
|
||||
});
|
||||
$('body').on('click','.add-contact',function(){
|
||||
tool.side('/customer/contact/add?cid='+customer_id);
|
||||
});
|
||||
|
||||
table.on('tool(contact)', function(obj){
|
||||
var data = obj.data; //获得当前行数据
|
||||
var layEvent = obj.event;
|
||||
if(layEvent === 'edit'){ //编辑
|
||||
tool.side('/customer/contact/add/id/'+data.id);
|
||||
}
|
||||
if(layEvent === 'view'){ //编辑
|
||||
tool.side('/customer/contact/view/id/'+data.id);
|
||||
}
|
||||
if(layEvent === 'set'){ //查看
|
||||
layer.confirm('确定要设置该联系人为首要联系人吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.contactTable.reload();
|
||||
}
|
||||
}
|
||||
tool.delete("/customer/api/set_contact",{"id":data.id},callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if(layEvent === 'del'){ //删除
|
||||
layer.confirm('确定要删除该联系人吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.contactTable.reload();
|
||||
}
|
||||
}
|
||||
tool.delete("/customer/contact/del",{"id":data.id},callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
return false;
|
||||
})
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,9 @@
|
||||
<div>
|
||||
<div id="logList" class="log-timeline p-3"></div>
|
||||
</div>
|
||||
<script>
|
||||
function log(){
|
||||
let oaEdit = layui.oaEdit;
|
||||
oaEdit.log('logList','Customer',customer_id);
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,72 @@
|
||||
<div class="p-3">
|
||||
<span class="layui-btn layui-btn-sm add-trace">+ 新建跟进记录</span>
|
||||
</div>
|
||||
<div>
|
||||
<table class="layui-hide" id="trace" lay-filter="trace"></table>
|
||||
</div>
|
||||
<script>
|
||||
function trace(){
|
||||
if($('#customerTab').find('li').eq(0).data('load') =='true'){
|
||||
return false;
|
||||
}
|
||||
$('#customerTab').find('li').eq(0).data('load','true');
|
||||
let tool = layui.tool, table = layui.table;
|
||||
layui.traceTable = table.render({
|
||||
elem: '#trace',
|
||||
title: '跟进记录列表',
|
||||
cellMinWidth:80,
|
||||
url: "/customer/api/get_trace",
|
||||
where:{'cid':customer_id},
|
||||
page: true, //开启分页
|
||||
limit: 20,
|
||||
cols: [[
|
||||
{field: 'id', title: 'ID号', width: 80, align: 'center'}
|
||||
,{field:'admin_name',title: '跟进人',align:'center',width: 80}
|
||||
,{field:'follow_time',title: '跟进时间',align:'center',width: 150}
|
||||
, { field: 'stage_name', title: '当前阶段', width: 80, align: 'center'}
|
||||
,{field:'type_name',title: '跟进方式',width: 80, align: 'center'}
|
||||
,{field:'chance',title: '销售机会',minWidth:200}
|
||||
,{field:'content',title: '沟通内容'}
|
||||
,{field:'next_time',title: '下次跟进时间', align:'center',width: 130}
|
||||
,{fixed:'right',width:120,title: '操作', align:'center',templet: function(d){
|
||||
var html = '<div class="layui-btn-group">';
|
||||
var btn0='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</a>';
|
||||
var btn1='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>';
|
||||
var btn2='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>';
|
||||
return html+btn0+btn1+btn2+'</div>';
|
||||
}}
|
||||
]]
|
||||
});
|
||||
|
||||
$('body').on('click','.add-trace',function(){
|
||||
tool.side('/customer/trace/add?cid='+customer_id);
|
||||
});
|
||||
|
||||
table.on('tool(trace)', function(obj){
|
||||
var data = obj.data; //获得当前行数据
|
||||
var layEvent = obj.event;
|
||||
if(layEvent === 'edit'){ //编辑
|
||||
let url = '/customer/trace/add/id/'+data.id;
|
||||
tool.side(url);
|
||||
}
|
||||
if(layEvent === 'view'){ //查看
|
||||
let url = '/customer/trace/view/id/'+data.id;
|
||||
tool.side(url);
|
||||
}
|
||||
if(layEvent === 'del'){ //删除
|
||||
layer.confirm('确定要删除该跟进记录吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.traceTable.reload();
|
||||
}
|
||||
}
|
||||
tool.delete("/customer/trace/del",{"id":data.id},callback);
|
||||
layer.close(index);
|
||||
|
||||
});
|
||||
}
|
||||
return false;
|
||||
})
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,49 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-3">客户等级</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户等级名称<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入客户等级名称" lay-reqText="请输入客户等级名称"class="layui-input" value="{$detail.title|default=''}">
|
||||
</td>
|
||||
<td class="layui-td-gray">排序</td>
|
||||
<td>
|
||||
<input type="text" name="sort" placeholder="请输入排序,数字" autocomplete="off" class="layui-input" value="{$detail.sort|default=''}">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-4">
|
||||
<input type="hidden" name="id" value="{$detail.id|default=0}"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
var moduleInit = ['tool'];
|
||||
|
||||
function gouguInit() {
|
||||
var form = layui.form, tool = layui.tool;
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/customer/grade/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,124 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<table class="layui-hide" id="table_customer_grade" lay-filter="table_customer_grade"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm add-new" type="button">+ 添加客户等级</button>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var table = layui.table, tool = layui.tool;
|
||||
|
||||
layui.pageTable = table.render({
|
||||
elem: "#table_customer_grade"
|
||||
,toolbar: '#toolbarDemo'
|
||||
,url: "/customer/grade/datalist"
|
||||
,page: false
|
||||
,limit: 999
|
||||
,cellMinWidth: 80
|
||||
,cols: [[
|
||||
{field:'id',width:80, title: 'ID号', align:'center'}
|
||||
,{field:'title',title: '类型名称'}
|
||||
,{field:'status', title: '状态',width:80,align:'center',templet: function(d){
|
||||
var html1='<span class="green">正常</span>';
|
||||
var html2='<span class="yellow">禁用</span>';
|
||||
if(d.status==1){
|
||||
return html1;
|
||||
}
|
||||
else{
|
||||
return html2;
|
||||
}
|
||||
}}
|
||||
,{width:100,title: '操作', align:'center',ignoreExport:true,templet: function(d){
|
||||
var html='';
|
||||
var btn='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</a>';
|
||||
var btn1='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="disable">禁用</a>';
|
||||
var btn2='<a class="layui-btn layui-btn-xs" lay-event="open">启用</a>';
|
||||
if(d.status==1){
|
||||
html = '<div class="layui-btn-group">'+btn+btn1+'</div>';
|
||||
}
|
||||
else{
|
||||
html = '<div class="layui-btn-group">'+btn+btn2+'</div>';
|
||||
}
|
||||
return html;
|
||||
}}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(table_customer_grade)',function (obj) {
|
||||
if(obj.event === 'edit'){
|
||||
add_cate(obj.data.id,obj.data.title);
|
||||
}
|
||||
if(obj.event === 'disable'){
|
||||
layer.confirm('确定要禁用该记录吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/grade/set", {id:obj.data.id,status: 0}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if(obj.event === 'open'){
|
||||
layer.confirm('确定要启用该记录吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/grade/set", {id:obj.data.id,status:1}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('body').on('click','.add-new',function(){
|
||||
add_cate(0,'');
|
||||
});
|
||||
|
||||
function add_cate(id,val){
|
||||
var title = '新增类型';
|
||||
if(id>0){
|
||||
title = '编辑类型';
|
||||
}
|
||||
layer.prompt({
|
||||
title: title,
|
||||
value: val,
|
||||
yes: function(index, layero) {
|
||||
// 获取文本框输入的值
|
||||
var value = layero.find(".layui-layer-input").val();
|
||||
if (value) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/grade/add", {id: id,title: value}, callback);
|
||||
layer.close(index);
|
||||
} else {
|
||||
layer.msg('请填写类型名称');
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,121 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-normal layui-btn-sm addNew" type="button">+ 添加客户等级</button>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var table = layui.table, tool = layui.tool, form = layui.form;
|
||||
layui.pageTable = table.render({
|
||||
elem: '#test'
|
||||
,toolbar: '#toolbarDemo'
|
||||
,defaultToolbar: false
|
||||
,title:'客户等级列表'
|
||||
,url: "/customer/grade/index"
|
||||
,page: false
|
||||
,cellMinWidth: 80
|
||||
,cols: [[
|
||||
{field:'id',width:80, title: 'ID号', align:'center'}
|
||||
,{field:'title',title: '等级名称'}
|
||||
,{field:'status', title: '状态',width:80,align:'center',templet: function(d){
|
||||
var html1='<span class="green">正常</span>';
|
||||
var html2='<span class="yellow">禁用</span>';
|
||||
if(d.status==1){
|
||||
return html1;
|
||||
}
|
||||
else{
|
||||
return html2;
|
||||
}
|
||||
}}
|
||||
,{width:100,title: '操作', align:'center',templet: function(d){
|
||||
var html='';
|
||||
var btn='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>';
|
||||
var btn1='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="disable">禁用</a>';
|
||||
var btn2='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="open">启用</a>';
|
||||
if(d.status==1){
|
||||
html = '<div class="layui-btn-group">'+btn+btn1+'</div>';
|
||||
}
|
||||
else{
|
||||
html = '<div class="layui-btn-group">'+btn+btn2+'</div>';
|
||||
}
|
||||
return html;
|
||||
}}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(test)',function (obj) {
|
||||
if(obj.event === 'edit'){
|
||||
addExpense(obj.data.id,obj.data.title);
|
||||
}
|
||||
if(obj.event === 'disable'){
|
||||
layer.confirm('确定要禁用该等级吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/grade/grade_check", { id: obj.data.id,status: 0,title: obj.data.title}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if(obj.event === 'open'){
|
||||
layer.confirm('确定要启用该等级吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/grade/grade_check", { id: obj.data.id,status: 1,title: obj.data.title}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('body').on('click','.addNew',function(){
|
||||
addExpense(0,'');
|
||||
});
|
||||
|
||||
function addExpense(id,val){
|
||||
var title = '新增等级';
|
||||
if(id>0){
|
||||
title = '编辑等级';
|
||||
}
|
||||
layer.prompt({
|
||||
title: title,
|
||||
value: val,
|
||||
yes: function(index, layero) {
|
||||
// 获取文本框输入的值
|
||||
var value = layero.find(".layui-layer-input").val();
|
||||
if (value) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/grade/grade_add", {id: id,title: value}, callback);
|
||||
layer.close(index);
|
||||
} else {
|
||||
layer.msg('请填写等级名称');
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,16 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<h3 class="pb-3">客户等级详情</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户等级名称</td>
|
||||
<td>{$detail.title|default=''}"></td>
|
||||
<td class="layui-td-gray">排序</td>
|
||||
<td>{$detail.sort|default=0}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
@@ -0,0 +1,127 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<div class="layui-row gg-form-bar border-x border-t">
|
||||
<div class="layui-input-inline"><button class="layui-btn layui-btn-sm" lay-submit="" lay-filter="webform">换一批客户</button></div>
|
||||
<div class="layui-input-inline red">每点击一次随机获取20个公海客户的信息,每天最多可抢<strong class="mx-1">{$max_num|default="0"}</strong>个客户,你今天已抢了<strong class="mx-1" id="count">{$count}</strong>个客户</div>
|
||||
</div>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var table = layui.table, tool = layui.tool ,form = layui.form;
|
||||
layui.pageTable = table.render({
|
||||
elem: '#test',
|
||||
title: '抢客宝列表',
|
||||
toolbar: false,
|
||||
defaultToolbar: false,
|
||||
url: "/customer/index/rush", //数据接口
|
||||
cellMinWidth: 80,
|
||||
page: false, //开启分页
|
||||
limit: 20,
|
||||
height: 'full-114',
|
||||
cols: [
|
||||
[ //表头
|
||||
{
|
||||
field: 'id',title: 'ID号',align: 'center',width: 80
|
||||
},{
|
||||
field: 'name',
|
||||
title: '客户名称',
|
||||
minWidth:240,
|
||||
templet: '<div><a data-href="/customer/customer/view/id/{{d.id}}.html" class="side-a">{{d.name}}</a></div>'
|
||||
},{
|
||||
field: 'contact_name',
|
||||
title: '联系人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'contact_mobile',
|
||||
title: '手机号码',
|
||||
align: 'center',
|
||||
width: 110
|
||||
},{
|
||||
field: 'contact_email',
|
||||
title: '电子邮箱',
|
||||
width: 200
|
||||
},{
|
||||
field: 'grade',
|
||||
title: '客户等级',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'source',
|
||||
title: '来源渠道',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'industry',
|
||||
title: '所属行业',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},{
|
||||
field: 'create_time',
|
||||
title: '创建时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'update_time',
|
||||
title: '最后编辑时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'right',
|
||||
fixed:'right',
|
||||
title: '操作',
|
||||
width: 80,
|
||||
align: 'center',
|
||||
templet: function (d) {
|
||||
if(login_admin==1){
|
||||
return '-';
|
||||
}
|
||||
else{
|
||||
return '<span class="layui-btn layui-btn-xs" lay-event="get">领取客户</span>';
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
//监听行工具事件
|
||||
table.on('tool(test)', function(obj) {
|
||||
var data = obj.data;
|
||||
if (obj.event === 'get') {
|
||||
layer.confirm('确定要获取该客户?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
let count =$('#count').text();
|
||||
$('#count').html(++count);
|
||||
}
|
||||
}
|
||||
tool.post("/customer/index/to_get", {id: data.id}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
//监听搜索提交
|
||||
form.on('submit(webform)', function(data) {
|
||||
layui.pageTable.reload();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,263 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
{block name="style"}
|
||||
<style>
|
||||
.gougu-upload-files{background-color: #ffffff; border:1px solid #e4e7ed;color: #c0c4cc;cursor: not-allowed; padding:0 12px; width:180px; box-sizing: border-box; display: inline-block; font-size: inherit; height: 38px; line-height: 35px; margin-right:8px; border-radius:2px;}
|
||||
.gougu-upload-tips{color:#969696}
|
||||
.layui-form-item{margin-bottom:8px;}
|
||||
.layui-input-block{min-height:24px;}
|
||||
</style>
|
||||
{/block}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<form class="layui-form gg-form-bar border-x border-t" id="barsearchform" lay-filter="barsearchform">
|
||||
<div class="layui-input-inline" style="width:120px;">
|
||||
<select name="source_id">
|
||||
<option value="">渠道来源</option>
|
||||
{volist name=":get_base_data('customer_source')" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:120px;">
|
||||
<select name="industry_id">
|
||||
<option value="">所属行业</option>
|
||||
{volist name=":get_base_data('Industry')" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:120px;">
|
||||
<select name="grade_id">
|
||||
<option value="">客户等级</option>
|
||||
{volist name=":get_base_data('customer_grade')" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:172px;">
|
||||
<input type="text" class="layui-input" data-range="~" placeholder="最近跟进日期" readonly name="follow_time" id="follow_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:240px;">
|
||||
<input type="text" name="keywords" placeholder="输入关键字" class="layui-input" autocomplete="off" />
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-group">
|
||||
<button class="layui-btn layui-btn-sm" title="添加公海客户" lay-event="add">+ 添加公海客户</button>
|
||||
<button class="layui-btn layui-btn-normal layui-btn-sm" lay-event="import"><i class="layui-icon"></i>批量导入</button>
|
||||
<button class="layui-btn layui-btn-danger layui-btn-sm" lay-event="del"><i class="layui-icon"></i>批量转入废弃池</button>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tablePlus','oaPicker','uploadPlus','laydatePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, tool = layui.tool ,form = layui.form, oaPicker = layui.oaPicker,uploadPlus=layui.uploadPlus,laydatePlus=layui.laydatePlus;
|
||||
var follow_time = new laydatePlus({'target':'follow_time'});
|
||||
layui.pageTable = table.render({
|
||||
elem: '#test',
|
||||
title: '公海客户列表',
|
||||
defaultToolbar: false,
|
||||
toolbar: '#toolbarDemo',
|
||||
url: "/customer/index/sea", //数据接口
|
||||
cellMinWidth: 80,
|
||||
page: true, //开启分页
|
||||
limit: 20,
|
||||
height: 'full-114',
|
||||
cols: [
|
||||
[ //表头
|
||||
{type:'checkbox',fixed:'left'},
|
||||
{field: 'id',title: '编号',align: 'center',width: 80},{
|
||||
field: 'name',
|
||||
title: '客户名称',
|
||||
minWidth:240,
|
||||
templet: '<div><a data-href="/customer/customer/view/id/{{d.id}}.html" class="side-a">{{d.name}}</a></div>'
|
||||
},{
|
||||
field: 'contact_name',
|
||||
title: '联系人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'contact_mobile',
|
||||
title: '手机号码',
|
||||
align: 'center',
|
||||
width: 110
|
||||
},{
|
||||
field: 'contact_email',
|
||||
title: '电子邮箱',
|
||||
width: 200
|
||||
},{
|
||||
field: 'grade',
|
||||
title: '客户等级',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'source',
|
||||
title: '来源渠道',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'industry',
|
||||
title: '所属行业',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},{
|
||||
field: 'create_time',
|
||||
title: '创建时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'update_time',
|
||||
title: '最后编辑时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'right',
|
||||
fixed:'right',
|
||||
title: '操作',
|
||||
width: 190,
|
||||
align: 'center',
|
||||
templet: function (d) {
|
||||
var html = '<div class="layui-btn-group">';
|
||||
var btn='<span class="layui-btn layui-btn-xs" lay-event="edit">编辑</span>';
|
||||
var btn0='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="distribute">分配</span>';
|
||||
var btn1='<span class="layui-btn layui-btn-xs" lay-event="get">领取</span>';
|
||||
var btn2='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">转入废弃池</span>';
|
||||
return html+btn+btn0+btn1+btn2+'</div>';
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
//表头工具栏事件
|
||||
table.on('toolbar(test)', function(obj){
|
||||
var checkStatus = table.checkStatus(obj.config.id);
|
||||
var data = checkStatus.data;
|
||||
if (obj.event === 'add') {
|
||||
tool.side("/customer/customer/add?sea=1");
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'import') {
|
||||
let importUpload = new uploadPlus({
|
||||
"title":'批量导入公海客户',
|
||||
"use":'import',
|
||||
"url":'/api/import/import_customer',
|
||||
"import":{
|
||||
"template":'/static/home/file/勾股OA客户导入模板.xlsx',
|
||||
"tips":'如果导入失败,请根据提示注意检查表格数据,客户来源、所属行业、需要是系统中存在的数据,如果不存在的话可能会导入失败。'
|
||||
},
|
||||
callback:function(res){
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
var idArray=[];
|
||||
for(var i=0;i<data.length;i++){
|
||||
idArray.push(data[i].id);
|
||||
}
|
||||
if (obj.event === 'del') {
|
||||
if(data.length==0){
|
||||
layer.msg('请选择要操作的客户');
|
||||
return false;
|
||||
}
|
||||
layer.confirm('您确定要把选中的客户转入废弃池?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/index/to_trash", {id: idArray.join(',')}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
//监听行工具事件
|
||||
table.on('tool(test)', function(obj) {
|
||||
var data = obj.data;
|
||||
if(obj.event === 'view'){
|
||||
tool.side('/customer/customer/view?id='+data.id);
|
||||
}
|
||||
if(obj.event === 'edit'){
|
||||
tool.side('/customer/customer/add?sea=1&id='+data.id);
|
||||
}
|
||||
if (obj.event === 'distribute') {
|
||||
oaPicker.employeeInit({
|
||||
callback:function(selected){
|
||||
//这里是选择后的回调方法,可以根据具体需求自定义写哦
|
||||
let select_id=[],select_name=[],select_did=[];
|
||||
for(var a=0; a<selected.length;a++){
|
||||
select_id.push(selected[a].id);
|
||||
select_name.push(selected[a].name);
|
||||
select_did.push(selected[a].did);
|
||||
}
|
||||
layer.confirm('确定要把该客户分配给'+select_name.join(',')+'?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
let callback1 = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/api/distribute", {id: data.id,uid:select_id.join(','),did:select_did.join(',')}, callback1);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
if (obj.event === 'get') {
|
||||
layer.confirm('确定要领取该客户?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/index/to_get", {id: data.id}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if (obj.event === 'del') {
|
||||
layer.confirm('确定要把客户转入废弃池吗?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.delete("/customer/index/to_trash", {id: data.id,type:1}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
return;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,218 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<form class="layui-form gg-form-bar border-x border-t" id="barsearchform" lay-filter="barsearchform">
|
||||
<div class="layui-input-inline" style="width:120px;">
|
||||
<select name="source_id">
|
||||
<option value="">渠道来源</option>
|
||||
{volist name=":get_base_data('customer_source')" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:120px;">
|
||||
<select name="industry_id">
|
||||
<option value="">所属行业</option>
|
||||
{volist name=":get_base_data('Industry')" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:120px;">
|
||||
<select name="grade_id">
|
||||
<option value="">客户等级</option>
|
||||
{volist name=":get_base_data('customer_grade')" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:240px;">
|
||||
<input type="text" name="keywords" placeholder="输入关键字" class="layui-input" autocomplete="off" />
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-group">
|
||||
<button class="layui-btn layui-btn-normal layui-btn-sm" lay-event="revert"><i class="layui-icon"></i>批量拉回公海</button>
|
||||
<button class="layui-btn layui-btn-danger layui-btn-sm" lay-event="del"><i class="layui-icon">ဆ</i>批量彻底删除</button>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tablePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, tool = layui.tool ,form = layui.form;
|
||||
layui.pageTable = table.render({
|
||||
elem: '#test',
|
||||
title: '废弃客户列表',
|
||||
toolbar: '#toolbarDemo',
|
||||
defaultToolbar: false,
|
||||
url: "/customer/index/trash", //数据接口
|
||||
cellMinWidth: 80,
|
||||
page: true, //开启分页
|
||||
limit: 20,
|
||||
height: 'full-114',
|
||||
cols: [
|
||||
[ //表头
|
||||
{type:'checkbox',fixed:'left'},
|
||||
{field: 'id',title: '编号',align: 'center',width: 80},{
|
||||
field: 'name',
|
||||
title: '客户名称',
|
||||
minWidth:240,
|
||||
templet: '<div><a data-href="/customer/customer/view/id/{{d.id}}.html" class="side-a">{{d.name}}</a></div>'
|
||||
},{
|
||||
field: 'contact_name',
|
||||
title: '联系人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'contact_mobile',
|
||||
title: '手机号码',
|
||||
align: 'center',
|
||||
width: 110
|
||||
},{
|
||||
field: 'contact_email',
|
||||
title: '电子邮箱',
|
||||
width: 200
|
||||
},{
|
||||
field: 'grade',
|
||||
title: '客户等级',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'source',
|
||||
title: '来源渠道',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'industry',
|
||||
title: '所属行业',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},{
|
||||
field: 'create_time',
|
||||
title: '创建时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'update_time',
|
||||
title: '最后编辑时间',
|
||||
align: 'center',
|
||||
width: 150
|
||||
},{
|
||||
field: 'right',
|
||||
fixed:'right',
|
||||
title: '操作',
|
||||
width: 150,
|
||||
align: 'center',
|
||||
templet: function (d) {
|
||||
var html = '<div class="layui-btn-group">';
|
||||
var btn1='<span class="layui-btn layui-btn-xs" lay-event="back">拉回公海</span>';
|
||||
var btn2='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">彻底删除</span>';
|
||||
return html+btn1+btn2+'</div>';
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
//表头工具栏事件
|
||||
table.on('toolbar(test)', function(obj){
|
||||
var checkStatus = table.checkStatus(obj.config.id);
|
||||
var data = checkStatus.data;
|
||||
var idArray=[];
|
||||
for(var i=0;i<data.length;i++){
|
||||
idArray.push(data[i].id);
|
||||
}
|
||||
if (obj.event === 'revert') {
|
||||
if(data.length==0){
|
||||
layer.msg('请选择要操作的客户');
|
||||
return false;
|
||||
}
|
||||
layer.confirm('您确定要把选中的客户拉回公海?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/index/to_revert", {id: idArray.join(',')}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if (obj.event === 'del') {
|
||||
if(data.length==0){
|
||||
layer.msg('请选择要操作的客户');
|
||||
return false;
|
||||
}
|
||||
layer.confirm('您确定要把选中的客户彻底删除?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.delete("/customer/customer/del", {id: idArray.join(',')}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
//监听行工具事件
|
||||
table.on('tool(test)', function(obj) {
|
||||
var data = obj.data;
|
||||
if(obj.event === 'view'){
|
||||
tool.side('/customer/index/view?id='+data.id);
|
||||
}
|
||||
if (obj.event === 'back') {
|
||||
layer.confirm('确定要把该客户拉回公海吗?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/index/to_revert", {id: data.id}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if (obj.event === 'del') {
|
||||
layer.confirm('确定要彻底删除该客户吗?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.delete("/customer/customer/del", {id: data.id}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
return;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,45 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-3">行业类型</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">行业类型名称<font>*</font></td>
|
||||
<td><input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入行业类型名称" lay-reqText="请输入行业类型名称"class="layui-input" value="{$detail.title|default=''}"></td>
|
||||
<td class="layui-td-gray">排序</td>
|
||||
<td><input type="text" name="sort" placeholder="请输入排序,数字" autocomplete="off" class="layui-input" value="{$detail.sort|default=''}"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-4">
|
||||
<input type="hidden" name="id" value="{$detail.id|default=0}"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
var moduleInit = ['tool'];
|
||||
|
||||
function gouguInit() {
|
||||
var form = layui.form, tool = layui.tool;
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/customer/industry/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,124 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<table class="layui-hide" id="table_industry" lay-filter="table_industry"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-group">
|
||||
<button class="layui-btn layui-btn-sm add-new" type="button">+ 添加行业类型</button>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var table = layui.table, tool = layui.tool;
|
||||
|
||||
layui.pageTable = table.render({
|
||||
elem: "#table_industry"
|
||||
,toolbar: '#toolbarDemo'
|
||||
,url: "/customer/industry/datalist"
|
||||
,page: false
|
||||
,limit: 999
|
||||
,cellMinWidth: 80
|
||||
,cols: [[
|
||||
{field:'id',width:80, title: 'ID号', align:'center'}
|
||||
,{field:'title',title: '类型名称'}
|
||||
,{field:'status', title: '状态',width:80,align:'center',templet: function(d){
|
||||
var html1='<span class="green">正常</span>';
|
||||
var html2='<span class="yellow">禁用</span>';
|
||||
if(d.status==1){
|
||||
return html1;
|
||||
}
|
||||
else{
|
||||
return html2;
|
||||
}
|
||||
}}
|
||||
,{width:100,title: '操作', align:'center',ignoreExport:true,templet: function(d){
|
||||
var html='';
|
||||
var btn='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</a>';
|
||||
var btn1='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="disable">禁用</a>';
|
||||
var btn2='<a class="layui-btn layui-btn-xs" lay-event="open">启用</a>';
|
||||
if(d.status==1){
|
||||
html = '<div class="layui-btn-group">'+btn+btn1+'</div>';
|
||||
}
|
||||
else{
|
||||
html = '<div class="layui-btn-group">'+btn+btn2+'</div>';
|
||||
}
|
||||
return html;
|
||||
}}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(table_industry)',function (obj) {
|
||||
if(obj.event === 'edit'){
|
||||
add_cate(obj.data.id,obj.data.title);
|
||||
}
|
||||
if(obj.event === 'disable'){
|
||||
layer.confirm('确定要禁用该记录吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/industry/set", {id:obj.data.id,status: 0}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if(obj.event === 'open'){
|
||||
layer.confirm('确定要启用该记录吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/industry/set", {id:obj.data.id,status:1}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('body').on('click','.add-new',function(){
|
||||
add_cate(0,'');
|
||||
});
|
||||
|
||||
function add_cate(id,val){
|
||||
var title = '新增类型';
|
||||
if(id>0){
|
||||
title = '编辑类型';
|
||||
}
|
||||
layer.prompt({
|
||||
title: title,
|
||||
value: val,
|
||||
yes: function(index, layero) {
|
||||
// 获取文本框输入的值
|
||||
var value = layero.find(".layui-layer-input").val();
|
||||
if (value) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/industry/add", {id: id,title: value}, callback);
|
||||
layer.close(index);
|
||||
} else {
|
||||
layer.msg('请填写类型名称');
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,16 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<h3 class="pb-3">行业类型详情</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">行业类型名称</td>
|
||||
<td>{$detail.title|default=''}"></td>
|
||||
<td class="layui-td-gray">排序</td>
|
||||
<td>{$detail.sort|default=0}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
@@ -0,0 +1,49 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-page">
|
||||
<h3 class="pb-3">客户来源</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户来源名称<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入客户来源名称" lay-reqText="请输入客户来源名称"class="layui-input" value="{$detail.title|default=''}">
|
||||
</td>
|
||||
<td class="layui-td-gray">排序</td>
|
||||
<td>
|
||||
<input type="text" name="sort" placeholder="请输入排序,数字" autocomplete="off" class="layui-input" value="{$detail.sort|default=''}">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-4">
|
||||
<input type="hidden" name="id" value="{$detail.id|default=0}"/>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
var moduleInit = ['tool'];
|
||||
|
||||
function gouguInit() {
|
||||
var form = layui.form, tool = layui.tool;
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/customer/source/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,124 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<table class="layui-hide" id="table_customer_source" lay-filter="table_customer_source"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm add-new" type="button">+ 添加客户来源</button>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var table = layui.table, tool = layui.tool;
|
||||
|
||||
layui.pageTable = table.render({
|
||||
elem: "#table_customer_source"
|
||||
,toolbar: '#toolbarDemo'
|
||||
,url: "/customer/source/datalist"
|
||||
,page: false
|
||||
,limit: 999
|
||||
,cellMinWidth: 80
|
||||
,cols: [[
|
||||
{field:'id',width:80, title: 'ID号', align:'center'}
|
||||
,{field:'title',title: '类型名称'}
|
||||
,{field:'status', title: '状态',width:80,align:'center',templet: function(d){
|
||||
var html1='<span class="green">正常</span>';
|
||||
var html2='<span class="yellow">禁用</span>';
|
||||
if(d.status==1){
|
||||
return html1;
|
||||
}
|
||||
else{
|
||||
return html2;
|
||||
}
|
||||
}}
|
||||
,{width:100,title: '操作', align:'center',ignoreExport:true,templet: function(d){
|
||||
var html='';
|
||||
var btn='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</a>';
|
||||
var btn1='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="disable">禁用</a>';
|
||||
var btn2='<a class="layui-btn layui-btn-xs" lay-event="open">启用</a>';
|
||||
if(d.status==1){
|
||||
html = '<div class="layui-btn-group">'+btn+btn1+'</div>';
|
||||
}
|
||||
else{
|
||||
html = '<div class="layui-btn-group">'+btn+btn2+'</div>';
|
||||
}
|
||||
return html;
|
||||
}}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(table_customer_source)',function (obj) {
|
||||
if(obj.event === 'edit'){
|
||||
add_cate(obj.data.id,obj.data.title);
|
||||
}
|
||||
if(obj.event === 'disable'){
|
||||
layer.confirm('确定要禁用该记录吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/source/set", {id:obj.data.id,status: 0}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if(obj.event === 'open'){
|
||||
layer.confirm('确定要启用该记录吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/source/set", {id:obj.data.id,status:1}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('body').on('click','.add-new',function(){
|
||||
add_cate(0,'');
|
||||
});
|
||||
|
||||
function add_cate(id,val){
|
||||
var title = '新增类型';
|
||||
if(id>0){
|
||||
title = '编辑类型';
|
||||
}
|
||||
layer.prompt({
|
||||
title: title,
|
||||
value: val,
|
||||
yes: function(index, layero) {
|
||||
// 获取文本框输入的值
|
||||
var value = layero.find(".layui-layer-input").val();
|
||||
if (value) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/source/add", {id: id,title: value}, callback);
|
||||
layer.close(index);
|
||||
} else {
|
||||
layer.msg('请填写类型名称');
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,121 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-normal layui-btn-sm addNew" type="button">+ 添加客户渠道</button>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var table = layui.table, tool = layui.tool, form = layui.form;
|
||||
layui.pageTable = table.render({
|
||||
elem: '#test'
|
||||
,toolbar: '#toolbarDemo'
|
||||
,defaultToolbar: false
|
||||
,title:'客户渠道列表'
|
||||
,url: "/customer/source/index"
|
||||
,page: false
|
||||
,cellMinWidth: 80
|
||||
,cols: [[
|
||||
{field:'id',width:80, title: 'ID号', align:'center'}
|
||||
,{field:'title',title: '渠道名称'}
|
||||
,{field:'status', title: '状态',width:80,align:'center',templet: function(d){
|
||||
var html1='<span class="green">正常</span>';
|
||||
var html2='<span class="yellow">禁用</span>';
|
||||
if(d.status==1){
|
||||
return html1;
|
||||
}
|
||||
else{
|
||||
return html2;
|
||||
}
|
||||
}}
|
||||
,{width:100,title: '操作', align:'center',templet: function(d){
|
||||
var html='';
|
||||
var btn='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>';
|
||||
var btn1='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="disable">禁用</a>';
|
||||
var btn2='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="open">启用</a>';
|
||||
if(d.status==1){
|
||||
html = '<div class="layui-btn-group">'+btn+btn1+'</div>';
|
||||
}
|
||||
else{
|
||||
html = '<div class="layui-btn-group">'+btn+btn2+'</div>';
|
||||
}
|
||||
return html;
|
||||
}}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(test)',function (obj) {
|
||||
if(obj.event === 'edit'){
|
||||
addExpense(obj.data.id,obj.data.title);
|
||||
}
|
||||
if(obj.event === 'disable'){
|
||||
layer.confirm('确定要禁用该渠道吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/source/source_check", { id: obj.data.id,status: 0,title: obj.data.title}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if(obj.event === 'open'){
|
||||
layer.confirm('确定要启用该渠道吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/source/source_check", { id: obj.data.id,status: 1,title: obj.data.title}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('body').on('click','.addNew',function(){
|
||||
addExpense(0,'');
|
||||
});
|
||||
|
||||
function addExpense(id,val){
|
||||
var title = '新增渠道';
|
||||
if(id>0){
|
||||
title = '编辑渠道';
|
||||
}
|
||||
layer.prompt({
|
||||
title: title,
|
||||
value: val,
|
||||
yes: function(index, layero) {
|
||||
// 获取文本框输入的值
|
||||
var value = layero.find(".layui-layer-input").val();
|
||||
if (value) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.pageTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/source/source_add", {id: id,title: value}, callback);
|
||||
layer.close(index);
|
||||
} else {
|
||||
layer.msg('请填写渠道名称');
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,16 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<h3 class="pb-3">客户来源详情</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户来源名称</td>
|
||||
<td>{$detail.title|default=''}"></td>
|
||||
<td class="layui-td-gray">排序</td>
|
||||
<td>{$detail.sort|default=0}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
@@ -0,0 +1,107 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="p-page layui-form">
|
||||
<h3 class="pb-3">新增跟进记录</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户名称</td>
|
||||
<td colspan="5">{$customer_name}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">联 系 人<font>*</font></td>
|
||||
<td>
|
||||
<select name="contact_id" lay-verify="required" lay-reqText="请选择联系人">
|
||||
<option value="">请选择</option>
|
||||
{volist name=":customer_contact($customer_id)" id="v"}
|
||||
<option value="{$v.id}">{$v.name}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">跟进方式<font>*</font></td>
|
||||
<td>
|
||||
<select name="types" lay-verify="required" lay-reqText="请选择跟进方式">
|
||||
<option value="">请选择</option>
|
||||
{volist name=":get_base_type_data('basic_customer',3)" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">跟进时间<font>*</font></td>
|
||||
<td><input type="text" name="follow_time" readonly lay-verify="required" lay-reqText="请选择跟进时间" placeholder="请选择跟进时间" class="layui-input tool-time" data-type="datetime" data-format="yyyy-MM-dd HH:mm"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray" style="vertical-align:top">沟通内容<font>*</font></td>
|
||||
<td colspan="5"><textarea name="content" placeholder="请输入沟通内容" lay-verify="required" lay-reqText="请输入沟通内容" class="layui-textarea"></textarea></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">当前阶段<font>*</font></td>
|
||||
<td>
|
||||
<select name="stage" lay-verify="required" lay-reqText="请选择">
|
||||
<option value="">请选择</option>
|
||||
{volist name=":get_base_type_data('basic_customer',4)" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">销售机会</td>
|
||||
<td>
|
||||
<select name="chance_id">
|
||||
<option value="">请选择</option>
|
||||
{volist name=":customer_chance($customer_id)" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray-2">下次沟通时间<font>*</font></td>
|
||||
<td><input type="text" name="next_time" readonly lay-verify="required" lay-reqText="请选择下次沟通时间" placeholder="请选择下次沟通时间" class="layui-input tool-time" data-type="datetime" data-format="yyyy-MM-dd HH:mm"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<div>相关附件</div>
|
||||
<div><button type="button" class="layui-btn layui-btn-xs" id="uploadBtn">附件上传</button></div>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="file_ids" value="">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-4">
|
||||
<input type="hidden" name="cid" value="{$customer_id}">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,uploadPlus=layui.uploadPlus;
|
||||
var attachment = new uploadPlus({
|
||||
"title":'上传文件',
|
||||
"target":'uploadBtn',
|
||||
"targetBox":'uploadBox'
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000,'traceTable');
|
||||
}
|
||||
}
|
||||
tool.post("/customer/trace/add", data.field, callback);
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,104 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
|
||||
<div class="p-page">
|
||||
<form class="layui-form gg-form-bar border-t border-x" lay-filter="barsearchform">
|
||||
{gt name="$is_auth" value="0"}
|
||||
<div class="layui-input-inline user-name" style="width:100px;">
|
||||
<input type="text" name="username" placeholder="选择跟进人" class="layui-input picker-admin" readonly />
|
||||
<input type="text" name="uid" value="" style="display:none" />
|
||||
</div>
|
||||
{/gt}
|
||||
<div class="layui-input-inline" style="width:175px;">
|
||||
<input type="text" class="layui-input" id="follow_time" placeholder="下次跟进日期" readonly name="follow_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:300px">
|
||||
<input type="text" name="keywords" placeholder="关键字,沟通内容/销售机会/客户名称" class="layui-input" autocomplete="off" />
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="table_customer_trace" lay-filter="table_customer_trace"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div>
|
||||
<h3>跟进记录</h3>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','oaPicker','laydatePlus','tablePlus'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, tool = layui.tool, form = layui.form,laydatePlus=layui.laydatePlus;
|
||||
var follow_time = new laydatePlus({'target':'follow_time'});
|
||||
layui.traceTable = table.render({
|
||||
elem: "#table_customer_trace"
|
||||
, toolbar: "#toolbarDemo"
|
||||
,url: "/customer/trace/datalist"
|
||||
,page: true
|
||||
,limit: 20
|
||||
,cellMinWidth: 80
|
||||
,is_excel: true
|
||||
,height: 'full-114'
|
||||
,cols: [[
|
||||
{field:'id',width:80, title: 'ID号', align:'center'}
|
||||
,{field:'stage_name',title: '当前阶段',width:100,align:'center'}
|
||||
,{field:'content',title: '沟通内容',minWidth:300}
|
||||
,{field:'chance',title: '销售机会',width:200}
|
||||
,{field:'type_name',title: '跟进方式',width:80,align:'center'}
|
||||
,{field:'admin_name',title: '跟进人',width:80,align:'center'}
|
||||
,{field:'follow_time', title: '跟进日期',width:150,align:'center'}
|
||||
,{field:'next_time', title: '下次跟进日期',width:150,align:'center',style:'color:#16b777'}
|
||||
,{field:'customer',title: '关联客户',width: 300}
|
||||
,{width:120,fixed:'right',title: '操作', align:'center',ignoreExport:true,templet: function(d){
|
||||
var html='';
|
||||
var btn1='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详细</a>';
|
||||
var btn2='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>';
|
||||
var btn3='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>';
|
||||
if(d.admin_id == login_admin){
|
||||
return '<div class="layui-btn-group">'+btn1+btn2+btn3+'</div>';
|
||||
}
|
||||
else{
|
||||
return '<div class="layui-btn-group">'+btn1+'</div>';
|
||||
}
|
||||
}}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(table_customer_trace)',function (obj) {
|
||||
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
tool.side("/customer/trace/view?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'edit') {
|
||||
tool.side("/customer/trace/add?id="+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'del') {
|
||||
layer.confirm('确定要删除该线索机会吗?', { icon: 3, title: '提示' }, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
obj.del();
|
||||
}
|
||||
}
|
||||
tool.delete("/customer/trace/del", { id: data.id }, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,113 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="p-page layui-form">
|
||||
<h3 class="pb-3">编辑跟进记录</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户名称</td>
|
||||
<td colspan="5">{$detail.customer}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">联 系 人<font>*</font></td>
|
||||
<td>
|
||||
<select name="contact_id" lay-verify="required" lay-reqText="请选择联系人">
|
||||
<option value="">请选择</option>
|
||||
{volist name=":customer_contact($detail.cid)" id="v"}
|
||||
<option value="{$v.id}" {eq name="$v.id" value="$detail.contact_id"} selected{/eq}>{$v.name}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">跟进方式<font>*</font></td>
|
||||
<td>
|
||||
<select name="types" lay-verify="required" lay-reqText="请选择跟进方式">
|
||||
<option value="">请选择</option>
|
||||
{volist name=":get_base_type_data('basic_customer',3)" id="v"}
|
||||
<option value="{$v.id}" {eq name="v.id" value="$detail.types"} selected{/eq}>{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">跟进时间<font>*</font></td>
|
||||
<td><input type="text" name="follow_time" value="{$detail.follow_time|date='Y-m-d H:i'}" readonly lay-verify="required" lay-reqText="请选择跟进时间" placeholder="请选择跟进时间" class="layui-input tool-time" data-type="datetime" data-format="yyyy-MM-dd HH:mm"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray" style="vertical-align:top">沟通内容<font>*</font></td>
|
||||
<td colspan="5"><textarea name="content" placeholder="请输入沟通内容" lay-verify="required" lay-reqText="请输入沟通内容" class="layui-textarea">{$detail.content}</textarea></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">当前阶段<font>*</font></td>
|
||||
<td>
|
||||
<select name="stage" lay-verify="required" lay-reqText="请选择">
|
||||
<option value="">请选择</option>
|
||||
{volist name=":get_base_type_data('basic_customer',4)" id="v"}
|
||||
<option value="{$v.id}" {eq name="v.id" value="$detail.stage"} selected{/eq}>{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">销售机会</td>
|
||||
<td>
|
||||
<select name="chance_id">
|
||||
<option value="">请选择</option>
|
||||
{volist name=":customer_chance($detail.cid)" id="v"}
|
||||
<option value="{$v.id}" {eq name="$v.id" value="$detail.chance_id"} selected{/eq}>{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray-2">下次沟通时间<font>*</font></td>
|
||||
<td><input type="text" name="next_time" value="{$detail.next_time|date='Y-m-d H:i'}" readonly lay-verify="required" lay-reqText="请选择下次沟通时间" placeholder="请选择下次沟通时间" class="layui-input tool-time" data-type="datetime" data-format="yyyy-MM-dd HH:mm"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">
|
||||
<div>相关附件</div>
|
||||
<div><button type="button" class="layui-btn layui-btn-xs" id="uploadBtn">附件上传</button></div>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="file_ids" value="{$detail.file_ids}">
|
||||
{notempty name="$detail.file_ids"}
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo)}</div>
|
||||
{/volist}
|
||||
{/notempty}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-4">
|
||||
<input type="hidden" name="id" value="{$detail.id}">
|
||||
<input type="hidden" name="cid" value="{$detail.cid}">
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','uploadPlus'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,uploadPlus=layui.uploadPlus;
|
||||
var attachment = new uploadPlus({
|
||||
"title":'上传文件',
|
||||
"target":'uploadBtn',
|
||||
"targetBox":'uploadBox'
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000,'traceTable');
|
||||
}
|
||||
}
|
||||
tool.post("/customer/trace/add", data.field, callback);
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,57 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<h3 class="pb-3">跟进记录详细</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户名称</td>
|
||||
<td colspan="5">{$detail.customer}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">联 系 人</td>
|
||||
<td>{$detail.contact}</td>
|
||||
<td class="layui-td-gray">跟进方式</td>
|
||||
<td>{$detail.types_name}</td>
|
||||
<td class="layui-td-gray">跟进时间</td>
|
||||
<td>{$detail.follow_time|date='Y-m-d H:i'}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray" style="vertical-align:top">沟通内容</td>
|
||||
<td colspan="5">{$detail.content}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">当前阶段</td>
|
||||
<td>{$detail.stage_name}</td>
|
||||
<td class="layui-td-gray">销售机会</td>
|
||||
<td>{$detail.chance}</td>
|
||||
<td class="layui-td-gray-2">下次沟通时间</td>
|
||||
<td>{$detail.next_time|date='Y-m-d H:i'}</td>
|
||||
</tr>
|
||||
{notempty name="$detail.file_ids"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">相关附件</td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
</table>
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
Reference in New Issue
Block a user