基于SSM框架+Mysql的企业CRM[客户关系管理系统]项目
完整项目地址:https://download.csdn.net/download/lijunhcn/88430562
该项目是基于SSM实现的客户关系管理系统
1️⃣技术栈
Spring+SpringMVC+MyBatis+Thymeleaf+Vue+JS+Jquery+Axios+Json
服务器: Tomcat_9.0.60
数据库: MySQL_8.0.28
开发工具:IDEA_2021.3.3
页面:Bootstrap_3.3.0
2️⃣已实现的功能
⭐️ 账号登录
⭐️ 市场活动
3️⃣日志
实现基本的登录功能:
1. 使用@RequestBody接收Axios传来的Json对象时,可以用一个Map对象接收,也可以用一个POJO类对象接收
2. 使用@RequestBody接收Axios传来的Json对象时,必须设置请求报文中的Content-Type属性为application/json,否则报HTTP:415
3. 导入js静态文件(vue.js,jquery.js等)时,不要直接使用相对路径,使用thymeleaf或者使用绝对路径
记住密码,退出登录,验证登录状态:
1. 使用@RequestBody接收Axios传来的Json对象时,接收到的checked属性为一个Boolean类型,而不是一个String
2. 在用户不需要记住密码时,调用setMaxAge方法将cookie的生命周期设置为0,即可销毁cookie
3. 由于使用thymeleaf暂时没找到操作cookie的方法,故此导入vue-cookie包,使用vue操作cookie
4. 在vue中,不能用$cookies.get('loginAct') && $cookies.get('loginPwd')为checked赋值,此时值为$cookies.get('loginPwd')。应该用!!($cookies.get('loginAct') && $cookies.get('loginPwd')),此时值为一个布尔类型
工作台主页显示,市场活动主页面显示,创建市场活动:
1. 输入日期的input标签中应该加上autocomplete="off",否则历史记录的下拉列表会覆盖日历
2. vue无法在实现了bootstrap日历功能的input标签上使用v-model进行双向绑定,会出现值消失的情况。建议ref选择标签用value直接获取日期值
3. bootstrap日历插件汉化包不能正常加载,出现乱码,解决办法:将汉化包中的代码复制到Script标签下
市场活动的分页查询与展示,条件查询:
1. 项目视频上有错误,查询市场活动的sql语句中的limit后面应该用${beginNo},${pageSize},而不是#{}.此外limit的起始索引应该为0,而不是1
2. vue中调用钩子函数beforeMount(),在页面渲染之前向服务器发送axios异步请求,注意:此时页面还没有渲染,所以无法获取页面中的标签
3. vue中使用v-for,根据列表动态的显示html标签
翻页功能,全选功能,删除市场活动:
1. 进行翻页操作的时候,注意要把选中的条目和全选重置
2. 从axios返回给Java的json对象中的数组是一个List对象而不是一个数组,在controller中强转一下可以直接传入service
3. Mybatis,foreach标签中的collection属性应该填list,表示的是List类型
修改市场活动,导出全部市场活动:
导入市场活动,市场活动备注的增删改查:
1. 文件上传用到MultipartFile类,需要引入相关插件并在MVC配置文件中配置multipartResolver解析器bean
2. 将thymeleaf中的变量传入vue方法,语法为:th:@click="|getName('${person.name}')|"
部分数据库SQL代码:
drop table if exists tbl_clue;
drop table if exists tbl_clue_activity_relation;
drop table if exists tbl_clue_remark;
drop table if exists tbl_contacts;
drop table if exists tbl_contacts_activity_relation;
drop table if exists tbl_contacts_remark;
drop table if exists tbl_customer;
drop table if exists tbl_customer_remark;
drop table if exists tbl_tran;
drop table if exists tbl_tran_history;
drop table if exists tbl_tran_remark;
/*==============================================================*/
/* Table: tbl_clue */
/*==============================================================*/
create table tbl_clue
(
id char(32) not null,
fullname varchar(255),
appellation varchar(255),
owner char(32),
company varchar(255),
job varchar(255),
email varchar(255),
phone varchar(255),
website varchar(255),
mphone varchar(255),
state varchar(255),
source varchar(255),
create_by varchar(255),
create_time char(19),
edit_by varchar(255),
edit_time char(19),
description varchar(255),
contact_summary varchar(255),
next_contact_time char(10),
address varchar(255),
primary key (id)
);
/*==============================================================*/
/* Table: tbl_clue_activity_relation */
/*==============================================================*/
create table tbl_clue_activity_relation
(
id char(32) not null,
clue_id char(32),
activity_id char(32),
primary key (id)
);
/*==============================================================*/
/* Table: tbl_clue_remark */
/*==============================================================*/
create table tbl_clue_remark
(
id char(32) not null,
note_content varchar(255),
create_by varchar(255),
create_time char(19),
edit_by varchar(255),
edit_time char(19),
edit_flag char(1),
clue_id char(32),
primary key (id)
);
/*==============================================================*/
/* Table: tbl_contacts */
/*==============================================================*/
create table tbl_contacts
(
id char(32) not null,
owner char(32),
source varchar(255),
customer_id char(32),
fullname varchar(255),
appellation varchar(255),
email varchar(255),
mphone varchar(255),
job varchar(255),
create_by varchar(255),
create_time char(19),
edit_by varchar(255),
edit_time char(19),
description varchar(255),
contact_summary varchar(255),
next_contact_time char(10),
address varchar(255),
primary key (id)
);
/*==============================================================*/
/* Table: tbl_contacts_activity_relation */
/*==============================================================*/
create table tbl_contacts_activity_relation
(
id char(32) not null,
contacts_id char(32),
activity_id char(32),
primary key (id)
);
/*==============================================================*/
/* Table: tbl_contacts_remark */
/*==============================================================*/
create table tbl_contacts_remark
(
id char(32) not null,
note_content varchar(255),
create_by varchar(255),
create_time char(19),
edit_by varchar(255),
edit_time char(19),
edit_flag char(1),
contacts_id char(32),
primary key (id)
);
/*==============================================================*/
/* Table: tbl_customer */
/*==============================================================*/
create table tbl_customer
(
id char(32) not null,
owner char(32),
name varchar(255),
website varchar(255),
phone varchar(255),
create_by varchar(255),
create_time char(19),
edit_by varchar(255),
edit_time char(19),
contact_summary varchar(255),
next_contact_time char(10),
description varchar(255),
address varchar(255),
primary key (id)
);
/*==============================================================*/
/* Table: tbl_customer_remark */
/*==============================================================*/
create table tbl_customer_remark
(
id char(32) not null,
note_content varchar(255),
create_by varchar(255),
create_time char(19),
edit_by varchar(255),
edit_time char(19),
edit_flag char(1),
customer_id char(32),
primary key (id)
);
/*==============================================================*/
/* Table: tbl_tran */
/*==============================================================*/
create table tbl_tran
(
id char(32) not null,
owner char(32),
money varchar(255),
name varchar(255),
expected_date char(10),
customer_id char(32),
stage varchar(255),
type varchar(255),
source varchar(255),
activity_id char(32),
contacts_id char(32),
create_by varchar(255),
create_time char(19),
edit_by varchar(255),
edit_time char(19),
description varchar(255),
contact_summary varchar(255),
next_contact_time char(10),
primary key (id)
);
/*==============================================================*/
/* Table: tbl_tran_history */
/*==============================================================*/
create table tbl_tran_history
(
id char(32) not null,
stage varchar(255),
money varchar(255),
expected_date char(10),
create_time char(19),
create_by varchar(255),
tran_id char(32),
primary key (id)
);
/*==============================================================*/
/* Table: tbl_tran_remark */
/*==============================================================*/
create table tbl_tran_remark
(
id char(32) not null,
note_content varchar(255),
create_by varchar(255),
create_time char(19),
edit_by varchar(255),
edit_time char(19),
edit_flag char(1),
tran_id char(32),
primary key (id)
);