客户模块完成发布,更新layui到最新的2.7.4版本,其他一些优化修改
This commit is contained in:
parent
c17af94f1c
commit
8db6253463
@ -10,6 +10,19 @@
|
||||
======================
|
||||
*/
|
||||
use think\facade\Db;
|
||||
|
||||
//读取知识分类子分类ids
|
||||
function admin_article_cate_son($id = 0, $is_self = 1)
|
||||
{
|
||||
$article = Db::name('ArticleCate')->order('id desc')->select()->toArray();
|
||||
$article_list = get_data_node($article, $id);
|
||||
$article_array = array_column($article_list, 'id');
|
||||
if ($is_self == 1) {
|
||||
//包括自己在内
|
||||
$article_array[] = $id;
|
||||
}
|
||||
return $article_array;
|
||||
}
|
||||
//读取知识分类列表
|
||||
function article_cate()
|
||||
{
|
||||
|
@ -89,7 +89,7 @@ class Cate extends BaseController
|
||||
if ($cate_count > 0) {
|
||||
return to_assign(1, "该分类下还有子分类,无法删除");
|
||||
}
|
||||
$content_count = Db::name('Article')->where(["article_cate_id" => $id])->count();
|
||||
$content_count = Db::name('Article')->where(["cate_id" => $id])->count();
|
||||
if ($content_count > 0) {
|
||||
return to_assign(1, "该分类下还有文章,无法删除");
|
||||
}
|
||||
|
@ -1,10 +1,10 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="renderer" content="webkit"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
{block name="meta"}
|
||||
<link rel="mobile-prefetch" href=""/>
|
||||
{/block}
|
||||
|
@ -231,6 +231,20 @@ function get_position()
|
||||
return $position;
|
||||
}
|
||||
|
||||
//读取行业
|
||||
function get_industry()
|
||||
{
|
||||
$industry = Db::name('Industry')->where(['status' => 1])->select()->toArray();
|
||||
return $industry;
|
||||
}
|
||||
|
||||
//读取服务
|
||||
function get_services()
|
||||
{
|
||||
$services = Db::name('Services')->where(['status' => 1])->select()->toArray();
|
||||
return $services;
|
||||
}
|
||||
|
||||
//根据流程模块读取某部门某模块的审核流程
|
||||
function get_flows($type=1,$department=0)
|
||||
{
|
||||
|
@ -120,4 +120,5 @@ CREATE TABLE `oa_data_auth` (
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '数据权限表';
|
||||
|
||||
INSERT INTO `oa_data_auth` VALUES ((SELECT MAX(id) +1 FROM `oa_data_auth` a), '合同管理员','contract_admin','拥有该权限的员工可以查看、编辑、审核、作废、中止所有合同。', 'contract', '', 1656143065, 0);
|
||||
|
||||
INSERT INTO `oa_data_auth` VALUES ((SELECT MAX(id) +1 FROM `oa_data_auth` a), '合同管理员','contract_admin','拥有该权限的员工可以查看、编辑、审核、作废、中止所有合同。', 'contract', '',0,0,0, 1656143065, 0);
|
@ -132,7 +132,7 @@ class Index extends BaseController
|
||||
}
|
||||
}
|
||||
|
||||
//文章添加&&编辑
|
||||
//添加&&编辑
|
||||
public function add()
|
||||
{
|
||||
$param = get_params();
|
||||
|
109
app/customer/common.php
Normal file
109
app/customer/common.php
Normal file
@ -0,0 +1,109 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2021 勾股工作室
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.gougucms.com
|
||||
*/
|
||||
/**
|
||||
======================
|
||||
*模块数据获取公共文件
|
||||
======================
|
||||
*/
|
||||
use think\facade\Db;
|
||||
|
||||
//客户查看编辑数据权限判断
|
||||
function customer_auth($uid,$customer_id,$ajax=0,$level=0)
|
||||
{
|
||||
$customer = Db::name('Customer')->where(['id' => $customer_id])->find();
|
||||
//是否是客户管理员
|
||||
$auth = isAuth($uid,'customer_admin');
|
||||
if($auth==1){
|
||||
return $customer;
|
||||
}
|
||||
$auth_array=[];
|
||||
if($customer['belong_uid']==0){
|
||||
return $customer;
|
||||
}
|
||||
if(!empty($customer['share_ids']) && $level==0){
|
||||
$auth_array = explode(",",$customer['share_ids']);
|
||||
}
|
||||
array_push($auth_array,$customer['belong_uid']);
|
||||
if(!in_array($uid,$auth_array)){
|
||||
if($ajax == 1){
|
||||
to_assign(1,'无权限操作');
|
||||
}
|
||||
else{
|
||||
throw new \think\exception\HttpException(405, '无权限访问');
|
||||
}
|
||||
}
|
||||
else{
|
||||
return $customer;
|
||||
}
|
||||
}
|
||||
|
||||
//读取分类列表
|
||||
function customer_grade()
|
||||
{
|
||||
$cate = Db::name('CustomerGrade')->where(['status' => 1])->select()->toArray();
|
||||
return $cate;
|
||||
}
|
||||
|
||||
//读取签约主体
|
||||
function customer_source()
|
||||
{
|
||||
$source = Db::name('CustomerSource')->where(['status' => 1])->select()->toArray();
|
||||
return $source;
|
||||
}
|
||||
|
||||
//读取联系人
|
||||
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;
|
||||
}
|
||||
|
||||
//跟进方式
|
||||
function trace_type()
|
||||
{
|
||||
$type = ['其他','电话','微信','QQ','上门'];
|
||||
return $type;
|
||||
}
|
||||
|
||||
//跟进阶段
|
||||
function trace_stage()
|
||||
{
|
||||
$stage = ['未设置','立项评估','初期沟通','需求分析','方案制定','商务谈判','合同签订','失单'];
|
||||
return $stage;
|
||||
}
|
||||
|
||||
|
||||
//写入日志
|
||||
function to_log($uid,$type=0,$new,$old)
|
||||
{
|
||||
$log_data = [];
|
||||
$key_array = ['id', 'create_time', 'update_time', 'admin_id','belong_did','belong_time','distribute_time'];
|
||||
$type_array = ['customer_id', 'trace_id', 'contact_id', 'chance_id'];
|
||||
foreach ($new as $key => $value) {
|
||||
if (!in_array($key, $key_array)) {
|
||||
if(isset($old[$key]) && ($old[$key]!=$value)){
|
||||
$log_data[] = array(
|
||||
'field' => $key,
|
||||
'type' => $type,
|
||||
$type_array[$type] => $new['id'],
|
||||
'admin_id' => $uid,
|
||||
'old_content' => $old[$key],
|
||||
'new_content' => $value,
|
||||
'create_time' => time(),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Db::name('CustomerLog')->strict(false)->field(true)->insertAll($log_data);
|
||||
}
|
1
app/customer/config/install.gouguoa
Normal file
1
app/customer/config/install.gouguoa
Normal file
@ -0,0 +1 @@
|
||||
勾股OA模块安装鉴定文件,请勿删除!!!!!此次模块标识为:customer
|
219
app/customer/config/install.sql
Normal file
219
app/customer/config/install.sql
Normal file
@ -0,0 +1,219 @@
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_industry
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_industry`;
|
||||
CREATE TABLE `oa_industry` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(100) NOT NULL DEFAULT '' COMMENT '行业名称',
|
||||
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态:-1删除 0禁用 1启用',
|
||||
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
`update_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '行业';
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of oa_industry
|
||||
-- ----------------------------
|
||||
INSERT INTO `oa_industry` VALUES (1, '工业品企业', 1, 1637987189, 0);
|
||||
INSERT INTO `oa_industry` VALUES (2, '互联网企业', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_industry` VALUES (3, '服务行业', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_industry` VALUES (4, '消费品企业', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_industry` VALUES (5, '原材料企业', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_industry` VALUES (6, '农业企业', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_industry` VALUES (7, '科技企业', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_industry` VALUES (8, '其他行业', 1, 1637987199, 0);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_customer_grade
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_customer_grade`;
|
||||
CREATE TABLE `oa_customer_grade` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(100) NOT NULL DEFAULT '' COMMENT '客户等级名称',
|
||||
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态:-1删除 0禁用 1启用',
|
||||
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
`update_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '客户等级';
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of oa_customer_grade
|
||||
-- ----------------------------
|
||||
INSERT INTO `oa_customer_grade` VALUES (1, '普通客户', 1, 1637987189, 0);
|
||||
INSERT INTO `oa_customer_grade` VALUES (2, 'VIP客户', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_grade` VALUES (3, '白银客户', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_grade` VALUES (4, '黄金客户', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_grade` VALUES (5, '钻石客户', 1, 1637987199, 0);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_customer_source
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_customer_source`;
|
||||
CREATE TABLE `oa_customer_source` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(100) NOT NULL DEFAULT '' COMMENT '客户渠道名称',
|
||||
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态:-1删除 0禁用 1启用',
|
||||
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
`update_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '客户来源';
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of oa_customer_source
|
||||
-- ----------------------------
|
||||
INSERT INTO `oa_customer_source` VALUES (1, '独立开发', 1, 1637987189, 0);
|
||||
INSERT INTO `oa_customer_source` VALUES (2, '微信公众号', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_source` VALUES (3, '今日头条', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_source` VALUES (4, '百度搜索', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_source` VALUES (5, '销售活动', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_source` VALUES (6, '电话来访', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_source` VALUES (7, '客户介绍', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_source` VALUES (8, '其他来源', 1, 1637987199, 0);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_customer
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_customer`;
|
||||
CREATE TABLE `oa_customer` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) NOT NULL DEFAULT '' COMMENT '客户名称',
|
||||
`source_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '客户来源id',
|
||||
`grade_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '客户等级id',
|
||||
`industry_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '所属行业id',
|
||||
`services_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '客户意向id',
|
||||
`provinceid` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '省份id',
|
||||
`cityid` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '城市id',
|
||||
`distid` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '区县id',
|
||||
`townid` bigint(20) NOT NULL DEFAULT 0 COMMENT '城镇id',
|
||||
`address` varchar(255) NOT NULL DEFAULT '' COMMENT '客户联系地址',
|
||||
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '客户状态:0未设置,1新进客户,2跟进客户,3正式客户,4流失客户',
|
||||
`intent_status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '意向状态:0未设置,1意向不明,2意向模糊,3意向一般,4意向强烈',
|
||||
`contact_first` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '第一联系人id',
|
||||
`admin_id` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '录入人',
|
||||
`belong_uid` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '所属人',
|
||||
`belong_did` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '所属部门',
|
||||
`belong_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '获取时间',
|
||||
`distribute_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '分配时间',
|
||||
`share_ids` varchar(500) NOT NULL DEFAULT '' COMMENT '共享人员,如:1,2,3',
|
||||
`content` text NULL COMMENT '客户描述',
|
||||
`market` text NULL COMMENT '主要经营业务',
|
||||
`remark` text NULL COMMENT '备注信息',
|
||||
`bank` varchar(60) NOT NULL DEFAULT '' COMMENT '开户银行',
|
||||
`bank_sn` varchar(60) NOT NULL DEFAULT '' COMMENT '银行帐号',
|
||||
`tax_num` varchar(100) NOT NULL DEFAULT '' COMMENT '纳税人识别号',
|
||||
`cperson_mobile` varchar(20) NOT NULL DEFAULT '' COMMENT '开票电话',
|
||||
`cperson_address` varchar(200) NOT NULL DEFAULT '' COMMENT '开票地址',
|
||||
`discard_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '废弃时间',
|
||||
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '添加时间',
|
||||
`update_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '修改时间',
|
||||
`delete_time` int(11) NOT NULL DEFAULT 0 COMMENT '删除时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1000 CHARACTER SET = utf8mb4 COMMENT = '客户表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_customer_trace
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_customer_trace`;
|
||||
CREATE TABLE `oa_customer_trace` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`cid` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '客户ID',
|
||||
`contact_id` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '联系人id',
|
||||
`chance_id` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '销售机会id',
|
||||
`type` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '跟进方式:0其他,1电话,2微信,3QQ,4上门',
|
||||
`stage` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '当前阶段:0未设置,1立项评估,2初期沟通,3需求分析,4方案制定,5商务谈判,6合同签订,7失单',
|
||||
`content` text NULL COMMENT '跟进内容',
|
||||
`follow_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '跟进时间',
|
||||
`next_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '下次跟进时间',
|
||||
`admin_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建人',
|
||||
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
`update_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||
`delete_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '删除时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '客户跟进记录表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_customer_contact
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_customer_contact`;
|
||||
CREATE TABLE `oa_customer_contact` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`cid` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '客户ID',
|
||||
`is_default` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否是第一联系人',
|
||||
`name` varchar(100) NOT NULL DEFAULT '' COMMENT '姓名',
|
||||
`sex` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '用户性别:0未知,1男,2女',
|
||||
`mobile` varchar(20) NOT NULL DEFAULT '' COMMENT '手机号码',
|
||||
`qq` varchar(20) NOT NULL DEFAULT '' COMMENT 'QQ号',
|
||||
`wechat` varchar(100) NOT NULL DEFAULT '' COMMENT '微信号',
|
||||
`email` varchar(100) NOT NULL DEFAULT '' COMMENT '邮件地址',
|
||||
`nickname` varchar(50) NOT NULL DEFAULT '' COMMENT '称谓',
|
||||
`department` varchar(50) NOT NULL DEFAULT '' COMMENT '部门',
|
||||
`position` varchar(50) NOT NULL DEFAULT '' COMMENT '职务',
|
||||
`admin_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建人',
|
||||
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
`update_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||
`delete_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '删除时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '客户联系人表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_customer_chance
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_customer_chance`;
|
||||
CREATE TABLE `oa_customer_chance` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(255) NOT NULL DEFAULT '' COMMENT '销售机会主题',
|
||||
`cid` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '客户ID',
|
||||
`contact_id` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '联系人id',
|
||||
`services_id` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '需求服务id',
|
||||
`stage` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '当前阶段:0未设置,1立项评估,2初期沟通,3需求分析,4方案制定,5商务谈判,6合同签订,7失单',
|
||||
`content` text NULL COMMENT '需求描述',
|
||||
`discovery_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '发现时间',
|
||||
`expected_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '预计签单时间',
|
||||
`expected_amount` decimal(15, 2) NULL DEFAULT 0.00 COMMENT '预计签单金额',
|
||||
`admin_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建人',
|
||||
`belong_uid` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '所属人',
|
||||
`assist_ids` varchar(500) NOT NULL DEFAULT '' COMMENT '协助人员,如:1,2,3',
|
||||
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
`update_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||
`delete_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '删除时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '客户销售机会表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_customer_file
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_customer_file`;
|
||||
CREATE TABLE `oa_customer_file` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`customer_id` int(11) UNSIGNED NOT NULL COMMENT '关联客户id',
|
||||
`file_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '相关联附件id',
|
||||
`admin_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建人',
|
||||
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
`update_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '修改时间',
|
||||
`delete_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '删除时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '客户附件关联表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_customer_log
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_customer_log`;
|
||||
CREATE TABLE `oa_customer_log` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`type` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '操作类型:0客户,1跟进记录,2客户联系人,3销售机会',
|
||||
`action` varchar(100) NOT NULL DEFAULT 'edit' COMMENT '动作:add,edit,del,check,upload',
|
||||
`field` varchar(100) NOT NULL DEFAULT '' COMMENT '字段',
|
||||
`customer_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '关联客户id',
|
||||
`trace_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '跟进记录id',
|
||||
`contact_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '客户联系人id',
|
||||
`chance_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '销售机会id',
|
||||
`admin_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '操作人',
|
||||
`old_content` text NULL COMMENT '修改前的内容',
|
||||
`new_content` text NULL COMMENT '修改后的内容',
|
||||
`remark` text NULL COMMENT '补充备注',
|
||||
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '客户操作记录表';
|
||||
|
||||
|
||||
INSERT INTO `oa_data_auth` VALUES ((SELECT MAX(id) +1 FROM `oa_data_auth` a), '客户管理员','customer_admin','拥有该权限的员工可以查看、转移所有客户。', 'customer', '',0,0,0, 1656143065, 0);
|
356
app/customer/controller/Api.php
Normal file
356
app/customer/controller/Api.php
Normal file
@ -0,0 +1,356 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2022 勾股工作室
|
||||
* @license https://opensource.org/licenses/GPL-3.0
|
||||
* @link https://www.gougucms.com
|
||||
*/
|
||||
declare (strict_types = 1);
|
||||
namespace app\customer\controller;
|
||||
|
||||
use app\api\BaseController;
|
||||
use app\customer\model\CustomerTrace;
|
||||
use app\customer\model\CustomerContact;
|
||||
use app\customer\model\CustomerChance;
|
||||
use app\customer\model\CustomerLog;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Api extends BaseController
|
||||
{
|
||||
//跟进记录列表
|
||||
public function get_trace()
|
||||
{
|
||||
$param = get_params();
|
||||
$where = array();
|
||||
$where[] = ['delete_time', '=', 0];
|
||||
$where[] = ['cid', '=', $param['customer_id']];
|
||||
$rows = empty($param['limit']) ? get_config('app . page_size') : $param['limit'];
|
||||
$content = CustomerTrace::where($where)
|
||||
->order('create_time desc')
|
||||
->paginate($rows, false, ['query' => $param])
|
||||
->each(function ($item, $key) {
|
||||
$item->admin_name = Db::name('Admin')->where(['id' => $item->admin_id])->value('name');
|
||||
$item->create_time = date('Y-m-d H:i:s', (int) $item->create_time);
|
||||
$item->follow_time = date('Y-m-d H:i', (int) $item->follow_time);
|
||||
$item->next_time = date('Y-m-d H:i', (int) $item->next_time);
|
||||
$item->stage_name = CustomerTrace::$Stage[(int) $item->stage];
|
||||
$item->type_name = CustomerTrace::$Type[(int) $item->type];
|
||||
});
|
||||
return table_assign(0, '', $content);
|
||||
}
|
||||
|
||||
//添加跟进记录
|
||||
public function add_trace()
|
||||
{
|
||||
$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']);
|
||||
}
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
$param['update_time'] = time();
|
||||
$old = CustomerTrace::where(['id' => $param['id']])->find();
|
||||
if($this->uid!=$old['admin_id']){
|
||||
return to_assign(1, "只有所属员工才有权限操作");
|
||||
}
|
||||
$res = CustomerTrace::strict(false)->field(true)->update($param);
|
||||
if ($res) {
|
||||
add_log('edit', $param['id'], $param);
|
||||
to_log($this->uid,1,$param,$old);
|
||||
return to_assign();
|
||||
} else {
|
||||
return to_assign(1, '操作失败');
|
||||
}
|
||||
} else {
|
||||
$param['create_time'] = time();
|
||||
$param['admin_id'] = $this->uid;
|
||||
$tid = CustomerTrace::strict(false)->field(true)->insertGetId($param);
|
||||
if ($tid) {
|
||||
add_log('add', $tid, $param);
|
||||
$log_data = array(
|
||||
'field' => 'new',
|
||||
'action' => 'add',
|
||||
'type' => 1,
|
||||
'customer_id' => $param['cid'],
|
||||
'admin_id' => $param['admin_id'],
|
||||
'create_time' => time(),
|
||||
);
|
||||
Db::name('CustomerLog')->strict(false)->field(true)->insert($log_data);
|
||||
return to_assign();
|
||||
} else {
|
||||
return to_assign(1, '操作失败');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$customer_id = isset($param['cid']) ? $param['cid'] : 0;
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
if ($id > 0) {
|
||||
View::assign('detail', (new CustomerTrace())->detail($id));
|
||||
return view('edit_trace');
|
||||
}
|
||||
$customer_name = Db::name('Customer')->where('id',$customer_id)->value('name');
|
||||
View::assign('customer_id', $customer_id);
|
||||
View::assign('customer_name', $customer_name);
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//添加跟进记录
|
||||
public function view_trace()
|
||||
{
|
||||
$param = get_params();
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
$detail = (new CustomerTrace())->detail($id);
|
||||
if(empty($detail)){
|
||||
echo '<div style="text-align:center;color:red;margin-top:20%;">找不到该跟进记录</div>';exit;
|
||||
}
|
||||
View::assign('detail',$detail);
|
||||
return view();
|
||||
}
|
||||
|
||||
//删除跟进记录
|
||||
public function delete_trace()
|
||||
{
|
||||
if (request()->isDelete()) {
|
||||
$param = get_params();
|
||||
$admin_id = Db::name('CustomerTrace')->where(['id' => $param['id']])->value('admin_id');
|
||||
if($admin_id != $this->uid){
|
||||
return to_assign(1, '你不是该跟进记录的创建人,无权限删除');
|
||||
}
|
||||
$param['delete_time'] = time();
|
||||
$res = CustomerTrace::strict(false)->field(true)->update($param);
|
||||
if ($res) {
|
||||
add_log('edit', $param['id'], $param);
|
||||
to_log($this->uid,1,$param,['delete_time'=>0]);
|
||||
return to_assign();
|
||||
} else {
|
||||
return to_assign(1, '操作失败');
|
||||
}
|
||||
} else {
|
||||
return to_assign(1, '参数错误');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//销售机会列表
|
||||
public function get_chance()
|
||||
{
|
||||
$param = get_params();
|
||||
$where = array();
|
||||
$where[] = ['delete_time', '=', 0];
|
||||
$where[] = ['cid', '=', $param['customer_id']];
|
||||
$rows = empty($param['limit']) ? get_config('app . page_size') : $param['limit'];
|
||||
$content = CustomerChance::where($where)
|
||||
->order('create_time desc')
|
||||
->paginate($rows, false, ['query' => $param])
|
||||
->each(function ($item, $key) {
|
||||
$item->belong_name = Db::name('Admin')->where(['id' => $item->belong_uid])->value('name');
|
||||
$item->create_time = date('Y-m-d H:i:s', (int) $item->create_time);
|
||||
$item->discovery_time = date('Y-m-d', (int) $item->discovery_time);
|
||||
$item->expected_time = date('Y-m-d', (int) $item->expected_time);
|
||||
$item->stage_name = CustomerTrace::$Stage[(int) $item->stage];
|
||||
$item->services_name = Db::name('Services')->where(['id' => $item->services_id])->value('title');
|
||||
});
|
||||
return table_assign(0, '', $content);
|
||||
}
|
||||
|
||||
//添加销售机会
|
||||
public function add_chance()
|
||||
{
|
||||
$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']);
|
||||
}
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
$param['update_time'] = time();
|
||||
$old = CustomerChance::where(['id' => $param['id']])->find();
|
||||
if($this->uid!=$old['admin_id']){
|
||||
return to_assign(1, "只有所属员工才有权限操作");
|
||||
}
|
||||
$res = CustomerChance::strict(false)->field(true)->update($param);
|
||||
if ($res) {
|
||||
add_log('edit', $param['id'], $param);
|
||||
to_log($this->uid,3,$param,$old);
|
||||
return to_assign();
|
||||
} else {
|
||||
return to_assign(1, '操作失败');
|
||||
}
|
||||
} else {
|
||||
$param['create_time'] = time();
|
||||
$param['admin_id'] = $this->uid;
|
||||
$tid = CustomerChance::strict(false)->field(true)->insertGetId($param);
|
||||
if ($tid) {
|
||||
add_log('add', $tid, $param);
|
||||
$log_data = array(
|
||||
'field' => 'new',
|
||||
'action' => 'add',
|
||||
'type' => 3,
|
||||
'customer_id' => $param['cid'],
|
||||
'admin_id' => $param['admin_id'],
|
||||
'create_time' => time(),
|
||||
);
|
||||
Db::name('CustomerLog')->strict(false)->field(true)->insert($log_data);
|
||||
return to_assign();
|
||||
} else {
|
||||
return to_assign(1, '操作失败');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$customer_id = isset($param['cid']) ? $param['cid'] : 0;
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
if ($id > 0) {
|
||||
View::assign('detail', (new CustomerChance())->detail($id));
|
||||
return view('edit_chance');
|
||||
}
|
||||
$customer_name = Db::name('Customer')->where('id',$customer_id)->value('name');
|
||||
View::assign('customer_id', $customer_id);
|
||||
View::assign('customer_name', $customer_name);
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//添加销售机会
|
||||
public function view_chance()
|
||||
{
|
||||
$param = get_params();
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
$detail = (new CustomerChance())->detail($id);
|
||||
if(empty($detail)){
|
||||
echo '<div style="text-align:center;color:red;margin-top:20%;">找不到该销售机会</div>';exit;
|
||||
}
|
||||
View::assign('detail',$detail);
|
||||
return view();
|
||||
}
|
||||
|
||||
//删除销售机会
|
||||
public function delete_chance()
|
||||
{
|
||||
if (request()->isDelete()) {
|
||||
$param = get_params();
|
||||
$admin_id = Db::name('CustomerChance')->where(['id' => $param['id']])->value('admin_id');
|
||||
if($admin_id != $this->uid){
|
||||
return to_assign(1, '你不是该跟销售机会的创建人,无权限删除');
|
||||
}
|
||||
$param['delete_time'] = time();
|
||||
$res = CustomerChance::strict(false)->field(true)->update($param);
|
||||
if ($res) {
|
||||
add_log('edit', $param['id'], $param);
|
||||
to_log($this->uid,3,$param,['delete_time'=>0]);
|
||||
return to_assign();
|
||||
} else {
|
||||
return to_assign(1, '操作失败');
|
||||
}
|
||||
} else {
|
||||
return to_assign(1, '参数错误');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//获取联系人数据
|
||||
public function get_contact()
|
||||
{
|
||||
$param = get_params();
|
||||
$where = array();
|
||||
$where[] = ['delete_time', '=', 0];
|
||||
$where[] = ['cid', '=', $param['customer_id']];
|
||||
$rows = empty($param['limit']) ? get_config('app . page_size') : $param['limit'];
|
||||
$content = CustomerContact::where($where)
|
||||
->order('create_time desc')
|
||||
->paginate($rows, false, ['query' => $param])
|
||||
->each(function ($item, $key) {
|
||||
$item->admin_name = Db::name('Admin')->where(['id' => $item->admin_id])->value('name');
|
||||
$item->create_time = date('Y-m-d H:i:s', (int) $item->create_time);
|
||||
});
|
||||
return table_assign(0, '', $content);
|
||||
}
|
||||
|
||||
//设置联系人
|
||||
public function set_contact()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$detail= Db::name('CustomerContact')->where(['id' => $param['id']])->find();
|
||||
CustomerContact::where(['cid' => $detail['cid']])->strict(false)->field(true)->update(['is_default'=>0]);
|
||||
$res = CustomerContact::where(['id' => $param['id']])->update(['is_default'=>1]);
|
||||
if ($res) {
|
||||
add_log('edit', $param['id'], $param);
|
||||
to_log($this->uid,2,$param,$detail);
|
||||
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) {
|
||||
$log_data = array(
|
||||
'field' => 'file',
|
||||
'action' => 'upload',
|
||||
'customer_id' => $param['customer_id'],
|
||||
'admin_id' => $param['admin_id'],
|
||||
'old_content' => '',
|
||||
'new_content' => $param['file_name'],
|
||||
'create_time' => time(),
|
||||
);
|
||||
Db::name('CustomerLog')->strict(false)->field(true)->insert($log_data);
|
||||
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');
|
||||
$log_data = array(
|
||||
'field' => 'file',
|
||||
'action' => 'delete',
|
||||
'customer_id' => $detail['customer_id'],
|
||||
'admin_id' => $this->uid,
|
||||
'new_content' => $file_name,
|
||||
'create_time' => time(),
|
||||
);
|
||||
Db::name('CustomerLog')->strict(false)->field(true)->insert($log_data);
|
||||
return to_assign(0, "删除成功");
|
||||
} else {
|
||||
return to_assign(1, "删除失败");
|
||||
}
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
//操作日志列表
|
||||
public function customer_log()
|
||||
{
|
||||
$param = get_params();
|
||||
$list = new CustomerLog();
|
||||
$content = $list->customer_log($param);
|
||||
return to_assign(0, '', $content);
|
||||
}
|
||||
|
||||
}
|
143
app/customer/controller/Contact.php
Normal file
143
app/customer/controller/Contact.php
Normal file
@ -0,0 +1,143 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2021 勾股工作室
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.gougucms.com
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\customer\controller;
|
||||
|
||||
use app\base\BaseController;
|
||||
use app\customer\model\CustomerContact;
|
||||
use app\customer\validate\CustomerContactCheck;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Contact extends BaseController
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$where = array();
|
||||
$whereOr = array();
|
||||
if (!empty($param['keywords'])) {
|
||||
$where[] = ['a.id|a.name', 'like', '%' . $param['keywords'] . '%'];
|
||||
}
|
||||
$where[] = ['a.delete_time', '=', 0];
|
||||
|
||||
$uid = $this->uid;
|
||||
$auth = isAuth($uid,'customer_admin');
|
||||
if($auth==0){
|
||||
$dids = get_department_son($this->did,0);
|
||||
if(!empty($dids)){
|
||||
$whereOr[] =['c.belong_did', 'in', $dids];
|
||||
}
|
||||
$whereOr[] =['c.belong_uid', '=', $uid];
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',c.share_ids)")];
|
||||
}
|
||||
|
||||
$rows = empty($param['limit']) ? get_config('app . page_size') : $param['limit'];
|
||||
$content = CustomerContact::where($where)
|
||||
->where(function ($query) use($whereOr) {
|
||||
$query->whereOr($whereOr);
|
||||
})
|
||||
->field('a.*,c.name as customer')
|
||||
->alias('a')
|
||||
->join('customer c', 'a.cid = c.id')
|
||||
->order('a.create_time desc')
|
||||
->paginate($rows, false, ['query' => $param])
|
||||
->each(function ($item, $key) {
|
||||
$item->create_time = date('Y-m-d H:i:s', (int) $item->create_time);
|
||||
});
|
||||
return table_assign(0, '', $content);
|
||||
} else {
|
||||
return view();
|
||||
}
|
||||
}
|
||||
//添加
|
||||
public function contact_add()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
try {
|
||||
validate(CustomerContactCheck::class)->scene('edit')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$detail= Db::name('CustomerContact')->where(['id' => $param['id']])->find();
|
||||
$data['update_time'] = time();
|
||||
$res = Db::name('CustomerContact')->strict(false)->field(true)->update($param);
|
||||
if ($res) {
|
||||
add_log('edit', $param['id'], $param);
|
||||
to_log($this->uid,2,$param,$detail);
|
||||
}
|
||||
return to_assign();
|
||||
} else {
|
||||
try {
|
||||
validate(CustomerContactCheck::class)->scene('add')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$param['admin_id'] = $this->uid;
|
||||
$param['create_time'] = time();
|
||||
$insertId = Db::name('CustomerContact')->strict(false)->field(true)->insertGetId($param);
|
||||
if ($insertId) {
|
||||
$log_data = array(
|
||||
'field' => 'new',
|
||||
'action' => 'add',
|
||||
'type' => 2,
|
||||
'customer_id' => $insertId,
|
||||
'admin_id' => $param['admin_id'],
|
||||
'create_time' => time(),
|
||||
);
|
||||
Db::name('CustomerLog')->strict(false)->field(true)->insert($log_data);
|
||||
add_log('add', $insertId, $param);
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
} else {
|
||||
$customer_id = isset($param['cid']) ? $param['cid'] : 0;
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
if ($id > 0) {
|
||||
View::assign('detail', (new CustomerContact())->detail($id));
|
||||
return view('contact_edit');
|
||||
}
|
||||
$customer_name = Db::name('Customer')->where('id',$customer_id)->value('name');
|
||||
View::assign('customer_id', $customer_id);
|
||||
View::assign('customer_name', $customer_name);
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
//设置
|
||||
public function contact_del()
|
||||
{
|
||||
if (request()->isDelete()) {
|
||||
$param = get_params();
|
||||
$admin_id = Db::name('CustomerContact')->where(['id' => $param['id']])->value('admin_id');
|
||||
if($admin_id != $this->uid){
|
||||
return to_assign(1, '你不是该联系人的创建人,无权限删除');
|
||||
}
|
||||
$param['delete_time'] = time();
|
||||
$res = CustomerContact::strict(false)->field(true)->update($param);
|
||||
if ($res) {
|
||||
add_log('edit', $param['id'], $param);
|
||||
to_log($this->uid,2,$param,['delete_time'=>0]);
|
||||
return to_assign();
|
||||
} else {
|
||||
return to_assign(1, '操作失败');
|
||||
}
|
||||
} else {
|
||||
return to_assign(1, '参数错误');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
102
app/customer/controller/Grade.php
Normal file
102
app/customer/controller/Grade.php
Normal file
@ -0,0 +1,102 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2021 勾股工作室
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.gougucms.com
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\customer\controller;
|
||||
|
||||
use app\base\BaseController;
|
||||
use app\customer\validate\CustomerGradeCheck;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Grade extends BaseController
|
||||
{
|
||||
|
||||
public function conf()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isPost()) {
|
||||
$param['update_time'] = time();
|
||||
$res = Db::name('DataAuth')->strict(false)->field(true)->update($param);
|
||||
return to_assign();
|
||||
} else {
|
||||
$detail = Db::name('DataAuth')->where('name','customer_admin')->find();
|
||||
$uids = Db::name('Admin')->where('id', 'in', $detail['uids'])->column('name');
|
||||
$detail['unames'] = implode(',', $uids);
|
||||
View::assign('detail', $detail);
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
//类别
|
||||
public function index()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$cate = Db::name('CustomerGrade')->order('create_time asc')->select();
|
||||
return to_assign(0, '', $cate);
|
||||
} else {
|
||||
return view();
|
||||
}
|
||||
}
|
||||
//添加
|
||||
public function grade_add()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
try {
|
||||
validate(CustomerGradeCheck::class)->scene('edit')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$data['update_time'] = time();
|
||||
$res = Db::name('CustomerGrade')->strict(false)->field(true)->update($param);
|
||||
if ($res) {
|
||||
add_log('edit', $param['id'], $param);
|
||||
}
|
||||
return to_assign();
|
||||
} else {
|
||||
try {
|
||||
validate(CustomerGradeCheck::class)->scene('add')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$param['create_time'] = time();
|
||||
$insertId = Db::name('CustomerGrade')->strict(false)->field(true)->insertGetId($param);
|
||||
if ($insertId) {
|
||||
add_log('add', $insertId, $param);
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//类别设置
|
||||
public function grade_check()
|
||||
{
|
||||
$param = get_params();
|
||||
$res = Db::name('CustomerGrade')->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, '操作失败');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
513
app/customer/controller/Index.php
Normal file
513
app/customer/controller/Index.php
Normal file
@ -0,0 +1,513 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2021 勾股工作室
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.gougucms.com
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\customer\controller;
|
||||
|
||||
use app\base\BaseController;
|
||||
use app\customer\model\Customer as CustomerList;
|
||||
use app\customer\validate\CustomerCheck;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Index extends BaseController
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$tab = isset($param['tab']) ? $param['tab'] : 0;
|
||||
$where = array();
|
||||
$whereOr = array();
|
||||
if (!empty($param['keywords'])) {
|
||||
$where[] = ['a.id|a.name|c.title', 'like', '%' . $param['keywords'] . '%'];
|
||||
}
|
||||
if (!empty($param['status'])) {
|
||||
$where[] = ['a.status', '=', $param['status']];
|
||||
}
|
||||
$where[] = ['a.delete_time', '=', 0];
|
||||
|
||||
$uid = $this->uid;
|
||||
$auth = isAuth($uid,'customer_admin');
|
||||
if($auth==0){
|
||||
$dids = get_department_son($this->did,0);
|
||||
if($tab==1){
|
||||
$whereOr[] =['a.belong_uid', '=', $uid];
|
||||
}
|
||||
else if($tab==2){
|
||||
if(!empty($dids)){
|
||||
$whereOr[] =['a.belong_did', 'in', $dids];
|
||||
}
|
||||
}
|
||||
else if($tab==3){
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',a.share_ids)")];
|
||||
}
|
||||
else{
|
||||
$whereOr[] =['a.belong_uid', '=', $uid];
|
||||
if(!empty($dids)){
|
||||
$whereOr[] =['a.belong_did', 'in', $dids];
|
||||
}
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',a.share_ids)")];
|
||||
}
|
||||
}
|
||||
else if($auth==1){
|
||||
$dids = get_department_son($this->did,0);
|
||||
if($tab==1){
|
||||
$whereOr[] =['a.belong_uid', '=', $uid];
|
||||
}
|
||||
else if($tab==2){
|
||||
if(!empty($dids)){
|
||||
$whereOr[] =['a.belong_did', 'in', $dids];
|
||||
}
|
||||
}
|
||||
else if($tab==3){
|
||||
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',a.share_ids)")];
|
||||
}
|
||||
}
|
||||
|
||||
$rows = empty($param['limit']) ? get_config('app . page_size') : $param['limit'];
|
||||
$content = CustomerList::where($where)
|
||||
->where(function ($query) use($whereOr) {
|
||||
$query->whereOr($whereOr);
|
||||
})
|
||||
->field('a.*,d.title as belong_department,g.title as grade,s.title as source,i.title as industry')
|
||||
->alias('a')
|
||||
->join('customer_source s', 'a.source_id = s.id')
|
||||
->join('customer_grade g', 'a.grade_id = g.id')
|
||||
->join('industry i', 'a.industry_id = i.id')
|
||||
->join('department d', 'a.belong_did = d.id','LEFT')
|
||||
->order('a.create_time desc')
|
||||
->paginate($rows, false, ['query' => $param])
|
||||
->each(function ($item, $key) {
|
||||
$item->belong_name = Db::name('Admin')->where(['id' => $item->belong_uid])->value('name');
|
||||
$item->create_time = date('Y-m-d H:i:s', (int) $item->create_time);
|
||||
$item->intent_status_name = CustomerList::$IntentStatus[(int) $item->intent_status];
|
||||
$item->status_name = CustomerList::$Status[(int) $item->status];
|
||||
$contact = Db::name('CustomerContact')->where(['is_default'=>1,'cid' => $item->id])->find();
|
||||
if(!empty($contact)){
|
||||
$item->user = $contact['name'];
|
||||
$item->mobile = $contact['mobile'];
|
||||
$item->qq = $contact['qq'];
|
||||
$item->wechat = $contact['wechat'];
|
||||
}
|
||||
|
||||
if($item->services_id == 0){
|
||||
$item->services_name = '-';
|
||||
}
|
||||
else{
|
||||
$item->services_name = Db::name('Services')->where(['id' => $item->services_id])->value('title');
|
||||
}
|
||||
});
|
||||
return table_assign(0, '', $content);
|
||||
} else {
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
//公海客户
|
||||
public function sea()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$where = array();
|
||||
if (!empty($param['keywords'])) {
|
||||
$where[] = ['a.id|a.name|c.title', 'like', '%' . $param['keywords'] . '%'];
|
||||
}
|
||||
if (!empty($param['status'])) {
|
||||
$where[] = ['a.status', '=', $param['status']];
|
||||
}
|
||||
$where[] = ['a.delete_time', '=', 0];
|
||||
$where[] = ['a.belong_uid', '=', 0];
|
||||
|
||||
$rows = empty($param['limit']) ? get_config('app . page_size') : $param['limit'];
|
||||
$content = CustomerList::where($where)
|
||||
->field('a.*,d.title as belong_department,g.title as grade,s.title as source,i.title as industry')
|
||||
->alias('a')
|
||||
->join('customer_source s', 'a.source_id = s.id')
|
||||
->join('customer_grade g', 'a.grade_id = g.id')
|
||||
->join('industry i', 'a.industry_id = i.id')
|
||||
->join('department d', 'a.belong_did = d.id','LEFT')
|
||||
->order('a.create_time desc')
|
||||
->paginate($rows, false, ['query' => $param])
|
||||
->each(function ($item, $key) {
|
||||
$item->belong_name = Db::name('Admin')->where(['id' => $item->belong_uid])->value('name');
|
||||
$item->create_time = date('Y-m-d H:i:s', (int) $item->create_time);
|
||||
$item->intent_status_name = CustomerList::$IntentStatus[(int) $item->intent_status];
|
||||
$item->status_name = CustomerList::$Status[(int) $item->status];
|
||||
$contact = Db::name('CustomerContact')->where(['is_default'=>1,'cid' => $item->id])->find();
|
||||
if(!empty($contact)){
|
||||
$item->user = $contact['name'];
|
||||
$item->mobile = $contact['mobile'];
|
||||
$item->qq = $contact['qq'];
|
||||
$item->wechat = $contact['wechat'];
|
||||
}
|
||||
|
||||
if($item->services_id == 0){
|
||||
$item->services_name = '-';
|
||||
}
|
||||
else{
|
||||
$item->services_name = Db::name('Services')->where(['id' => $item->services_id])->value('title');
|
||||
}
|
||||
});
|
||||
return table_assign(0, '', $content);
|
||||
} else {
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
//移入公海
|
||||
public function to_sea()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$id = get_params("id");
|
||||
$uid = $this->uid;
|
||||
//是否有权限
|
||||
$customer = customer_auth($uid,$id,1,1);
|
||||
$data['id'] = $id;
|
||||
$data['belong_uid'] = 0;
|
||||
$data['belong_did'] = 0;
|
||||
$data['belong_time'] = 0;
|
||||
if (Db::name('Customer')->update($data) !== false) {
|
||||
add_log('tosea', $id);
|
||||
$log_data = array(
|
||||
'field' => 'belong',
|
||||
'action' => 'tosea',
|
||||
'type' => 0,
|
||||
'customer_id' => $data['id'],
|
||||
'admin_id' => $this->uid,
|
||||
'create_time' => time(),
|
||||
);
|
||||
Db::name('CustomerLog')->strict(false)->field(true)->insert($log_data);
|
||||
return to_assign(0, "操作成功");
|
||||
} else {
|
||||
return to_assign(1, "操作失败");
|
||||
}
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
//废池客户
|
||||
public function trash()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$where = array();
|
||||
if (!empty($param['keywords'])) {
|
||||
$where[] = ['a.id|a.name|c.title', 'like', '%' . $param['keywords'] . '%'];
|
||||
}
|
||||
if (!empty($param['status'])) {
|
||||
$where[] = ['a.status', '=', $param['status']];
|
||||
}
|
||||
$where[] = ['a.delete_time', '>', 0];
|
||||
$where[] = ['a.belong_uid', '=', 0];
|
||||
|
||||
$rows = empty($param['limit']) ? get_config('app . page_size') : $param['limit'];
|
||||
$content = CustomerList::where($where)
|
||||
->field('a.*,d.title as belong_department,g.title as grade,s.title as source,i.title as industry')
|
||||
->alias('a')
|
||||
->join('customer_source s', 'a.source_id = s.id')
|
||||
->join('customer_grade g', 'a.grade_id = g.id')
|
||||
->join('industry i', 'a.industry_id = i.id')
|
||||
->join('department d', 'a.belong_did = d.id','LEFT')
|
||||
->order('a.create_time desc')
|
||||
->paginate($rows, false, ['query' => $param])
|
||||
->each(function ($item, $key) {
|
||||
$item->belong_name = Db::name('Admin')->where(['id' => $item->belong_uid])->value('name');
|
||||
$item->create_time = date('Y-m-d H:i:s', (int) $item->create_time);
|
||||
$item->intent_status_name = CustomerList::$IntentStatus[(int) $item->intent_status];
|
||||
$item->status_name = CustomerList::$Status[(int) $item->status];
|
||||
$contact = Db::name('CustomerContact')->where(['is_default'=>1,'cid' => $item->id])->find();
|
||||
if(!empty($contact)){
|
||||
$item->user = $contact['name'];
|
||||
$item->mobile = $contact['mobile'];
|
||||
$item->qq = $contact['qq'];
|
||||
$item->wechat = $contact['wechat'];
|
||||
}
|
||||
|
||||
if($item->services_id == 0){
|
||||
$item->services_name = '-';
|
||||
}
|
||||
else{
|
||||
$item->services_name = Db::name('Services')->where(['id' => $item->services_id])->value('title');
|
||||
}
|
||||
});
|
||||
return table_assign(0, '', $content);
|
||||
} else {
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
//抢客宝
|
||||
public function rush()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
$where = array();
|
||||
$where[] = ['a.delete_time', '=', 0];
|
||||
$where[] = ['a.belong_uid', '=', 0];
|
||||
$content = CustomerList::where($where)
|
||||
->field('a.*,d.title as belong_department,g.title as grade,s.title as source,i.title as industry')
|
||||
->alias('a')
|
||||
->join('customer_source s', 'a.source_id = s.id')
|
||||
->join('customer_grade g', 'a.grade_id = g.id')
|
||||
->join('industry i', 'a.industry_id = i.id')
|
||||
->join('department d', 'a.belong_did = d.id','LEFT')
|
||||
->orderRaw('rand()')
|
||||
->limit(10)
|
||||
->paginate()
|
||||
->each(function ($item, $key) {
|
||||
$item->create_time = date('Y-m-d H:i:s', (int) $item->create_time);
|
||||
$contact = Db::name('CustomerContact')->where(['is_default'=>1,'cid' => $item->id])->find();
|
||||
if(!empty($contact)){
|
||||
$item->user = $contact['name'];
|
||||
$item->mobile = $contact['mobile'];
|
||||
$item->qq = $contact['qq'];
|
||||
$item->wechat = $contact['wechat'];
|
||||
}
|
||||
if($item->services_id == 0){
|
||||
$item->services_name = '-';
|
||||
}
|
||||
else{
|
||||
$item->services_name = Db::name('Services')->where(['id' => $item->services_id])->value('title');
|
||||
}
|
||||
});
|
||||
return table_assign(0, '', $content);
|
||||
} else {
|
||||
$time = strtotime(date('Y-m-d')." 00:00:00");
|
||||
$max_num = Db::name('DataAuth')->where('name','customer_admin')->value('expected_1');
|
||||
$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 add()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
try {
|
||||
validate(CustomerCheck::class)->scene($param['scene'])->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$customer = customer_auth($this->uid,$param['id'],1);
|
||||
$param['update_time'] = time();
|
||||
$res = customerList::strict(false)->field(true)->update($param);
|
||||
if ($res) {
|
||||
add_log('edit', $param['id'], $param);
|
||||
to_log($this->uid,0,$param,$customer);
|
||||
return to_assign();
|
||||
} else {
|
||||
return to_assign(1, '操作失败');
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
validate(CustomerCheck::class)->scene('add')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$param['create_time'] = time();
|
||||
$param['admin_id'] = $this->uid;
|
||||
$cid = CustomerList::strict(false)->field(true)->insertGetId($param);
|
||||
|
||||
$contact = [
|
||||
'name' => $param['c_name'],
|
||||
'mobile' => $param['c_mobile'],
|
||||
'qq' => $param['c_qq'],
|
||||
'wechat' => $param['c_wechat'],
|
||||
'email' => $param['c_email'],
|
||||
'cid' => $cid,
|
||||
'is_default' => 1,
|
||||
'create_time' => time(),
|
||||
'admin_id' => $this->uid
|
||||
];
|
||||
Db::name('CustomerContact')->strict(false)->field(true)->insert($contact);
|
||||
if ($cid) {
|
||||
add_log('add', $cid, $param);
|
||||
$log_data = array(
|
||||
'field' => 'new',
|
||||
'action' => 'add',
|
||||
'type' => 0,
|
||||
'customer_id' => $cid,
|
||||
'admin_id' => $param['admin_id'],
|
||||
'create_time' => time(),
|
||||
);
|
||||
Db::name('CustomerLog')->strict(false)->field(true)->insert($log_data);
|
||||
return to_assign();
|
||||
} else {
|
||||
return to_assign(1, '操作失败');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
$id = get_params("id");
|
||||
//查看权限判断
|
||||
$customer = customer_auth($this->uid,$id);
|
||||
$detail = (new CustomerList())->detail($id);
|
||||
View::assign('detail', $detail);
|
||||
return view('edit');
|
||||
}
|
||||
else{
|
||||
$sea = isset($param['sea']) ? $param['sea'] : 0;
|
||||
View::assign('sea', $sea);
|
||||
View::assign('userinfo', get_login_admin());
|
||||
return view();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//查看
|
||||
public function view()
|
||||
{
|
||||
$id = get_params("id");
|
||||
//查看权限判断
|
||||
$customer = customer_auth($this->uid,$id);
|
||||
$detail = (new CustomerList())->detail($id);
|
||||
$contact = Db::name('CustomerContact')->where(['is_default'=>1,'cid'=>$id])->find();
|
||||
View::assign('contact', $contact);
|
||||
View::assign('detail', $detail);
|
||||
return view();
|
||||
}
|
||||
|
||||
//获取客户
|
||||
public function get()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$id = get_params("id");
|
||||
$time = strtotime(date('Y-m-d')." 00:00:00");
|
||||
$max_num = Db::name('DataAuth')->where('name','customer_admin')->value('expected_1');
|
||||
$count = Db::name('Customer')->where([['belong_time','>',$time],['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);
|
||||
$log_data = array(
|
||||
'field' => 'belong',
|
||||
'action' => 'get',
|
||||
'type' => 0,
|
||||
'customer_id' => $data['id'],
|
||||
'admin_id' => $this->uid,
|
||||
'create_time' => time(),
|
||||
);
|
||||
Db::name('CustomerLog')->strict(false)->field(true)->insert($log_data);
|
||||
return to_assign(0, "操作成功");
|
||||
} else {
|
||||
return to_assign(1, "操作失败");
|
||||
}
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
|
||||
//分配客户
|
||||
public function distribute()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$params = get_params();
|
||||
//是否是客户管理员
|
||||
$auth = isAuth($this->uid,'customer_admin');
|
||||
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']);
|
||||
to_log($this->uid,0,$data,['belong_uid'=>0]);
|
||||
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');
|
||||
if($auth==0){
|
||||
return to_assign(1, "只有客户管理员才有权限操作");
|
||||
}
|
||||
$data['id'] = $params['id'];
|
||||
$log_data = array(
|
||||
'field' => 'del',
|
||||
'action' => 'delete',
|
||||
'type' => 0,
|
||||
'customer_id' => $params['id'],
|
||||
'admin_id' => $this->uid,
|
||||
'create_time' => time(),
|
||||
);
|
||||
if($params['type'] ==1){
|
||||
$data['delete_time'] = time();
|
||||
$log_data['action'] = 'totrash';
|
||||
}
|
||||
else{
|
||||
$data['delete_time'] = -1;
|
||||
}
|
||||
if (Db::name('Customer')->update($data) !== false) {
|
||||
add_log('delete', $params['id']);
|
||||
Db::name('CustomerLog')->strict(false)->field(true)->insert($log_data);
|
||||
return to_assign(0, "删除成功");
|
||||
} else {
|
||||
return to_assign(1, "删除失败");
|
||||
}
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
//还原
|
||||
public function revert()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$params = get_params();
|
||||
//是否是客户管理员
|
||||
$auth = isAuth($this->uid,'customer_admin');
|
||||
if($auth==0){
|
||||
return to_assign(1, "只有客户管理员才有权限操作");
|
||||
}
|
||||
$data['id'] = $params['id'];
|
||||
$data['delete_time'] = 0;
|
||||
if (Db::name('Customer')->update($data) !== false) {
|
||||
add_log('recovery', $params['id']);
|
||||
$log_data = array(
|
||||
'field' => 'del',
|
||||
'action' => 'recovery',
|
||||
'type' => 0,
|
||||
'customer_id' => $params['id'],
|
||||
'admin_id' => $this->uid,
|
||||
'create_time' => time(),
|
||||
);
|
||||
Db::name('CustomerLog')->strict(false)->field(true)->insert($log_data);
|
||||
return to_assign(0, "删除成功");
|
||||
} else {
|
||||
return to_assign(1, "删除失败");
|
||||
}
|
||||
} else {
|
||||
return to_assign(1, "错误的请求");
|
||||
}
|
||||
}
|
||||
}
|
85
app/customer/controller/Source.php
Normal file
85
app/customer/controller/Source.php
Normal file
@ -0,0 +1,85 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2021 勾股工作室
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.gougucms.com
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\customer\controller;
|
||||
|
||||
use app\base\BaseController;
|
||||
use app\customer\validate\CustomerSourceCheck;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
|
||||
class Source extends BaseController
|
||||
{
|
||||
|
||||
public function index()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$cate = Db::name('CustomerSource')->order('create_time asc')->select();
|
||||
return to_assign(0, '', $cate);
|
||||
} else {
|
||||
return view();
|
||||
}
|
||||
}
|
||||
//添加
|
||||
public function source_add()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
try {
|
||||
validate(CustomerSourceCheck::class)->scene('edit')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$data['update_time'] = time();
|
||||
$res = Db::name('CustomerSource')->strict(false)->field(true)->update($param);
|
||||
if ($res) {
|
||||
add_log('edit', $param['id'], $param);
|
||||
}
|
||||
return to_assign();
|
||||
} else {
|
||||
try {
|
||||
validate(CustomerSourceCheck::class)->scene('add')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$param['create_time'] = time();
|
||||
$insertId = Db::name('CustomerSource')->strict(false)->field(true)->insertGetId($param);
|
||||
if ($insertId) {
|
||||
add_log('add', $insertId, $param);
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//设置
|
||||
public function source_check()
|
||||
{
|
||||
$param = get_params();
|
||||
$res = Db::name('CustomerSource')->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, '操作失败');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
5
app/customer/event.php
Normal file
5
app/customer/event.php
Normal file
@ -0,0 +1,5 @@
|
||||
<?php
|
||||
// 这是系统自动生成的event定义文件
|
||||
return [
|
||||
|
||||
];
|
14
app/customer/middleware.php
Normal file
14
app/customer/middleware.php
Normal file
@ -0,0 +1,14 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2021 勾股工作室
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.gougucms.com
|
||||
*/
|
||||
|
||||
// 这是系统自动生成的middleware定义文件
|
||||
return [
|
||||
//开启session中间件
|
||||
//'think\middleware\SessionInit',
|
||||
//验证勾股OA是否完成安装
|
||||
\app\home\middleware\Install::class,
|
||||
];
|
95
app/customer/model/Customer.php
Normal file
95
app/customer/model/Customer.php
Normal file
@ -0,0 +1,95 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2021 勾股工作室
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.gougucms.com
|
||||
*/
|
||||
|
||||
namespace app\customer\model;
|
||||
|
||||
use think\facade\Db;
|
||||
use think\Model;
|
||||
|
||||
class Customer extends Model
|
||||
{
|
||||
const ZERO = 0;
|
||||
const ONE = 1;
|
||||
const TWO = 2;
|
||||
const THREE = 3;
|
||||
const FORE = 4;
|
||||
const FIVE = 5;
|
||||
const SIX = 6;
|
||||
const SEVEN = 7;
|
||||
|
||||
public static $Status = [
|
||||
self::ZERO => '未设置',
|
||||
self::ONE => '新进客户',
|
||||
self::TWO => '跟进客户',
|
||||
self::THREE => '正式客户',
|
||||
self::FORE => '流失客户'
|
||||
];
|
||||
public static $IntentStatus = [
|
||||
self::ZERO => '未设置',
|
||||
self::ONE => '意向不明',
|
||||
self::TWO => '意向模糊',
|
||||
self::THREE => '意向一般',
|
||||
self::FORE => '意向强烈',
|
||||
];
|
||||
|
||||
public static $Type = [
|
||||
self::ZERO => '其他',
|
||||
self::ONE => '电话',
|
||||
self::TWO => '微信',
|
||||
self::THREE => 'QQ',
|
||||
self::FORE => '上门'
|
||||
|
||||
];
|
||||
public static $Stage = [
|
||||
self::ZERO => '未设置',
|
||||
self::ONE => '立项评估',
|
||||
self::TWO => '初期沟通',
|
||||
self::THREE => '需求分析',
|
||||
self::FORE => '方案制定',
|
||||
self::FIVE => '商务谈判',
|
||||
self::SIX => '合同签订',
|
||||
self::SEVEN => '失单'
|
||||
];
|
||||
|
||||
// 获取详情
|
||||
public function detail($id)
|
||||
{
|
||||
$detail = Db::name('Customer')->where(['id' => $id])->find();
|
||||
if (!empty($detail)) {
|
||||
$file_array = Db::name('CustomerFile')
|
||||
->field('cf.id,f.filepath,f.name,f.filesize,f.fileext')
|
||||
->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();
|
||||
|
||||
$trace_array = Db::name('CustomerTrace')->where(array('cid' => $id, 'delete_time' => 0))->order('follow_time desc')->limit(1)->select()->toArray();
|
||||
|
||||
$detail['status_name'] = self::$Status[(int) $detail['status']];
|
||||
$detail['create_time'] = date('Y-m-d', $detail['create_time']);
|
||||
$detail['belong_department'] = Db::name('Department')->where(['id' => $detail['belong_did']])->value('title');
|
||||
$detail['belong_name'] = Db::name('Admin')->where(['id' => $detail['belong_uid']])->value('name');
|
||||
|
||||
$share_names = Db::name('Admin')->where([['id','in',$detail['share_ids']]])->column('name');
|
||||
$detail['share_names'] = implode(',',$share_names);
|
||||
|
||||
$detail['file_array'] = $file_array;
|
||||
$detail['trace'] = [];
|
||||
if(!empty($trace_array)){
|
||||
$trace = $trace_array[0];
|
||||
$trace['follow_time'] = date('Y-m-d H:i', $trace['follow_time']);
|
||||
$trace['next_time'] = date('Y-m-d H:i', $trace['next_time']);
|
||||
$trace['contact_name'] = Db::name('CustomerContact')->where('id',$trace['contact_id'])->value('name');
|
||||
$trace['stage_name'] = self::$Stage[(int) $trace['stage']];
|
||||
$trace['type_name'] = self::$Type[(int) $trace['type']];
|
||||
$detail['trace'] = $trace;
|
||||
}
|
||||
}
|
||||
return $detail;
|
||||
}
|
||||
}
|
51
app/customer/model/CustomerChance.php
Normal file
51
app/customer/model/CustomerChance.php
Normal file
@ -0,0 +1,51 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2021 勾股工作室
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.gougucms.com
|
||||
*/
|
||||
|
||||
namespace app\customer\model;
|
||||
|
||||
use think\facade\Db;
|
||||
use think\Model;
|
||||
|
||||
class CustomerChance extends Model
|
||||
{
|
||||
const ZERO = 0;
|
||||
const ONE = 1;
|
||||
const TWO = 2;
|
||||
const THREE = 3;
|
||||
const FORE = 4;
|
||||
const FIVE = 5;
|
||||
const SIX = 6;
|
||||
const SEVEN = 7;
|
||||
|
||||
public static $Stage = [
|
||||
self::ZERO => '未设置',
|
||||
self::ONE => '立项评估',
|
||||
self::TWO => '初期沟通',
|
||||
self::THREE => '需求分析',
|
||||
self::FORE => '商务谈判',
|
||||
self::FIVE => '方案制定',
|
||||
self::SIX => '合同签订',
|
||||
self::SEVEN => '失单',
|
||||
];
|
||||
|
||||
// 获取详情
|
||||
public function detail($id)
|
||||
{
|
||||
$detail = Db::name('CustomerChance')->where(['id' => $id])->find();
|
||||
if (!empty($detail)) {
|
||||
$detail['customer'] = Db::name('Customer')->where(['id' => $detail['cid']])->value('name');
|
||||
$detail['create_time'] = date('Y-m-d', $detail['create_time']);
|
||||
$detail['expected_time'] = date('Y-m-d', $detail['expected_time']);
|
||||
$detail['discovery_time'] = date('Y-m-d', $detail['discovery_time']);
|
||||
$detail['belong_name'] = Db::name('Admin')->where(['id' => $detail['belong_uid']])->value('name');
|
||||
$assist_names = Db::name('Admin')->where([['id','in',$detail['assist_ids']]])->column('name');
|
||||
$detail['assist_names'] = implode(',',$assist_names);
|
||||
$detail['stage_name'] = self::$Stage[(int) $detail['stage']];
|
||||
}
|
||||
return $detail;
|
||||
}
|
||||
}
|
25
app/customer/model/CustomerContact.php
Normal file
25
app/customer/model/CustomerContact.php
Normal file
@ -0,0 +1,25 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2021 勾股工作室
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.gougucms.com
|
||||
*/
|
||||
|
||||
namespace app\customer\model;
|
||||
|
||||
use think\facade\Db;
|
||||
use think\Model;
|
||||
|
||||
class CustomerContact extends Model
|
||||
{
|
||||
// 获取详情
|
||||
public function detail($id)
|
||||
{
|
||||
$detail = Db::name('CustomerContact')->where(['id' => $id])->find();
|
||||
if (!empty($detail)) {
|
||||
$detail['create_time'] = date('Y-m-d H:i:s', $detail['create_time']);
|
||||
$detail['customer'] = Db::name('Customer')->where(['id' => $detail['cid']])->value('name');
|
||||
}
|
||||
return $detail;
|
||||
}
|
||||
}
|
209
app/customer/model/CustomerLog.php
Normal file
209
app/customer/model/CustomerLog.php
Normal file
@ -0,0 +1,209 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2022 勾股工作室
|
||||
* @license https://opensource.org/licenses/GPL-3.0
|
||||
* @link https://www.gougucms.com
|
||||
*/
|
||||
|
||||
declare (strict_types = 1);
|
||||
namespace app\customer\model;
|
||||
|
||||
use think\facade\Db;
|
||||
use think\Model;
|
||||
|
||||
class CustomerLog extends Model
|
||||
{
|
||||
public static $Sourse = [
|
||||
'status' => ['未设置', '新进客户', '跟进客户', '正式客户', '流失客户'],
|
||||
'intent_status' => ['未设置', '意向不明', '意向模糊', '意向一般', '意向强烈'],
|
||||
'type' => ['其他','电话','微信','QQ','上门'],
|
||||
'stage' => ['未设置','立项评估','初期沟通','需求分析','方案制定','商务谈判','合同签订','失单'],
|
||||
'action' => [
|
||||
'add' => '创建',
|
||||
'edit' => '修改',
|
||||
'delete' => '删除',
|
||||
'upload' => '上传',
|
||||
'get' => '领取',
|
||||
'tosea' => '向公海放入',
|
||||
'totrash' => '向废池放入',
|
||||
'recovery' => '从废池移出',
|
||||
],
|
||||
'role'=>['客户','客户跟进记录','客户联系人','客户销售机会'],
|
||||
'field_array' =>[
|
||||
0 =>[
|
||||
'name' => '名称',
|
||||
'source_id' => '客户来源',
|
||||
'grade_id' => '客户等级',
|
||||
'industry_id' => '所属行业',
|
||||
'services_id' => '客户意向',
|
||||
'provinceid' => '省份',
|
||||
'cityid' => '城市',
|
||||
'distid'=> '区县',
|
||||
'address' => '联系地址',
|
||||
'status' => '状态',
|
||||
'intent_status' => '意向状态',
|
||||
'belong_uid' => '所属人',
|
||||
'belong_did' => '所属部门',
|
||||
'share_ids' => '共享人员',
|
||||
'content' => '客户描述',
|
||||
'market' => '主要经营业务',
|
||||
'remark' => '备注信息',
|
||||
'bank`' => '开户银行',
|
||||
'bank_sn' => '银行帐号',
|
||||
'tax_num' => '纳税人识别号',
|
||||
'cperson_mobile' => '开票电话',
|
||||
'cperson_address' => '开票地址',
|
||||
'discard_time' => '废弃时间',
|
||||
'delete_time' => '删除',
|
||||
'file' => '附件',
|
||||
'new' => '新增',
|
||||
'del' => '删除',
|
||||
'belong' => '所属人',
|
||||
],
|
||||
1 =>[
|
||||
'contact_id' => '联系人',
|
||||
'chance_id' => '销售机会',
|
||||
'type' => '跟进方式',
|
||||
'stage' => '当前阶段',
|
||||
'content' => '跟进内容',
|
||||
'follow_time' => '跟进时间',
|
||||
'next_time' => '下次跟进时间',
|
||||
'delete_time' => '删除',
|
||||
'new' => '新增',
|
||||
'del' => '删除',
|
||||
],
|
||||
2 =>[
|
||||
'name' => '姓名',
|
||||
'is_default' => '第一联系人',
|
||||
'sex' => '性别',
|
||||
'mobile' => '手机号码',
|
||||
'qq' => 'QQ号',
|
||||
'wechat' => '微信号',
|
||||
'email' => '邮件地址',
|
||||
'nickname' => '称谓',
|
||||
'department' => '部门',
|
||||
'position' => '职务',
|
||||
'delete_time' => '删除',
|
||||
'new' => '新增',
|
||||
'del' => '删除',
|
||||
],
|
||||
3 =>[
|
||||
'title' => '主题',
|
||||
'contact_id' => '联系人',
|
||||
'services_id' => '需求服务',
|
||||
'stage' => '当前阶段',
|
||||
'content' => '需求描述',
|
||||
'discovery_time' => '发现时间',
|
||||
'expected_time' => '预计签单时间',
|
||||
'expected_amount' => '预计签单金额',
|
||||
'belong_uid' => '所属人',
|
||||
'assist_ids' => '协助人员',
|
||||
'delete_time' => '删除',
|
||||
'new' => '新增',
|
||||
'del' => '删除',
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
public function customer_log($param = [])
|
||||
{
|
||||
$trace_ids = Db::name('CustomerTrace')->where(['cid' => $param['customer_id'], 'delete_time' => 0])->column('id');
|
||||
$contact_ids = Db::name('CustomerContact')->where(['cid' => $param['customer_id'], 'delete_time' => 0])->column('id');
|
||||
$chance_ids = Db::name('CustomerChance')->where(['cid' => $param['customer_id'], 'delete_time' => 0])->column('id');
|
||||
|
||||
$where1 = [];
|
||||
$where2 = [];
|
||||
$where3 = [];
|
||||
$where4 = [];
|
||||
|
||||
$where1[] = ['a.customer_id', '=', $param['customer_id']];
|
||||
|
||||
$where2[] = ['a.type', '=', 1];
|
||||
$where2[] = ['a.trace_id', 'in', $trace_ids];
|
||||
|
||||
$where3[] = ['a.type', '=', 2];
|
||||
$where3[] = ['a.contact_id', 'in', $contact_ids];
|
||||
|
||||
$where4[] = ['a.type', '=', 3];
|
||||
$where4[] = ['a.chance_id', 'in', $chance_ids];
|
||||
|
||||
$page = intval($param['page']);
|
||||
$rows = empty($param['limit']) ? get_config('app . page_size') : $param['limit'];
|
||||
$content = Db::name('CustomerLog')
|
||||
->field('a.*,u.name,u.thumb')
|
||||
->alias('a')
|
||||
->join('Admin u', 'u.id = a.admin_id')
|
||||
->order('a.create_time desc')
|
||||
->whereOr([$where1, $where2, $where3, $where4])
|
||||
->page($page, $rows)
|
||||
->select()->toArray();
|
||||
$data = [];
|
||||
$sourse = self::$Sourse;
|
||||
$role = $sourse['role'];
|
||||
$action = $sourse['action'];
|
||||
foreach ($content as $k => $v) {
|
||||
$field_array = $sourse['field_array'][$v['type']];
|
||||
if (isset($sourse[$v['field']])) {
|
||||
$v['old_content'] = $sourse[$v['field']][$v['old_content']];
|
||||
$v['new_content'] = $sourse[$v['field']][$v['new_content']];
|
||||
}
|
||||
if (strpos($v['field'], '_time') !== false) {
|
||||
if ($v['old_content'] == '') {
|
||||
$v['old_content'] = '未设置';
|
||||
}
|
||||
$v['new_content'] = date('Y-m-d', (int) $v['new_content']);
|
||||
}
|
||||
if (strpos($v['field'], '_uid') !== false) {
|
||||
$v['old_content'] = Db::name('Admin')->where(['id' => $v['old_content']])->value('name');
|
||||
$v['new_content'] = Db::name('Admin')->where(['id' => $v['new_content']])->value('name');
|
||||
}
|
||||
if ($v['field'] == 'contact_id') {
|
||||
$v['old_content'] = Db::name('CustomerContact')->where(['id' => $v['old_content']])->value('name');
|
||||
$v['new_content'] = Db::name('CustomerContact')->where(['id' => $v['new_content']])->value('name');
|
||||
}
|
||||
if ($v['field'] == 'source_id') {
|
||||
$v['old_content'] = Db::name('CustomerSource')->where(['id' => $v['old_content']])->value('title');
|
||||
$v['new_content'] = Db::name('CustomerSource')->where(['id' => $v['new_content']])->value('title');
|
||||
}
|
||||
if ($v['field'] == 'grade_id') {
|
||||
$v['old_content'] = Db::name('CustomerGrade')->where(['id' => $v['old_content']])->value('title');
|
||||
$v['new_content'] = Db::name('CustomerGrade')->where(['id' => $v['new_content']])->value('title');
|
||||
}
|
||||
if ($v['field'] == 'industry_id') {
|
||||
$v['old_content'] = Db::name('Industry')->where(['id' => $v['old_content']])->value('title');
|
||||
$v['new_content'] = Db::name('Industry')->where(['id' => $v['new_content']])->value('title');
|
||||
}
|
||||
if ($v['field'] == 'services_id') {
|
||||
$v['old_content'] = Db::name('Services')->where(['id' => $v['old_content']])->value('title');
|
||||
$v['new_content'] = Db::name('Services')->where(['id' => $v['new_content']])->value('title');
|
||||
}
|
||||
if ($v['field'] == 'is_default') {
|
||||
$v['old_content'] = $v['old_content'] == 1?'第一联系人':'普通联系人';
|
||||
$v['new_content'] = $v['new_content'] == 1?'第一联系人':'普通联系人';
|
||||
}
|
||||
if ($v['field'] == 'sex') {
|
||||
$v['old_content'] = $v['old_content'] == 1?'男':'女';
|
||||
$v['new_content'] = $v['new_content'] == 1?'男':'女';
|
||||
}
|
||||
if (strpos($v['field'], '_ids') !== false) {
|
||||
$old_ids = Db::name('Admin')->where('id', 'in', $v['old_content'])->column('name');
|
||||
$v['old_content'] = implode(',', $old_ids);
|
||||
$new_ids = Db::name('Admin')->where('id', 'in', $v['new_content'])->column('name');
|
||||
$v['new_content'] = implode(',', $new_ids);
|
||||
}
|
||||
if ($v['old_content'] == '' || $v['old_content'] == null) {
|
||||
$v['old_content'] = '未设置';
|
||||
}
|
||||
if ($v['new_content'] == '' || $v['new_content'] == null) {
|
||||
$v['new_content'] = '未设置';
|
||||
}
|
||||
$v['role'] = $role[$v['type']];
|
||||
$v['action'] = $action[$v['action']];
|
||||
$v['title'] = $field_array[$v['field']];
|
||||
$v['times'] = time_trans($v['create_time']);
|
||||
$v['create_time'] = date('Y-m-d', $v['create_time']);
|
||||
$data[] = $v;
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
}
|
56
app/customer/model/CustomerTrace.php
Normal file
56
app/customer/model/CustomerTrace.php
Normal file
@ -0,0 +1,56 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2021 勾股工作室
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.gougucms.com
|
||||
*/
|
||||
|
||||
namespace app\customer\model;
|
||||
|
||||
use think\facade\Db;
|
||||
use think\Model;
|
||||
|
||||
class CustomerTrace extends Model
|
||||
{
|
||||
const ZERO = 0;
|
||||
const ONE = 1;
|
||||
const TWO = 2;
|
||||
const THREE = 3;
|
||||
const FORE = 4;
|
||||
const FIVE = 5;
|
||||
const SIX = 6;
|
||||
const SEVEN = 7;
|
||||
|
||||
public static $Type = [
|
||||
self::ZERO => '未设置',
|
||||
self::ONE => '电话',
|
||||
self::TWO => '微信',
|
||||
self::THREE => 'QQ',
|
||||
self::FORE => '上门'
|
||||
];
|
||||
public static $Stage = [
|
||||
self::ZERO => '未设置',
|
||||
self::ONE => '立项评估',
|
||||
self::TWO => '初期沟通',
|
||||
self::THREE => '需求分析',
|
||||
self::FORE => '商务谈判',
|
||||
self::FIVE => '方案制定',
|
||||
self::SIX => '合同签订',
|
||||
self::SEVEN => '失单',
|
||||
];
|
||||
|
||||
// 获取详情
|
||||
public function detail($id)
|
||||
{
|
||||
$detail = Db::name('CustomerTrace')->where(['id' => $id])->find();
|
||||
if (!empty($detail)) {
|
||||
$detail['stage_name'] = self::$Stage[(int) $detail['stage']];
|
||||
$detail['type_name'] = self::$Type[(int) $detail['type']];
|
||||
$detail['create_time'] = date('Y-m-d H:i:s', $detail['create_time']);
|
||||
$detail['follow_time'] = date('Y-m-d H:i:s', $detail['follow_time']);
|
||||
$detail['next_time'] = date('Y-m-d H:i:s', $detail['next_time']);
|
||||
$detail['customer'] = Db::name('Customer')->where(['id' => $detail['cid']])->value('name');
|
||||
}
|
||||
return $detail;
|
||||
}
|
||||
}
|
30
app/customer/validate/CustomerCheck.php
Normal file
30
app/customer/validate/CustomerCheck.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2021 勾股工作室
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.gougucms.com
|
||||
*/
|
||||
|
||||
namespace app\customer\validate;
|
||||
|
||||
use think\Validate;
|
||||
|
||||
class CustomerCheck extends Validate
|
||||
{
|
||||
protected $rule = [
|
||||
'name' => 'require|unique:customer',
|
||||
'id' => 'require',
|
||||
];
|
||||
|
||||
protected $message = [
|
||||
'name.require' => '合同名称不能为空',
|
||||
'name.unique' => '同样的合同名称已经存在',
|
||||
'id.require' => '缺少更新条件',
|
||||
];
|
||||
|
||||
protected $scene = [
|
||||
'add' => ['name',],
|
||||
'edit' => ['name','id'],
|
||||
'change' => ['id'],
|
||||
];
|
||||
}
|
30
app/customer/validate/CustomerContactCheck.php
Normal file
30
app/customer/validate/CustomerContactCheck.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2021 勾股工作室
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.gougucms.com
|
||||
*/
|
||||
|
||||
namespace app\customer\validate;
|
||||
|
||||
use think\Validate;
|
||||
|
||||
class CustomerContactCheck extends Validate
|
||||
{
|
||||
protected $rule = [
|
||||
'name' => 'require',
|
||||
'mobile' => 'require|unique:customer_contact',
|
||||
'id' => 'require',
|
||||
];
|
||||
|
||||
protected $message = [
|
||||
'name.require' => '联系人姓名不能为空',
|
||||
'mobile.unique' => '同样的手机号码已经存在',
|
||||
'id.require' => '缺少更新条件',
|
||||
];
|
||||
|
||||
protected $scene = [
|
||||
'add' => ['name','mobile'],
|
||||
'edit' => ['id', 'name','mobile'],
|
||||
];
|
||||
}
|
29
app/customer/validate/CustomerGradeCheck.php
Normal file
29
app/customer/validate/CustomerGradeCheck.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2021 勾股工作室
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.gougucms.com
|
||||
*/
|
||||
|
||||
namespace app\customer\validate;
|
||||
|
||||
use think\Validate;
|
||||
|
||||
class CustomerGradeCheck extends Validate
|
||||
{
|
||||
protected $rule = [
|
||||
'title' => 'require|unique:customer_grade',
|
||||
'id' => 'require',
|
||||
];
|
||||
|
||||
protected $message = [
|
||||
'title.require' => '名称不能为空',
|
||||
'title.unique' => '同样的名称已经存在',
|
||||
'id.require' => '缺少更新条件',
|
||||
];
|
||||
|
||||
protected $scene = [
|
||||
'add' => ['title'],
|
||||
'edit' => ['id', 'title'],
|
||||
];
|
||||
}
|
29
app/customer/validate/CustomerSourceCheck.php
Normal file
29
app/customer/validate/CustomerSourceCheck.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2021 勾股工作室
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.gougucms.com
|
||||
*/
|
||||
|
||||
namespace app\customer\validate;
|
||||
|
||||
use think\Validate;
|
||||
|
||||
class CustomerSourceCheck extends Validate
|
||||
{
|
||||
protected $rule = [
|
||||
'title' => 'require|unique:customer_source',
|
||||
'id' => 'require',
|
||||
];
|
||||
|
||||
protected $message = [
|
||||
'title.require' => '名称不能为空',
|
||||
'title.unique' => '同样的名称已经存在',
|
||||
'id.require' => '缺少更新条件',
|
||||
];
|
||||
|
||||
protected $scene = [
|
||||
'add' => ['title'],
|
||||
'edit' => ['id', 'title'],
|
||||
];
|
||||
}
|
143
app/customer/view/api/add_chance.html
Normal file
143
app/customer/view/api/add_chance.html
Normal file
@ -0,0 +1,143 @@
|
||||
{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">{$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" id="discovery_time" name="discovery_time" readonly autocomplete="off" lay-verify="required" lay-reqText="请选择发现时间" placeholder="请选择发现时间" class="layui-input">
|
||||
</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=":trace_stage()" id="v"}
|
||||
<option value="{$key}">{$v}</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" id="expected_time" name="expected_time" readonly autocomplete="off" lay-verify="required" lay-reqText="请选择预计签单时间" placeholder="请选择预计签单时间" class="layui-input">
|
||||
</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 autocomplete="off" placeholder="请选择归属人员" class="layui-input">
|
||||
<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" autocomplete="off" placeholder="请选择协助人员" class="layui-input">
|
||||
<input type="hidden" name="assist_ids">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="py-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','employeepicker'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,laydate = layui.laydate,employeepicker=layui.employeepicker;
|
||||
laydate.render({
|
||||
elem: '#discovery_time'
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#expected_time'
|
||||
,min: 0
|
||||
});
|
||||
|
||||
//选择归属人人弹窗
|
||||
$('body').on('click','[name="belong_name"]',function () {
|
||||
var ids=$('[name="belong_uid"]').val(),names=$('[name="belong_name"]').val();
|
||||
employeepicker.init({
|
||||
ids:ids,
|
||||
names:names,
|
||||
type:0,
|
||||
department_url: "/api/index/get_department_tree",
|
||||
employee_url: "/api/index/get_employee",
|
||||
callback:function(ids,names,dids,departments){
|
||||
$('[name="belong_uid"]').val(ids);
|
||||
$('[name="belong_name"]').val(names);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//选择共享成员弹窗
|
||||
$('body').on('click','[name="assist_names"]',function () {
|
||||
var ids=$('[name="assist_ids"]').val(),names=$(this).val(),share_ids_array=[],share_names_array=[];
|
||||
if(ids.length>0){
|
||||
share_ids_array=ids.split(',');
|
||||
share_names_array=names.split(',');
|
||||
}
|
||||
employeepicker.init({
|
||||
ids:share_ids_array,
|
||||
names:share_names_array,
|
||||
type:1,
|
||||
department_url: "/api/index/get_department_tree",
|
||||
employee_url: "/api/index/get_employee",
|
||||
callback:function(ids,names,dids,departments){
|
||||
$('[name="assist_ids"]').val(ids);
|
||||
$('[name="assist_names"]').val(names);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
parent.layui.tool.close();
|
||||
parent.layui.chanceTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/api/add_chance", data.field, callback);
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
106
app/customer/view/api/add_trace.html
Normal file
106
app/customer/view/api/add_trace.html
Normal file
@ -0,0 +1,106 @@
|
||||
{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="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="type" lay-verify="required" lay-reqText="请选择跟进方式">
|
||||
<option value="">请选择</option>
|
||||
{volist name=":trace_type()" id="v"}
|
||||
<option value="{$key}">{$v}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">跟进时间<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" id="follow_time" name="follow_time" autocomplete="off" lay-verify="required" lay-reqText="请选择跟进时间" placeholder="请选择跟进时间" class="layui-input">
|
||||
</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=":trace_stage()" id="v"}
|
||||
<option value="{$key}">{$v}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">销售机会</td>
|
||||
<td>
|
||||
<select name="grade_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" id="next_time" name="next_time" autocomplete="off" lay-verify="required" lay-reqText="请选择下次沟通时间" placeholder="请选择下次沟通时间" class="layui-input">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="py-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,laydate = layui.laydate;
|
||||
laydate.render({
|
||||
elem: '#follow_time'
|
||||
,type: 'datetime'
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#next_time'
|
||||
,min: 0
|
||||
,type: 'datetime'
|
||||
});
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
parent.layui.tool.close();
|
||||
parent.layui.traceTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/api/add_trace", data.field, callback);
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
143
app/customer/view/api/edit_chance.html
Normal file
143
app/customer/view/api/edit_chance.html
Normal file
@ -0,0 +1,143 @@
|
||||
{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" id="discovery_time" name="discovery_time" value="{$detail.discovery_time}" readonly autocomplete="off" lay-verify="required" lay-reqText="请选择发现时间" placeholder="请选择发现时间" class="layui-input">
|
||||
</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=":trace_stage()" id="v"}
|
||||
<option value="{$key}" {eq name="$key" value="$detail.stage"} selected{/eq}>{$v}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</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" id="expected_time" name="expected_time" value="{$detail.expected_time}" readonly autocomplete="off" lay-verify="required" lay-reqText="请选择预计签单时间" placeholder="请选择预计签单时间" class="layui-input">
|
||||
</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 autocomplete="off" placeholder="请选择归属人员" class="layui-input">
|
||||
<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}" autocomplete="off" placeholder="请选择协助人员" class="layui-input">
|
||||
<input type="hidden" name="assist_ids" value="{$detail.assist_ids}">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="py-3">
|
||||
<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','employeepicker'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,laydate = layui.laydate,employeepicker=layui.employeepicker;
|
||||
laydate.render({
|
||||
elem: '#discovery_time'
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#expected_time'
|
||||
,min: 0
|
||||
});
|
||||
|
||||
//选择归属人人弹窗
|
||||
$('body').on('click','[name="belong_name"]',function () {
|
||||
var ids=$('[name="belong_uid"]').val(),names=$('[name="belong_name"]').val();
|
||||
employeepicker.init({
|
||||
ids:ids,
|
||||
names:names,
|
||||
type:0,
|
||||
department_url: "/api/index/get_department_tree",
|
||||
employee_url: "/api/index/get_employee",
|
||||
callback:function(ids,names,dids,departments){
|
||||
$('[name="belong_uid"]').val(ids);
|
||||
$('[name="belong_name"]').val(names);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//选择共享成员弹窗
|
||||
$('body').on('click','[name="assist_names"]',function () {
|
||||
var ids=$('[name="assist_ids"]').val(),names=$(this).val(),share_ids_array=[],share_names_array=[];
|
||||
if(ids.length>0){
|
||||
share_ids_array=ids.split(',');
|
||||
share_names_array=names.split(',');
|
||||
}
|
||||
employeepicker.init({
|
||||
ids:share_ids_array,
|
||||
names:share_names_array,
|
||||
type:1,
|
||||
department_url: "/api/index/get_department_tree",
|
||||
employee_url: "/api/index/get_employee",
|
||||
callback:function(ids,names,dids,departments){
|
||||
$('[name="assist_ids"]').val(ids);
|
||||
$('[name="assist_names"]').val(names);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
parent.layui.tool.close();
|
||||
parent.layui.chanceTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/api/add_chance", data.field, callback);
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
106
app/customer/view/api/edit_trace.html
Normal file
106
app/customer/view/api/edit_trace.html
Normal file
@ -0,0 +1,106 @@
|
||||
{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="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="type" lay-verify="required" lay-reqText="请选择跟进方式">
|
||||
<option value="">请选择</option>
|
||||
{volist name=":trace_type()" id="v"}
|
||||
<option value="{$key}" {eq name="$key" value="$detail.type"} selected{/eq}>{$v}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">跟进时间<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" id="follow_time" name="follow_time" value="{$detail.follow_time}" autocomplete="off" lay-verify="required" lay-reqText="请选择跟进时间" placeholder="请选择跟进时间" class="layui-input">
|
||||
</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=":trace_stage()" id="v"}
|
||||
<option value="{$key}" {eq name="$key" value="$detail.stage"} selected{/eq}>{$v}</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" id="next_time" name="next_time" value="{$detail.next_time}" autocomplete="off" lay-verify="required" lay-reqText="请选择下次沟通时间" placeholder="请选择下次沟通时间" class="layui-input">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="py-3">
|
||||
<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'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,laydate = layui.laydate;
|
||||
laydate.render({
|
||||
elem: '#follow_time'
|
||||
,type: 'datetime'
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#next_time'
|
||||
,min: 0
|
||||
,type: 'datetime'
|
||||
});
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
parent.layui.tool.close();
|
||||
parent.layui.traceTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/api/add_trace", data.field, callback);
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
52
app/customer/view/api/view_chance.html
Normal file
52
app/customer/view/api/view_chance.html
Normal file
@ -0,0 +1,52 @@
|
||||
{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>
|
||||
{volist name=":customer_contact($detail.cid)" id="v"}
|
||||
{eq name="$v.id" value="$detail.contact_id"}{$v.name}{/eq}
|
||||
{/volist}
|
||||
</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}</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}</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>
|
||||
</table>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
50
app/customer/view/api/view_trace.html
Normal file
50
app/customer/view/api/view_trace.html
Normal file
@ -0,0 +1,50 @@
|
||||
{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="5">{$detail.customer}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">联 系 人</td>
|
||||
<td>
|
||||
{volist name=":customer_contact($detail.cid)" id="v"}
|
||||
{eq name="$v.id" value="$detail.contact_id"}{$v.name}{/eq}
|
||||
{/volist}
|
||||
</td>
|
||||
<td class="layui-td-gray">跟进方式</td>
|
||||
<td>{$detail.type_name}</td>
|
||||
<td class="layui-td-gray">跟进时间</td>
|
||||
<td>{$detail.follow_time}</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>
|
||||
{volist name=":customer_chance($detail.cid)" id="v"}
|
||||
{eq name="$v.id" value="$detail.chance_id"}{$v.title}{/eq}
|
||||
{/volist}
|
||||
</td>
|
||||
<td class="layui-td-gray-2">下次沟通时间</td>
|
||||
<td>{$detail.next_time}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
99
app/customer/view/contact/contact_add.html
Normal file
99
app/customer/view/contact/contact_add.html
Normal file
@ -0,0 +1,99 @@
|
||||
{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="5">{$customer_name}</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>
|
||||
</table>
|
||||
<div class="py-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,laydate = layui.laydate;
|
||||
laydate.render({
|
||||
elem: '#follow_time'
|
||||
,type: 'datetime'
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#next_time'
|
||||
,min: 0
|
||||
,type: 'datetime'
|
||||
});
|
||||
//监听提交
|
||||
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) {
|
||||
parent.layui.tool.close();
|
||||
parent.layui.contactTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/contact/contact_add", data.field, callback);
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
99
app/customer/view/contact/contact_edit.html
Normal file
99
app/customer/view/contact/contact_edit.html
Normal file
@ -0,0 +1,99 @@
|
||||
{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="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>
|
||||
</table>
|
||||
<div class="py-3">
|
||||
<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'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,laydate = layui.laydate;
|
||||
laydate.render({
|
||||
elem: '#follow_time'
|
||||
,type: 'datetime'
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#next_time'
|
||||
,min: 0
|
||||
,type: 'datetime'
|
||||
});
|
||||
//监听提交
|
||||
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) {
|
||||
parent.layui.tool.close();
|
||||
parent.layui.contactTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/contact/contact_add", data.field, callback);
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
90
app/customer/view/contact/index.html
Normal file
90
app/customer/view/contact/index.html
Normal file
@ -0,0 +1,90 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-3">
|
||||
<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'
|
||||
,toolbar: '#toolbarDemo'
|
||||
,title:'联系人列表'
|
||||
,url: "/customer/contact/index"
|
||||
,cellMinWidth: 240
|
||||
,page: true //开启分页
|
||||
,limit: 20
|
||||
,cols: [[
|
||||
{field:'id',width:80, title: 'ID号', align:'center'}
|
||||
,{field:'name',width:100,title: '联系人姓名', align:'center'}
|
||||
,{field:'customer',title: ' 关联客户'}
|
||||
,{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:100,title: '手机号码', align:'center'}
|
||||
,{field:'qq',width:100,title: 'QQ号码', align:'center'}
|
||||
,{field:'wechat',width:100,title: '微信号码', align:'center'}
|
||||
,{field:'email',width:120,title: '电子邮箱', align:'center'}
|
||||
,{field:'position',width:120,title: '担任职位', align:'center'}
|
||||
,{field:'department',width:120,title: '部门', align:'center'}
|
||||
,{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="open">设为首要</a>';
|
||||
return html+btn+btn1+'</div>';
|
||||
}}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(test)',function (obj) {
|
||||
if(obj.event === 'edit'){
|
||||
let url = '/customer/contact/contact_add/id/'+obj.data.id;
|
||||
tool.side(url);
|
||||
}
|
||||
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.post("/customer/contact/contact_delete", { 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/contact/contact_check", { id: obj.data.id,status: 1,title: obj.data.title}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
89
app/customer/view/grade/conf.html
Normal file
89
app/customer/view/grade/conf.html
Normal file
@ -0,0 +1,89 @@
|
||||
{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 colspan="6" class="red" style="line-height:1.8">
|
||||
<p><strong>客户模块使用说明:</strong></p>
|
||||
<p><strong>1、设置客户管理员,可设置多个</strong></p>
|
||||
<p style="text-indent:2em">a、拥有客户管理员权限的员工可以查看、转移、编辑所有客户。</p>
|
||||
<p style="text-indent:2em">b、非客户管理员的员工,可查看(客户所属人、客户共享人员)相关联的客户。</p>
|
||||
<p style="text-indent:2em; margin-bottom:8px">c、客户的编辑权限只有客户录入人和客户管理员拥有。</p>
|
||||
<p><strong>2、系统会记录每一次客户的操作记录</strong></p>
|
||||
<p style="text-indent:2em">a、记录每一次客户的操作记录,防止客户被误操作和后期问题追踪。</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">权限名称</td>
|
||||
<td>
|
||||
<input type="hidden" name="id" value="{$detail.id}" />
|
||||
{$detail.title}
|
||||
</td>
|
||||
<td class="layui-td-gray">权限标识</td>
|
||||
<td>{$detail.name}</td>
|
||||
<td class="layui-td-gray-3">每天可获取公客数<font>*</font></td>
|
||||
<td><input type="text" name="expected_1" value="{$detail.expected_1}" lay-verify="required|number" lay-reqText="请输入每天获取公客数" placeholder="每天每人可获取公客数" autocomplete="off" class="layui-input"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">权限人员<font>*</font>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<input type="text" id="unames" name="unames" value="{$detail.unames}" readonly placeholder="请选择权限人员" autocomplete="off" class="layui-input">
|
||||
<input type="hidden" id="uids" name="uids" value="{$detail.uids}" lay-verify="required" lay-reqText="请选择权限人员">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<span class="red" style="font-size: 12px;">{$detail.desc}</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="py-3">
|
||||
<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','employeepicker'];
|
||||
function gouguInit() {
|
||||
var form = layui.form, tool = layui.tool,employeepicker = layui.employeepicker;
|
||||
|
||||
//选择共享成员弹窗
|
||||
$('body').on('click','#unames',function () {
|
||||
var ids=$('#uids').val(),names=$(this).val(),share_ids_array=[],share_names_array=[];
|
||||
if(ids.length>0){
|
||||
share_ids_array=ids.split(',');
|
||||
share_names_array=names.split(',');
|
||||
}
|
||||
employeepicker.init({
|
||||
ids:share_ids_array,
|
||||
names:share_names_array,
|
||||
type:1,
|
||||
department_url: "/api/index/get_department_tree",
|
||||
employee_url: "/api/index/get_employee",
|
||||
callback:function(ids,names,dids,departments){
|
||||
$('#uids').val(ids);
|
||||
$('#unames').val(names);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
}
|
||||
tool.post("/contract/cate/conf", data.field, callback);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
121
app/customer/view/grade/index.html
Normal file
121
app/customer/view/grade/index.html
Normal file
@ -0,0 +1,121 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-3">
|
||||
<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'
|
||||
,title:'客户等级列表'
|
||||
,url: "/customer/grade/index"
|
||||
,page: true //开启分页
|
||||
,limit: 20
|
||||
,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}
|
||||
<!-- /脚本 -->
|
180
app/customer/view/index/add.html
Normal file
180
app/customer/view/index/add.html
Normal file
@ -0,0 +1,180 @@
|
||||
{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">客户名称<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=":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_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=":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">归属员工<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="belong_name" value="{$userinfo.name}" autocomplete="off" readonly placeholder="请选择客户归属人" class="layui-input">
|
||||
<input type="hidden" name="belong_uid" value="{$userinfo.id}" lay-verify="required" lay-reqText="请选择客户归属人">
|
||||
<input type="hidden" name="belong_did" value="{$userinfo.did}">
|
||||
</td>
|
||||
<td class="layui-td-gray">归属部门</td>
|
||||
<td>
|
||||
<input type="text" name="belong_department" value="{$userinfo.department}" 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">
|
||||
<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">微 信 号</td>
|
||||
<td>
|
||||
<input type="text" name="c_wechat" autocomplete="off" placeholder="请输入联系人微信号" class="layui-input">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">QQ号码</td>
|
||||
<td>
|
||||
<input type="text" name="c_qq" autocomplete="off" lay-verify="number" lay-reqText="QQ号码只能是数字" placeholder="请输入联系人QQ号码" class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">电子邮箱</td>
|
||||
<td colspan="3">
|
||||
<input type="text" name="c_email" autocomplete="off" placeholder="请输入联系人电子邮箱" 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="py-3">
|
||||
<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','employeepicker'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,employeepicker = layui.employeepicker;
|
||||
|
||||
//选择归属人人弹窗
|
||||
$('body').on('click','[name="belong_name"]',function () {
|
||||
var ids=$('[name="belong_uid"]').val(),names=$('[name="belong_name"]').val();
|
||||
employeepicker.init({
|
||||
ids:ids,
|
||||
names:names,
|
||||
type:0,
|
||||
department_url: "/api/index/get_department_tree",
|
||||
employee_url: "/api/index/get_employee",
|
||||
callback:function(ids,names,dids,departments){
|
||||
$('[name="belong_uid"]').val(ids);
|
||||
$('[name="belong_name"]').val(names);
|
||||
$('[name="belong_did"]').val(dids);
|
||||
$('[name="belong_department"]').val(departments);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//选择共享成员弹窗
|
||||
$('body').on('click','[name="share_names"]',function () {
|
||||
var ids=$('[name="share_ids"]').val(),names=$(this).val(),share_ids_array=[],share_names_array=[];
|
||||
if(ids.length>0){
|
||||
share_ids_array=ids.split(',');
|
||||
share_names_array=names.split(',');
|
||||
}
|
||||
employeepicker.init({
|
||||
ids:share_ids_array,
|
||||
names:share_names_array,
|
||||
type:1,
|
||||
department_url: "/api/index/get_department_tree",
|
||||
employee_url: "/api/index/get_employee",
|
||||
callback:function(ids,names,dids,departments){
|
||||
$('[name="share_ids"]').val(ids);
|
||||
$('[name="share_names"]').val(names);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
parent.layui.tool.close(1000);
|
||||
}
|
||||
}
|
||||
tool.post("/customer/index/add", data.field, callback);
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
150
app/customer/view/index/edit.html
Normal file
150
app/customer/view/index/edit.html
Normal file
@ -0,0 +1,150 @@
|
||||
{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">客户名称<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=":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>
|
||||
<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_industry()" id="v"}
|
||||
<option value="{$v.id}" {eq name="$v.id" value="$detail.industry_id"} selected{/eq}>{$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=":customer_grade()" id="v"}
|
||||
<option value="{$v.id}" {eq name="$v.id" value="$detail.grade_id"} selected{/eq}>{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">归属员工<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="belong_name" value="{$detail.belong_name}" autocomplete="off" readonly placeholder="请选择客户归属人" class="layui-input">
|
||||
<input type="hidden" name="belong_uid" value="{$detail.belong_uid}" lay-verify="required" lay-reqText="请选择客户归属人">
|
||||
<input type="hidden" name="belong_did" value="{$detail.belong_did}">
|
||||
</td>
|
||||
<td class="layui-td-gray">归属部门</td>
|
||||
<td>
|
||||
<input type="text" name="belong_department" value="{$detail.belong_department}" autocomplete="off" readonly class="layui-input">
|
||||
</td>
|
||||
<td class="layui-td-gray">共享员工</td>
|
||||
<td>
|
||||
<input type="text" name="share_names" value="{$detail.share_names}" autocomplete="off" readonly placeholder="请选择共享人员" class="layui-input">
|
||||
<input type="hidden" name="share_ids" value="{$detail.share_ids}">
|
||||
</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" style="vertical-align:top">经营业务</td>
|
||||
<td colspan="5">
|
||||
<textarea name="market" placeholder="请输入客户主要经营业务" class="layui-textarea">{$detail.market}</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}</textarea>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="py-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','employeepicker'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool,employeepicker = layui.employeepicker;
|
||||
|
||||
//选择归属人人弹窗
|
||||
$('body').on('click','[name="belong_name"]',function () {
|
||||
var ids=$('[name="belong_uid"]').val(),names=$('[name="belong_name"]').val();
|
||||
employeepicker.init({
|
||||
ids:ids,
|
||||
names:names,
|
||||
type:0,
|
||||
department_url: "/api/index/get_department_tree",
|
||||
employee_url: "/api/index/get_employee",
|
||||
callback:function(ids,names,dids,departments){
|
||||
$('[name="belong_uid"]').val(ids);
|
||||
$('[name="belong_name"]').val(names);
|
||||
$('[name="belong_did"]').val(dids);
|
||||
$('[name="belong_department"]').val(departments);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//选择共享成员弹窗
|
||||
$('body').on('click','[name="share_names"]',function () {
|
||||
var ids=$('[name="share_ids"]').val(),names=$(this).val(),share_ids_array=[],share_names_array=[];
|
||||
if(ids.length>0){
|
||||
share_ids_array=ids.split(',');
|
||||
share_names_array=names.split(',');
|
||||
}
|
||||
employeepicker.init({
|
||||
ids:share_ids_array,
|
||||
names:share_names_array,
|
||||
type:1,
|
||||
department_url: "/api/index/get_department_tree",
|
||||
employee_url: "/api/index/get_employee",
|
||||
callback:function(ids,names,dids,departments){
|
||||
$('[name="share_ids"]').val(ids);
|
||||
$('[name="share_names"]').val(names);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
parent.layui.tool.close(1000);
|
||||
}
|
||||
}
|
||||
tool.post("/customer/index/add", data.field, callback);
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
224
app/customer/view/index/index.html
Normal file
224
app/customer/view/index/index.html
Normal file
@ -0,0 +1,224 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-3">
|
||||
<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>下属客户</li>
|
||||
<li>共享客户</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<form class="layui-form gg-form-bar border-x">
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<select name="grade_id">
|
||||
<option value="">请选择客户等级</option>
|
||||
{volist name=":customer_grade()" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<select name="source_id">
|
||||
<option value="">请选择渠道来源</option>
|
||||
{volist name=":customer_source()" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<select name="type">
|
||||
<option value="">请选择客户意向</option>
|
||||
<option value="1">意向不明</option>
|
||||
<option value="2">意向模糊</option>
|
||||
<option value="3">意向一般</option>
|
||||
<option value="4">意向强烈</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<select name="status">
|
||||
<option value="">请选择客户状态</option>
|
||||
<option value="1">新进客户</option>
|
||||
<option value="2">跟进客户</option>
|
||||
<option value="3">正式客户</option>
|
||||
<option value="4">流失客户</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:240px;">
|
||||
<input type="hidden" name="tab" value="0" />
|
||||
<input type="text" name="keywords" placeholder="输入关键字" class="layui-input" autocomplete="off" />
|
||||
</div>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">提交搜索</button>
|
||||
</form>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<span class="layui-btn layui-btn-normal layui-btn-sm" title="添加客户" lay-event="add">+ 添加客户</span>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool'];
|
||||
function gouguInit() {
|
||||
var table = layui.table, tool = layui.tool ,form = layui.form, element = layui.element;
|
||||
layui.pageTable = table.render({
|
||||
elem: '#test',
|
||||
title: '客户列表',
|
||||
toolbar: '#toolbarDemo',
|
||||
url: "/customer/index/index", //数据接口
|
||||
cellMinWidth: 240,
|
||||
page: true, //开启分页
|
||||
limit: 20,
|
||||
cols: [
|
||||
[ //表头
|
||||
{
|
||||
field: 'id',title: '编号',align: 'center',width: 80,templet: function (d) {
|
||||
return'C' + d.id;
|
||||
}
|
||||
},{ field: 'status', title: '状态', align: 'center', width: 80, templet: function (d) {
|
||||
var html = '<span class="layui-btn layui-btn-xs layui-bg-' + d.status + '">' + d.status_name + '</span>';
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'name',
|
||||
title: '客户名称',
|
||||
templet: '<div><a data-href="/customer/index/view/id/{{d.id}}.html" class="right-a">{{d.name}}</a></div>'
|
||||
},{
|
||||
field: 'intent_status_name',
|
||||
title: '客户意向',
|
||||
align: 'center',
|
||||
width: 150,
|
||||
templet: function (d) {
|
||||
var html = '<span class="layui-color-' + d.grade_id + '">[' + d.grade + ']</span> '+d.intent_status_name;
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
field: 'user',
|
||||
title: '联系人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'mobile',
|
||||
title: '手机号码',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'qq',
|
||||
title: 'QQ号码',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'wechat',
|
||||
title: '微信号',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
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: 'right',
|
||||
fixed:'right',
|
||||
title: '操作',
|
||||
width: 120,
|
||||
align: 'center',
|
||||
templet: function (d) {
|
||||
var html = '<div class="layui-btn-group">';
|
||||
var btn0='<span class="layui-btn layui-btn-xs" lay-event="edit">编辑</span>';
|
||||
var btn1='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="remove">移入公海</span>';
|
||||
if(d.belong_uid == login_user){
|
||||
return html+btn0+btn1+'</div>';
|
||||
}
|
||||
else{
|
||||
return btn0;
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
element.on('tab(tab)', function(data){
|
||||
$('[name="tab"]').val(data.index);
|
||||
layui.pageTable.reload({where:{tab:data.index},page:{curr:1}});
|
||||
return false;
|
||||
});
|
||||
|
||||
//表头工具栏事件
|
||||
table.on('toolbar(test)', function(obj){
|
||||
if (obj.event === 'add') {
|
||||
tool.side("/customer/index/add");
|
||||
return;
|
||||
}
|
||||
});
|
||||
//监听行工具事件
|
||||
table.on('tool(test)', function(obj) {
|
||||
var data = obj.data;
|
||||
if(obj.event === 'edit'){
|
||||
tool.side('/customer/index/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.post("/customer/index/to_sea", {id: data.id}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
//监听搜索提交
|
||||
form.on('submit(webform)', function(data) {
|
||||
layui.pageTable.reload({
|
||||
where: {
|
||||
tab: data.field.tab,
|
||||
keywords: data.field.keywords,
|
||||
grade_id: data.field.grade_id,
|
||||
source_id: data.field.source_id,
|
||||
type: data.field.type,
|
||||
status: data.field.status
|
||||
},
|
||||
page: {
|
||||
curr: 1
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
134
app/customer/view/index/rush.html
Normal file
134
app/customer/view/index/rush.html
Normal file
@ -0,0 +1,134 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-3">
|
||||
<div class="layui-row gg-form-bar border-x border-t">
|
||||
<div class="layui-col-xs3">
|
||||
<button class="layui-btn layui-btn-danger" lay-submit="" lay-filter="webform">去抢客</button>
|
||||
</div>
|
||||
<div class="layui-col-xs9" style="text-align:right">
|
||||
<form class="layui-form" style="display:none;">
|
||||
<div class="layui-input-inline" style="width:240px;">
|
||||
<input type="text" name="keywords" placeholder="输入手机号码" class="layui-input" autocomplete="off" />
|
||||
</div>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">客户搜索</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="red">每点击一次随机获取10个公海客户的信息,每天最多可抢<strong class="mx-1">{$max_num}</strong>个客户,你今天已抢了<strong class="mx-1" id="count">{$count}</strong>个客户</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',
|
||||
title: '抢客宝列表',
|
||||
toolbar: '#toolbarDemo',
|
||||
url: "/customer/index/rush", //数据接口
|
||||
cellMinWidth: 240,
|
||||
page: false, //开启分页
|
||||
limit: 10,
|
||||
cols: [
|
||||
[ //表头
|
||||
{
|
||||
field: 'id',title: '编号',align: 'center',width: 80,templet: function (d) {
|
||||
return'C' + d.id;
|
||||
}
|
||||
},{
|
||||
field: 'name',
|
||||
title: '客户名称',
|
||||
templet: '<div><a data-href="/customer/index/view/id/{{d.id}}.html" class="right-a">{{d.name}}</a></div>'
|
||||
},{
|
||||
field: 'user',
|
||||
title: '联系人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'mobile',
|
||||
title: '手机号码',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'qq',
|
||||
title: 'QQ号码',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'wechat',
|
||||
title: '微信号',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'source',
|
||||
title: '来源渠道',
|
||||
align: 'center',
|
||||
width: 100
|
||||
}, {
|
||||
field: 'industry',
|
||||
title: '客户所属行业',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},{
|
||||
field: 'right',
|
||||
fixed:'right',
|
||||
title: '操作',
|
||||
width: 80,
|
||||
align: 'center',
|
||||
templet: function (d) {
|
||||
var btn='<span class="layui-btn layui-btn-xs" lay-event="get">领取客户</span>';
|
||||
return btn;
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
//监听行工具事件
|
||||
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) {
|
||||
obj.del();
|
||||
let count =$('#count').text();
|
||||
$('#count').html(++count);
|
||||
}
|
||||
}
|
||||
tool.post("/customer/index/get", {id: data.id}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
//监听搜索提交
|
||||
form.on('submit(webform)', function(data) {
|
||||
layui.pageTable.reload({
|
||||
where: {
|
||||
keywords: data.field.keywords,
|
||||
industry_id: data.field.industry_id,
|
||||
source_id: data.field.source_id
|
||||
},
|
||||
page: {
|
||||
curr: 1
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
197
app/customer/view/index/sea.html
Normal file
197
app/customer/view/index/sea.html
Normal file
@ -0,0 +1,197 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-3">
|
||||
<form class="layui-form gg-form-bar border-x border-t">
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<select name="source_id">
|
||||
<option value="">请选择渠道来源</option>
|
||||
{volist name=":customer_source()" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<select name="industry_id">
|
||||
<option value="">请选择行业</option>
|
||||
{volist name=":get_industry()" 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>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">提交搜索</button>
|
||||
</form>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<span class="layui-btn layui-btn-normal layui-btn-sm" title="添加客户" lay-event="add">+ 添加公海客户</span>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','employeepicker'];
|
||||
function gouguInit() {
|
||||
var table = layui.table, tool = layui.tool ,form = layui.form, employeepicker = layui.employeepicker;
|
||||
layui.pageTable = table.render({
|
||||
elem: '#test',
|
||||
title: '客户列表',
|
||||
toolbar: '#toolbarDemo',
|
||||
url: "/customer/index/sea", //数据接口
|
||||
cellMinWidth: 240,
|
||||
page: true, //开启分页
|
||||
limit: 20,
|
||||
cols: [
|
||||
[ //表头
|
||||
{
|
||||
field: 'id',title: '编号',align: 'center',width: 80,templet: function (d) {
|
||||
return'C' + d.id;
|
||||
}
|
||||
},{
|
||||
field: 'name',
|
||||
title: '客户名称',
|
||||
templet: '<div><a data-href="/customer/index/view/id/{{d.id}}.html" class="right-a">{{d.name}}</a></div>'
|
||||
},{
|
||||
field: 'user',
|
||||
title: '联系人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'mobile',
|
||||
title: '手机号码',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'qq',
|
||||
title: 'QQ号',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'wechat',
|
||||
title: '微信号',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'source',
|
||||
title: '来源渠道',
|
||||
align: 'center',
|
||||
width: 100
|
||||
}, {
|
||||
field: 'industry',
|
||||
title: '客户所属行业',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},{
|
||||
field: 'right',
|
||||
fixed:'right',
|
||||
title: '操作',
|
||||
width: 168,
|
||||
align: 'center',
|
||||
templet: function (d) {
|
||||
var html = '<div class="layui-btn-group">';
|
||||
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+btn0+btn1+btn2+'</div>';
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
//表头工具栏事件
|
||||
table.on('toolbar(test)', function(obj){
|
||||
if (obj.event === 'add') {
|
||||
tool.side("/customer/index/add?sea=1");
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
//监听行工具事件
|
||||
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 === 'distribute') {
|
||||
//选择归属人人弹窗
|
||||
employeepicker.init({
|
||||
type:0,
|
||||
department_url: "/api/index/get_department_tree",
|
||||
employee_url: "/api/index/get_employee",
|
||||
callback:function(ids,names,dids,departments){
|
||||
layer.confirm('确定要把该客户分配给'+names+'?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
obj.del();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/index/distribute", {id: data.id,uid:ids,did:dids}, callback);
|
||||
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) {
|
||||
obj.del();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/index/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) {
|
||||
obj.del();
|
||||
}
|
||||
}
|
||||
tool.delete("/customer/index/delete", {id: data.id,type:1}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
return;
|
||||
});
|
||||
|
||||
//监听搜索提交
|
||||
form.on('submit(webform)', function(data) {
|
||||
layui.pageTable.reload({
|
||||
where: {
|
||||
keywords: data.field.keywords,
|
||||
industry_id: data.field.industry_id,
|
||||
source_id: data.field.source_id
|
||||
},
|
||||
page: {
|
||||
curr: 1
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
159
app/customer/view/index/trash.html
Normal file
159
app/customer/view/index/trash.html
Normal file
@ -0,0 +1,159 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-3">
|
||||
<form class="layui-form gg-form-bar border-x border-t">
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<select name="source_id">
|
||||
<option value="">请选择渠道来源</option>
|
||||
{volist name=":customer_source()" id="v"}
|
||||
<option value="{$v.id}">{$v.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<select name="industry_id">
|
||||
<option value="">请选择行业</option>
|
||||
{volist name=":get_industry()" 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>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">提交搜索</button>
|
||||
</form>
|
||||
<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: '#toolbarDemo',
|
||||
url: "/customer/index/trash", //数据接口
|
||||
cellMinWidth: 240,
|
||||
page: true, //开启分页
|
||||
limit: 20,
|
||||
cols: [
|
||||
[ //表头
|
||||
{
|
||||
field: 'id',title: '编号',align: 'center',width: 80,templet: function (d) {
|
||||
return'C' + d.id;
|
||||
}
|
||||
},{
|
||||
field: 'name',
|
||||
title: '客户名称',
|
||||
templet: '<div><a data-href="/customer/index/view/id/{{d.id}}.html" class="right-a">{{d.name}}</a></div>'
|
||||
},{
|
||||
field: 'user',
|
||||
title: '联系人',
|
||||
align: 'center',
|
||||
width: 80
|
||||
},{
|
||||
field: 'mobile',
|
||||
title: '手机号码',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'qq',
|
||||
title: 'QQ号码',
|
||||
align: 'center',
|
||||
width: 100
|
||||
},{
|
||||
field: 'wechat',
|
||||
title: '微信号',
|
||||
align: 'center',
|
||||
width: 90
|
||||
},{
|
||||
field: 'source',
|
||||
title: '来源渠道',
|
||||
align: 'center',
|
||||
width: 100
|
||||
}, {
|
||||
field: 'industry',
|
||||
title: '客户所属行业',
|
||||
align: 'center',
|
||||
width: 120
|
||||
},{
|
||||
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('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) {
|
||||
obj.del();
|
||||
}
|
||||
}
|
||||
tool.post("/customer/index/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) {
|
||||
obj.del();
|
||||
}
|
||||
}
|
||||
tool.delete("/customer/index/delete", {id: data.id,type:2}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
return;
|
||||
});
|
||||
|
||||
//监听搜索提交
|
||||
form.on('submit(webform)', function(data) {
|
||||
layui.pageTable.reload({
|
||||
where: {
|
||||
keywords: data.field.keywords,
|
||||
industry_id: data.field.industry_id,
|
||||
source_id: data.field.source_id
|
||||
},
|
||||
page: {
|
||||
curr: 1
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
247
app/customer/view/index/view.html
Normal file
247
app/customer/view/index/view.html
Normal file
@ -0,0 +1,247 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
{block name="style"}
|
||||
<style>
|
||||
html{background-color:#fff;}
|
||||
.file-card {background: #fff;border: 1px solid #f1f1f1;border-radius: 2px; padding:8px 0; margin:4px 8px 4px 0;
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
}
|
||||
.file-card .file-icon{font-size:36px; color:#646464; margin-right: 4px;}
|
||||
.file-card .file-title {font-size: 12px; letter-spacing: 0; margin-right: 8px; line-height: 16px; word-break: break-all; overflow: hidden; text-overflow: ellipsis; display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
line-clamp: 2;
|
||||
-webkit-box-orient: vertical;width: calc(100% - 110px);
|
||||
}
|
||||
.file-card .file-tool .layui-icon{font-size:22px; padding:2px; cursor:pointer;}
|
||||
|
||||
.log-timeline{ position: relative; padding-left: 48px; background-color:#fff;}
|
||||
.log-timeline:after {content: ""; position: absolute; top: 0; left: 24px; width: 1px; height: 100%; background: #e3e9ed;}
|
||||
.log-timeline dl{padding-bottom: 8px; position: relative;}
|
||||
.log-timeline dt{font-size: 16px; line-height: 2.4; color: #323232; font-weight:600}
|
||||
.log-timeline dd{font-size: 14px; line-height: 1.6; padding:5px 0}
|
||||
.log-timeline .date-second-point{width: 10px; height: 10px; display: block; border-radius: 50%; border: 3px solid #FBBC05; background: #fff; position: absolute; z-index: 99; left:-32px; top:9px}
|
||||
.log-timeline .log-thumb{width: 24px; height: 24px; border-radius: 50%; margin-right:4px;}
|
||||
.log-timeline .open-a{margin:0 4px;}
|
||||
.log-item i{font-weight:800; color:#323232}
|
||||
.log-content strong{margin:0 4px; color:#323232}
|
||||
</style>
|
||||
{/block}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="px-3 pt-3">
|
||||
<h3 class="pb-3">客户详情</h3>
|
||||
<table class="layui-table layui-table-form">
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户名称</td>
|
||||
<td colspan="5">{$detail.name}</td>
|
||||
<td class="layui-td-gray">客户来源</td>
|
||||
<td>
|
||||
{volist name=":customer_source()" id="v"}
|
||||
{eq name="$v.id" value="$detail.source_id" }{$v.title}{/eq}
|
||||
{/volist}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">联系地址</td>
|
||||
<td colspan="3">
|
||||
{$detail.address}
|
||||
</td>
|
||||
<td class="layui-td-gray">所属行业</td>
|
||||
<td>
|
||||
{volist name=":get_industry()" id="v"}
|
||||
{eq name="$v.id" value="$detail.industry_id"}{$v.title}{/eq}
|
||||
{/volist}
|
||||
</td>
|
||||
<td class="layui-td-gray">客户等级</td>
|
||||
<td>
|
||||
{volist name=":customer_grade()" id="v"}
|
||||
{eq name="$v.id" value="$detail.grade_id"}{$v.title}{/eq}
|
||||
{/volist}
|
||||
</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 colspan="3">{$detail.share_names}</td>
|
||||
</tr>
|
||||
{/gt}
|
||||
<tr>
|
||||
<td class="layui-td-gray">客户介绍</td>
|
||||
<td colspan="7">{$detail.content}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">经营范围</td>
|
||||
<td colspan="7">{$detail.market}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">备注信息</td>
|
||||
<td colspan="7">{$detail.remark}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">
|
||||
<div class="layui-input-inline">相关附件</div>
|
||||
{eq name="$detail.status" value="1" }<div class="layui-input-inline"><button type="button" class="layui-btn layui-btn-xs" id="upFile"><i class="layui-icon"></i></button></div>{/eq}
|
||||
</td>
|
||||
<td colspan="7" id="fileList">
|
||||
{volist name="$detail.file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="file_{$vo.id}">
|
||||
<div class="file-card">
|
||||
<i class="file-icon layui-icon layui-icon-file"></i>
|
||||
<div class="file-title">{$vo.name}</div>
|
||||
<div class="file-tool">
|
||||
<a href="{$vo.filepath}" download="{$vo.name}" title="下载查看" target="_blank"><i class="layui-icon layui-icon-download-circle" style="color: #12bb37;"></i></a>
|
||||
<i class="btn-delete layui-icon layui-icon-delete" data-id="{$vo.id}" style="color: #FF5722;" title="删除"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/volist}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="8"><strong>首要联系人信息</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">联系人姓名</td>
|
||||
<td>{$contact.name} </td>
|
||||
<td class="layui-td-gray">手机号码</td>
|
||||
<td>{$contact.mobile}</td>
|
||||
<td class="layui-td-gray">QQ号码</td>
|
||||
<td>{$contact.qq}</td>
|
||||
<td class="layui-td-gray">微信号码</td>
|
||||
<td>{$contact.wechat}</td>
|
||||
</tr>
|
||||
{notempty name="$detail.trace"}
|
||||
<tr>
|
||||
<td colspan="8"><strong>最近沟通记录</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">沟通时间</td>
|
||||
<td>{$detail.trace.follow_time}</td>
|
||||
<td class="layui-td-gray">沟通人</td>
|
||||
<td>{$detail.trace.contact_name}</td>
|
||||
<td class="layui-td-gray">跟进方式</td>
|
||||
<td>{$detail.trace.type_name}</td>
|
||||
<td class="layui-td-gray">当前阶段</td>
|
||||
<td>{$detail.trace.stage_name}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">下次联系时间</span></td>
|
||||
<td>{$detail.trace.next_time}</td>
|
||||
<td class="layui-td-gray">沟通内容</td>
|
||||
<td colspan="5">{$detail.trace.content}</td>
|
||||
</tr>
|
||||
{/notempty}
|
||||
</table>
|
||||
<div class="layui-tab" 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">
|
||||
<div class="layui-tab-item layui-show">
|
||||
{include file="/index/view_trace" /}
|
||||
</div>
|
||||
<div class="layui-tab-item">
|
||||
{include file="/index/view_contact" /}
|
||||
</div>
|
||||
<div class="layui-tab-item">
|
||||
{include file="/index/view_chance" /}
|
||||
</div>
|
||||
<div class="layui-tab-item">
|
||||
{include file="/index/view_log" /}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const customer_id = '{$detail.id}';
|
||||
const customer_status = '{$detail.status}';
|
||||
const moduleInit = ['tool','employeepicker'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool, upload = layui.upload,element = layui.element,employeepicker = layui.employeepicker;
|
||||
|
||||
trace();
|
||||
element.on('tab(customer)', function(data){
|
||||
let index = data.index;
|
||||
console.log(index);
|
||||
if(index == 1){
|
||||
contact();
|
||||
}
|
||||
if(index == 2){
|
||||
chance();
|
||||
}
|
||||
if(index == 3){
|
||||
log();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//删除附件
|
||||
$('#fileList').on('click', '.btn-delete', function () {
|
||||
var _id = $(this).data('id');
|
||||
layer.confirm('确定要删除该附件吗?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function(index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
$('#file_' + _id).remove();
|
||||
}
|
||||
}
|
||||
tool.delete("/customer/api/delete_file", {id: _id}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
})
|
||||
//多附件上传
|
||||
upload.render({
|
||||
elem: '#upFile'
|
||||
,url: "/api/index/upload"
|
||||
,multiple: true
|
||||
,accept: 'file' //普通文件
|
||||
,exts: 'png|jpg|gif|jpeg|doc|docx|ppt|pptx|xls|xlsx|pdf|txt|zip|rar|7z' //只允许上传文件格式
|
||||
,done: function(res){
|
||||
if (res.code == 0) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
let temp = `<div class="layui-col-md4" id="file_${e.data}">
|
||||
<div class="file-card">
|
||||
<i class="file-icon layui-icon layui-icon-file"></i>
|
||||
<div class="file-title">${res.data.name}</div>
|
||||
<div class="file-tool">
|
||||
<a href="${res.data.filepath}" download="${res.data.name}" title="下载查看" target="_blank"><i class="layui-icon layui-icon-download-circle" style="color: #12bb37;"></i></a>
|
||||
<i class="btn-delete layui-icon layui-icon-delete" data-id="${e.data}" style="color: #FF5722;" title="删除"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>`;
|
||||
$('#fileList').append(temp);
|
||||
}
|
||||
tool.post("/customer/api/add_file", {'customer_id':customer_id,'file_id':res.data.id,'file_name':res.data.name}, callback);
|
||||
}
|
||||
else{
|
||||
layer.msg(res.msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
70
app/customer/view/index/view_chance.html
Normal file
70
app/customer/view/index/view_chance.html
Normal file
@ -0,0 +1,70 @@
|
||||
<div class="pb-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(2).data('load') =='true'){
|
||||
return false;
|
||||
}
|
||||
$('#customerTab').find('li').eq(2).data('load','true');
|
||||
let tool = layui.tool, table = layui.table;
|
||||
//项目任务
|
||||
parent.layui.chanceTable = table.render({
|
||||
elem: '#chance',
|
||||
title: '销售机会列表',
|
||||
cellMinWidth:240,
|
||||
url: "/customer/api/get_chance",
|
||||
where:{'customer_id':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:'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'}
|
||||
,{fixed:'right',width:132,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>';
|
||||
}}
|
||||
]]
|
||||
});
|
||||
$('.add-chance').on('click',function(){
|
||||
parent.layui.tool.side('/customer/api/add_chance?cid='+customer_id);
|
||||
});
|
||||
|
||||
table.on('tool(chance)', function(obj){
|
||||
var data = obj.data; //获得当前行数据
|
||||
var layEvent = obj.event;
|
||||
if(layEvent === 'edit'){ //编辑
|
||||
let url = '/customer/api/add_chance/id/'+data.id;
|
||||
parent.layui.tool.side(url);
|
||||
}
|
||||
if(layEvent === 'view'){ //查看
|
||||
let url = '/customer/api/view_chance/id/'+data.id;
|
||||
parent.layui.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) {
|
||||
parent.layui.chanceTable.reload();
|
||||
}
|
||||
}
|
||||
tool.delete("/customer/api/delete_chance",{"id":data.id},callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
return false;
|
||||
})
|
||||
}
|
||||
</script>
|
98
app/customer/view/index/view_contact.html
Normal file
98
app/customer/view/index/view_contact.html
Normal file
@ -0,0 +1,98 @@
|
||||
<div class="pb-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(1).data('load') =='true'){
|
||||
return false;
|
||||
}
|
||||
$('#customerTab').find('li').eq(1).data('load','true');
|
||||
let tool = layui.tool, table = layui.table;
|
||||
//项目任务
|
||||
parent.layui.contactTable = table.render({
|
||||
elem: '#contact',
|
||||
title: '联系人列表',
|
||||
cellMinWidth:180,
|
||||
url: "/customer/api/get_contact",
|
||||
where:{'customer_id':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:100,title: '手机号码', align:'center'}
|
||||
,{field:'qq',width:100,title: 'QQ号码', align:'center'}
|
||||
,{field:'wechat',width:100,title: '微信号码', align:'center'}
|
||||
,{field:'email',title: '电子邮箱', align:'center'}
|
||||
,{field:'position',width:120,title: '担任职位', align:'center'}
|
||||
,{field:'department',width:120,title: '部门', align:'center'}
|
||||
,{fixed:'right',width:190,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="set">设为首要联系人</a>';
|
||||
var btn2='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>';
|
||||
if(d.is_default==1){
|
||||
return '<span class="red" style="margin-right:10px;">首要联系人</span>'+btn;
|
||||
}
|
||||
else{
|
||||
return html+btn+btn1+btn2+'</div>';
|
||||
}
|
||||
}}
|
||||
]]
|
||||
});
|
||||
$('.add-contact').on('click',function(){
|
||||
parent.layui.tool.side('/customer/contact/contact_add?cid='+customer_id);
|
||||
});
|
||||
|
||||
table.on('tool(contact)', function(obj){
|
||||
var data = obj.data; //获得当前行数据
|
||||
var layEvent = obj.event;
|
||||
if(layEvent === 'edit'){ //编辑
|
||||
let url = '/customer/contact/contact_add/id/'+data.id;
|
||||
parent.layui.tool.side(url);
|
||||
}
|
||||
if(layEvent === 'set'){ //查看
|
||||
layer.confirm('确定要设置该联系人为首要联系人吗?', {icon: 3, title:'提示'}, function(index){
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
parent.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) {
|
||||
parent.layui.contactTable.reload();
|
||||
}
|
||||
}
|
||||
tool.delete("/customer/contact/contact_del",{"id":data.id},callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
return false;
|
||||
})
|
||||
}
|
||||
</script>
|
68
app/customer/view/index/view_log.html
Normal file
68
app/customer/view/index/view_log.html
Normal file
@ -0,0 +1,68 @@
|
||||
<div class="bg-white">
|
||||
<div id="logList" class="p-3"></div>
|
||||
</div>
|
||||
<script>
|
||||
function log(){
|
||||
if($('#customerTab').find('li').eq(3).data('load') =='true'){
|
||||
return false;
|
||||
}
|
||||
$('#customerTab').find('li').eq(3).data('load','true');
|
||||
let tool = layui.tool;
|
||||
|
||||
//日志
|
||||
let callback = function(res){
|
||||
$('.log-more').remove();
|
||||
if(res.code==0 && res.data.length>0){
|
||||
let itemLog = '',log_time='';
|
||||
$.each(res.data, function (index, item) {
|
||||
let detail = "";
|
||||
if(log_time != item.create_time){
|
||||
if(log_time==''){
|
||||
itemLog+='<dl><dt><span class="date-second-point"></span>'+item.create_time+'</dt>'
|
||||
}
|
||||
else{
|
||||
itemLog+='</dl><dl><dt><span class="date-second-point"></span>'+item.create_time+'</dt>'
|
||||
}
|
||||
log_time = item.create_time;
|
||||
}
|
||||
if(item.field =='new' || item.field =='del' || item.field =='belong'){
|
||||
detail= `
|
||||
<span class="log-content gray">${item.action}了${item.role}</strong><span class="ml-4 gray" title="${item.create_time}">${item.times}</span>
|
||||
`;
|
||||
}
|
||||
else if(item.field =='file'){
|
||||
detail= `
|
||||
<span class="log-content gray">${item.action}了${item.title}<strong>${item.new_content}</strong><span class="ml-4 gray" title="${item.create_time}">${item.times}</span></span>
|
||||
`;
|
||||
}
|
||||
else{
|
||||
detail= `
|
||||
<span class="log-content gray">将${item.role}<strong>${item.title}</strong>从 ${item.old_content} ${item.action}为<strong>${item.new_content}</strong><span class="ml-4 gray" title="${item.create_time}">${item.times}</span></span>
|
||||
`;
|
||||
}
|
||||
itemLog+= `
|
||||
<dd><img src="${item.thumb}" class="log-thumb" /><span class="log-name">${item.name}</span>${detail}</dd>
|
||||
`;
|
||||
});
|
||||
|
||||
itemLog+='</dl>';
|
||||
if(res.data.length>19){
|
||||
itemLog+='<div class="py-3 log-more"><button class="layui-btn layui-btn-normal layui-btn-sm" type="button">查看更多操作动态</button></div>';
|
||||
}
|
||||
$("#logList").append(itemLog).addClass('log-timeline');
|
||||
}
|
||||
else{
|
||||
if(customer_page ==1){
|
||||
$("#logList").html('<div class="layui-data-none">暂无动态</div>');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let customer_page=1;
|
||||
tool.get("/customer/api/customer_log",{customer_id:customer_id,page:customer_page},callback);
|
||||
$('#logList').on('click','.log-more',function(){
|
||||
customer_page++;
|
||||
tool.get("/customer/api/customer_log",{customer_id:customer_id,page:customer_page},callback);
|
||||
});
|
||||
}
|
||||
</script>
|
73
app/customer/view/index/view_trace.html
Normal file
73
app/customer/view/index/view_trace.html
Normal file
@ -0,0 +1,73 @@
|
||||
<div class="pb-3">
|
||||
<button class="layui-btn layui-btn-sm add-trace">+ 新建跟进记录</button>
|
||||
</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;
|
||||
//项目任务
|
||||
parent.layui.traceTable = table.render({
|
||||
elem: '#trace',
|
||||
title: '跟进记录列表',
|
||||
cellMinWidth:240,
|
||||
url: "/customer/api/get_trace",
|
||||
where:{'customer_id':customer_id},
|
||||
page: true, //开启分页
|
||||
limit: 20,
|
||||
cols: [[
|
||||
{field: 'id', title: '编号', width: 80, align: 'center'}
|
||||
,{field:'admin_name',title: '跟进人',align:'center',width: 80}
|
||||
,{field:'follow_time',title: '跟进时间',align:'center',width: 132}
|
||||
, { field: 'stage_name', title: '当前阶段', width: 80, align: 'center'}
|
||||
,{field:'type_name',title: '跟进方式',width: 80, align: 'center',templet:function(d){
|
||||
var html = '<span class="layui-color-'+d.type+'">'+d.type_name+'</span>';
|
||||
return html;
|
||||
}}
|
||||
,{field:'content',title: '沟通内容'}
|
||||
,{field:'next_time',title: '下次跟进时间', align:'center',width: 132}
|
||||
,{fixed:'right',width:132,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>';
|
||||
}}
|
||||
]]
|
||||
});
|
||||
$('.add-trace').on('click',function(){
|
||||
parent.layui.tool.side('/customer/api/add_trace?cid='+customer_id);
|
||||
});
|
||||
|
||||
table.on('tool(trace)', function(obj){
|
||||
var data = obj.data; //获得当前行数据
|
||||
var layEvent = obj.event;
|
||||
if(layEvent === 'edit'){ //编辑
|
||||
let url = '/customer/api/add_trace/id/'+data.id;
|
||||
parent.layui.tool.side(url);
|
||||
}
|
||||
if(layEvent === 'view'){ //查看
|
||||
let url = '/customer/api/view_trace/id/'+data.id;
|
||||
parent.layui.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) {
|
||||
parent.layui.traceTable.reload();
|
||||
}
|
||||
}
|
||||
tool.delete("/customer/api/delete_trace",{"id":data.id},callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
return false;
|
||||
})
|
||||
}
|
||||
</script>
|
121
app/customer/view/source/index.html
Normal file
121
app/customer/view/source/index.html
Normal file
@ -0,0 +1,121 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-3">
|
||||
<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'
|
||||
,title:'客户渠道列表'
|
||||
,url: "/customer/source/index"
|
||||
,page: true //开启分页
|
||||
,limit: 20
|
||||
,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}
|
||||
<!-- /脚本 -->
|
@ -47,29 +47,3 @@ function admin_module()
|
||||
$group = Db::name('AdminModule')->order('id asc')->select()->toArray();
|
||||
return $group;
|
||||
}
|
||||
|
||||
//读取公告分类子分类ids
|
||||
function admin_note_cate_son($id = 0, $is_self = 1)
|
||||
{
|
||||
$note = Db::name('NoteCate')->order('create_time asc')->select();
|
||||
$note_list = get_data_node($note, $id);
|
||||
$note_array = array_column($note_list, 'id');
|
||||
if ($is_self == 1) {
|
||||
//包括自己在内
|
||||
$note_array[] = $id;
|
||||
}
|
||||
return $note_array;
|
||||
}
|
||||
|
||||
//读取知识分类子分类ids
|
||||
function admin_article_cate_son($id = 0, $is_self = 1)
|
||||
{
|
||||
$article = Db::name('ArticleCate')->order('id desc')->select()->toArray();
|
||||
$article_list = get_data_node($article, $id);
|
||||
$article_array = array_column($article_list, 'id');
|
||||
if ($is_self == 1) {
|
||||
//包括自己在内
|
||||
$article_array[] = $id;
|
||||
}
|
||||
return $article_array;
|
||||
}
|
||||
|
@ -15,7 +15,8 @@ use app\home\validate\ExpenseCateCheck;
|
||||
use app\home\validate\CostCateCheck;
|
||||
use app\home\validate\SealCateCheck;
|
||||
use app\home\validate\CarCateCheck;
|
||||
use app\home\validate\NoteCateCheck;
|
||||
use app\home\validate\IndustryCheck;
|
||||
use app\home\validate\ServicesCheck;
|
||||
use app\home\validate\WorkCateCheck;
|
||||
use app\home\validate\KeyworksCheck;
|
||||
use app\home\validate\InvoiceSubjectCheck;
|
||||
@ -420,90 +421,134 @@ class Cate extends BaseController
|
||||
}
|
||||
}
|
||||
|
||||
//公告类别
|
||||
public function note_cate()
|
||||
//行业类型
|
||||
public function industry_cate()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$cate = Db::name('NoteCate')->order('create_time asc')->select();
|
||||
$cate = Db::name('Industry')->order('create_time asc')->select();
|
||||
return to_assign(0, '', $cate);
|
||||
} else {
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
//公告类别添加
|
||||
public function note_cate_add()
|
||||
//行业类型添加
|
||||
public function industry_cate_add()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
try {
|
||||
validate(NoteCateCheck::class)->scene('edit')->check($param);
|
||||
validate(IndustryCheck::class)->scene('edit')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$note_array = admin_note_cate_son($param['id']);
|
||||
if (in_array($param['pid'], $note_array)) {
|
||||
return to_assign(1, '父级分类不能是该分类本身或其子分类');
|
||||
} else {
|
||||
$param['update_time'] = time();
|
||||
$res = Db::name('NoteCate')->strict(false)->field(true)->update($param);
|
||||
if ($res) {
|
||||
add_log('edit', $param['id'], $param);
|
||||
}
|
||||
return to_assign();
|
||||
$data['update_time'] = time();
|
||||
$res = Db::name('Industry')->strict(false)->field(true)->update($param);
|
||||
if ($res) {
|
||||
add_log('edit', $param['id'], $param);
|
||||
}
|
||||
return to_assign();
|
||||
} else {
|
||||
try {
|
||||
validate(NoteCateCheck::class)->scene('add')->check($param);
|
||||
validate(IndustryCheck::class)->scene('add')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$param['create_time'] = time();
|
||||
$insertId = Db::name('NoteCate')->strict(false)->field(true)->insertGetId($param);
|
||||
$insertId = Db::name('Industry')->strict(false)->field(true)->insertGetId($param);
|
||||
if ($insertId) {
|
||||
add_log('add', $insertId, $param);
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//行业类型设置
|
||||
public function industry_cate_check()
|
||||
{
|
||||
$param = get_params();
|
||||
$res = Db::name('Industry')->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, '操作失败');
|
||||
}
|
||||
}
|
||||
|
||||
//服务类型
|
||||
public function services_cate()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$cate = Db::name('Services')->order('create_time asc')->select();
|
||||
return to_assign(0, '', $cate);
|
||||
} else {
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
$pid = isset($param['pid']) ? $param['pid'] : 0;
|
||||
$cate = $cate = Db::name('NoteCate')->order('id desc')->select()->toArray();
|
||||
$cates = set_recursion($cate);
|
||||
if ($id > 0) {
|
||||
$detail = Db::name('NoteCate')->where(['id' => $id])->find();
|
||||
View::assign('detail', $detail);
|
||||
}
|
||||
View::assign('id', $id);
|
||||
View::assign('pid', $pid);
|
||||
View::assign('cates', $cates);
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
//公告类别删除
|
||||
public function note_cate_delete()
|
||||
//服务类型添加
|
||||
public function services_cate_add()
|
||||
{
|
||||
$id = get_params("id");
|
||||
$cate_count = Db::name('NoteCate')->where(["pid" => $id])->count();
|
||||
if ($cate_count > 0) {
|
||||
return to_assign(1, "该分类下还有子分类,无法删除");
|
||||
}
|
||||
$content_count = Db::name('Article')->where(["article_cate_id" => $id])->count();
|
||||
if ($content_count > 0) {
|
||||
return to_assign(1, "该分类下还有文章,无法删除");
|
||||
}
|
||||
if (Db::name('NoteCate')->delete($id) !== false) {
|
||||
add_log('delete', $id);
|
||||
return to_assign(0, "删除分类成功");
|
||||
} else {
|
||||
return to_assign(1, "删除失败");
|
||||
if (request()->isAjax()) {
|
||||
$param = get_params();
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
try {
|
||||
validate(ServicesCheck::class)->scene('edit')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$data['update_time'] = time();
|
||||
$res = Db::name('Services')->strict(false)->field(true)->update($param);
|
||||
if ($res) {
|
||||
add_log('edit', $param['id'], $param);
|
||||
}
|
||||
return to_assign();
|
||||
} else {
|
||||
try {
|
||||
validate(ServicesCheck::class)->scene('add')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$param['create_time'] = time();
|
||||
$insertId = Db::name('Services')->strict(false)->field(true)->insertGetId($param);
|
||||
if ($insertId) {
|
||||
add_log('add', $insertId, $param);
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//服务类型设置
|
||||
public function services_cate_check()
|
||||
{
|
||||
$param = get_params();
|
||||
$res = Db::name('Services')->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, '操作失败');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//工作类别
|
||||
public function work_cate()
|
||||
|
29
app/home/validate/IndustryCheck.php
Normal file
29
app/home/validate/IndustryCheck.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2021 勾股工作室
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.gougucms.com
|
||||
*/
|
||||
|
||||
namespace app\home\validate;
|
||||
|
||||
use think\Validate;
|
||||
|
||||
class IndustryCheck extends Validate
|
||||
{
|
||||
protected $rule = [
|
||||
'title' => 'require|unique:industry',
|
||||
'id' => 'require',
|
||||
];
|
||||
|
||||
protected $message = [
|
||||
'title.require' => '名称不能为空',
|
||||
'title.unique' => '同样的名称已经存在',
|
||||
'id.require' => '缺少更新条件',
|
||||
];
|
||||
|
||||
protected $scene = [
|
||||
'add' => ['title'],
|
||||
'edit' => ['id', 'title'],
|
||||
];
|
||||
}
|
29
app/home/validate/ServicesCheck.php
Normal file
29
app/home/validate/ServicesCheck.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2021 勾股工作室
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.gougucms.com
|
||||
*/
|
||||
|
||||
namespace app\home\validate;
|
||||
|
||||
use think\Validate;
|
||||
|
||||
class ServicesCheck extends Validate
|
||||
{
|
||||
protected $rule = [
|
||||
'title' => 'require|unique:services',
|
||||
'id' => 'require',
|
||||
];
|
||||
|
||||
protected $message = [
|
||||
'title.require' => '名称不能为空',
|
||||
'title.unique' => '同样的名称已经存在',
|
||||
'id.require' => '缺少更新条件',
|
||||
];
|
||||
|
||||
protected $scene = [
|
||||
'add' => ['title'],
|
||||
'edit' => ['id', 'title'],
|
||||
];
|
||||
}
|
121
app/home/view/cate/industry_cate.html
Normal file
121
app/home/view/cate/industry_cate.html
Normal file
@ -0,0 +1,121 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-3">
|
||||
<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'
|
||||
,title:'工作类型列表'
|
||||
,url: "/home/cate/industry_cate"
|
||||
,page: true //开启分页
|
||||
,limit: 20
|
||||
,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("/home/cate/industry_cate_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("/home/cate/industry_cate_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("/home/cate/industry_cate_add", {id: id,title: value}, callback);
|
||||
layer.close(index);
|
||||
} else {
|
||||
layer.msg('请填写类型标题');
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
121
app/home/view/cate/services_cate.html
Normal file
121
app/home/view/cate/services_cate.html
Normal file
@ -0,0 +1,121 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-3">
|
||||
<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'
|
||||
,title:'工作类型列表'
|
||||
,url: "/home/cate/services_cate"
|
||||
,page: true //开启分页
|
||||
,limit: 20
|
||||
,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("/home/cate/services_cate_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("/home/cate/services_cate_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("/home/cate/services_cate_add", {id: id,title: value}, callback);
|
||||
layer.close(index);
|
||||
} else {
|
||||
layer.msg('请填写类型标题');
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
@ -127,7 +127,7 @@
|
||||
<!-- 主体内容 -->
|
||||
<div class="layui-body" id="GouguAppBody">
|
||||
<div class="gg-tab-page layui-show" id="tabItem0">
|
||||
<iframe id="0" data-frameid="0" name="myiframe" src="{:url('/home/index/main')}" frameborder="0" align="left" width="100%" height="100%" scrolling="yes"></iframe>
|
||||
<iframe id="0" data-frameid="0" title="勾股OA" name="myiframe" src="{:url('/home/index/main')}" frameborder="0" align="left" width="100%" height="100%" scrolling="yes"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 辅助元素,用于移动设备下遮罩 -->
|
||||
|
@ -96,10 +96,11 @@ INSERT INTO `oa_admin_module` VALUES (2, '用户模块', 'user', 1, 1, 163956291
|
||||
INSERT INTO `oa_admin_module` VALUES (3, '消息模块', 'message', 1, 1, 1639562910, 0);
|
||||
INSERT INTO `oa_admin_module` VALUES (4, '公告模块', 'note', 1, 1, 1639562910, 0);
|
||||
INSERT INTO `oa_admin_module` VALUES (5, 'OA模块', 'oa', 1, 1, 1639562910, 0);
|
||||
INSERT INTO `oa_admin_module` VALUES (6, '财务模块', 'finance', 1, 1, 1639562910, 0);
|
||||
INSERT INTO `oa_admin_module` VALUES (6, '客户模块', 'customer', 2, 1, 1639562910, 0);
|
||||
INSERT INTO `oa_admin_module` VALUES (7, '合同模块', 'contract', 2, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_module` VALUES (8, '项目模块', 'project', 2, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_module` VALUES (9, '知识模块', 'article', 2, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_module` VALUES (9, '财务模块', 'finance', 2, 1, 1639562910, 0);
|
||||
INSERT INTO `oa_admin_module` VALUES (10, '知识模块', 'article', 2, 1, 1656143065, 0);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_admin_rule
|
||||
@ -192,152 +193,185 @@ INSERT INTO `oa_admin_rule` VALUES (51, 2, 'home/cate/subject', '企业主体',
|
||||
INSERT INTO `oa_admin_rule` VALUES (52, 51, 'home/cate/subject_add', '新建/编辑', '企业主体', 'home', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (53, 51, 'home/cate/subject_check', '设置', '企业主体', 'home', '', 2, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (54, 2, 'home/cate/note_cate', '公告类型', '公告类型', 'home', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (55, 54, 'home/cate/note_cate_add', '新建/编辑', '公告类型', 'home', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (56, 54, 'home/cate/note_cate_delete', '删除', '公告类型', 'home', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (54, 2, 'home/cate/industry_cate', '行业类型', '行业类型', 'home', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (55, 54, 'home/cate/industry_cate_add', '新建/编辑', '行业类型', 'home', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (56, 54, 'home/cate/work_cate_check', '删除', '行业类型', 'home', '', 2, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (57, 2, 'home/cate/work_cate', '工作类别', '工作类别', 'home', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (58, 57, 'home/cate/work_cate_add', '新建/编辑', '工作类别', 'home', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (59, 57, 'home/cate/work_cate_check', '设置', '工作类别', 'home', '', 2, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (60, 2, 'home/keywords/index', '关 键 字','关键字', 'home', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (61, 60, 'home/keywords/add', '新建/编辑','关键字', 'home', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (62, 60, 'home/keywords/delete', '删除','关键字', 'home', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (60, 2, 'home/cate/services_cate', '服务类型', '服务类型', 'home', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (61, 60, 'home/cate/services_cate_add', '新建/编辑', '服务类型', 'home', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (62, 60, 'home/cate/services_cate_check', '设置', '服务类型', 'home', '', 2, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (63, 3, 'user/department/index', '部门架构', '部门', 'user', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (64, 63, 'user/department/add', '新建/编辑', '部门', 'user', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (65, 63, 'user/department/delete', '删除', '部门', 'user', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (63, 2, 'home/keywords/index', '关 键 字','关键字', 'home', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (64, 63, 'home/keywords/add', '新建/编辑','关键字', 'home', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (65, 63, 'home/keywords/delete', '删除','关键字', 'home', '', 2, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (66, 3, 'user/position/index', '岗位职称', '岗位职称', 'user', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (67, 66, 'user/position/add', '新建/编辑', '岗位职称', 'user', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (68, 66, 'user/position/delete', '删除', '岗位职称', 'user', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (69, 66, 'user/position/view', '查看', '岗位职称', 'user', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (66, 3, 'user/department/index', '部门架构', '部门', 'user', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (67, 66, 'user/department/add', '新建/编辑', '部门', 'user', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (68, 66, 'user/department/delete', '删除', '部门', 'user', '', 2, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (70, 3, 'user/user/index', '企业员工', '员工', 'user', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (71, 70, 'user/user/add', '新建/编辑', '员工', 'user', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (72, 70, 'user/user/view', '查看', '员工信息', 'user', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (73, 70, 'user/user/set', '设置', '员工状态', 'user', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (74, 70, 'user/user/reset_psw', '重设密码', '员工密码', 'user', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (69, 3, 'user/position/index', '岗位职称', '岗位职称', 'user', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (70, 69, 'user/position/add', '新建/编辑', '岗位职称', 'user', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (71, 69, 'user/position/delete', '删除', '岗位职称', 'user', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (72, 69, 'user/position/view', '查看', '岗位职称', 'user', '', 2, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (75, 3, 'user/personal/change', '人事调动', '人事调动', 'user', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (76, 75, 'user/personal/change_add', '新建/编辑', '人事调动', 'user', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (73, 3, 'user/user/index', '企业员工', '员工', 'user', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (74, 73, 'user/user/add', '新建/编辑', '员工', 'user', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (75, 73, 'user/user/view', '查看', '员工信息', 'user', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (76, 73, 'user/user/set', '设置', '员工状态', 'user', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (77, 73, 'user/user/reset_psw', '重设密码', '员工密码', 'user', '', 2, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (77, 3, 'user/personal/leave', '离职档案', '离职档案', 'user', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (78, 77, 'user/personal/leave_add', '新建/编辑', '离职档案', 'user', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (79, 77, 'user/personal/leave_delete', '删除', '离职档案', 'user', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (78, 3, 'user/personal/change', '人事调动', '人事调动', 'user', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (79, 78, 'user/personal/change_add', '新建/编辑', '人事调动', 'user', '', 2, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (80, 4, 'message/index/inbox', '收件箱', '收件箱', 'message', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (81, 80, 'message/index/add', '新建/编辑', '消息', 'message', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (82, 80, 'message/index/send', '发送', '消息', 'message', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (83, 80, 'message/index/save', '保存', '消息到草稿', 'message', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (84, 80, 'message/index/reply', '回复', '消息', 'message', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (85, 80, 'message/index/read', '查看', '消息', 'message', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (86, 80, 'message/index/check', '设置', '消息状态', 'message', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (80, 3, 'user/personal/leave', '离职档案', '离职档案', 'user', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (81, 80, 'user/personal/leave_add', '新建/编辑', '离职档案', 'user', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (82, 80, 'user/personal/leave_delete', '删除', '离职档案', 'user', '', 2, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (87, 4, 'message/index/sendbox', '发件箱', '发件箱', 'message', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (88, 4, 'message/index/draft', '草稿箱', '草稿箱', 'message', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (89, 4, 'message/index/rubbish', '垃圾箱', '垃圾箱', 'message', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (83, 4, 'message/index/inbox', '收件箱', '收件箱', 'message', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (84, 83, 'message/index/add', '新建/编辑', '消息', 'message', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (85, 83, 'message/index/send', '发送', '消息', 'message', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (86, 83, 'message/index/save', '保存', '消息到草稿', 'message', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (87, 83, 'message/index/reply', '回复', '消息', 'message', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (88, 83, 'message/index/read', '查看', '消息', 'message', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (89, 83, 'message/index/check', '设置', '消息状态', 'message', '', 2, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (90, 5, 'note/index/index', '公告列表', '公告', 'note', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (91, 90, 'note/index/add', '新建/编辑', '公告', 'note', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (92, 90, 'note/index/delete', '删除', '公告', 'note', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (93, 90, 'note/index/view', '查看', '公告', 'note', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (90, 4, 'message/index/sendbox', '发件箱', '发件箱', 'message', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (91, 4, 'message/index/draft', '草稿箱', '草稿箱', 'message', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (92, 4, 'message/index/rubbish', '垃圾箱', '垃圾箱', 'message', '', 1, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (94, 6, 'oa/approve/index', '我发起的', '办公审批', 'oa', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (95, 94, 'oa/approve/add', '新建/编辑', '办公审批', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (96, 94, 'oa/approve/view', '查看', '办公审批', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (97, 94, 'oa/approve/check', '审核', '办公审批', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (93, 5, 'note/index/note_cate', '公告类型', '公告类型', 'home', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (94, 93, 'note/index/note_cate_add', '新建/编辑', '公告类型', 'home', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (95, 93, 'note/index/note_cate_delete', '删除', '公告类型', 'home', '', 2, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (98, 6, 'oa/approve/list', '我处理的', '办公审批', 'oa', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (99, 6, 'oa/approve/copy', '抄送给我的', '办公审批', 'oa', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (96, 5, 'note/index/index', '公告列表', '公告', 'note', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (97, 96, 'note/index/add', '新建/编辑', '公告', 'note', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (98, 96, 'note/index/delete', '删除', '公告', 'note', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (99, 96, 'note/index/view', '查看', '公告', 'note', '', 2, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (100, 7, 'oa/plan/index', '日程安排', '日程安排', 'oa', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (101, 100, 'oa/plan/add', '新建/编辑', '日程安排', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (102, 100, 'oa/plan/delete', '删除', '日程安排', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (103, 100, 'oa/plan/detail', '查看', '日程安排', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (100, 6, 'oa/approve/index', '我发起的', '办公审批', 'oa', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (101, 100, 'oa/approve/add', '新建/编辑', '办公审批', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (102, 100, 'oa/approve/view', '查看', '办公审批', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (103, 100, 'oa/approve/check', '审核', '办公审批', 'oa', '', 2, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (104, 7, 'oa/plan/calendar', '日程日历', '日程安排', 'oa', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (104, 6, 'oa/approve/list', '我处理的', '办公审批', 'oa', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (105, 6, 'oa/approve/copy', '抄送给我的', '办公审批', 'oa', '', 1, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (105, 7, 'oa/schedule/index', '工作记录', '工作记录', 'oa', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (106, 105, 'oa/schedule/add', '新建/编辑', '工作记录', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (107, 105, 'oa/schedule/delete', '删除', '工作记录', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (108, 105, 'oa/schedule/detail', '查看', '工作记录', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (109, 105, 'oa/schedule/update_labor_time', '更改工时', '工时', 'oa', '', 0, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (106, 7, 'oa/plan/index', '日程安排', '日程安排', 'oa', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (107, 106, 'oa/plan/add', '新建/编辑', '日程安排', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (108, 106, 'oa/plan/delete', '删除', '日程安排', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (109, 106, 'oa/plan/detail', '查看', '日程安排', 'oa', '', 2, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (110, 7, 'oa/schedule/calendar', '工作日历', '工作日历', 'oa', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (110, 7, 'oa/plan/calendar', '日程日历', '日程安排', 'oa', '', 1, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (111, 7, 'oa/work/index', '工作汇报', '工作汇报', 'oa', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (112, 111, 'oa/work/add', '新建/编辑', '工作汇报', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (113, 111, 'oa/work/send', '发送', '工作汇报', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (114, 111, 'oa/work/read', '查看', '工作汇报', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (115, 111, 'oa/work/delete', '删除', '工作汇报', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (111, 7, 'oa/schedule/index', '工作记录', '工作记录', 'oa', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (112, 111, 'oa/schedule/add', '新建/编辑', '工作记录', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (113, 111, 'oa/schedule/delete', '删除', '工作记录', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (114, 111, 'oa/schedule/detail', '查看', '工作记录', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (115, 111, 'oa/schedule/update_labor_time', '更改工时', '工时', 'oa', '', 0, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (116, 8, '', '报销管理', '报销', 'finance', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (117, 116, 'finance/expense/index', '我申请的', '报销', 'finance', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (118, 116, 'finance/expense/list', '我处理的', '报销', 'finance', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (119, 116, 'finance/expense/copy', '抄送给我的', '报销', 'finance', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (120, 116, 'finance/expense/checkedlist', '报销打款', '报销', 'finance', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (116, 7, 'oa/schedule/calendar', '工作日历', '工作日历', 'oa', '', 1, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (121, 116, 'finance/expense/add', '新建/编辑', '报销', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (122, 116, 'finance/expense/delete', '删除', '报销', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (123, 116, 'finance/expense/view', '查看', '报销', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (124, 116, 'finance/expense/check', '审核', '报销', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (125, 116, 'finance/expense/topay', '打款', '报销', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (117, 7, 'oa/work/index', '工作汇报', '工作汇报', 'oa', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (118, 117, 'oa/work/add', '新建/编辑', '工作汇报', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (119, 117, 'oa/work/send', '发送', '工作汇报', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (120, 117, 'oa/work/read', '查看', '工作汇报', 'oa', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (121, 117, 'oa/work/delete', '删除', '工作汇报', 'oa', '', 2, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (126, 8, '', '发票管理', '发票', 'finance', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (127, 126, 'finance/invoice/index', '我申请的', '发票', 'finance', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (128, 126, 'finance/invoice/list', '我处理的', '发票', 'finance', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (129, 126, 'finance/invoice/copy', '抄送给我的', '发票', 'finance', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (130, 126, 'finance/invoice/checkedlist', '发票开具', '发票', 'finance', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (122, 8, '', '报销管理', '报销', 'finance', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (123, 122, 'finance/expense/index', '我申请的', '报销', 'finance', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (124, 122, 'finance/expense/list', '我处理的', '报销', 'finance', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (125, 122, 'finance/expense/copy', '抄送给我的', '报销', 'finance', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (126, 122, 'finance/expense/checkedlist', '报销打款', '报销', 'finance', '', 1, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (131, 126, 'finance/invoice/add', '新建/编辑', '发票', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (132, 126, 'finance/invoice/delete', '删除', '发票', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (133, 126, 'finance/invoice/view', '查看', '发票', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (134, 126, 'finance/invoice/check', '审核', '发票', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (135, 126, 'finance/invoice/open', '开具', '发票', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (136, 126, 'finance/invoice/tovoid', '作废', '发票', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (127, 122, 'finance/expense/add', '新建/编辑', '报销', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (128, 122, 'finance/expense/delete', '删除', '报销', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (129, 122, 'finance/expense/view', '查看', '报销', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (130, 122, 'finance/expense/check', '审核', '报销', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (131, 122, 'finance/expense/topay', '打款', '报销', 'finance', '', 2, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (137, 8, 'finance/income/index', '到账管理', '到账记录', 'finance', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (138, 137, 'finance/income/add', '新建/编辑', '到账记录', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (139, 137, 'finance/income/view', '查看', '到账记录', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (140, 137, 'finance/income/delete', '删除', '到账记录', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (132, 8, '', '发票管理', '发票', 'finance', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (133, 132, 'finance/invoice/index', '我申请的', '发票', 'finance', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (134, 132, 'finance/invoice/list', '我处理的', '发票', 'finance', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (135, 132, 'finance/invoice/copy', '抄送给我的', '发票', 'finance', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (136, 132, 'finance/invoice/checkedlist', '发票开具', '发票', 'finance', '', 1, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (141, 0, '', '合同协议', '合同协议', 'contract', 'icon-hetongyidong', 1, 9, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (142, 141, 'contract/cate/conf', '权限配置', '合同权限配置', 'contract', '', 1, 0, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (143, 141, 'contract/cate/cate', '合同类别', '合同类别', 'contract', '', 1, 0, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (144, 143, 'contract/cate/cate_add', '新建/编辑', '合同类别', 'contract', '', 2, 0, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (145, 143, 'contract/cate/cate_check', '设置', '合同类别', 'contract', '', 2,0, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (137, 132, 'finance/invoice/add', '新建/编辑', '发票', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (138, 132, 'finance/invoice/delete', '删除', '发票', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (139, 132, 'finance/invoice/view', '查看', '发票', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (140, 132, 'finance/invoice/check', '审核', '发票', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (141, 132, 'finance/invoice/open', '开具', '发票', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (142, 132, 'finance/invoice/tovoid', '作废', '发票', 'finance', '', 2, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (146, 141, 'contract/index/index', '合同列表', '合同列表', 'contract', '', 1, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (147, 146, 'contract/index/add', '新建/编辑', '合同', 'contract', '', 2, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (148, 146, 'contract/index/view', '查看', '合同', 'contract', '', 2, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (149, 146, 'contract/index/delete', '删除', '合同', 'contract', '', 2, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (150, 141, 'contract/index/archive', '合同归档', '合同归档', 'contract', '', 1, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (143, 8, 'finance/income/index', '到账管理', '到账记录', 'finance', '', 1, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (144, 143, 'finance/income/add', '新建/编辑', '到账记录', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (145, 143, 'finance/income/view', '查看', '到账记录', 'finance', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (146, 143, 'finance/income/delete', '删除', '到账记录', 'finance', '', 2, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (151, 0, '', '项目任务', '项目任务', 'project', 'icon-xiangmuguanli', 1, 10, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (152, 151, 'project/index/index', '项目列表', '项目', 'project', '', 1, 0, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (153, 152, 'project/index/add', '新建', '项目', 'project', '', 2, 0, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (154, 152, 'project/index/edit', '编辑', '项目', 'project', '', 2, 0, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (155, 152, 'project/index/view', '查看', '项目', 'project', '', 2, 0, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (156, 152, 'project/index/delete', '删除', '项目', 'project', '', 2, 0, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (147, 0, '', '客户管理', '客户管理', 'customer', 'icon-huamingce', 1, 9, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (148, 147, 'customer/grade/conf', '权限配置', '客户权限配置', 'customer', '', 1, 0, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (149, 147, 'customer/grade/index', '客户等级', '客户等级', 'customer', '', 1, 0, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (150, 149, 'customer/grade/grade_add', '新建/编辑', '客户等级', 'customer', '', 2, 0, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (151, 149, 'customer/grade/grade_check', '设置', '客户等级', 'customer', '', 2,0, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (152, 147, 'customer/source/index', '客户渠道', '客户渠道', 'customer', '', 1, 0, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (153, 152, 'customer/source/source_add', '新建/编辑', '客户渠道', 'customer', '', 2, 0, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (154, 152, 'customer/source/source_check', '设置', '客户渠道', 'customer', '', 2,0, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (157, 151, 'project/task/index', '任务列表', '任务', 'project', '', 1, 0, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (158, 157, 'project/task/add', '新建', '任务', 'project', '', 2, 0, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (159, 157, 'project/task/edit', '编辑', '任务', 'project', '', 2, 0, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (160, 157, 'project/task/view', '查看', '任务', 'project', '', 2, 0, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (161, 157, 'project/task/delete', '删除', '任务', 'project', '', 2, 0, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (155, 147, 'customer/index/rush', '抢 客 宝', '抢客宝', 'customer', '', 1, 0, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (162, 0, '', '知识文章', '知识文章', 'article', 'icon-kecheng', 1, 11, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (163, 162, 'article/cate/cate', '知识类型', '知识类型', 'article', '', 1, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (164, 163, 'article/cate/cate_add', '新建/编辑', '知识类型', 'article', '', 2, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (165, 163, 'article/cate/cate_delete', '删除', '知识类型', 'article', '', 2, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (156, 147, 'customer/index/index', '客户列表', '客户列表', 'customer', '', 1, 0, 1, 1556143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (157, 156, 'customer/index/add', '新建/编辑', '客户', 'customer', '', 2, 0, 1, 1556143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (158, 156, 'customer/index/view', '查看', '客户', 'customer', '', 2, 0, 1, 1556143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (159, 156, 'customer/index/get', '获取', '客户', 'customer', '', 2, 0, 1, 1556143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (160, 156, 'customer/index/to_sea', '转入公海', '客户', 'customer', '', 2, 0, 1, 1556143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (161, 147, 'customer/index/sea', '公海客户', '客户', 'customer', '', 1, 0, 1, 1556143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (162, 161, 'customer/index/distribute', '分配客户', '客户', 'customer', '', 2, 0, 1, 1556143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (163, 161, 'customer/index/to_trash', '转入废弃池', '客户', 'customer', '', 2, 0, 1, 1556143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (164, 147, 'customer/index/trash', '废弃客户', '客户', 'customer', '', 1, 0, 1, 1556143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (165, 164, 'customer/index/delete', '删除', '客户', 'customer', '', 2, 0, 1, 1556143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (166, 164, 'customer/index/revert', '还原', '客户', 'customer', '', 2, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (167, 147, 'customer/contact/index', '客户联系人', '联系人', 'customer', '', 1, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (168, 167, 'customer/contact/contact_add', '新建/编辑', '联系人', 'customer', '', 2, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (169, 167, 'customer/contact/contact_del', '删除', '联系人', 'customer', '', 2, 0, 1, 1656143065, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (166, 162, 'article/index/index', '共享知识', '知识文章', 'article', '', 1, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (167, 162, 'article/index/list', '个人知识', '知识文章', 'article', '', 1, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (168, 167, 'article/index/add', '新建/编辑', '知识文章', 'article', '', 2, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (169, 167, 'article/index/view', '查看', '知识文章', 'article', '', 2, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (170, 167, 'article/index/delete', '删除', '知识文章', 'article', '', 2, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (170, 0, '', '合同协议', '合同协议', 'contract', 'icon-hetongyidong', 1, 10, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (171, 170, 'contract/cate/conf', '权限配置', '合同权限配置', 'contract', '', 1, 0, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (172, 170, 'contract/cate/cate', '合同类别', '合同类别', 'contract', '', 1, 0, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (173, 172, 'contract/cate/cate_add', '新建/编辑', '合同类别', 'contract', '', 2, 0, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (174, 172, 'contract/cate/cate_check', '设置', '合同类别', 'contract', '', 2,0, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (175, 170, 'contract/index/index', '合同列表', '合同列表', 'contract', '', 1, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (176, 175, 'contract/index/add', '新建/编辑', '合同', 'contract', '', 2, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (177, 175, 'contract/index/view', '查看', '合同', 'contract', '', 2, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (178, 175, 'contract/index/delete', '删除', '合同', 'contract', '', 2, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (179, 170, 'contract/index/archive', '合同归档', '合同归档', 'contract', '', 1, 0, 1, 1656143065, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (180, 0, '', '项目管理', '项目管理', 'project', 'icon-xiangmuguanli', 1, 11, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (181, 180, 'project/index/index', '项目列表', '项目', 'project', '', 1, 0, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (182, 181, 'project/index/add', '新建', '项目', 'project', '', 2, 0, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (183, 181, 'project/index/edit', '编辑', '项目', 'project', '', 2, 0, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (184, 181, 'project/index/view', '查看', '项目', 'project', '', 2, 0, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (185, 181, 'project/index/delete', '删除', '项目', 'project', '', 2, 0, 1, 1656142368, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (186, 180, 'project/task/index', '任务列表', '任务', 'project', '', 1, 0, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (187, 186, 'project/task/add', '新建', '任务', 'project', '', 2, 0, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (188, 186, 'project/task/edit', '编辑', '任务', 'project', '', 2, 0, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (189, 186, 'project/task/view', '查看', '任务', 'project', '', 2, 0, 1, 1656142368, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (190, 186, 'project/task/delete', '删除', '任务', 'project', '', 2, 0, 1, 1656142368, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (191, 0, '', '知识文章', '知识文章', 'article', 'icon-kecheng', 1, 12, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (192, 191, 'article/cate/cate', '知识类型', '知识类型', 'article', '', 1, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (193, 192, 'article/cate/cate_add', '新建/编辑', '知识类型', 'article', '', 2, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (194, 192, 'article/cate/cate_delete', '删除', '知识类型', 'article', '', 2, 0, 1, 1656143065, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (195, 191, 'article/index/index', '共享知识', '知识文章', 'article', '', 1, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (196, 191, 'article/index/list', '个人知识', '知识文章', 'article', '', 1, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (197, 196, 'article/index/add', '新建/编辑', '知识文章', 'article', '', 2, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (198, 196, 'article/index/view', '查看', '知识文章', 'article', '', 2, 0, 1, 1656143065, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (199, 196, 'article/index/delete', '删除', '知识文章', 'article', '', 2, 0, 1, 1656143065, 0);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_admin_group
|
||||
@ -358,9 +392,9 @@ CREATE TABLE `oa_admin_group` (
|
||||
-- ----------------------------
|
||||
-- Records of cms_admin_group
|
||||
-- ----------------------------
|
||||
INSERT INTO `oa_admin_group` VALUES (1, '超级员工权限', 1, '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170', '超级员工权限,拥有系统的最高权限,不可修改。', 0, 0);
|
||||
INSERT INTO `oa_admin_group` VALUES (2, '总经理权限', 1, '2,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,3,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,4,80,81,82,83,84,85,86,87,88,89,5,90,91,92,93,6,94,95,96,97,98,99,7,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,8,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,162,163,164,165,166,167,168,169,170', '总经理的管理权限,可根据公司的具体需求调整。', 0, 0);
|
||||
INSERT INTO `oa_admin_group` VALUES (3, '普通员工权限', 1, '4,80,81,82,83,84,85,86,87,88,89,5,90,93,6,94,95,96,97,98,99,7,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,8,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,166,167,168,169,170', '普通员工管理权限,可根据公司的具体需求调整。', 0, 0);
|
||||
INSERT INTO `oa_admin_group` VALUES (1, '超级员工权限', 1, '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,,190,191,192,193,194,195,196,197,198,199', '超级员工权限,拥有系统的最高权限,不可修改。', 0, 0);
|
||||
INSERT INTO `oa_admin_group` VALUES (2, '总经理权限', 1, '2,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,3,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,4,83,84,85,86,87,88,89,90,91,92,5,93,94,95,96,97,98,99,6,100,101,102,103,104,105,7,106,107,108,109,110,111,112,113,114,116,117,118,119,120,121,8,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199', '总经理的管理权限,可根据公司的具体需求调整。', 0, 0);
|
||||
INSERT INTO `oa_admin_group` VALUES (3, '普通员工权限', 1, '4,83,84,85,86,87,88,89,90,91,92,5,96,99,6,100,101,102,103,104,105,7,106,107,108,109,110,111,112,113,114,116,117,118,119,120,121,8,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,155,156,157,158,159,160,161,164,167,168,169,170,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,195,196,197,198,199', '普通员工管理权限,可根据公司的具体需求调整。', 0, 0);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_data_auth
|
||||
@ -373,6 +407,9 @@ CREATE TABLE `oa_data_auth` (
|
||||
`desc` text NULL COMMENT '备注描述',
|
||||
`module` varchar(255) NOT NULL DEFAULT '' COMMENT '所属模块,唯一,字母',
|
||||
`uids` text NULL COMMENT '权限用户,1,2,3',
|
||||
`expected_1` int(11) NOT NULL DEFAULT 0 COMMENT '预备字段1,可作为预备权限的控制',
|
||||
`expected_2` int(11) NOT NULL DEFAULT 0 COMMENT '预备字段2,可作为预备权限的控制',
|
||||
`expected_3` int(11) NOT NULL DEFAULT 0 COMMENT '预备字段3,可作为预备权限的控制',
|
||||
`create_time` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
`update_time` int(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
@ -381,7 +418,8 @@ CREATE TABLE `oa_data_auth` (
|
||||
-- ----------------------------
|
||||
-- Records of oa_data_auth
|
||||
-- ----------------------------
|
||||
INSERT INTO `oa_data_auth` VALUES (1, '合同管理员','contract_admin','拥有该权限的员工可以查看、编辑、审核、作废、中止所有合同。', 'contract', '', 1656143065, 0);
|
||||
INSERT INTO `oa_data_auth` VALUES (1, '客户管理员','customer_admin','拥有该权限的员工可以查看、转移所有客户。', 'customer', '',10,0,0, 1656143065, 0);
|
||||
INSERT INTO `oa_data_auth` VALUES (2, '合同管理员','contract_admin','拥有该权限的员工可以查看、编辑、审核、作废、中止所有合同。', 'contract', '',0,0,0, 1656143065, 0);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_config
|
||||
@ -640,6 +678,54 @@ INSERT INTO `oa_car_cate` VALUES (1, '宝马X5', '粤A55555', 1, 1639900555, 0);
|
||||
INSERT INTO `oa_car_cate` VALUES (2, '哈弗H6', '粤A66666', 1, 1639900666, 0);
|
||||
INSERT INTO `oa_car_cate` VALUES (3, '奥迪Q8', '粤A88888', 1, 1639900888, 0);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_industry
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_industry`;
|
||||
CREATE TABLE `oa_industry` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(100) NOT NULL DEFAULT '' COMMENT '行业名称',
|
||||
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态:-1删除 0禁用 1启用',
|
||||
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
`update_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '行业';
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of oa_industry
|
||||
-- ----------------------------
|
||||
INSERT INTO `oa_industry` VALUES (1, '工业品企业', 1, 1637987189, 0);
|
||||
INSERT INTO `oa_industry` VALUES (2, '互联网企业', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_industry` VALUES (3, '服务行业', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_industry` VALUES (4, '消费品企业', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_industry` VALUES (5, '原材料企业', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_industry` VALUES (6, '农业企业', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_industry` VALUES (7, '科技企业', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_industry` VALUES (8, '其他行业', 1, 1637987199, 0);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_services
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_services`;
|
||||
CREATE TABLE `oa_services` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(100) NOT NULL DEFAULT '' COMMENT '服务名称',
|
||||
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态:-1删除 0禁用 1启用',
|
||||
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
`update_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '企业服务';
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of oa_services
|
||||
-- ----------------------------
|
||||
INSERT INTO `oa_services` VALUES (1, '定制服务', 1, 1637987189, 0);
|
||||
INSERT INTO `oa_services` VALUES (2, '开店咨询', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_services` VALUES (3, '推广运营', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_services` VALUES (4, '财税咨询', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_services` VALUES (5, '代理记账', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_services` VALUES (6, '开卡服务', 1, 1637987199, 0);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_expense
|
||||
-- ----------------------------
|
||||
@ -903,29 +989,6 @@ CREATE TABLE `oa_message_file_interfix` (
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '消息关联的附件表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_note
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_note`;
|
||||
CREATE TABLE `oa_note` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`cate_id` int(11) NOT NULL DEFAULT 0 COMMENT '关联分类ID',
|
||||
`title` varchar(225) NULL DEFAULT NULL COMMENT '标题',
|
||||
`content` text NOT NULL COMMENT '公告内容',
|
||||
`src` varchar(100) NULL DEFAULT NULL COMMENT '关联链接',
|
||||
`status` int(1) NOT NULL DEFAULT 1 COMMENT '1可用-1禁用',
|
||||
`sort` int(11) NOT NULL DEFAULT 0,
|
||||
`start_time` int(11) NOT NULL DEFAULT 0 COMMENT '展示开始时间',
|
||||
`end_time` int(11) NOT NULL DEFAULT 0 COMMENT '展示结束时间',
|
||||
`create_time` int(11) NOT NULL DEFAULT 0,
|
||||
`update_time` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '公告';
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of oa_note
|
||||
-- ----------------------------
|
||||
INSERT INTO `oa_note` VALUES (1, 1, '欢迎使用勾股OA办公系统', '<p>欢迎使用勾股OA办公系统,勾股办公是一款基于ThinkPHP6 + Layui + MySql打造的,简单实用的开源免费的企业办公系统框架。系统集成了系统设置、人事管理模块、消息管理模块、日常办公、财务管理等基础模块。系统简约,易于功能扩展,方便二次开发,让开发者更专注于业务深度需求的开发,帮助开发者简单高效降低二次开发成本,通过二次开发之后可以用来做CRM,ERP,业务管理等系统。</p>', 'https://oa.gougucms.com', 1, 2, 1635696000, 1924876800, 1637984962, 1637984975);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_note_cate
|
||||
@ -947,6 +1010,31 @@ CREATE TABLE `oa_note_cate` (
|
||||
INSERT INTO `oa_note_cate` VALUES (1, 0, 1, '普通公告', 1637984265, 1637984299);
|
||||
INSERT INTO `oa_note_cate` VALUES (2, 0, 2, '紧急公告', 1637984283, 1637984310);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_note
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_note`;
|
||||
CREATE TABLE `oa_note` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`cate_id` int(11) NOT NULL DEFAULT 0 COMMENT '关联分类ID',
|
||||
`title` varchar(225) NULL DEFAULT NULL COMMENT '标题',
|
||||
`content` text NOT NULL COMMENT '公告内容',
|
||||
`src` varchar(100) NULL DEFAULT NULL COMMENT '关联链接',
|
||||
`status` int(1) NOT NULL DEFAULT 1 COMMENT '1可用-1禁用',
|
||||
`sort` int(11) NOT NULL DEFAULT 0,
|
||||
`start_time` int(11) NOT NULL DEFAULT 0 COMMENT '展示开始时间',
|
||||
`end_time` int(11) NOT NULL DEFAULT 0 COMMENT '展示结束时间',
|
||||
`admin_id` int(11) NOT NULL DEFAULT 0 COMMENT '发布人id',
|
||||
`create_time` int(11) NOT NULL DEFAULT 0,
|
||||
`update_time` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '公告';
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of oa_note
|
||||
-- ----------------------------
|
||||
INSERT INTO `oa_note` VALUES (1, 1, '欢迎使用勾股OA办公系统', '<p>欢迎使用勾股OA办公系统,勾股办公是一款基于ThinkPHP6 + Layui + MySql打造的,简单实用的开源免费的企业办公系统框架。系统集成了系统设置、人事管理模块、消息管理模块、日常办公、财务管理、客户管理、项目管理、合同管理、知识管理等基础模块。系统简约,易于功能扩展,方便二次开发,让开发者更专注于业务深度需求的开发,帮助开发者简单高效降低二次开发成本,通过二次开发之后可以用来做CRM,ERP,业务管理等系统。</p>', 'https://oa.gougucms.com', 1, 2, 1635696000, 1924876800,1, 1637984962, 1637984975);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_position
|
||||
-- ----------------------------
|
||||
@ -1193,6 +1281,246 @@ CREATE TABLE `oa_work_record` (
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '汇报工作发送记录表';
|
||||
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_customer_grade
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_customer_grade`;
|
||||
CREATE TABLE `oa_customer_grade` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(100) NOT NULL DEFAULT '' COMMENT '客户等级名称',
|
||||
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态:-1删除 0禁用 1启用',
|
||||
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
`update_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '客户等级';
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of oa_customer_grade
|
||||
-- ----------------------------
|
||||
INSERT INTO `oa_customer_grade` VALUES (1, '普通客户', 1, 1637987189, 0);
|
||||
INSERT INTO `oa_customer_grade` VALUES (2, 'VIP客户', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_grade` VALUES (3, '白银客户', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_grade` VALUES (4, '黄金客户', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_grade` VALUES (5, '钻石客户', 1, 1637987199, 0);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_customer_source
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_customer_source`;
|
||||
CREATE TABLE `oa_customer_source` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(100) NOT NULL DEFAULT '' COMMENT '客户渠道名称',
|
||||
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态:-1删除 0禁用 1启用',
|
||||
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
`update_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '客户来源';
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of oa_customer_source
|
||||
-- ----------------------------
|
||||
INSERT INTO `oa_customer_source` VALUES (1, '独立开发', 1, 1637987189, 0);
|
||||
INSERT INTO `oa_customer_source` VALUES (2, '微信公众号', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_source` VALUES (3, '今日头条', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_source` VALUES (4, '百度搜索', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_source` VALUES (5, '销售活动', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_source` VALUES (6, '电话来访', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_source` VALUES (7, '客户介绍', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_source` VALUES (8, '其他来源', 1, 1637987199, 0);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_customer_grade
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_customer_grade`;
|
||||
CREATE TABLE `oa_customer_grade` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(100) NOT NULL DEFAULT '' COMMENT '客户等级名称',
|
||||
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态:-1删除 0禁用 1启用',
|
||||
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
`update_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '客户等级';
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of oa_customer_grade
|
||||
-- ----------------------------
|
||||
INSERT INTO `oa_customer_grade` VALUES (1, '普通客户', 1, 1637987189, 0);
|
||||
INSERT INTO `oa_customer_grade` VALUES (2, 'VIP客户', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_grade` VALUES (3, '白银客户', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_grade` VALUES (4, '黄金客户', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_grade` VALUES (5, '钻石客户', 1, 1637987199, 0);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_customer_source
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_customer_source`;
|
||||
CREATE TABLE `oa_customer_source` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(100) NOT NULL DEFAULT '' COMMENT '客户渠道名称',
|
||||
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态:-1删除 0禁用 1启用',
|
||||
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
`update_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '客户来源';
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of oa_customer_source
|
||||
-- ----------------------------
|
||||
INSERT INTO `oa_customer_source` VALUES (1, '独立开发', 1, 1637987189, 0);
|
||||
INSERT INTO `oa_customer_source` VALUES (2, '微信公众号', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_source` VALUES (3, '今日头条', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_source` VALUES (4, '百度搜索', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_source` VALUES (5, '销售活动', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_source` VALUES (6, '电话来访', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_source` VALUES (7, '客户介绍', 1, 1637987199, 0);
|
||||
INSERT INTO `oa_customer_source` VALUES (8, '其他来源', 1, 1637987199, 0);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_customer
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_customer`;
|
||||
CREATE TABLE `oa_customer` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) NOT NULL DEFAULT '' COMMENT '客户名称',
|
||||
`source_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '客户来源id',
|
||||
`grade_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '客户等级id',
|
||||
`industry_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '所属行业id',
|
||||
`services_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '客户意向id',
|
||||
`provinceid` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '省份id',
|
||||
`cityid` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '城市id',
|
||||
`distid` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '区县id',
|
||||
`townid` bigint(20) NOT NULL DEFAULT 0 COMMENT '城镇id',
|
||||
`address` varchar(255) NOT NULL DEFAULT '' COMMENT '客户联系地址',
|
||||
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '客户状态:0未设置,1新进客户,2跟进客户,3正式客户,4流失客户',
|
||||
`intent_status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '意向状态:0未设置,1意向不明,2意向模糊,3意向一般,4意向强烈',
|
||||
`contact_first` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '第一联系人id',
|
||||
`admin_id` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '录入人',
|
||||
`belong_uid` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '所属人',
|
||||
`belong_did` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '所属部门',
|
||||
`belong_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '获取时间',
|
||||
`distribute_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '分配时间',
|
||||
`share_ids` varchar(500) NOT NULL DEFAULT '' COMMENT '共享人员,如:1,2,3',
|
||||
`content` text NULL COMMENT '客户描述',
|
||||
`market` text NULL COMMENT '主要经营业务',
|
||||
`remark` text NULL COMMENT '备注信息',
|
||||
`bank` varchar(60) NOT NULL DEFAULT '' COMMENT '开户银行',
|
||||
`bank_sn` varchar(60) NOT NULL DEFAULT '' COMMENT '银行帐号',
|
||||
`tax_num` varchar(100) NOT NULL DEFAULT '' COMMENT '纳税人识别号',
|
||||
`cperson_mobile` varchar(20) NOT NULL DEFAULT '' COMMENT '开票电话',
|
||||
`cperson_address` varchar(200) NOT NULL DEFAULT '' COMMENT '开票地址',
|
||||
`discard_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '废弃时间',
|
||||
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '添加时间',
|
||||
`update_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '修改时间',
|
||||
`delete_time` int(11) NOT NULL DEFAULT 0 COMMENT '删除时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1000 CHARACTER SET = utf8mb4 COMMENT = '客户表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_customer_trace
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_customer_trace`;
|
||||
CREATE TABLE `oa_customer_trace` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`cid` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '客户ID',
|
||||
`contact_id` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '联系人id',
|
||||
`chance_id` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '销售机会id',
|
||||
`type` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '跟进方式:0其他,1电话,2微信,3QQ,4上门',
|
||||
`stage` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '当前阶段:0未设置,1立项评估,2初期沟通,3需求分析,4方案制定,5商务谈判,6合同签订,7失单',
|
||||
`content` text NULL COMMENT '跟进内容',
|
||||
`follow_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '跟进时间',
|
||||
`next_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '下次跟进时间',
|
||||
`admin_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建人',
|
||||
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
`update_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||
`delete_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '删除时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '客户跟进记录表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_customer_contact
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_customer_contact`;
|
||||
CREATE TABLE `oa_customer_contact` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`cid` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '客户ID',
|
||||
`is_default` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否是第一联系人',
|
||||
`name` varchar(100) NOT NULL DEFAULT '' COMMENT '姓名',
|
||||
`sex` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '用户性别:0未知,1男,2女',
|
||||
`mobile` varchar(20) NOT NULL DEFAULT '' COMMENT '手机号码',
|
||||
`qq` varchar(20) NOT NULL DEFAULT '' COMMENT 'QQ号',
|
||||
`wechat` varchar(100) NOT NULL DEFAULT '' COMMENT '微信号',
|
||||
`email` varchar(100) NOT NULL DEFAULT '' COMMENT '邮件地址',
|
||||
`nickname` varchar(50) NOT NULL DEFAULT '' COMMENT '称谓',
|
||||
`department` varchar(50) NOT NULL DEFAULT '' COMMENT '部门',
|
||||
`position` varchar(50) NOT NULL DEFAULT '' COMMENT '职务',
|
||||
`admin_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建人',
|
||||
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
`update_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||
`delete_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '删除时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '客户联系人表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_customer_chance
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_customer_chance`;
|
||||
CREATE TABLE `oa_customer_chance` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(255) NOT NULL DEFAULT '' COMMENT '销售机会主题',
|
||||
`cid` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '客户ID',
|
||||
`contact_id` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '联系人id',
|
||||
`services_id` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '需求服务id',
|
||||
`stage` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '当前阶段:0未设置,1立项评估,2初期沟通,3需求分析,4方案制定,5商务谈判,6合同签订,7失单',
|
||||
`content` text NULL COMMENT '需求描述',
|
||||
`discovery_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '发现时间',
|
||||
`expected_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '预计签单时间',
|
||||
`expected_amount` decimal(15, 2) NULL DEFAULT 0.00 COMMENT '预计签单金额',
|
||||
`admin_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建人',
|
||||
`belong_uid` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '所属人',
|
||||
`assist_ids` varchar(500) NOT NULL DEFAULT '' COMMENT '协助人员,如:1,2,3',
|
||||
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
`update_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||
`delete_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '删除时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '客户销售机会表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_customer_file
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_customer_file`;
|
||||
CREATE TABLE `oa_customer_file` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`customer_id` int(11) UNSIGNED NOT NULL COMMENT '关联客户id',
|
||||
`file_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '相关联附件id',
|
||||
`admin_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建人',
|
||||
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
`update_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '修改时间',
|
||||
`delete_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '删除时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '客户附件关联表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_customer_log
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `oa_customer_log`;
|
||||
CREATE TABLE `oa_customer_log` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`type` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '操作类型:0客户,1跟进记录,2客户联系人,3销售机会',
|
||||
`action` varchar(100) NOT NULL DEFAULT 'edit' COMMENT '动作:add,edit,del,check,upload',
|
||||
`field` varchar(100) NOT NULL DEFAULT '' COMMENT '字段',
|
||||
`customer_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '关联客户id',
|
||||
`trace_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '跟进记录id',
|
||||
`contact_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '客户联系人id',
|
||||
`chance_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '销售机会id',
|
||||
`admin_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '操作人',
|
||||
`old_content` text NULL COMMENT '修改前的内容',
|
||||
`new_content` text NULL COMMENT '修改后的内容',
|
||||
`remark` text NULL COMMENT '补充备注',
|
||||
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '客户操作记录表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_contract_cate
|
||||
-- ----------------------------
|
||||
@ -1245,7 +1573,7 @@ CREATE TABLE `oa_contract` (
|
||||
`cost` decimal(15, 2) NOT NULL DEFAULT 0.00 COMMENT '合同金额',
|
||||
`is_tax` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否含税:0未含税,1含税',
|
||||
`tax` decimal(15, 2) NOT NULL DEFAULT 0.00 COMMENT '税点',
|
||||
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '合同状态:0未设置,1已录入,2待审核,3已审核,4意外中止,5已作废',
|
||||
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '合同状态:0未设置,1已录入,2待审核,3已审核,4已中止,5已作废',
|
||||
`check_uid` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '审核人',
|
||||
`check_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '审核时间',
|
||||
`check_remark` text NULL COMMENT '审核备注信息',
|
||||
|
103
app/install/data/oa_user.sql
Normal file
103
app/install/data/oa_user.sql
Normal file
@ -0,0 +1,103 @@
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (2, 'suhaizhen', '1ff888712e6d85e8b8dd85f4643da8fc', 'z5dm9r7kl3gjpf6ay1h8', '', '素还真', 13800000001, 1, '素还真', '/storage/202202/24d88ad4299744c8e83a7b17cfe9077f.jpg', 1, 1, 1, '合伙人A', 1637510400, 0, 1654605659, 1654848390, 1347, '58.63.1.34', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (3, 'yiyeshu', '0ebb9fa973b0f37ad1c66c43c452131e', '4wnrosga8cq39y1zthmb', '', '一页书', 13800000002, 1, '一页书', '/storage/avatars/avatar_256_ozhxs3abn61638065889.png', 1, 1, 1, '合伙人B', 1637596800, 0, 1654605710, 1654840504, 2, '27.36.90.63', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (4, 'fengcailing', 'cac2539c7517bb52a3c626a0cfc5bd7b', 'yonpz73fhcam6igw8ksl', '', '风采铃', 13800000003, 1, '风采铃', '/storage/avatars/avatar_256_f8i54nd7uk1638066170.png', 3, 2, 1, '深情义、明是非、才貌出众。为天蝶盟所用,欲以才华美貌、用情诱取素还真之性命,但却被素还真满腹经纶之才情与悲天悯人的胸怀所吸引而谱下一段血泪情缘。情路境遇坎坷、与爱子素续缘间亲情缘薄,但仍坚强不移,令人敬服。', 1637596800, 0, 1654605736, 1654743896, 95, '221.4.214.146', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (5, 'yucixin', '9b7b59e48c27a2657b6b6a73af7d6c8c', 'd3rcny2joz516gwhvuqi', '', '玉辞心', 13800000004, 1, '玉辞心', '/storage/avatars/avatar_256_upo9jznv561638066393.png', 3, 3, 1, '自称戢武王特遣之令使,为查明剑之初身世而入苦境,脸上妆容有一特殊的蝴蝶纹彩,举止言谈不时流露出一股不凡贵气,实力惊人,在鄙女风气兴盛的杀戮碎岛实属罕见,也为玉辞心身份增添了一丝神秘色彩。', 1637596800, 0, 1638148058, 1654650489, 40, '123.149.238.91', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (6, 'qinjiaxian', '9ecd4a6ebe6059baf952e69561e722e6', 'r0kqm5dv8j2sno4t61ga', '', '秦假仙', 13800000005, 1, '秦假仙', '/storage/avatars/avatar_256_w3efzn65bm1638066470.png', 4, 4, 1, '名人榜上天下第一辩,急公好义、脑筋灵活、辩才无碍,鬼点子永远用不完,一手包办武林中大小琐事,是正道最重要的情报贩子。个性自私小气、欺善怕恶,出门总带着一群跟班小弟,但却有着超乎常人的好运,加上过人的机智以及不择手段的行事风格,每每于关键时刻小兵立大功,对武林和平的贡献,有着不可磨灭、取代的地位,乃人不可貌相的最佳典范。', 1637596800, 0, 1654605799, 1654674396, 19, '113.89.98.158', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (7, 'yexiaochai', '61e3f1c16c02b795ccf58417edd2193f', 'tmhdspw4e2rxnu0k57fg', '', '叶小钗', 13800000006, 1, '叶小钗', '/storage/avatars/avatar_256_6r2nx5a7em1638066524.png', 6, 5, 1, '耿直专一、守信重诺的侠客,虽为侍童出身,但不屈不挠的个性,丰富的人生阅历,让其成为中原武林不可或缺的一员,享有“刀狂剑痴”之盛名,披肩的白发和脸上的英雄疤,搭配沉默无言的特色,营造出该角色独特的风范。', 1637596800, 0, 1654605510, 1654846854, 157, '27.36.90.63', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (8, 'tanwuyu', '77c56c1f8317b0a3b3a8efc7f0483ee1', '0zpwk1m6e92ticbjxhug', '', '谈无欲', 13800000007, 1, '谈无欲', '/storage/avatars/avatar_256_qz13s8emh01638067352.png', 5, 6, 1, '日月星三才子之月才子,呈现出与素还真全然不同的作风与个性,这点由他的诗号可窥知一二,完全的自信促使他一出道便和素还真在台面下互相较劲,两人维持着亦敌亦友的关系。由于过度的骄矜自满与好胜,让谈无欲坠入深渊,至此一蹶不振;然净从秽生、明从暗出,沉潜再出的谈无欲,蜕化为六丑暗助正道,并重拾昔日统辖文武半边天的风采,共同戮力于武林和平..', 1637769600, 0, 1654605510, 1644553903, 3, '27.36.88.53', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (9, 'hongchenxue', '6a62a68f7ba42faaaff5fee1bc8d5c23', 'qv0ltwjso43752ranye6', 'fhtj0a', '红尘雪', 13800000008, 2, '红尘雪', '/storage/avatars/avatar_256_1l2qbjwdci1638067440.png', 7, 6, 1, '倚晴江山楼之主,亦是隐流左单锋之主。文秀儒雅、貌美如花,善于琴棋书画,学识渊博又天赋异禀,能将知识传授给灵兽。看似武林少见才女,实有剑中洛神之美誉,其武学脱胎于父亲天剑老人的极单锋,练就自成一格的“翩单锋”,宛若游龙,点化为惊鸿七式。', 1637769600, 0, 1654605510, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (10, 'qiufen', '0a8c42b30732a1739af85864a1cbc6bb', '8qsyh1xk0c9rvm4od6a5', 'slmvwk', '秋分', 13800000009, 2, '秋分', '/storage/avatars/avatar_256_nxe19wd4s51638067663.png', 1, 8, 1, '风采铃贴身侍女。', 1637856000, 0, 1654605510, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (11, 'daoshou', '2d5ff743c1898459581ea0757d9b5d6f', 'les926iwxbjoud4t73z8', '', '刀兽', 13800000010, 1, '刀兽', '/storage/202201/92d518433f6f5cbe1b9b5df5f00eb28b.jpg', 4, 17, 1, '风采铃贴身侍卫。', 1637856000, 0, 1654605510, 1641606771, 2, '220.194.147.103', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (12, 'jianqin', 'ddc479ee1ad0a8e3005ea995015f8269', 'zkn70l42bmgxfsv6e1rd', 'slmvwk', '剑禽', 13800000011, 1, '剑禽', '/storage/avatars/avatar_256_djk5wvazqm1638067753.png', 4, 17, 1, '风采铃贴身侍卫。', 1637856000, 0, 1654605510, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (13, 'fuyingnv', '16e35c24ec220875611b316d5a47f9c8', 'swobpi7acm1jlz03n654', '', '符应女', 13800000012, 2, '符应女', '/storage/avatars/avatar_256_uj2vhc95oe1638067831.png', 13, 10, 1, '摄论太宫之妹,为棘岛专有的医生,医术专攻针灸之术,佐以药理,自封符应女,彰显其对自身医术的信心。个性豁达,暗中受玄觉之请托,至弃云峰医治戢武王的箭伤。', 1637856000, 0, 1654605510, 1638177142, 2, '58.252.118.218', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (14, 'jitianshuangji', '5f8463d0ed80a17897739045e880ca08', 'xbzsij2943106lqgypof', '', '祭天双姬', 13800000013, 2, '祭天双姬', '/storage/avatars/avatar_256_avw1hfkd931638067867.png', 3, 9, 1, '戢武王秘密势力,暗藏于祭天台的两名护持神姬,浑身裹满红纱,手持新月刃,一旦外人踏入禁地,两名神姬便会自石壁上现身,击退来犯者。', 1637856000, 0, 1642989980, 1642989994, 2, '27.45.158.192', 2);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (15, 'rangmingnv', 'fd52a4ae46d5a9b700bb3ec6abcbe895', 'lgv1aetwy2pjqickho57', '', '禳命女', 13800000014, 2, '禳命女', '/storage/avatars/avatar_256_rdhmjsu31y1638067920.png', 3, 10, 1, '气质轻灵,性格外柔内刚,与寒烟翠情同姐妹,因仰慕楔子的文采,对楔子情有独钟。为了追求爱情而不惜牺牲一切来到苦境,由于穿越境界的咒法有限,无意中解救走火入魔的南风不竞,不仅因此石化,更卷入了一段恩怨纠缠的爱恨情仇当中,在苦境找到楔子之化身枫岫后,直承内心思慕,毫不遮掩,是一名直接坦白,且勇于追求所爱的聪慧女子,然则面对南风不竞的强力追求,虽深为苦恼却无法摆脱,在寒烟翠告白之后,四角关系越趋复杂。', 1637856000, 0, 1654605510, 1638178704, 2, '58.252.118.218', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (16, 'yetuling', '920586af647f4447aee091485cb14f19', 'n2cr4yt9svzkeaj3uoil', 'xj5lw4', '业途灵', 13800000015, 1, '业途灵', '/storage/avatars/avatar_256_zk0xsabyd51638068106.png', 4, 11, 1, '原为灭境三途判之一,与十三邪灵大闹苦境,造成生灵途炭,但之后被造世七侠炼化,又被表象意魔所擒,侥幸没死反功力大增,但仍不敌慈海渡者被废去武功,被秦假仙收为跟班,个性变为搞笑、逗趣。继而宇宙神知在梦中渡化其本性并收为徒弟。跟随秦假仙屡助正道完成不少事迹。', 1638028800, 0, 1654605510, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (17, 'yinshiren', 'd843de8bd36b71cc33fc9bc034417605', 'hwvbqm24od1nz3sk0a5j', 'xj5lw4', '荫尸人', 13800000016, 1, '荫尸人', '/storage/avatars/avatar_256_slp9riu57z1638068129.png', 4, 11, 1, '千邪洞之主,擅长使用术法易容,整天梦想当上武林皇帝;本为欧阳世家一份子,被秦假仙收服后跟随身旁,乃霹雳系列的代表甘草人物之一。最终死于太学主。', 1638028800, 0, 1654605510, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (18, 'jineren', '69601a2a5c5f17111a031056198d01ce', 'cgs2wepk46y5dqvimz30', 'xj5lw4', '金蛾人', 13800000017, 1, '金蛾人', '/storage/avatars/avatar_256_qsj3z1g0961638068175.png', 4, 11, 1, '为向乱世狂刀复仇而绑架业途灵,期望乱世狂刀前来救人,却被成为天下第三人的秦假仙抓走,收为小弟。', 1638028800, 0, 1654605510, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (19, 'mofuluo', 'c8f94a65c182ca57a844b420de27d810', '24fjvoyinakzl0ce8d9u', 'xj5lw4', '摩弗罗', 13800000018, 1, '摩弗罗', '/storage/avatars/avatar_256_170qj8ze2p1638068207.png', 4, 11, 1, '见金蛾人绑架业途灵而前去救人,结果与金蛾人一道被成为天下第三人的秦假仙抓走,收为小弟。', 1638028800, 0, 1654605517, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (20, 'yinchaoji', '8b86365a7f4a31575684a74d759b35d4', 's0f7womrlqzn82hkti54', 'xj5lw4', '印超机', 13800000019, 1, '印超机', '/storage/avatars/avatar_256_njiz9c7ukx1638068232.png', 4, 11, 1, '业途灵为秦假仙新收的小弟。', 1638028800, 0, 1654605517, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (21, 'yinqiaoji', 'b5e4620d7d3d1822859ece0850845cf5', 'nkmwc09tbyrep8fgqiz7', 'xj5lw4', '印巧机', 13800000020, 1, '印巧机', '/storage/avatars/avatar_256_jwfryi78nz1638068252.png', 4, 11, 1, '印超机的兄弟,印超机死后代替兄弟成为秦假仙的小弟。', 1638028800, 0, 1654605517, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (22, 'bingwuyi', 'ff744c2ba32b05a12f85d36310b20adc', 'pzykx1jb820lwtn7e46u', 'xj5lw4', '冰无漪', 13800000021, 1, '冰无漪', '/storage/avatars/avatar_256_x6m3g74vli1638068304.png', 4, 11, 1, '因为被算计而欠下巨额赌债,因此要当500集的杂役工还债。后被秦假仙所买下,教训剡冥后还其自由。', 1638028800, 0, 1654605517, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (23, 'fujianfenshuo', '7e2b523db4c0f827e988f8028dbb0388', 'bgf89nxarhmiz4e1ptsk', 'xj5lw4', '佛剑分说', 13800000022, 1, '佛剑分说', '/storage/avatars/avatar_256_qcybo0hmtz1638068398.png', 8, 18, 1, '佛剑分说-体悟佛理,愿斩尽世间一切恶业,坠入无间亦不悔的慈悲佛者。得天佛尊赠与佛牒,开启其艰辛的修行之路,个性刚直不阿、正气凛然,在见识过灭绝希望的未来世界之后,更加深佛剑坚定的救世之路,纵然逆天之路艰辛难行,亦是不由分说的一人承担。', 1638028800, 0, 1654605517, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (24, 'jianzixianji', '546ba83a79231817253c0cb9ebf485af', 'ps2wujxnbdhevg61tz34', 'xj5lw4', '剑子仙迹', 13800000023, 1, '剑子仙迹', '/storage/avatars/avatar_256_592z781fpr1638068428.png', 9, 18, 1, '道门不世出的先天高人,心性无为,率真豁达,是严肃中又带着轻松幽默,与些微讽刺的世俗矫情的言谈、笑看江湖,外表看似不理江湖喧闹,实则为最关心中原安危的先天剑者。 ', 1638028800, 0, 1654605517, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (25, 'shuloulongsu', '4fb6d02919179aca970df26b8cd5293c', 'hzqx5vpw9orgseufm6b0', 'xj5lw4', '疏楼龙宿', 13800000024, 1, '疏楼龙宿', '/storage/avatars/avatar_256_9nr5sbceoq1638068456.png', 10, 18, 1, '华丽无双,足智多谋,机敏好辩,潇洒自信,过着逍遥自在的隐居生活。但其作为却颠覆儒家传统的形象,谈笑风生间隐隐透出坚决果断的冷酷,屡屡因挚友剑子仙迹与佛剑分说而涉足江湖', 1638028800, 0, 1654605517, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (26, 'fengsengbaiyunjian', '33f69e3821ef2c597076556477070196', 'zthd6pnyb24kxjrc7fg0', 'xj5lw4', '风僧白云剑', 13800000025, 1, '风僧白云剑', '/storage/avatars/avatar_256_t5x3w209hp1638068544.png', 8, 19, 1, '少年白发、帅气潇洒,正气凛然,个性雅痞风趣,潇洒快意江湖。虽是佛门俗家弟子,但是剑法通神,为西佛国百年难得一见的天才剑客,也被寄予厚望继承佛牒,乃是佛剑分说的竞争对手。', 1638028800, 0, 1654605517, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (27, 'wenputi', 'ab8fcc8679e3e4b3fe9f4e2e081ca971', '97pdfwy46ocgbqeutisj', 'xj5lw4', '问菩提', 13800000026, 1, '问菩提', '/storage/avatars/avatar_256_famxig6qs71638068577.png', 8, 19, 1, '自梵宇圣菩提所生,被视为生带天命的因果之子,曾在隳梵之战中解救梵宇,被封为圣虔者。其后却因故离开梵宇,隐居世外,虽不问世事,仍是才名广传,成为江湖上颇负盛名的名士,有「精熟三教经史、通达六艺文武,窃掠半点天机、冠绝九江才子」之美誉。', 1638028800, 0, 1654605517, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (28, 'jianmoyan', '375d2f66804aef5367813d6ee9eb05b9', '6nuz9rj7vykpfxb43giq', 'xj5lw4', '剑默言', 13800000027, 1, '剑默言', '/storage/avatars/avatar_256_pj5vxa09uo1638068607.png', 8, 19, 1, '身穿银白僧衣、身背梵字剑盒的神秘少年,性格正直而刚毅,在佛门遭遇灭佛之祸时,挺身而出,一心伸张正义、斩业护生。自称圣道初行,令人不禁与圣行者‧佛剑分说有所联想', 1638028800, 0, 1654605517, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (29, 'shaoyangjun', 'fd4edca1baa04371ea73b714ce39007f', '7cukve0m1x6idsob84tg', 'xj5lw4', '少阳君', 13800000028, 1, '少阳君', '/storage/avatars/avatar_256_b150yjpsl71638068644.png', 8, 19, 1, '身负殊异的三教修为,一心要寻找在墨殇天爆后就消失武林的三教顶峰,并从泥菩萨口中得知,全天下只有他才能找到“未孚”之所在。', 1638028800, 0, 0, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (30, 'yanqingcheng', '9eed7dd563b525bd61d943b81fac6460', 'nadmjsbcxp17tqy6i0ue', 'xj5lw4', '言倾城', 13800000029, 2, '言倾城', '/storage/avatars/avatar_256_bixgw0c27v1638068693.png', 8, 19, 1, '春霖境界言家堡大小姐,知书达礼的名门闺秀,拥有观向未来之眼、以及预知部分未来的殊能,辟吉嘴每说必中,因而成了人人闻之色变的魔女。', 1638028800, 0, 1654605517, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (31, 'yujiaoniang', '3997ea9ebedb1b55c7d11aa34a6cf939', '54u6t102cmjzidqab98l', 'xj5lw4', '欲娇娘', 13800000030, 2, '欲娇娘', '/storage/avatars/avatar_256_4y1962c3og1638068766.png', 9, 19, 1, '主张废物利用,将任务失败的三大战栗,加上八面鬼戎与鬼蚩邪尊的鬼能,融合创造出「三眼蚩厉」。化身天紫漪跟随佛剑分说,却逐渐对佛剑分说暗生情愫。', 1638028800, 0, 1654605517, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (32, 'aoxiaohongchen', '79ed6063ada94d6db7cb9657c3135084', 'rw987lhsbp153nf4vyac', 'xj5lw4', '傲笑红尘', 13800000031, 1, '傲笑红尘', '/storage/avatars/avatar_256_rbzqtwkdl61638068825.png', 9, 19, 1, '为人刚正不阿,对于所认定的事物,有著超乎常人的坚持。坚信公理正义的存在,不容许任何奸诈之徒为恶。剑法高深,身在诡谲武林,仍坚信自身的理念。虽有隐世之心,穷极一生寻找武林中之净土,却卸不下对武林的责任。', 1638028800, 0, 1654605517, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (33, 'mushaoai', '21d54a621268b5fcf27d9ffb2be59279', '4q0vpj7ne6tblxkcw38o', 'xj5lw4', '慕少艾', 13800000032, 1, '慕少艾', '/storage/avatars/avatar_256_ko21bp6wxf1638068857.png', 2, 19, 1, '幽默风趣、风雅隽逸的药师神医,拥有相当高超的医术与修为,早前曾与素还真较劲失利,而潜沉于琉璃仙境之下;后赢得麒麟穴而步入红尘,担起对抗异度魔界之重责,即使遇上艰难逆境也会以轻松态度面对、自我调侃,是正道不可多得的好帮手。', 1638028800, 0, 1654605517, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (34, 'xiaofengjun', '049da788e05ee57ddeb6fdd47659ae3d', 'pygc7kjwrdv0qhlox5in', '', '笑封君', 13800000033, 1, '笑封君', '/storage/avatars/avatar_256_1hdxlc4aj51638068908.png', 9, 19, 1, '性格刚毅,稳重老成,但思想偏激,执着于自我,不易受他人影响。根基高绝,其刀形似狂草中的道。多年前曾亡于剑子仙迹之手,随着妖世浮屠的出现,在佛业双身协助下复生,并对剑子展开复仇。', 1638028800, 0, 1654605517, 1652776829, 2, '121.34.50.168', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (35, 'liufengcui', '74eb5162ee2cc6f18f40e14c40894d73', '65l8cotiwzj3m70e29g1', 'xj5lw4', '柳峰翠', 13800000035, 1, '柳峰翠', '/storage/avatars/avatar_256_bivpwc3lag1638068954.png', 9, 19, 1, '因天心堂遭百岫嶙峋所灭,遂与妙胤传心展开与百岫嶙峋的对垒。而后更协助正道,共同对抗魔佛恶体阎达,为苍生献己心力。', 1638028800, 0, 1654605517, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (36, 'muxiaohan', '4b06267a7d917dd6dcb52c66a2e4719c', 'nfvilqotbc560k429par', 'xj5lw4', '慕潇韩', 13800000036, 1, '慕潇韩', '/storage/avatars/avatar_256_70gtf6xyqu1638068984.png', 9, 19, 1, '道门阴阳流派之首,与苍、剑子仙迹略有交情,平日幽居篁翠东风,凭竹为乐,因收到天佛原乡邀请,与剑子仙迹一同出席云相夺天局,始踏足红尘。慕潇韩以韩湘为笛,潇湘为剑,搭配独门剑式“湘神篇”,名响道门剑界。', 1638028800, 0, 0, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (37, 'jianfeidao', '70ba2b303e97d568c58ea920ca7dfeb8', 'jb5hg2m34kraezqx16n7', 'xj5lw4', '剑非道', 13800000037, 1, '剑非道', '/storage/avatars/avatar_256_5yrzl7egs11638069017.png', 9, 19, 1, '手持玄笛,身背道剑相忘,风姿清卓、一派伟岸,珞珞出群的表现,因而被委以重任看守道镇伏魔崖。 在看似沉稳的性格中,却有着对邪恶不容肆虐的正义之心,因而在幽都、魔流剑、叹希奇等势力巅乱武林时挺身对抗。', 1638028800, 0, 1654605517, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (38, 'shouwanjie', '06a37fc0e2b0996fad7d682638dff5a7', 'pdsf3ac5mwiz2u9gelbx', 'xj5lw4', '收万劫', 13800000038, 1, '收万劫', '/storage/avatars/avatar_256_qatrz1bf8l1638069041.png', 9, 19, 1, '身负正宗道门玄功、以及厄祸邪力,性格冷酷阴柔,酷爱血红之色,浑身上下充满艳红的邪杀之气。与青阳子双双现身道武王谷,一举夺走擘古镜封印的八歧龙首,并崩毁界天塔地脉,震惊在场众人。', 1638028800, 0, 1654605517, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (39, 'huoqingyun', 'fa5526b0629420cbeae1b5af144ec535', 'sh4djg1qai835rbwtecu', 'xj5lw4', '豁青云', 13800000039, 1, '豁青云', '/storage/avatars/avatar_256_ckmj2t9pul1638069069.png', 4, 19, 1, '才俊不凡的剑客,个性洒脱不羁,处事诙谐,拥有深厚的剑术修为,称号名字更是寓含弦外之音。预先疏离西武林派门至合修会据点避难,并数次阻止九变妖媸,救援武林正道。几经历练后,成为圣龙口副道主。', 1638028800, 0, 0, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (40, 'qingyangzi', '5ca225fe00a0926d0a3c2dd74d6a59b1', 'k6mczbv0ol9j2dgaxeys', 'xj5lw4', '青阳子', 13800000040, 1, '青阳子', '/storage/avatars/avatar_256_0ojtmzu5ws1638069096.png', 9, 19, 1, '龙脑、合修会创始人,雄才大略、智谋无双,作风明确果断、为人重情重义,毕生致力发扬道门雄风,曾集三教精华义理创立合修会,在因缘际会下与素还真结义,渐受其影响,从昔日枭雄转为正道栋梁。潜沉天地门再出的龙脑,幕后运筹帷幄、率领正道群英力抗冥界,乃气魄雄浑、豪情比天的旷世奇才', 1638028800, 0, 1654605517, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (41, 'muxianfeng', 'f3b5cbd961807b4734bf727810077126', 'gh1di2cyo7j8aqxl9bv4', 'xj5lw4', '穆仙凤', 13800000041, 2, '穆仙凤', '/storage/avatars/avatar_256_pa3q4vhkbl1638069202.png', 10, 19, 1, '聪慧机敏、善解人意、体贴窝心、忠贞不二,自幼在龙宿身边长大,甚得龙宿疼爱,与默言歆一起负责看顾疏楼西风。后受暴雨心奴所害,受感染之际龙宿不得已将其变为嗜血者,后在霹雳魔封第6章结尾龙宿与剑子谈话中得知已被解除嗜血者体质变回人类。', 1638028800, 0, 1654605517, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (42, 'moyanxin', 'f700614b59307e8b5a5d621866774014', 'fi793jucxlskr0b8oqt1', 'xj5lw4', '默言歆', 13800000042, 1, '默言歆', '/storage/avatars/avatar_256_mo02c9ul1z1638069233.png', 10, 19, 1, '人如其名,个性木讷寡言,与穆仙凤同为龙宿一手调教之爱将,平日负责打扫、顾守疏楼西风,外表看似平凡的守门仆人,然拳脚功夫精湛,对主上忠心耿耿。', 1638028800, 0, 1654605522, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (43, 'yingwuyou', '5b9ebd6d058f35647788e128883f45aa', 'x3psnmg5hbwycfud6o84', 'xj5lw4', '应无忧', 13800000043, 2, '应无忧', '/storage/avatars/avatar_256_t1x0iyub891638069268.png', 10, 19, 1, '龙宿华丽再出的新侍从,顶替默言歆之位,与穆仙凤随侍左右,个性沉默寡言,专为龙宿奉刀护持,看顾疏楼西风。', 1638028800, 0, 1654605522, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (44, 'jinlinghanya', '7de46691c7aac4c1998c392ddd4220e3', 'nd6imbwl4k9ga3y2fqxt', 'xj5lw4', '金陵寒鸦', 13800000044, 1, '金陵寒鸦', '/storage/avatars/avatar_256_qxl6p1zyvg1638069289.png', 3, 19, 1, '疏楼龙宿的持剑侍从,寡默无语,性格坚毅,对龙宿十分的忠诚,与穆仙凤随侍左右。恪尽职守,相当捍卫龙宿的颜面。金陵寒鸦本是受翳日一脉禁锢之役童,为龙宿所带出教养,并赐其遮日冠,让其不畏天阳。', 1638028800, 0, 1654605522, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (45, 'yulijing', 'd45bac680f8dc46421c30da14a947899', 'vri92wfuce8tk1s6aql4', 'xj5lw4', '玉离经', 13800000045, 1, '玉离经', '/storage/avatars/avatar_256_kotnby603w1638069316.png', 10, 19, 1, '文雅从容,有一门之主的气度华贵,但不过分自傲或自谦。待人较为和顺轻松,但心思缜密,深谋远虑,看待正事则严肃审慎。', 1638028800, 0, 1654605522, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (46, 'yingshuangqing', '739f4f663d18ec851e3148b4459c7c9c', 'bmnirw4g93aj8hyqc7sl', 'xj5lw4', '映霜清', 13800000046, 2, '映霜清', '/storage/avatars/avatar_256_2nd74sp3if1638069336.png', 10, 19, 1, '脸上半罩面纱,神秘优美,尊号“凤儒无情”。个性温和淡雅,婉约仁慈,在玉离经前来求援时出手相助。本性较爱好自由,但因对儒门的责任感而留守,擅于术法,身法灵巧,通天地灵性。', 1638028800, 0, 1654605522, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (47, 'xiaruwuzong', '54aa3808e8125f5bfe8c74c75d800972', 't40v7f9zpyl5a86jdqkb', 'xj5lw4', '侠儒无踪', 13800000047, 1, '侠儒无踪', '/storage/avatars/avatar_256_3upy26ovk51638069382.png', 10, 19, 1, '身负绝顶轻功千里无踪,搭配绝世剑法千里剑式。虽出身儒门文质之身,却具豪侠傲骨。凭借一身武艺与韧性,获得皇儒无上青睐,立身昊正第四道“问侠道”。', 1638028800, 0, 1654605522, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (48, 'huabanyue', 'b6f153e17117f798aa715903f5b2fa1c', 'fla1bzm7e320hsrigunw', 'xj5lw4', '花伴月', 13800000048, 1, '花伴月', '/storage/avatars/avatar_256_1dkpiyan5g1638069433.png', 10, 19, 1, '儒门天下仪礼监司,儒雅秀逸,毕生尊崇孔孟之学、奉行先圣之言,虽恪守儒家中庸之道,但面对外侮入侵的纷乱局势,亦有匡正平乱之心。', 1638028800, 0, 1654605522, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (49, 'yanchuanyun', '61ce2ff01d4753c4fe9b17c115cc01da', 'x7dwkh6ib0vo8jmpnsuf', 'xj5lw4', '雁穿云', 13800000049, 1, '雁穿云', '/storage/avatars/avatar_256_gi21moayj51638069464.png', 10, 19, 1, '儒门天下书监司,掌乐理教化民情、移风易俗,修乐以道志也,属典型的儒家士大夫,恪守中庸之道,略通兵法,能配合礼监司摆设儒门花雁阵。', 1638028800, 0, 1654605522, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (50, 'yuyoushui', '3e9cdb42839a1e42517b53815182e99d', 'jmi1as6f4p0byzto7lwu', 'xj5lw4', '鱼游水', 13800000050, 1, '鱼游水', '/storage/avatars/avatar_256_hvtlyu7xd31638069493.png', 10, 19, 1, '儒门天下乐监司,有着读书人的傲气,但略显迂腐,只求独善其身,对外界漠不关心。鱼游水虽自视甚高,却无相对的实力,以致除恶不成,反惨死于变裔天邪手中。', 1638028800, 0, 1654605522, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (51, 'zhaoshimingdeng', '74046a81f26b9cced948f86f2da15dfa', 'l7jq1huz3f0d6kniyst9', '', '照世明灯', 13800000051, 1, '照世明灯', '/storage/avatars/avatar_256_roeqlfsxhy1638069685.png', 11, 14, 1, '人如其名,一直给人如温泉水般柔和、仁慈的感觉。无论身处何地、遭遇何事,慈郎总是以一贯沉稳内敛的态度去面对,以及对苍生苦难的叹息与悲悯。本已隐蔽红尘多时,后为卸下原无乡双臂的银骠玄解而再出江湖。', 1638028800, 0, 1654842658, 1654842667, 2, '27.36.90.63', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (52, 'qushitu', '4141c77eb5213e144a47a9df62588a41', 'ia96x1tzn5yef2m8wp0j', 'xj5lw4', '屈世途', 13800000052, 1, '屈世途', '/storage/avatars/avatar_256_05ubvetyis1638069768.png', 12, 15, 1, '化身屈世途为天策真龙座下无名小兵,真龙现世,袭卷武林之时,与天策军众谋士合作,展露其不凡才能,让天策真龙赏识,进而提拔为座前军师。', 1638028800, 0, 1654605522, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (53, 'luanshikuangdao', '8ed9f44d385c56b1b452c0813a254794', 'molgnkje0572cirvs9f4', 'xj5lw4', '乱世狂刀', 13800000053, 1, '乱世狂刀', '/storage/avatars/avatar_256_r8awqs63zv1638069791.png', 13, 15, 1, '性情刚烈霸气、豪迈奔放,为爱执著不悔的血性男儿。因天残武祖的奸计而冤屈被囚禁多年!刀法精纯、气势惊天,以一口狮头宝刀、一套狂龙八斩法扬名天下;用情至深,为爱妻慕容婵可堪任何牺牲、甚至一日三千斩亦在所不惜。', 1638028800, 0, 1654605522, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (54, 'lucixin', 'deaa759079f5afa5db84cb3c310e587a', 'zgl7wcisuh4b8p21km3j', 'xj5lw4', '陆慈心', 13800000054, 2, '陆慈心', '/storage/avatars/avatar_256_grye1nzx951638069904.png', 11, 20, 1, '蕙质兰心,让万烛公一见倾心,并与万俟焉修练天火九变,进入天地门探查其中的秘密。后为救师命而进入代刑堡星河殿,被改造为集元师太,沦为三世道君的打手。', 1638028800, 0, 1654605522, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (55, 'feifangongzi', '3cd2a540cf55410b0c141760317c6c9a', '25txr7h1ag0y9iopuj8c', 'xj5lw4', '非凡公子', 13800000055, 1, '非凡公子', '/storage/avatars/avatar_256_1ijl4t63251638069990.png', 11, 20, 1, '身具三教主与魔族的正邪血统,造就非凡公子亦正亦邪的特殊性格。聪明、自负,以初生之犊不畏虎的气势及傲人的智慧武功,居于猜心园中运筹帷幄。之后因刚愎自用,行事尖锐而树敌众多落难流离。', 1638028800, 0, 1654605522, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (56, 'qiluren', 'bbef2b54815574ab62d458d2ee51fee5', '675qpdb4t3islucz0vwy', 'xj5lw4', '崎路人', 13800000056, 1, '崎路人', '/storage/avatars/avatar_256_wkgtz18ysr1638070024.png', 11, 20, 1, '原为集境人士,为追杀仇人灯蝶而偷渡至苦境,是一位具有智慧的领袖型人物,个性风趣巧慧,慎谋能断。身为天虎八将之一,与紫锦囊并肩作战、助导金少爷步入正途;於素还真危难时给予最大支持,为人处世有另一种不凡的手腕,主张该牺牲时就必须有所牺牲。', 1638028800, 0, 0, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (57, 'dengtouren', '7b82ef231028a33fb49a45588ef87d27', 'br02pe4gwlfx8vhc36nt', 'xj5lw4', '灯头人', 13800000057, 1, '灯头人', '/storage/avatars/avatar_256_jvxbm6kz301638070086.png', 11, 20, 1, '照世明灯部属', 1638028800, 0, 1654605522, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (58, 'ouyanglin', '1c8321ad6dd302026a31b4df654adfad', 'r8xk2l1sgoupbdafzhe3', 'xj5lw4', '欧阳麟', 13800000058, 1, '欧阳麟', '/storage/avatars/avatar_256_sab94j7pi51638070162.png', 3, 15, 1, '屈世途外甥', 1638028800, 0, 1654605522, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (59, 'ouyanglin1', 'b053cfba32fe10a074efa02349e7ddfc', 'oi7dswbe4x8nqafjk2v6', 'xj5lw4', '欧阳琳', 13800000059, 2, '欧阳琳', '/storage/avatars/avatar_256_cdltzm76xy1638070664.png', 12, 15, 1, '屈世途外甥女', 1638028800, 0, 1654605522, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (60, 'ouyangling', '33660837c5c54b83b33ebb729316d5c9', 'b6a1537e9r0mtdiqspnh', 'xj5lw4', '欧阳翎', 13800000060, 2, '欧阳翎', '/storage/avatars/avatar_256_3nvka9cp621638070700.png', 12, 15, 1, '为欧阳上智之亲女之一,自幼就到苗疆学艺,面容姣好,却为天下第一智-欧阳世家的杀手。其后因自责流星君之死而自尽。', 1638028800, 0, 1654605522, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (61, 'murongchan', 'af5c03582b46ebbbbdfdab2ef7cde24d', 'eqyohbax72j489fc6lzs', 'xj5lw4', '慕容婵', 13800000061, 2, '慕容婵', '/storage/avatars/avatar_256_pdczfltavn1638070845.png', 13, 13, 1, '个性温和柔顺,温婉秀丽,愿意为所爱之人牺牲一切的女子。曾为了成全其姊而自愿放弃意中人——乱世狂刀,也曾为了父亲的大业而以天行奇侠的模样行走江湖,在几经波折后终于如愿与乱世狂刀退隐。不料当时的武林至尊金小开一声令下而惨亡于乱军中。', 1638028800, 0, 1654605522, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (62, 'fengzhihen', '5f508aecc334cfd601dc28979aa4d093', 'cg4le09ndmf57i6azryj', 'xj5lw4', '风之痕', 13800000062, 1, '风之痕', '/storage/avatars/avatar_256_ijl4xak2s01638070871.png', 13, 13, 1, '魔界传说中的绝代剑者,无人能出其右,平生追求剑术极致,崇尚自由不受拘束,对权力等武林斗争毫无兴趣,创造出“风之痕”与“魔流剑”二种完全截然不同的剑法,一为冷静快意,一为狠野疯狂。', 1638028800, 0, 1654605522, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (63, 'fouleqing', '33f07f3e1dac67bffc32d6601ff5836e', 'g02qz1nxshawecpj48kv', 'xj5lw4', '不了情', 13800000063, 1, '不了情', '/storage/avatars/avatar_256_imgn85hfc71638070906.png', 13, 13, 1, '身坐北阙毡,氅披东皇衣,肩负剑南卷,手捻西冷弦的琴界之人。拥有一幅如画如琴的画弦琴,为好友少年游之遗物,为纪念故友,所以琴又名少年游。人如其名,琴艺高超,看似逍遥方外、个性恬淡,实际上心里却背负着好友少年游死仇。', 1638028800, 0, 1654605528, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (64, 'qiaotiangong', '4b830ba82ed600927fa77f8dc3243e25', 'ryk769xuh2poflnmqet8', 'xj5lw4', '巧天工', 13800000064, 2, '巧天工', '/storage/avatars/avatar_256_mo10dyqwh91638070935.png', 13, 13, 1, ',性情刁蛮古怪、伶牙俐齿,最喜阅耽美书籍。为四大名手之一,铸剑功力堪称一流,更对剑的特性瞭若指掌,头上的发钗拔下后可化为单锋剑。乱世狂刀与沽命师都曾请求其铸造单锋剑,巧天工表面看似刁难狂刀,实则有深意寄托其中,是一介以补天裂铸术闻名的女高手。', 1638028800, 0, 1654605528, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (65, 'luozishang', '288f71f056f89c4a8cb94652ad907400', '6i31t8g0hjsln7qoyk95', 'xj5lw4', '洛子商', 13800000065, 1, '洛子商', '/storage/avatars/avatar_256_7jwk8c2m3a1638070965.png', 13, 13, 1, '忆秋年之高徒,与情人苗飞飞居于玉篱园中,种植花卉与书法修身养性。虽为年少却有不凡的剑术造诣,豁达且不拘小节,与师傅同样乐天开朗,以从容的心态看待天下事物。在剑法舞动中自然流露出一股不受拘束的随性,一如处事玩世不恭、乐观看待世事的潇洒性情。', 1638028800, 0, 1654605528, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (66, 'shengminglianxisheng', '3e733cd1f5e9f2f00adf547abd21395c', 'meg8vcokpulht012di9z', 'xj5lw4', '生命练习生', 13800000066, 1, '生命练习生', '/storage/avatars/avatar_256_tu3wmg4i911638070988.png', 13, 13, 1, '当代用枪之高手,人称枪神,乃为人正直、豪放不羁、直率敢言的热血男儿。看似骄傲,却从不自视甚高,自有一套探索生命的人生哲理。曾在万堺论衡结束后,与剑非道以武比试,两人相互竞争中同也肯定彼此,并结交为友。坚持以生命练习枪法,盼以万千次的练习来达到武道之最,并成为真正的枪者巅峰。', 1638028800, 0, 1654605528, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (67, 'zangjiansheng', '33d2e176d9713cfd9d8ede1d2d803b02', 'v8mzxewypojcqutkb1r9', 'xj5lw4', '藏剑生', 13800000067, 1, '藏剑生', '/storage/avatars/avatar_256_ci4kdn1p2f1638071021.png', 13, 13, 1, '个性内敛温和,对爱情心灰意冷下隐遁于冰寒透骨,眉宇言行之间,总有股抹不去的愁绪,直到收养义女盼梦圆,才让他重拾生命中的温馨亲情。', 1638028800, 0, 1654605528, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (68, 'jianjunshierhen', '722bc505d61f62bc57ff8ce20ea3881a', 'hq9ug325n0dxkc41wv6j', 'xj5lw4', '剑君十二恨', 13800000068, 1, '剑君十二恨', '/storage/avatars/avatar_256_fkt1yxds301638071046.png', 13, 13, 1, '以剑为名、仗剑天涯,一生追求剑的真意,为人重情重义、极富正义感,自然率真、毫不虚伪,乃剑界中傲骨桀然之独行侠客。初入江湖追求天下第一快剑闻名,因得灵啸月引荐成为儒教传人,使原本冷傲性格渐趋圆融、睿智,在相继拜得名师的指点下、和对剑的领悟与执着,让他不断突破自我、为剑攀越顶峰,达到自己心中的完美、体悟最终的剑意。', 1638028800, 0, 1654605528, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (69, 'heibailangjun', '5aeac4083a6e75d0eddc318b7c91e8bb', 'vgoc948jwz1ps72dqefx', 'xj5lw4', '黑白郎君', 13800000069, 1, '黑白郎君', '/storage/avatars/avatar_256_uwkylzf9571638071082.png', 13, 13, 1, '狂傲不羁、极为自负的铮铮铁汉,四处挑战武林中盛名的角色,以别人的失败为快乐,快意恩仇、置生死于度外,有过人的胆识、气魄,乃布袋戏当中最富盛名的角色之一。', 1638028800, 0, 1654605528, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (70, 'gujicanglang', '2156a207b2058cd0f09d087020b43c4b', 'u1scxyimekp89qtrg7zd', 'xj5lw4', '孤迹苍狼', 13800000070, 1, '孤迹苍狼', '/storage/avatars/avatar_256_aefinbrh2v1638071200.png', 13, 13, 1, '西疆皇朝王子,沉默寡言,为神剑守护者。为歼灭魔剑道而积极寻找神剑,不其然遇上昔日应为二娘的月灵公主,牵扯出一段西疆皇朝的故怨。', 1638028800, 0, 1654605528, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (71, 'cuiluohan', '81f81488d891aa7c11892189aaf61b62', 'lz9ansku058c6qxvjgtb', 'xj5lw4', '翠萝寒', 13800000071, 2, '翠萝寒', '/storage/avatars/avatar_256_xyvu7m0asg1638071274.png', 14, 16, 1, '一女剑侠,柔美的外貌下有着刚强直接的性格,好胜有主见,并对自己有兴趣的事物必要探究到底。与同修姊妹居于幽篁秋水,平日喜爱抚琴助兴,被论剑海主席步渊渟赞誉琴律中富含绝美剑意,以及白云邈远之怀。翠萝寒绝学九针剑法乃御剑乘风中,剑气可化九种针刺型态,不仅能成杀人之剑,更可成医人之剑,故被素还真请出,医治倦收天俱断的筋脉。', 1638028800, 0, 1654605528, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (72, 'yefeitian', 'fa8464ebee510b9facc0aa6e39202ee2', 'jhn70bv6xayd1c84tgr9', 'xj5lw4', '夜飞天', 13800000072, 2, '夜飞天', '/storage/avatars/avatar_256_o8twf4xnda1638071313.png', 15, 16, 1, '弓界盛会,天弓狼神台获选之高手,英姿飒爽,不让须眉的冷酷女弓者,能凝泪为冰、冻气成箭,受玄真君的请托,暂时代为守护离愁谷。殊不知,广寒神女夜飞天与涤瑕快剑为旧识,随著涤瑕快剑再现南域,一场身份疑云,引爆多方猜疑。', 1638028800, 0, 1654605528, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (73, 'jianlangya', '116d762be7477a6dfd830a5c4de6d202', '04bpnvs7jdacwoh9rkuq', 'xj5lw4', '剑琅琊', 13800000073, 2, '剑琅琊', '/storage/avatars/avatar_256_7jr1ygith41638071360.png', 14, 16, 1, '锋魔剑上缺之女,是锋魔的唯一传人,剑法高超冷杀,乃幽界之中,非常特殊的流派。集性感、神秘、危险于一身,封于释魔录第三页,为圣母九婴所释放,在天证龙战第一决中,代表幽界出战紫烨疾邪。', 1638028800, 0, 1654605528, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (74, 'dumengjun', '8c4b100a808867ca35587ae0e9658435', 'qr2efgcv39u6dps75mnh', 'xj5lw4', '独梦君', 13800000074, 2, '独梦君', '/storage/avatars/avatar_256_7k2d9q10m81638071384.png', 14, 16, 1, '浪迹江湖的女刀客,英气勃勃,刀法绝伦,为人重情重义,多年来一直在寻找着自己下落不明的妹妹。后因心中的正义感而加入邀月仙阁,欲与红尘雪等众侠女一同铲奸除恶,成为中原正道不可多得的新助力。', 1638028800, 0, 1654605528, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (75, 'fengjiyue', 'fa7fdae413de18520b6e08f534089a32', 'w1bm7hx4i0l352y6n9ea', 'xj5lw4', '风霁月', 13800000075, 2, '风霁月', '/storage/avatars/avatar_256_9137szunx41638071414.png', 14, 16, 1, '身披孔雀衣,手持拨羽炉,足踏凌云靴,风姿清逸,稳重贴心。乃宇宙之牢的主事者之一,同时也是绝代天骄的义妹,曾暗助其离开战云界。因祌天爻帝身体被蜕变类所夺一案,宇宙之牢声誉遭受莫大损害,故而找上意琦行协助。', 1638028800, 0, 1654605528, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (76, 'shuangyefei', 'ad4fee6b7b1c1a43b8034f82cdec83bd', '4eru2w0bdyz5jon9mk8p', 'xj5lw4', '霜叶飞', 13800000076, 2, '霜叶飞', '/storage/avatars/avatar_256_irw36xkup71638071446.png', 14, 16, 1, '玉手九针的同修姊妹,与翠萝寒、闻琴语居于幽篁秋水,排行老二,心思较为细腻、体贴,常替翠萝寒先接待外来客人。霜叶飞真实身分为赫墨族人穆倾雪,因违反族规与东方印生下一子,尔后离开赫墨族,以霜叶飞身分自居。然而在盲虬找到母亲欲相认的当下,也让霜叶飞的内心产生巨大冲击与纠结。', 1638028800, 0, 1654605528, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (77, 'wenqinyu', '8e39fea5b7ba788487776a3ba2f2a1f3', 'kqxotyij46m5rn80lf9z', 'xj5lw4', '闻琴语', 13800000077, 2, '闻琴语', '/storage/avatars/avatar_256_7vf0tgu2cr1638071467.png', 14, 16, 1, '玉手九针的同修姊妹,与翠萝寒、霜叶飞居于幽篁秋水,是三人中最年长的,故排行老大,并习有剑艺。闻琴语性格在三姊妹中属较冲动,容易与外来者起冲突,并会为两姊妹出头,十分外放且有身为大姐应具备的责任心。', 1638028800, 0, 1654605528, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (78, 'cuihousheng', '73f2129d66e8ffb8e241abb5f4c75a49', '35bf4y1avjzxtcw0oe7s', 'xj5lw4', '翠厚生', 13800000079, 1, '翠厚生', '/storage/avatars/avatar_256_938fgix2sc1638071496.png', 14, 16, 1, '天生一对招风耳,戴着大大的眼镜,自小到大备受呵护,生性善良单纯,对世事充满好奇心,老实的个性也为自己带来鸿运,常常有意外的收获。喜欢发明创造,同时相当崇拜亲姊翠萝寒的武艺和果敢,更向往着外头的世界,希望能用自己的力量为纷乱的江湖带来和平安乐', 1638028800, 0, 1654605528, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (79, 'feiyuyuanji', '00f9bf7cbcb733c352d6effb95c58472', 'hzxwn5icuybt9aosr8p4', 'xj5lw4', '绯羽怨姬', 13800000080, 1, '绯羽怨姬', '/storage/avatars/avatar_256_8qakfnvtr61638071536.png', 14, 16, 1, '深居灵蛊山的女医者,精通医蛊毒,容貌绝艳唯美,个性温柔纤细,对人无心机,内心却是刚毅坚持。情感纯真,对爱始终不渝,长年守在月华树下,只为等待约定之人。', 1638028800, 0, 1654605528, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (80, 'xiaoshuixian', 'b431cb24ae1cb9908b2a7a107989322f', 'ehz3jlabfq1vnkpwd8o9', 'xj5lw4', '小水仙', 13800000081, 1, '小水仙', '/storage/avatars/avatar_256_fsk7382wv41638071589.png', 15, 16, 1, '麒麟阁蓬瀛小三仙之一,系琴狐大人精心栽培的女侦探,暗中似有其他身份,在南域为琴狐搜集各路情报。小水仙本性善良,机智聪慧,擅长易容,是琴狐大人最佳左右手,风云儿更对她心仪已久,但小水仙内心,却另有一段憧憬已久的故事。', 1638028800, 0, 1654605528, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (81, 'sixuanying', 'a1d85e73d8346626e6c718a0a91b786f', 'irpecz5xh0ofg3ktmuw8', 'xj5lw4', '姒玄英', 13800000082, 1, '姒玄英', '/storage/avatars/avatar_256_y8sm9xvhwl1638071635.png', 15, 16, 1, '凌虚七仙排行第四,彬彬有礼的修真女道,专长是炼丹,曾出掌帮助风云儿恢复,并在前往中土采药时,意外救了琴狐和小水仙。负责守护天窍秘境的入口,对七仙无论长幼,皆十分有礼,是个识大体,和蔼的女道者。', 1638028800, 0, 1654605528, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (82, 'xianzongwuming', 'a61b68e2cddc71cd74616f792ee5eb44', 'ub3tnyog2hz86qlk9x1i', 'xj5lw4', '仙踪无名', 13800000083, 1, '仙踪无名', '/storage/avatars/avatar_256_yfircomeaw1638071664.png', 15, 16, 1, '仙道双修,儒风道骨之超凡者,头戴珠玉冠,身背君子玉剑,手握玦玉麈,御仙兽从天而降,以仙踪无名为号,行走武林。为追查被盗的真龙之血,现临北海灵洲寰宇斗奇之争,当昊天身亡一案成为焦点时,仙踪看穿天魔灵车之秘,一掌逼出背后的阴谋家!', 1638028800, 0, 1654605528, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (83, 'shaziyan', 'c8ddeada82178d9c9d59041831428aa1', 'qf0l1pgknhw9udtmasez', '', '刹紫烟', 13800000084, 2, '刹紫烟', '/storage/avatars/avatar_256_5be3lky96u1638071700.png', 14, 16, 1, '姹紫嫣受后狨改造,成为性格冷酷如冰的女杀手「刹紫烟」,一反从前温柔亲善的性格,已是完全截然相反的两个人,对于过去的回忆再记不得半点,而自认为是「圣堂之子」。在独梦君的奔走与寄飞龙的帮助下终于重拾自我,拜寄飞龙为师,加入侠音剑鸣,共抗猂族。', 1638028800, 0, 1654605533, 1639218445, 2, '59.109.145.140', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (84, 'lingboying', '624a4456358fcaff765c997d38c51484', '1y2k745nxrqbzpoijdth', 'xj5lw4', '凌波影', 13800000085, 2, '凌波影', '/storage/avatars/avatar_256_wnzslqxyea1638071737.png', 15, 16, 1, '性格直爽明快,听从红尘雪之命令,曾与鸳鸯镜一同奉命帮助害怕蜘蛛的生命练习生解围。习有红尘雪翩单锋之奥义,平日与鸳鸯镜保护清幽的倚晴江山楼,只有能破两人所布阵法之能人才得以进入。', 1638028800, 0, 1654605533, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (85, 'yuanyangjing', '7bc8656f70d684264405b1e01a92f489', '1rxloe5f8qh24jpvw6d3', 'xj5lw4', '鸳鸯镜', 13800000086, 2, '鸳鸯镜', '/storage/avatars/avatar_256_s4h7op3dir1638071759.png', 15, 16, 1, '看似温柔婉约、亭亭玉立,却又藏有小聪明的幽默性格,在红尘雪不知情的情况下,常将其所撰写的著作稍作修改,并发行于市面上,与凌波影一样习有红尘雪翩单锋奥义,替红尘雪控管进入倚晴江山楼之人。', 1638028800, 0, 1654605533, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (86, 'jilingyuan', '328cd6897b688f98611b0ea799c7bbeb', '2nexvd06q8hg7p1yblj4', 'xj5lw4', '脊令原', 13800000087, 1, '脊令原', '/storage/avatars/avatar_256_9g7z5x2fiw1638071831.png', 15, 16, 1, '天子枪的代理人,个性忠诚不二,驻守在问天道,肩负守护天子枪的修行之地,不许他人侵犯。因红尘雪指点,解锋镝踏入问天道,一问玉梁皇与枪界始末,却因此暴露问天道所在,遭六道神兵府杀手闯入。', 1638028800, 0, 1654605533, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (87, 'guxinglei', 'ec9826c3ecde12f359805e7fc8172257', '5346maipghbxurknoysz', 'xj5lw4', '孤星泪', 13800000088, 1, '孤星泪', '/storage/avatars/avatar_256_cxdp8y54901638071856.png', 15, 16, 1, '枪界中最神秘的百步银邪枪,有枪中弑神之称。年幼时曾经历过极端惨事,以致心性孤寂、离群索居,总是于满木枯黄的落叶纷飞中现身,沉默不语,散发出萧瑟、悲怆气息。幼年时曾为邪天子所救,两人也因此建立了深厚友情。', 1638028800, 0, 1654605533, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (88, 'fengxiuzhuren', '4647a5c7b8e6f899bb1f5d139e6fe1df', '8kvmrhg1lzn0dapiybcw', '', '枫岫主人', 13800000089, 1, '枫岫主人', '/storage/avatars/avatar_256_svkcxjeuzg1638499532.png', 2, 17, 1, '', 1638460800, 0, 1654605533, 1653749723, 3, '112.97.53.133', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (89, 'yiyeshu1', '19fd0fa02442e56440a8456c21a741c4', 'm94thsriaoflkuvqe6y0', '', '一页书', 13431029299, 1, '一页书', '/storage/avatars/avatar_256_kzhe8m6qv11639531878.png', 9, 19, 1, '', 1639497600, 0, 1654605533, 1653216214, 4, '123.121.15.64', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (90, 'chengyuan', '58dbc0c50dd5bc87d84ee0810fac4336', '9ak2gfxqwn3e1vc8m0dp', '4rhmgz', '成员', 13800017077, 1, '成员', '/storage/avatars/avatar_256_43exjalchv1644418627.png', 11, 17, 1, '', 1644336000, 0, 1653317342, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (91, 'jiwuyou', 'd67112f31a5663408eb9b500bef7672c', 'zd03hjgrsqnpflv98o4y', 'nl5wy7', '纪无忧', 13688885588, 1, '纪无忧', '/storage/avatars/avatar_256_l3rcn5jvds1644564104.png', 5, 19, 1, '', 1644508800, 0, 1654605533, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (92, 'chengyuan1', '889ed153a547b54aa02e42f5443af27c', '7np5fu0qvzlighwt234m', 'o6bvd9', '成员', 13431029268, 1, '成员', '/storage/avatars/avatar_256_p4aw2mvfq51644564462.png', 3, 10, 1, '', 1644508800, 0, 1654605533, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (93, 'chenxiansheng', '39e8c7fdb822d420f483f360e0f73aac', 'lzinm673ca1gvx5jk08f', '8j0x24', '陈先生', 13188889999, 1, '陈先生', '/storage/202202/6ede2edc3733c179c058ff551b75cea2.jpg', 4, 2, 1, '', 1644508800, 0, 1654605533, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (94, 'chengyuanta', '1682d4b6c031413f122f91ec52c6ca15', 'onjchf8ktazwevyqx4g7', '5livjc', '成员塔', 13801017077, 1, '成员塔', '/storage/avatars/avatar_256_rvqyw48xie1644566270.png', 4, 2, 2, '', 1644595200, 0, 1653317342, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (95, 'zhangsan', '250e9978075e1d58b271332c0d7f4508', 'joc58d4zsf6r1pga9ku2', 'n6sijw', '张三', 13100007890, 1, '张三', '/storage/avatars/avatar_256_yvklf2dqeb1644644566.png', 10, 5, 1, '', 1644595200, 0, 1654605533, 1652853764, 1, '123.233.120.51', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (96, 'yexiaoming', '8f0accba37aba0131f62ba4de36f61b6', '7uq4lzmw3fd0s6thacby', '198e5p', '叶晓明', 15878858985, 1, '叶晓明', '/storage/avatars/avatar_256_uf0ok5ya2e1644764303.png', 4, 19, 1, '', 1644508800, 0, 1654648174, 1654648199, 6, '27.18.3.107', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (97, 'liudehua', 'bce50f0d57f4261c27b69fab374d2f7d', 'nph6mv7kyb9r4cfqz1el', 'kvu64n', '刘德华', 13888888888, 1, '刘德华', '/storage/avatars/avatar_256_65cdrgw1xn1646098440.png', 8, 6, 1, '', 1646064000, 0, 1654605533, 1646098499, 2, '222.160.12.90', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (98, 'lingxinyifu', 'b22607cf23abf9d3820cdbdf3b178674', '63lgsu2ekwbymr1jnd8c', '', '灵心异佛', 18712397319, 2, '灵心异佛', '/storage/avatars/avatar_256_r72oklzdnh1651203522.png', 1, 2, 2, '', 1649347200, 0, 1654605533, 1651720472, 2, '59.53.226.39', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (99, 'zhangsan1', '9aad77efa829c28c176a32718a61dc48', 'fi3b7ngd1chkj6pvs0l4', 'b0k8ct', '张三', 15345678911, 1, '张三', '/storage/avatars/avatar_256_0wfq4cs8ae1652701118.png', 3, 5, 2, '', 1652630400, 0, 1654605533, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (100, 'yizhi', 'd2235b59b363b5cb351b6168c62b0fce', 'oyc89jxzvn7med4h5kb0', 'c935dg', '一直', 13457777890, 1, '一直', '/storage/avatars/avatar_256_m4r0n6uf181653103044.png', 10, 18, 1, '', 1651593600, 0, 1654605533, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (101, 'shangsan', '7c7da3090357a318bfce786d7542db06', '47k2t56xgmzfh8v9pouj', 'edn8ma', '上三', 19191919191, 1, '上三', '/storage/202205/20c5e2504b1fd8ed543f942a1a37dc60.jpg', 1, 3, 3, '...', 1653235200, 0, 1654605533, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (102, 'zhangsan2', 'd2d275270e3e5a9d7d33c63c96c4c077', 'dbfxap0ql83tskyrewui', 's7qc6a', '张三', 13602482680, 2, '张三', '/storage/avatars/avatar_256_ie6polgwsm1653468697.png', 3, 4, 1, '', 1653408000, 0, 1654605533, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (103, 'zhangsan3', '102c10c70430b21450b737d0fc97ee26', '1m58dfrag2shql6b0cpw', 'v9q7m8', '张三', 13688888228, 1, '张三', '/storage/avatars/avatar_256_y9jdgpraot1653468730.png', 1, 5, 2, '', 1653408000, 0, 1654605533, 0, 0, '', 1);
|
||||
INSERT INTO `oa_admin`(`id`, `username`, `pwd`, `salt`, `reg_pwd`, `name`, `mobile`, `sex`, `nickname`, `thumb`, `did`, `position_id`, `type`, `desc`, `entry_time`, `create_time`, `update_time`, `last_login_time`, `login_num`, `last_login_ip`, `status`) VALUES (104, 'ceshiyuangong', '30a58d123f372b6006bae874cdb2e4a3', 'qusxd4b98r6kh0jcvigo', '', '测试员工', 13300000001, 0, '测试员工', '/storage/avatars/avatar_256_3jy6lrbikq1654012653.png', 11, 8, 1, '', 1653926400, 0, 1654605533, 1654842444, 3, '27.36.90.63', 1);
|
@ -32,10 +32,13 @@
|
||||
</ul>
|
||||
</div>
|
||||
<div style="padding:20px; background-color:#fff;line-height: 27px; border-radius:0 0 6px 6px">
|
||||
<p>勾股OA是一套基于ThinkPHP{$TP_VERSION} + Layui{:LAYUI_VERSION} + MySql打造的轻量级、高性能OA办公系统。简单实用,系统集成了九大办公基本的功能模块:系统管理、基础数据、员工管理、消息通知、企业公告、知识文章、办公审批、日常办公、财务管理、商业智能等基础模块。系统易于功能扩展,方便二次开发,让开发者更专注于业务深度需求的开发,帮助开发者简单高效降低二次开发成本,通过二次开发之后可以用来做CRM,ERP,业务管理等系统。<br><br>
|
||||
<strong>免责声明:</strong><br>
|
||||
1、使用勾股OA系统构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果,本(勾股OA)系统不承担任何责任。<br>
|
||||
2、您一旦安装使用勾股OA系统,即被视为完全理解并接受本协议的各项条款,在享有上述条款授予的权力的同时,受到相关的约束和限制。
|
||||
<p>勾股OA是一套基于ThinkPHP{$TP_VERSION} + Layui{:LAYUI_VERSION} + MySql打造的轻量级、高性能OA办公系统。简单实用,系统集成了十二大办公基本的功能模块:系统管理、基础数据、员工管理、消息通知、企业公告、知识文章、办公审批、日常办公、财务管理、客户管理、合同管理、项目管理等基础模块。系统易于功能扩展,方便二次开发,让开发者更专注于业务深度需求的开发,帮助开发者简单高效降低二次开发成本,通过二次开发之后可以用来做CRM,ERP,业务管理等系统。<br><br>
|
||||
<strong>有限担保和免责声明:</strong><br>
|
||||
1、本软件及所附带的文件是作为不提供任何明确的或隐含的赔偿或担保的形式提供的。<br>
|
||||
2、用户出于自愿而使用本软件,您必须了解使用本软件的风险。<br>
|
||||
3、我们不承诺提供任何形式的技术支持、使用担保,也不承担任何因使用本软件而产生问题的相关责任。<br>
|
||||
4、使用本软件构建的网站系统的任何信息内容以及导致的任何版权纠纷和法律争议及后果,本系统不承担任何责任。<br>
|
||||
5、您一旦安装使用本软件,即被视为完全理解并接受本协议的各项条款,在享有上述条款授予的权力的同时,受到相关的约束和限制。
|
||||
</p>
|
||||
<div style="margin:10px auto;width: 90px;">
|
||||
<a href="/index.php?s=install/index/step2" class="layui-btn layui-bg-blue">接受协议</a>
|
||||
|
@ -10,6 +10,18 @@
|
||||
======================
|
||||
*/
|
||||
use think\facade\Db;
|
||||
//读取公告分类子分类ids
|
||||
function admin_note_cate_son($id = 0, $is_self = 1)
|
||||
{
|
||||
$note = Db::name('NoteCate')->order('create_time asc')->select();
|
||||
$note_list = get_data_node($note, $id);
|
||||
$note_array = array_column($note_list, 'id');
|
||||
if ($is_self == 1) {
|
||||
//包括自己在内
|
||||
$note_array[] = $id;
|
||||
}
|
||||
return $note_array;
|
||||
}
|
||||
|
||||
//读取公告分类列表
|
||||
function note_cate()
|
||||
|
@ -12,6 +12,7 @@ namespace app\note\controller;
|
||||
use app\base\BaseController;
|
||||
use app\note\model\Note as NoteList;
|
||||
use app\note\validate\NoteCheck;
|
||||
use app\note\validate\NoteCateCheck;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
@ -72,6 +73,7 @@ class Index extends BaseController
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$param['admin_id'] = $this->uid;
|
||||
$param['create_time'] = time();
|
||||
$sid = NoteList::strict(false)->field(true)->insertGetId($param);
|
||||
if ($sid) {
|
||||
@ -104,6 +106,7 @@ class Index extends BaseController
|
||||
$id = empty(get_params('id')) ? 0 : get_params('id');
|
||||
$note = Db::name('Note')->where(['id' => $id])->find();
|
||||
$note['cate_title'] = Db::name('NoteCate')->where(['id' => $note['cate_id']])->value('title');
|
||||
$note['admin_name'] = Db::name('Admin')->where(['id' => $note['admin_id']])->value('name');
|
||||
View::assign('note', $note);
|
||||
return view();
|
||||
}
|
||||
@ -122,4 +125,88 @@ class Index extends BaseController
|
||||
return to_assign(0, "删除失败");
|
||||
}
|
||||
}
|
||||
|
||||
//公告类别
|
||||
public function note_cate()
|
||||
{
|
||||
if (request()->isAjax()) {
|
||||
$cate = Db::name('NoteCate')->order('create_time asc')->select();
|
||||
return to_assign(0, '', $cate);
|
||||
} else {
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
//公告类别添加
|
||||
public function note_cate_add()
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
try {
|
||||
validate(NoteCateCheck::class)->scene('edit')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$note_array = admin_note_cate_son($param['id']);
|
||||
if (in_array($param['pid'], $note_array)) {
|
||||
return to_assign(1, '父级分类不能是该分类本身或其子分类');
|
||||
} else {
|
||||
$param['update_time'] = time();
|
||||
$res = Db::name('NoteCate')->strict(false)->field(true)->update($param);
|
||||
if ($res) {
|
||||
add_log('edit', $param['id'], $param);
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
validate(NoteCateCheck::class)->scene('add')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
$param['create_time'] = time();
|
||||
$insertId = Db::name('NoteCate')->strict(false)->field(true)->insertGetId($param);
|
||||
if ($insertId) {
|
||||
add_log('add', $insertId, $param);
|
||||
}
|
||||
return to_assign();
|
||||
}
|
||||
} else {
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
$pid = isset($param['pid']) ? $param['pid'] : 0;
|
||||
$cate = $cate = Db::name('NoteCate')->order('id desc')->select()->toArray();
|
||||
$cates = set_recursion($cate);
|
||||
if ($id > 0) {
|
||||
$detail = Db::name('NoteCate')->where(['id' => $id])->find();
|
||||
View::assign('detail', $detail);
|
||||
}
|
||||
View::assign('id', $id);
|
||||
View::assign('pid', $pid);
|
||||
View::assign('cates', $cates);
|
||||
return view();
|
||||
}
|
||||
}
|
||||
|
||||
//公告类别删除
|
||||
public function note_cate_delete()
|
||||
{
|
||||
$id = get_params("id");
|
||||
$cate_count = Db::name('NoteCate')->where(["pid" => $id])->count();
|
||||
if ($cate_count > 0) {
|
||||
return to_assign(1, "该分类下还有子分类,无法删除");
|
||||
}
|
||||
$content_count = Db::name('Note')->where(["cate_id" => $id])->count();
|
||||
if ($content_count > 0) {
|
||||
return to_assign(1, "该分类下还有文章,无法删除");
|
||||
}
|
||||
if (Db::name('NoteCate')->delete($id) !== false) {
|
||||
add_log('delete', $id);
|
||||
return to_assign(0, "删除分类成功");
|
||||
} else {
|
||||
return to_assign(1, "删除失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,7 @@
|
||||
* @link https://www.gougucms.com
|
||||
*/
|
||||
|
||||
namespace app\home\validate;
|
||||
namespace app\note\validate;
|
||||
|
||||
use think\Validate;
|
||||
|
@ -29,6 +29,8 @@
|
||||
elem: '#test',
|
||||
title: '公告列表',
|
||||
toolbar: '#toolbarDemo',
|
||||
page: true, //开启分页
|
||||
limit: 20,
|
||||
url: "/note/index/index", //数据接口
|
||||
cols: [
|
||||
[
|
||||
|
@ -25,7 +25,7 @@
|
||||
id:'treeTable'
|
||||
,elem: '#treeTable'
|
||||
,idField:'id'
|
||||
,url: "/home/cate/note_cate"
|
||||
,url: "/note/index/note_cate"
|
||||
,cellMinWidth: 100
|
||||
,treeId:'id'//树形id字段名称
|
||||
,treeUpId:'pid'//树形父id字段名称
|
||||
@ -49,18 +49,18 @@
|
||||
|
||||
//表头工具栏事件
|
||||
$('.add-menu').on('click', function(){
|
||||
tool.side("/home/cate/note_cate_add");
|
||||
tool.side("/note/index/note_cate_add");
|
||||
return;
|
||||
});
|
||||
|
||||
//操作按钮
|
||||
treeGrid.on('tool(treeTable)', function (obj) {
|
||||
if (obj.event === 'add') {
|
||||
tool.side('/home/cate/note_cate_add?pid='+obj.data.id);
|
||||
tool.side('/note/index/note_cate_add?pid='+obj.data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'edit') {
|
||||
tool.side('/home/cate/note_cate_add?id='+obj.data.id);
|
||||
tool.side('/note/index/note_cate_add?id='+obj.data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'del') {
|
||||
@ -71,7 +71,7 @@
|
||||
obj.del();
|
||||
}
|
||||
}
|
||||
tool.delete("/home/cate/note_cate_delete", { id: obj.data.id }, callback);
|
||||
tool.delete("/note/index/note_cate_delete", { id: obj.data.id }, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
@ -73,7 +73,7 @@
|
||||
}, 1000);
|
||||
}
|
||||
}
|
||||
tool.post("/home/cate/note_cate_add", data.field, callback);
|
||||
tool.post("/note/index/note_cate_add", data.field, callback);
|
||||
return false;
|
||||
});
|
||||
}
|
@ -28,7 +28,7 @@
|
||||
<form class="layui-form p-4">
|
||||
<h1>{$note.title}</h1>
|
||||
<div class="text-detial-ops">
|
||||
<span>发表于:{$note.create_time | date='Y-m-d H:i:s'}</span><span>公告分类:{$note.cate_title}</span>
|
||||
<span>{$note.admin_name}发表于:{$note.create_time | date='Y-m-d H:i:s'}</span><span>公告分类:{$note.cate_title}</span>
|
||||
<span>展示期间:{$note.start_time | date='Y-m-d'} - {$note.end_time | date='Y-m-d'}</span>
|
||||
</div>
|
||||
<div class="text-detial-content">
|
||||
|
@ -68,6 +68,9 @@ return [
|
||||
'enter' => '到账',
|
||||
'tovoid' => '作废',
|
||||
'leave' => '离职',
|
||||
'get' => '获取',
|
||||
'allot' => '分配',
|
||||
'tosea' => '公海移入',
|
||||
'reset' => '重新设置',
|
||||
'install' => '安装',
|
||||
'uninstall' => '卸载',
|
||||
|
@ -15,10 +15,10 @@ if (empty(file_exists(__DIR__ . '/../vendor/autoload.php'))) {
|
||||
require __DIR__ . '/../vendor/autoload.php';
|
||||
|
||||
// 定义当前版本号
|
||||
define('CMS_VERSION','3.7.01');
|
||||
define('CMS_VERSION','3.7.12');
|
||||
|
||||
// 定义Layui版本号
|
||||
define('LAYUI_VERSION','2.7.2');
|
||||
define('LAYUI_VERSION','2.7.4');
|
||||
|
||||
// 定义项目目录
|
||||
define('CMS_ROOT', __DIR__ . '/../');
|
||||
|
@ -33,7 +33,7 @@
|
||||
.layui-form-2 .layui-input-block{margin-left:130px;}
|
||||
|
||||
.layui-table-form tbody tr:hover{background-color: #fff;}
|
||||
.layui-td-gray,.layui-td-gray-2,.layui-td-gray-3,.layui-td-gray-4{color:#909399; width:68px; text-align:right; background-color:#f8f8f8;}
|
||||
.layui-td-gray,.layui-td-gray-2,.layui-td-gray-3,.layui-td-gray-4{color:#909399; width:68px; text-align:right; background-color:#f7f7f7;}
|
||||
.layui-td-gray-2{width:96px;}
|
||||
.layui-td-gray-3{width:126px;}
|
||||
.layui-td-gray-4{width:152px;}
|
||||
@ -53,7 +53,7 @@
|
||||
.layui-data-none{padding:12px 0; color:#969696; text-align:center; font-size:12px;}
|
||||
.gougu-data-none{background:url(../images/data-none.png) no-repeat center center; background-size:auto 80%;}
|
||||
|
||||
html {background-color: #F7F7F7; color: #162a48}
|
||||
html {background-color: #FAFAFA; color: #162a48}
|
||||
html,body{height:100%;}
|
||||
body.right-open{overflow:hidden;}
|
||||
.bg-white{background-color:#fff;}
|
||||
|
@ -32,7 +32,7 @@
|
||||
.layui-side-menu .layui-nav .layui-nav-item .layui-icon{position: absolute; top: 50%;left: 16px; margin-top: -20px}
|
||||
.layui-side-menu .layui-nav .layui-nav-item .bi,
|
||||
.layui-side-menu .layui-nav .layui-nav-item .iconfont{font-size:18px;}
|
||||
.layui-side-menu .layui-nav .layui-nav-item .layui-nav-more {margin-top: -24px}
|
||||
.layui-side-menu .layui-nav .layui-nav-item .layui-nav-more {margin-top: -24px; color:#677C91}
|
||||
|
||||
.layui-side-menu .layui-nav .layui-nav-child .layui-nav-child { background: 0 0 !important}
|
||||
.layui-side-menu .layui-nav .layui-nav-child .layui-nav-child a {padding-left: 55px}
|
||||
|
@ -12,7 +12,7 @@ layui.define(['element'], function (exports) {
|
||||
title: '<span class="gg-tab-active"></span>' + title,
|
||||
content: '<iframe id="' + id + '" data-frameid="' + id + '" src="' + url + '" frameborder="0" align="left" width="100%" height="100%" scrolling="yes"></iframe>',
|
||||
});
|
||||
$('#GouguAppBody').append('<div class="gg-tab-page" id="tabItem' + id + '"><iframe id="' + id + '" data-frameid="' + id + '" src="' + url + '" frameborder="0" align="left" width="100%" height="100%" scrolling="yes"></iframe></div>');
|
||||
$('#GouguAppBody').append('<div class="gg-tab-page" title="'+title+'" id="tabItem' + id + '"><iframe id="' + id + '" data-frameid="' + id + '" src="' + url + '" frameborder="0" align="left" width="100%" height="100%" scrolling="yes"></iframe></div>');
|
||||
this.tabChange(id);
|
||||
var thetabs = $('#pageTabs .layui-tab-title').find('li');
|
||||
if (thetabs.length > 12) {
|
||||
|
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user